# 功能指令

#AT+BLENAME

查询/设置 Bluetooth LE 设备名称

#查询命令

命令:

AT+BLENAME?

响应:

+BLENAME:<"device_name">
OK

#设置命令

命令:

AT+BLENAME=<"device_name">

响应:

OK

#参数

<device_name>:Bluetooth LE 设备名称,最大长度:32,默认名称为 “XAT”。

#说明

  • 若 AT+SYSSTORE=1,配置更改将保存在 KV 区。
  • 设备名称会包含在GAP属性中。
  • 设备名称会也包含在设备的广播包中,默认位于scan response。并且可以通过AT+BLEADVPARM 命令进行设定。
  • 广播包的设备名称格式是“device_name_XXXX",其中XXXX是设备MAC地址的最低四个字节。

#示例

AT+BLENAME="Hello"

OK

#AT+BLEADDR

查询设备的BLE公共静态地址,也是设备自带的mac地址。

#查询命令

命令:

AT+BLEADDR?

响应:

+BLEADDR:<"public_addr">
OK

#

#参数

<public_addr>:BLE公共静态地址,也是设备自带的mac地址。字符串格式,用:隔开每个字节。

#示例

AT+BLEADDR?
+BLEADDR:"D0:BA:E4:8F:07:E2"

OK

#AT+BLESCANPARAM

查询/设置 Bluetooth LE 设备名称

#查询命令

命令:

AT+BLESCANPARAM?

响应:

+BLESCANPARAM:<scan_type>, <filter>, <scan_interval>, <scan_window>, <timeout>
OK

#设置命令

命令:

AT+BLESCANPARAM=<scan_type>,[<filter>,<scan_interval>,<scan_window>,<timeout>]

响应:

OK

#参数

  • <scan_type>:扫描类型

    • 0: 被动扫描
    • 1: 主动扫描,会返回scan response信息
  • <filter>:相同地址的扫描结果信息过滤

    • 0: 不过滤
    • 1: 开启过滤
  • <scan_interval>:扫描间隔。本参数值应大于等于 <scan_window>参数值。参数范围:[0x0004,0x4000]。扫描间隔是该参数乘以 0.625 毫秒,所以实际的扫描间隔范围为 [2.5,10240] 毫秒。

  • <scan_window>:扫描窗口。本参数值应小于等于 <scan_interval>参数值。参数范围:[0x0004,0x4000]。扫描窗口是该参数乘以 0.625 毫秒,所以实际的扫描窗口范围为 [2.5,10240] 毫秒。

  • <timeout>:扫描超时时间,单位10毫秒

    • 0:不超时
    • 其他:超时后,自动结束扫描

#说明

  • 地址过滤表的数量是80,如果已经找到超过80个不同地址的广播报,更多的广播报将无法过滤,这是应该停止扫描,并且重新开启扫描即可。

#示例

//被动扫描,同MAC地址过滤,3秒超时
AT+BLESCANPARAM=0,1,,,300

OK
AT+BLESCAN=1

OK
+BLESCAN:"E8:3F:EA:95:05:CC","random",-92,"ADV_NONCONN_IND","07FF4C0012020002"
+BLESCAN:"72:7B:61:DF:53:20","random",-92,"ADV_NONCONN_IND","1EFF060001092002E7187730AD7CA2896FF30E52B7FC2ED776902011EDEBC7"
+BLESCAN:"54:13:79:88:21:CA","public",-93,"ADV_SCAN_IND","1AFF4C00021550765CB7D9EA4E2199A4FA879613A492E35EE473CE"
+BLESCAN:"15:9E:E7:95:9F:3D","random",-56,"ADV_NONCONN_IND","02011A0BFF4C00090603DDC0A81FD9"
+BLESCAN:"1B:DC:54:87:E4:08","random",-91,"ADV_NONCONN_IND","02011A14FF4C0009060395C0A81FDF1307024A9A47CBDF98"
+BLESCAN:"17:CB:95:66:FF:E5","random",-63,"ADV_NONCONN_IND","02011A0BFF4C0009060318C0A81FC8"
+BLESCAN:"58:BA:28:C8:98:C8","random",-101,"ADV_IND","02011A020A0C0AFF4C001005101C3AE6B3"

#AT+BLESCAN

开启/关闭 Bluetooth LE 扫描,并且提供扫描的高级过滤参数。

#设置命令

命令:

AT+BLESCAN=<enable>[,<filter_type>,<"filter_param">]

响应:

OK

