# 功能指令
#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
#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