开发者学堂课程【嵌入式之RFID开发与应用2020版:蓝牙模块普通数据收发AT指令】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/665/detail/11168
蓝牙模块普通数据收发AT指令
本节内容学习AT指令,AT指令的操作方式相当于把底层协议栈隐藏,即不需要关注底层的实现,只需要关注它的使用即可。
一、AT指令说明
1.注意事项
(1)AT指令是ASCII码即字符串,并区分大小写,只要有串口调制助手就可以实现。指令末尾必须有\r表示结束,发送数据勾选enter就表示带\r。
(2)AT指定只能在非透传模式下有效,与手机连接后进入透传模式,发送模块任何数据都是透传数据。比如发送AT+VER时,它会以字符串发送,这时就不是一个指令,所以不能在联网时发送,联网时发送必须将引脚PWRC和底板的PWRC拉成低电平才会把透传数据变成指令。
(3)如果有对模块参数进行修改,软复位后才生效。对名称,地址修改后一定要执行指令AT+RESET。进行软复位后才能保存,并且永久生效。
(4)APP UUID列表
UUID在网络安全中经常使用,指唯一识别码,因为在网络安全,通信安全中,它是由计算机中断,时间,cpu的频率等综合因素生成的随机数字,数字几乎不会重复。对于蓝牙而言,UUID是一种服务,也就是说我们的蓝牙支持很多功能,最常见的是读,写,控制,每一种功能都称作一种服务,甚至在安卓开发下的蓝牙开发中,底下会有UUID的服务特征值的表格,使用服务需要具体查询数值。
➢服务UUID: FFEO
➢特征UUID: FFE1 (非MESH透传,只与连接设备通信)
➢特征UUID: FFE2 (功能设置、MESH下操作LED/I0/PWM)
➢透传模式只提供特征UUID服务,但可以通过拉低PWRC
进行AT指令的发送。
2.指令说明
(1)蓝牙查询版本,输入AT+VER回车即可
除了版本,还可以查询MAC地址,可以直接点击指令旁边的enter查询,MAC地址通常不能修改,出厂时固定的。MAC地址是区分设备的唯一标识,名称不能区分设备,比如10个蓝牙,名字改成一样,当手机发送信标接收蓝牙时,名字一样但MAC地址不一样,所以可以连接设备。
(2)软复位,指令为AT+RESET,一般进行修改后就需要软复位。
(3)设置/查询蓝牙名称,指令为AT+NAME,名字可以修改,可以通过在指令后面添加名字进行修改如AT+NAMEtest,修改网络地址也是直接在后面添加,返回ok即表示修改成功,修改成功后再执行指令就是新的名称。这里需改成AT+NAMEqfedo,因为后续需要组网,组网需要保证每个模块同一个网络名称。如果需要修改永久生效,则一定要执行AT+RESET。
(4)设置/查询设备类型,指令为AT+CLSS<Param>和AT+CLSS。一般默认是A0,工作在透传模式
(5)设置-断开连接,指令为AT+DISC,如果和手机建立了连接,那可以主动断开,但主动断开的前提是模块的PWRC引脚需要处于低电平,否则指令无意义。手机连接的意思是手机可以搜索到qfedo蓝牙设备并且点击连接,这时蓝牙和手机就处于连接状态。
(6)设置/查询-组网ID,指令为AT+NETID(Param)和AT+NETID,这里的查询结果是112233445566,一共12个字节,这12个字节可以任意修改。如果蓝牙支持mesh功能,就是NETID不相同没有办法加入同一个网络中,如果相同就已经加入了同一个网络中,表示任何设备就可以进行通信。
(7)设置/查询-组网短地址,指令为AT+MADDR(param)和AT+MADDR,短地址是指我们完成组网需要名称相同,网络ID相同但是短地址不能相同,短地址是设备的编号,编号如果和别的设备相同,发送数据时的重要地址就是短地址,设备地址如果相同,发送的数据就会被10个设备收到。这种数据的收发称为主播,但支持了主播后续麻烦,因为后续需要和10个设备其中一个通信,就需要单播,但这时已经不支持单播了,主播和单播不同时存在。
3.串口MESH无线控制指令
(1)串口MESH数据发射(一对多、多对一、多对多)
指令 |
目标短路地址 |
数据 |
AAFB |
2byte |
10Byte |
例子1:向所有模块发送广播数据: 12233445566发送指令格式: AAFBFFFF1 12233445566
例子2:向短地址为02模块发送112233数据发送指令格式: AAFB0002112233
每次收发数据指令都已AAFB开始,AAFB指普通数据。
如果是透传模式下,直接发送的任何字符串都是ASCII码。但如果需要联网进行点对点通信或广播通信,就不能直接发送ASCII码,必须发十六进制,且十六进制带有格式,格式为以AAFB开头并且添加两个字节的短地址,之前学习地址是一个字节且最多连接255个设备,但这里有两个字节,可能是需要预留一个字节。高字节永远是00,低字节是00-ff,ff是广播地址。发送字节的长度不超过10个。
接下来打开两台设备:30和31
查看设备的名称是否都是quedo,网络地址是不是1-6,31设备短地址是37,30设备短地址是36
如果要给这两台设备发送数据,就需要输入AAFB0037/36+十六进制数据,如果一定要发字符,就需要找到字符对应的十六进制,1对应字符31,2对应32,A对应41,等等。如图,给31设备发送AAFB003132333435,31设备接收到的是12345。12345以十六进制显示是3132333435,前面还有三个字节AA,35,05,35代表发送端地址,AA代表接收普通数据,05表示发送数据长度。
如果需要两台设备都可以接收,就需要使用广播,就需要高字节和低字节全部改为FFF。
说明:发送广播时,目标短路地址为FFFF,发送单播时,短地址高字节必须为00,例如0002,表示向02设备发送数据。
(2)串口MESH数据接收
指令 |
目标短路地址 |
数据长度 |
数据 |
AA |
1Byte |
1Byte |
10Byte |
BB |
1Byte |
1Byte |
10Byte |
以上表格为MESH数据透传、与功能控制接收数据格式
指令AA表示此数据包为透传数据(普通数据),目标短路地址和数据长度都是一个字节,数据长度最多为10个字节。
指令BB表示此数据包为功能数据(PIM、键值、LED)等
例子1:串口接收到AA02050102030405表示接收到02短地址模块发来的5个字节数据,数据内容是0102030405。
例子2:串口接收到BB2903E7F101表示收到的不是串口数据,而是控制命令,数据是短地址为29的设备发出,数据长度为3字节,E7F101 命令为设置0OUT1引脚输出高电平。
不管数据是发送还是接收,通常情况下需要结合mcu来控制,只有mcu才能组包,组包才能收发。