#参数

  • <enable>:打开/关闭

    • 0: 停止扫描
    • 1: 开始扫描
  • <filter_type>:高级过滤方法

    • 0:不过滤
    • 1:开启基于地址前缀的过滤
    • 2:开启基于设备名称前缀的过滤
  • <"filter_param">:用于过滤字符串

#说明

  • 高级过滤表的数量是20,如果已经找到超过20个匹配的广播包,更多的广播报将无法过滤,这是应该停止扫描,并且重新开启扫描即可。

#事件响应

+BLESCAN:<"addr">,<"addr_type">,<rssi>,<"adv_type">,<"adv_data">

#参数

  • <"addr">:设备广播地址,字符串,每个字节用:分开

  • <"addr_type">:设备广播地址类型

    • "public":公共地址
    • "random":随机地址
    • "public-id":可解析的公共地址
    • "random-id":可解析的随机地址
  • <rssi>:广播包信号强度

  • <"adv_type">:广播包类型

    • "ADV_IND":普通广播包
    • "ADV_DIRECT_IND":定向广播包
    • "ADV_SCAN_IND":可扫描的广播包
    • "ADV_NONCONN_IND":不可连接的广播
    • "SCAN_RSP":扫描应答(Scan response)广播
    • "EXT_ADV":扩展广播
  • <"adv_type">:广播包负载数据,将Hex转换成的字符串。

#示例

// 开始扫描,并且根据MAC地址进行过滤
AT+BLESCAN=1,1,"6C:4A:85"

OK
+BLESCAN:"6C:4A:85:0D:4C:BA","public",-65,"ADV_IND","02011A020A0C0AFF4C00100501146FB165"

// 设置扫描参数,使用主动扫描. 因为设备名称通常位于Scan Response广播包中
AT+BLESCANPARAM=1,1,,,300

OK
// 开始扫描,并且根据设备名称进行过滤
AT+BLESCAN=1,2,"SGUAI-S1X"

OK
+BLESCAN:"C3:0A:50:00:06:40","random",-106,"SCAN_RSP","0A0953475541492D533158"
+BLESCAN:"C3:0A:50:00:06:40","random",-106,"ADV_IND","02010609FFFFFF400600500AC31107B4A5C1D179EDC79CB17E5FF9D2830A50"

#AT+BLEADVPARM

查询/设置 Bluetooth LE 广播参数

#查询命令

命令:

AT+BLEADVPARM?

响应:

+BLESCANPARAM:<options>,<adv_int_min>,<adv_int_max>,<"peer_addr">,<"peer_addr_type">
OK

#设置命令

命令:

AT+BLEADVPARM=<options>[,<adv_int_min>,<adv_int_max>,<"peer_addr">,<"peer_addr_type">]

响应:

OK

