Bluez mesh node/device 模式(非provision)验证
1.环境
(1)两套能运行bluez mesh的板子
(2)板子带有python3,bluez mesh node的例程由python编写,文件在源码路径test/test-mesh
(3)测试的bluez版本为5.55
2.修改文件
上面提到的test-mesh文件
mesh_net.Join(app.get_path(), uuid,
reply_handler=join_cb,
error_handler=join_error_cb)
改为
mesh_net.Join(app.get_path(), dbus.ByteArray(uuid),
reply_handler=join_cb,
error_handler=join_error_cb)
3.验证流程
我这边测试,由于test-mesh只能识别pd-adv模式下的dbus,所以两设备全程运行在pd-adv模式下,pd-adv相关操作可以参考官方文档
https://www.bluetooth.com/wp-content/uploads/2020/04/Developer-Study-Guide-How-to-Deploy-BlueZ-on-a-Raspberry-Pi-Board-as-a-Bluetooth-Mesh-Provisioner.pdf
以下需要在两台设备上分别敲命令。node 设备:要加入mesh网络的设备。provision设备:在mesh网络中充当provision的设备。
以下命令中的文件路径,皆是yocto工程编译后配置好的位置,需要根据实际进行变化,test-mesh这个python文件的依赖也需要根据实际情况进行配置。
node 设备输入命令:
#关闭原本的蓝牙守护进程
systemctl disable bluetooth
#启动pd-adv模式的守护进程
/usr/libexec/bluetooth/bluetooth-meshd -nd &
#启动mesh node的python脚本
python3 /usr/lib64/bluez/test/test-mesh
#启动对外广播
join
成功运行应该会有以下log,其中有随机生成的UUID
Joining with UUID 010d090a0302050c06070a080e040f0b
Join procedure started
provision设备输入以下命令:
#关闭原本的蓝牙守护进程
systemctl disable bluetooth
#启动pd-adv模式的守护进程
/usr/libexec/bluetooth/bluetooth-meshd -nd &
#启动bluez mesh客户端
mesh-cfgclient
#开始扫描
discover-unprovisioned on
#连接设备
provision 010D090A0302050C06070A080E040F0B
默认状态下provision设备成功连上node设备,还会要求输入个key
[[mesh-agent]# ] Enter key (hex number):
切换回node 设备终端,能看到以下log,将key输入到provision设备终端,即可完成provisioning流程
Enter 16 octet key on remote device: 376f01854b1ecf0a74fa7016ac6c31ca
provision设备成功加入后会出现下面这种log
Provisioning done:
Mesh node:
UUID = 010D090A0302050C06070A080E040F0B
primary = 00ac
elements (2):
node设备成功加入后会出现下面这种log
Joined mesh network with token e1fd7be97c8644ac
后续控制可以参考pd-gatt模式下的控制