我正在运行运行Ubuntu和Python 2.7的家用计算机进行测试,希望Raspberry Pi 3能够使用具有自定义服务和特性的BLE进行广告宣传.我在两台设备上都安装了Bluez版本5.42(使用推荐的方法)以及dbus-python.我的计算机和Raspberry Pi都可以使用hci0 lescan 0命令进行广告,但是我想用bluez示例脚本做广告,例如在这里找到example-gatt-client.py和example-advertisement.py ,因为我想用我自己的自定义特征.
家用电脑 - 内核版本4.4.0-31通用
我可以通过运行example-gatt-server.py和example-advertise.py来创建自定义特征和广告,而我的家用计算机上没有任何问题.我遇到的一个障碍是我需要通过添加--experimental到位于的bluetooth.service文件来启用Bluez实验模式/lib/systemd/system/bluetooth.service.另外安装dbus-python库有点痛苦,因为我必须自己为Python2构建和安装它.
advertise.py脚本查找名为"org.bluez.LEAdvertisingManager1"的特定广告界面.gatt-server.py脚本查找"org.bluez.GattManager1".我可以通过运行以下命令来检查该接口是否存在:
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects
Run Code Online (Sandbox Code Playgroud)
在家用计算机上找到这些接口并正常工作.脚本运行没有问题.
Raspberry Pi - 内核版本4.4.38-v7 +
使用相同的bluez版本和实验性功能,我在尝试运行advertise.py时遇到此错误:
找不到LEAdvertisingManager1接口.
当我执行命令"systemctl status bluetooth"时,它显示实验标志已启用,但我在运行时看不到LEAdvertistingManager1.
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects
Run Code Online (Sandbox Code Playgroud)
然而,我可以运行gatt-server.py脚本而不会发出任何问题,这意味着找到了"org.bluez.GattManager1"并且工作正常.我在这里错过了什么?
我已经搜索了这个问题,但唯一的建议是启用实验性功能并确保我的内核> = 4.1.