#参数

  • <options>:广播参数,BITMAP类型数据

    • BIT[0]:BT_LE_ADV_OPT_CONNECTABLE

    可连接的广播,如果是不可连接的广播,网络类型由Scan Response中的数据决定

    • BIT[1]:BT_LE_ADV_OPT_ONE_TIME

    是否是一次性广播,一次性广播在被连接/断开后,不能自动恢复广播。需要使用AT+BLEADVSTART开启

    • BIT[2]:BT_LE_ADV_OPT_USE_IDENTITY

    广播包中是否使用设备的Identity Address,Identity Address包含公共地址和随机地址,由设备的隐私设置确定

    • BIT[3]:BT_LE_ADV_OPT_USE_NAME

    是否包含设备的BLE GAP设备名称,该名称由AT+BLENAME设定。BLE GAP设备名称默认放置在Scan Respond数据包中,除非:

    1. BT_LE_ADV_OPT_FORCE_NAME_IN_AD置位
    2. BT_LE_ADV_OPT_EXT_ADV 置位,但是BT_LE_ADV_OPT_SCANNABLE没有置位

    如果广播包中的空间不足以存放设备名称,名称将被截断,并且使用Shortened Name作为广播字段类型

    如果手动设置了广播包中的设备名称字段,该选项将不起作用。

    • BIT[4]:BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY

    定向广播的低频广播模式

    • BIT[5-8]:在AT命令中暂不支持
    • BIT[9]:BT_LE_ADV_OPT_SCANNABLE

    即使不提供Scan Response数据,也依然能够被扫描。当它和BT_LE_ADV_OPT_EXT_ADV一起使用时,BT_LE_ADV_OPT_CONNECTABLE不能被置位,并且必须提供Scan Response数据。

    • BIT[10]:BT_LE_ADV_OPT_EXT_ADV

    使用扩展广播。在扩展广播模式中,在3个主广播信道广播头部信息,在7个从广播信道中广播广播数据。连接讲以2M PHY模式建立。

    • BIT[11]:BT_LE_ADV_OPT_NO_2M

    不使用2M PHY模式,连接将以1M模式建立。如果使用BT_LE_ADV_OPT_CODED,则本标志不能置位。

    • BIT[12]:BT_LE_ADV_OPT_CODED

    使用Coded PHY建立连接,同时需要使用BT_LE_ADV_OPT_EXT_ADV

    • BIT[13]:BT_LE_ADV_OPT_ANONYMOUS

    匿名广播,不包含设备的地址

    • BIT[14]:BT_LE_ADV_OPT_USE_TX_POWER

    广播包中包含设备发送功率,同时需要使用BT_LE_ADV_OPT_EXT_ADV。如果需要在普通广播中加上设备发射功率,需要使用AT+BLEADVDATAEX进行设置

    • BIT[15]:BT_LE_ADV_OPT_DISABLE_CHAN_37

    关闭37号广播信道

    • BIT[16]:BT_LE_ADV_OPT_DISABLE_CHAN_38

    关闭38号广播信道

    • BIT[17]:BT_LE_ADV_OPT_DISABLE_CHAN_39

    关闭39号广播信道

    • BIT[18]:BT_LE_ADV_OPT_FORCE_NAME_IN_AD

    强制在广播包而不是扫描应答包中包含设备名称字段

  • <adv_int_min>:最小广播间隔。参数范围:[0x0020,0x4000]。广播间隔等于该参数乘以 0.625 毫秒,所以实际的最小广播间隔范围为 [20,10240] 毫秒。本参数值应小于等于 <adv_int_max>参数值。

  • <adv_int_max>:最大广播间隔。参数范围:[0x0020,0x4000]。广播间隔等于该参数乘以 0.625 毫秒,所以实际的最大广播间隔范围为 [20,10240] 毫秒。本参数值应大于等于 <adv_int_min>参数值。

  • <"peer_addr">:定向广播包中的目标地址,字符串。每个字节用:隔开

  • <"peer_addr_type">:定向广播包中的目标地址类型

    • "public":公共地址
    • "random":随机地址
    • "public-id":可解析的公共地址
    • "random-id":可解析的随机地址

#说明

  • 若 AT+SYSSTORE=1,配置更改将保存在 KV 区。

#AT+BLEADVDATA

查询/设置 Bluetooth LE 广播数据

#查询命令

命令:

AT+BLEADVDATA?

响应:

+BLEADVDATA:<"adv_data">,<"scan_rsp_data">
OK

#设置命令

命令:

AT+BLEADVDATA=<"adv_data">[,<"scan_rsp_data">]

响应:

OK

#参数

  • <adv_data>:主动广播的广播包中的数据,应符合蓝牙核心规范,即1byte Type + 1 Byte Length + N bytes Data。以字符串表示16进制的数据。
  • <scan_rsp_data>:扫描应答的广播包中的数据,同样应符合蓝牙核心规范。

#说明

  • 若 AT+SYSSTORE=1,配置更改将保存在 KV 区。
  • 查询命令的应答中,不包含系统自动添加的广播数据,例如:设备名称、发射功率等。

#示例

AT+BLEADVDATA?
+BLEADVDATA:"020106030300FE06FF22090007E2"

#AT+BLEADVDATAEX

根据配置,自动生成BLE广播数据包。

#设置命令

命令:

AT+BLEADVDATAEX=[<"manufacture_data">,<include_power>,<"UUID16s/UUID128">,<"UUID16_DATA">]"

响应:

OK

#参数

  • <manufacture_data>:保存在0xFF(BT_DATA_MANUFACTURER_DATA)字段的数据,以字符串表示的16进制数据。

  • <include_power>:读取当前发射功率,并且保存在广播包中的0x0A(BT_DATA_TX_POWER)字段。每次重新启动广播时会重新读取当前的发射功率。

  • <UUID16s/UUID128>:支持以下两种UUID类型

    • 一个或者多个16位UUIID,保存在0x03(BT_DATA_UUID16_ALL)字段,以字符串表示的大端16进制UUID,示例:"FFF0"表示一个16位UUID或者"FFF0FFF1"表示2个16位UUID
    • 一个128位UUID,保存在0x07(BT_DATA_UUID128_ALL)字段,以字符串表示的大端16进制UUID,示例:"6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
  • <UUID16_DATA>:保存在0x16(BT_DATA_SVC_DATA16)字段的数据,以字符串表示的16进制数据。

#说明

  • 若 AT+SYSSTORE=1,将生成新的广播数据,并且更改将保存在 KV 区。
  • 会覆盖用AT+BLEADVDATA命令设置的自定义广播数据。

