蓝牙¶
>作者:陈功(硬件) 梁健(软件)
更新时间:2021年1月8日
关键字:蓝牙
@[TOC] #概述 本模块支持BLE 蓝牙,目前BLE 蓝牙支持扫描热点,数据收发,以及发起广播等功能 硬件上支持蓝牙功能的模块型号如下: Air720UH_NF:支持 Air720UH_NFC:不支持 Air720UH_NA:不支持 Air720UG_NAC:不支持 Air720UG_NAM:支持 Air724UG_NFM:支持 Air724UG_NFC:不支持 Air724UG_NAT:不支持 Air724UG_NA:支持 Air722UG_NFC:不支持 Air722UG_NFM:支持 ## 蓝牙相关AT指令
打开/关闭 蓝牙指令:AT+BTCOMM=ENABLE¶
描述:
此命令用于打开/关闭蓝牙
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
A T+BTCOMM=ENABLE,<state>[,< mode >] |
OK |
查询命令 |
AT+BTCOMM=ENABLE? |
+BT COMM:ENABLE=<state>,<mode> OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<state> |
打开蓝牙 |
1 |
字符串参数 |
关闭蓝牙 |
0 |
字符串参数 |
|
<mode> |
从模式 |
0 |
字符串参数 |
主模式 |
1 |
字符串参数 |
举例:
AT+BTCOMM=ENABLE,1,0
OK
AT+BTCOMM=ENABLE,0,0
OK
如果失败会返回:ERROR或+CME ERROR:<err>
设置BLE设备名称:AT+BLECOMM=NAME¶
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLECOMM=NAME,<name> |
OK |
查询命令 |
AT+BLECOMM=NAME? |
+BTCOMM: NAME=<name> OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<name> |
参数为设备名,最长不能超过26字节; 只允许使用英文、 数字、 下划 线; |
ASCII |
举例:
AT+BLECOMM=NAME,Luat_Air724UG
OK
AT+BLECOMM=NAME?
+BLECOMM: NAME=Luat_Air724UG
OK
如果失败会返回:ERROR或+CME ERROR:<err>
设置广播包数据:AT+BLEADV=ADVDATA¶
描述:
此命令,用于设置广播包数据,有2个参数
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLEADV=ADVDATA,<len>,<data> |
OK |
查询命令 |
AT+BLEADV=ADVDATA? |
+BLEADV: DATA=<len>,<data> OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<len> |
数据长度 |
—- |
十六进制数据长度 |
<data> |
数据内容,最长不能超过31字节 |
<str> |
十六进制数字符串参数 |
举例:
AT+BLEADV=ADVDATA,5,04ff010203
OK
AT+BLEADV=ADVDATA?
+BLEADV: DATA=04ff010203
OK
如果失败会返回:ERROR或+CME ERROR:<err>
设置响应包数据:AT+BLEADV=SCANRSPDATA¶
描述:
此命令,用于设置响应包数据,有2个参数
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLEADV=SCANRSPDATA,<len>,<data> |
OK |
查询命令 |
AT+BLEADV=SCANRSPDATA? |
+BLEADV: DATA=<len>,<data> OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<len> |
数据长度 |
—- |
十六进制数据长度 |
<data> |
数据内容,最长不能超过31字节 |
<str> |
十六进制数字符串参数 |
举例:
AT+BLEADV=SCANRSPDATA,5,04ff010203
OK
AT+BLEADV=SCANRSPDATA?
+BLEADV: DATA=04ff010203
OK
如果失败会返回:ERROR或+CME ERROR:<err>
打开/关闭 蓝牙广播指令:AT+BLEADV=ENABLE¶
描述:
此命令,用于开关广播,有一个参数
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLEADV=ENABLE,<state> |
OK |
查询命令 |
AT+BLEADV=ENABLE? |
+BLEADV: ENABLE=<state> OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<state> |
关闭广播 |
0 |
数字 |
打开广播 |
1 |
数字 |
举例:
AT+BLEADV=ENABLE,0
OK
AT+BLEADV=ENABLE,1
OK
如果失败会返回:ERROR或+CME ERROR:<err>
连接状态上报指令:+BLEIND=CONNECT¶
描述:
此命令,用于上报连接状态
语法规则:
命令类型 |
语法 |
---|---|
URC上报 |
+BLEIND=CONNECT[,<address>] |
+BLEIND=CONNECT FAIL |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<address> |
对端设备地址 |
字符串 |
设备地址(小端排序,共6个字 节),例如:40:45:DA:33:22:11 |
举例:
+BLEIND=CONNECT,40:45:DA:33:22:11
断开连接状态上报指令:+BLEIND=DISONNECT¶
描述:
此命令,用于上报断开连接状态
语法规则:
命令类型 |
语法 |
---|---|
URC上报 |
+BLEIND=DISONNECT[,<address>] |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<address> |
对端设备地址 |
字符串 |
设备地址(小端排序,共6个字 节),例如:40:45:DA:33:22:11 |
举例:
+BLEIND=DISONNECT,40:45:DA:33:22:11
打开/关闭 蓝牙扫描指令:AT+BLESCAN=ENABLE¶
描述:
此命令,用于开关扫描,有一个参数
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLESCAN=ENABLE,<state> |
OK |
查询命令 |
AT+BLESCAN=ENABLE? |
+BLESCAN: ENABLE=<state> OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<state> |
关闭广播 |
0 |
数字 |
打开广播 |
1 |
数字 |
举例:
AT+BLESCAN=ENABLE,0
OK
AT+BLESCAN=ENABLE,1
OK
如果失败会返回:ERROR或+CME ERROR:<err>
扫描结果上报指令:+BLEIND=SCAN¶
描述:
此命令,用于上报扫描结果
语法规则:
命令类型 |
语法 |
---|---|
URC上报 |
+BLEIND=SCAN,<address>,< addrtype>,<rssi>,<raw> |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<address> |
设备蓝牙地址 |
字符串 |
设备地 址(小端排序,共 6个字节),例如: 40:45:DA:33:22:11 |
<addrtype> |
设备蓝牙地址类型 |
0 |
public |
1 |
random |
||
<rssi> |
信号强度 |
数值 |
-128~127 |
<raw> |
广播原始数据 |
16进制字符串 |
最长31个字节 |
举例:
+BLEIND=SCAN,40:45:DA:33:22:11,0,-75,0201060E094C7561745F4169723732345547
蓝牙连接指令:AT+BLECOMM=CONNECT¶
描述:
此命令,用于连接蓝牙,有两个参数
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLECOMM=CO NNECT,<addrtype>,<address> |
OK |
查询命令 |
AT+BLECOMM=CONNECT? |
+BTCOMM: CONNECT=<state>,<address> OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<state> |
连接状态 |
0 |
断开状态 |
1 |
连接状态 |
||
<address> |
设备蓝牙地址 |
字符串 |
设备地址(小端排序 ,共6个字节),例如 :40:45:DA:33:22:11 |
<addrtype> |
设备蓝牙地址类型 |
0 |
public |
1 |
random |
举例:
AT+BLECOMM=CONNECT,0,40:45:DA:33:22:11
OK
如果失败会返回:ERROR或+CME ERROR:<err>
蓝牙断开连接指令:AT+BLECOMM=DISCONNECT¶
描述:
此命令,用于断开连接蓝牙
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLECOMM=DISCONNECT |
OK |
参数定义:
无
举例:
AT+BLECOMM=DISCONNECT
OK
如果失败会返回:ERROR或+CME ERROR:<err>
蓝牙发现服务指令:AT+BLECOMM=FINDSERVICE¶
描述:
此命令,用于发现蓝牙包含的服务
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLECOMM=FINDSERVICE |
OK |
参数定义:
无
举例:
AT+BLECOMM=FINDSERVICE
OK
如果失败会返回:ERROR或+CME ERROR:<err>
服务uuid上报指令:+BLEIND=FINDSERVICE¶
描述:
此命令,用于上报服务uuid
语法规则:
命令类型 |
语法 |
---|---|
URC上报 |
+BLEIND=FINDSERVICE,<uuid_s> |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<uuid_s> |
服务uuid |
十六进制字符串 |
———— |
举例:
+BLEIND=FINDSERVICE,fee0
蓝牙发现服务内特征指令:AT+BLECOMM=FINDCHARACTERISTIC¶
描述:
此命令,用于发现蓝牙服务包含的特征
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLECOMM=FINDCHARACTERISTIC, <uuid_s> |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<uuid_s> |
服务uuid |
十六进制字符串 |
———— |
举例:
AT+BLECOMM=FINDCHARACTERISTIC,fee0
OK
如果失败会返回:ERROR或+CME ERROR:<err>
特征uuid上报指令:+BLEIND=FINDCHARACTERISTIC¶
描述:
此命令,用于上报服务包含的特征uuid
语法规则:
命令类型 |
语法 |
---|---|
URC上报 |
+BLEIND=FINDCHARACTERISTIC,<uuid_c> |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<uuid_c> |
特征uuid |
十六进制字符串 |
———— |
举例:
+BLEIND=FINDCHARACTERISTIC,fee1
+BLEIND=FINDCHARACTERISTIC,fee2
打开/关闭 通知指令:AT+BLECOMM=NOTIFICATION¶
描述:
此命令,用于开关通知,有两个参数
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLECOMM=NOTIFICATION, <uuid_c>,<state> |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<state> |
关闭广播 |
0 |
数字 |
打开广播 |
1 |
数字 |
|
<uuid_c> |
特征uuid |
十六进制字符串 |
———— |
举例:
AT+BLECOMM= NOTIFICATION,fee2,1
OK
AT+BLECOMM= NOTIFICATION,fee2,0
OK
如果失败会返回:ERROR或+CME ERROR:<err>
发送数据指令:AT+BLECOMM=SENDATA¶
描述:
此命令,用于发送数据
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BLECOMM=SENDDATA,<uuid_c>,<len>,<data> |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<uuid_c> |
特征uuid |
十六进制字符串 |
———— |
<len> |
数据长度 |
数值 |
十六进制数据长度 |
<data> |
数据内容,最长不能超过244字节 |
<str> |
十六进制数字符串参数 |
举例:
AT+BLECOMM=SENDDATA,fee2,10,31323334353637383930
OK
如果失败会返回: + BLECOMM:ERR=error
数据上报指令:+BLEIND=DATA¶
描述:
此命令,用于上报接收到的数据
语法规则:
命令类型 |
语法 |
---|---|
URC上报 |
+BLEIND=DATA,<uuid_c>,<len>,<data> |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<uuid_c> |
特征uuid |
十六进制字符串 |
———— |
<len> |
数据长度 |
数值 |
十六进制数据长度 |
<data> |
数据内容,最长不能超过244字节 |
<str> |
十六进制数字符串参数 |
举例:
+BLEIND=DATA,fee1,10,31323334353637383930
蓝牙MAC地址读写指令:AT+BTMAC¶
描述:
此命令,用于蓝牙MAC地址读写
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+BTMAC=<address> |
OK |
查询命令 |
AT+BTMAC? |
+BTMAC: <address> OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
<address> |
设备蓝牙地址 |
字符串 |
设备地址(小端排序,共6个字 节),例如:40:45:DA:33:22:11 |
举例:
AT+BTMAC=40:45:DA:33:22:11
OK
AT+BTMAC?
+BTMAC:40:45:DA:33:22:11
OK
如果失败会返回:ERROR或+CME ERROR:<err>
蓝牙从模式测试/使用流程¶
1. 下载手机蓝牙测试工具 nrf connect(必须)¶
2. 通过串口发送指令 AT+BTCOMM=ENABLE (必须)¶
AT+BTCOMM=ENABLE,1,0
OK
####3.设置广播模块名称(非必须,需要在广播关闭状态下发送)
AT+BLECOMM=NAME,AIRM2M_LUAT
OK
4.设置广播包数据(非必须,需要在广播关闭状态下发送)¶
AT+BLEADV=ADVDATA,8,02010604ff010203
OK
此处数据段(04ff010203 )含义是长度为04,标识为manufacturer specific data(ff)的数据,详情请见BLE广播协议
5.设置响应包数据(非必须,需要在广播关闭状态下发送)¶
AT+BLEADV=SCANRSPDATA,3,020A04
OK
6.打开广播 (必须)¶
AT+BLEADV=ENABLE,1
OK
7.连接蓝牙(必须)¶
i.打开第一步下载的nrf connect 安卓应用
ii.查看蓝牙和广播信息(当前信息是根据上述AT来的,如果字节修改了其他值则看到的不一样)
图(1).寻找蓝牙和功能点介绍
图(2).广播内容介绍
图(3).当前蓝牙服务介绍
8.测试蓝牙¶
i.手机给蓝牙发送数据
图(4).手机给模块发送数据
通过上述 图(3) 特征值为fffe 的特征发送数据(4321),串口数据会吐出
04 03 02 01
ii.模块给中心设备(手机)发送数据
AT+SPBTCTRL=GATTSETNOTIFY,12345
OK
手机收到
图(5).手机收到模块发送的数据