# BLE AT 指令集
#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数据包中,除非:
- BT_LE_ADV_OPT_FORCE_NAME_IN_AD置位
- 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