#示例

AT+BLEADVDATAEX="010203",0,"FFF0FFF1","1234"

OK
AT+BLEADVDATA?
+BLEADVDATA:"04FF0102030503F0FFF1FF03161234"

OK

#AT+BLEADVSTART

开始BLE广播

#执行命令

命令:

AT+BLEADVSTART

响应:

OK

#说明

  • 根据保存的广播数据和广播参数设置进行广播。
  • 修改了广播参数或者广播数据,应重新开启广播才能生效。
  • 默认广播参数,请参阅该页面中 工作模式切换 内容。

#AT+BLEADVSTOP

停止BLE广播

#执行命令

命令:

AT+BLEADVSTOP

响应:

OK

#AT+POWER

查询/设置 蓝牙发射功率

#查询命令

命令:

AT+POWER?

响应:

+POWER:<power>
OK

#设置命令

命令:

AT+POWER=<power>

响应:

OK

#参数

  • <power>:发射功率,带符号的整数,单位dBm。取值范围:-127~127。具体的可设定功率根据不同硬件平台而不同。

#AT+BLEDISCONN

主动断开与当前 Central 设备的连接。

#执行命令

命令:

AT+BLEDISCONN

响应:

OK

#示例

+BLECONN //连接成功消息
AT+BLEDISCONN //设备主动断开

OK
+BLEDISCONN //连接断开消息

#AT+BLEGATTSNTFY

通过BLE Transparent 服务向 Central 设备发送数据。

#执行命令

从串口接口数据,并且将收到的数据通过 Transparent 服务的Data Out特性发送到 Central 设备。接收数据的方式采用透传工作模式中的打包方式,即“最大数据长度打包”和“一定时间内未收到数据打包”两种方式。该工作模式会持续进行,直到:

  • 正常退出:当串口收到连续的三个+字符时,退出串口数据的接收,回到AT指令模式。
  • 出错被动退出:发送数据失败时
  • 出错主动退出:监测到无法发送时,如连接断开事件,CCCD的Notification标志关闭等

其中会产生一系列事件消息,可以使用AT+SYSMSG关闭或者打开:

  • 只要退出当前模式时,会发送+QUITT消息。
  • 正常退出:会发送+SEND_OK消息
  • 出错被动退出:发送+SEND_ERROR消息
  • 出错主动退出:发送+SEND_CANCELED消息

命令:

AT+BLEGATTSNTFY

响应:

OK
>

#设置命令

开始从串口接收制定长度的数据。并且将收到的数据通过 Transparent 服务的Data Out特性发送到 Central 设备,其中只使用透传工作模式中的:“最大数据长度打包”,不使用“一定时间内未收到数据打包”。该工作模式会持续进行,直到:

  • 正常退出:收到的数据长度达到AT+BLEGATTSNTFY命令指定的数据长度
  • 出错被动退出:发送数据失败时
  • 出错主动退出:监测到无法发送到协议栈时,如连接断开事件,CCCD的Notification标志关闭等

其中会产生一系列事件消息,可以使用AT+SYSMSG关闭或者打开:

  • 只要退出当前模式时,会发送+QUITT消息。
  • 正常退出:会发送+SEND_OK消息
  • 出错被动退出:发送+SEND_ERROR消息
  • 出错主动退出:发送+SEND_CANCELED消息

命令:

AT+BLEGATTSNTFY=<length>

响应:

OK
>

#参数

  • <length>:从串口接收指定长度的数据,并且将数据发送到蓝牙协议栈,通过 Transparent 服务的Data Out特性发送到 Central 设备。

#说明

  • 发送时需要确保连接已经建立,并且主设备通过CCCD打开了设备Data Out特性的Notification标志。否则会直接返回ERROR

#示例

从串口接收不定长的数据,发送到 Central 设备。收到+++时退出。

+BLECONN        //BLE连接成功消息
+NOTIFY_ENABLED	//Notification标志打开消息
AT+BLEGATTSNTFY

OK
>     					//等待从串口接收数据

+QUITT					//收到 +++, 退出当前模式
+SEND_OK				//发送成功消息

从串口接收不定长的数据,发送到 Central 设备。但是其中出现了连接断开事件。

+BLECONN        	//BLE连接成功消息
+NOTIFY_ENABLED		//Notification标志打开消息
AT+BLEGATTSNTFY

OK
>									//等待从串口接收数据
+NOTIFY_DISABLED  //Notification标志清除事件(在断开事件产生前会触发)
+SEND_CANCELED		//取消发送事件
+BLEDISCONN				//断开连接事件

从串口接收4字节的数据,发送到 Central 设备。

