BLE Mesh网络是用于建立多对多设备通信的低能耗蓝牙新的网络拓扑。
如上图,手机及其它支持BLE的设备可以通过代理节点(Proxy),访问网络中的每一个设备;而边缘节点(Edge)这种普通节点,是不支持中继等功能的,仅可收发数据;其中中继节点 (Relay) 可以作为消息的中继,转发给其他节点,本身也可以接受消息。朋友节点和低功耗节点(Friend+Low power)是配合使用的,朋友节点可以缓存低功耗节点的信息,这样低功耗节点可以处于休眠状态,定时唤醒,从朋友节点取回消息,满足低功耗的应用。
BLE Mesh的网络特性:
①无需中心网关,节点与节点通信,节点的入网,均是通过配置实现。
②节点通过配置完成入网,没有复杂繁琐的入网交互流程以及对应入网过程路由表的建立
③蓝牙Mesh是通过广播和中继接收转发的机制,完成消息的传递。
④蓝牙Mesh的通信采用的是发布/订阅模型,即通过节点发布信息,将消息发送到对应地址,只要订阅该地址的节点,就可以收到消息。比如一个开关可以控制八个智能灯泡,一个智能灯泡可以被八个开关控制。
⑤蓝牙Mesh在应用层和网络层都有安全密钥;其中网络层安全密钥可以保护整个网络,应用层密钥则对终端节点进行保护。
⑥非常适用于电池供电节点的方案,即可配置其他的节点作为低功耗节点的朋友节点,每当低功耗节点进入睡眠后,朋友节点就可以替代接收低功耗节点消息,可在低功耗节点唤醒后,将数据无误的传递给低功耗节点;
⑦同时可通过代理节点,实现传统BLE节点加入Mesh网络;代理节点与传统BLE节点之间是通过特定GATT Profile进行消息传递的;
针对MCU的BLE MESH组网方案,可以采用AT指令的形式来实现。先准备至少两个的BLE MESH蓝牙模组。这里的蓝牙 Mesh 组网需要配置 MESHNAME (Mesh网络名称)和MESHPWD(Mesh网络密码), 多个模组的 MESHNAME 和MESHPWD 要必须相同才能相互通信。 其次, Mesh 网络中的设备还要有一个唯一的地址, 才能与别的模组通信。以下实现边缘节点和中继节点的通信。
BEL MESH节点1:
AT+NAME=MeshNode1 //设置或更改蓝牙名称
OK
AT+RST //重启模组,使设置的蓝牙名字生效
OK
the addr is :bc
+IM_READY
AT+MAC? //查询蓝牙的MAC地址(也可以重新设置)
+MAC: BC:CB:BB:55:EE:33
OK
AT+MESHNAME=MESHNET //设置MESH网络名称
OK
AT+MESHPWD=12345678 //设置MESH网络密码
OK
AT+MESHADDR? //查询设备地址(也可以重新设置,必须是唯一的)
+MESHADDR: BC
OK
AT+MESHSTATE? //查询Mesh状态,返回值为0时,未加入mesh网络,返回值为1时,已加入mesh网络。
+MESHSTATE: 1
OK
AT+MESHSEND=D9,0A\r\n2222222222 //指定目标地址发送数据
OK
+MESH_DATA: D9,0A,1111111111
BEL MESH节点2:
AT+NAME=MeshNode2 //设置或更改蓝牙名称
OK
AT+RST //重启模组,使设置的蓝牙名字生效
the addr is :d9
+IM_READY
AT+MAC? //查询蓝牙的MAC地址(也可以重新设置)
+MAC: D9:9A:BB:55:EE:33
OK
AT+MESHNAME=MESHNET //设置MESH网络名称
OK
AT+MESHPWD=12345678 //设置MESH网络密码
OK
AT+MESHADDR? //查询设备地址(也可以重新设置,必须是唯一的)
+MESHADDR: D9
OK
AT+MESHSTATE? //查询Mesh状态,返回值为0时,未加入mesh网络,返回值为1时,已加入mesh网络。
+MESHSTATE: 1
OK
+MESH_DATA: BC,0A,2222222222 //指定目标地址发送数据
AT+MESHSEND=BC,0A\r\n1111111111
OK
.以此类推,可以让第n个BLE节点也加入mesh网络,实现在mesh网络下的各节点之间的相互通信,如:
BEL MESH节点n:
AT+NAME=MeshNoden //设置或更改蓝牙名称
OK
AT+RST //重启模组,使设置的蓝牙名字生效
OK
the addr is :xx
+IM_READY
AT+MAC? //查询蓝牙的MAC地址(也可以重新设置)
+MAC: xx:xx:xx:xx:xx:xx
OK
AT+MESHNAME=MESHNET //设置MESH网络名称
OK
AT+MESHPWD=12345678 //设置MESH网络密码
OK
AT+MESHADDR? //查询设备地址(也可以重新设置,必须是唯一的)
+MESHADDR: XX
OK
AT+MESHSTATE? //查询Mesh状态,返回值为0时,未加入mesh网络,返回值为1时,已加入mesh网络。
+MESHSTATE: 1
OK
AT+MESHSEND=XX,0A\r\n0000000000 //指定目标地址发送数据
OK
+MESH_DATA: XX,0A,
实际测试如图:
指令 | 作用 | 描述 |
---|---|---|
AT+GMR | 查询固件版本 | |
AT+RESTORE | 恢复出厂设置 | |
AT+RST | 重启模组 | |
AT+SLEEP | 深度睡眠 | 进入深度睡眠模式下只能从外部唤醒,唤醒引脚为 IO6,将 IO6 与 RX 之间串联 1K 电阻可实现串口唤醒 备注:进入深度睡眠模式后模组将不能收发数据. |
AT+BAUD=value | 设置串口波特率 | 波特率与value数值对应如下:0=2400 1=4800 2=9600 3=14400 4=19200 5=38400 6=57600 7=115200 |