+BLECONN
+NOTIFY_ENABLED
AT+BLEGATTSNTFY=4

OK

+QUITT
+SEND_OK

#AT+BLEIOCAP

设置BLE设备的IO接口能力,协议栈通过该能力的设置,决定在配对绑定过程中使用那种认证方式。

#设置命令

AT+BLEIOCAP= <io>

响应:

OK

#参数

  • io:BLE设备的IO接口能力,支持以下参数:

    • 0: ALL。支持所有能力
    • 1: INPUT。支持通过键盘输入数字,从而输入PassKey的能力
    • 2: DISPLAY。有通过显示设备显示PassKey的能力
    • 3: DISPLAY_YESNO。不仅可以通过显示屏显示PassKey,并且可以支持用户通过UI实现输入“确认”或者“拒绝”的能力
    • 4: CONFIRM。支持用户通过UI实现输入“确认”当前绑定请求的能力
    • 5: OOB。支持带外传输认证信息,即通过BLE之外的通讯方式传输
    • 6: STATUS。不支持用户交互接口,只能显示当前的配对状态,如:配对成功,配对失败。例如使用LED灯。
    • 7: NONE。没有任何IO接口的能力

#示例

设置设备可以通过显示装置显示当前配对密码的能力。

AT+BLEIOCAP=2  //设置IO能力

OK

+BLECONN       //等待蓝牙连接
AT+BLEPAIR=4   //按照安全等级4启动配对

OK
+PASSKEY_DISPLAY:"F4:D4:88:7C:AC:7D (public)","575000" //模组生成的密码,用户需要在另一台设备上输入或者确认(基于另一台设备的能力)
+PAIR_COMPLETE:"F4:D4:88:7C:AC:7D (public)",1 //配对成功事件

#AT+BLEPAIR

开启BLE绑定配对流程,在调用前需要确保BLE连接已经建立,即产生了 +BLECONN事件。

#设置命令

AT+BLEPAIR=<sec_level: (1 - 4)>[,<force: (0: no, 1: force)>]

响应:

OK

#参数

  • sec_level:加密等级

    • 0: Level 0, Only for BR/EDR special cases, like SDP。注意:BLE模组不支持
    • 1: Level 1, No encryption and no authentication
    • 2: Level 2, Encryption and no authentication (no MITM).
    • 3: Level 3, Encryption and authentication (MITM)
    • 4: Level 4, Authenticated Secure Connections and 128-bit key.
  • force: 是否强制重新配对。

    • 0: 如果之前已经配对过,不强制重新配对
    • 1: 重新配对,并且重新生成相关的密钥,覆盖之前的配对信息

#AT+BLEPAIR_CANCEL

取消当前正在进行中的配对流程。

#执行命令

AT+BLEPAIR_CANCEL

响应:

OK

#AT+BLEBONDS

获取模组保存的已完成配对绑定的设备列表

#查询命令

AT+BLEBONDS?

响应:

+BLEBONDS:<"address">

#参数

  • address:蓝牙设备的地址

#示例

AT+BLEBONDS?
+BLEBONDS:"F4:D4:88:7C:AC:7D (public)"

OK

#AT+BLEBONDS_CLEAR

清除模组的Flash中保存的已完成配对绑定的设备信息

#执行命令

AT+BLEBONDS_CLEAR

响应:

OK

#AT+BLEFIXEDPASSKEY

设置固定的PASSKEY,用于以下情况:

  • 需要生成PASSKEY时,模组不再随意生成,而是使用该固定的PASSKEY
  • 需要输入PASSKEY时,模组自动输入设置的固定PASSKEY

#设置命令

设置固定的PASSKEY。

AT+BLEFIXEDPASSKEY=[<passkey: (0 - 999999)>]

响应:

OK

#参数

  • passkey:固定的PASSKEY,范围是0-999999。如果提供空参数,则清楚Flash中已保存的固定PASSKEY。

#查询命令

查询当前保存的PASSKEY,如果没有,则返回“”NONE

AT+BLEFIXEDPASSKEY?

响应:

+BLEFIXEDPASSKEY:<"NONE"|passkey>

#AT+BLEPASSKEY_CONFIRM

对收到的PASSKEY做确认回复。

#执行命令

AT+BLEPASSKEY_CONFIRM

响应:

OK

#AT+BLEPASSKEY_INPUT

在认证过程中输入PASSKEY,协议栈会验证输入的PASSKEY是否正确,以决定认证是否成功

#设置命令

AT+BLEPASSKEY_INPUT=<passkey: (0 - 999999)>

响应:

OK

#

更新时间: 2023/11/29 13:52:34