DBus.ObjectManager.GetManagedObjects中缺少LEAdvertisingManager1

布莱恩·麦格拉恩(Bryan McGrane):

我正在使用运行Ubuntu和Python 2.7的家用计算机进行测试,希望Raspberry Pi 3使用带有自定义服务和特征的BLE进行广告。我已经在两台设备以及dbus-python上安装了Bluez版本5.42(使用推荐的方法)。我的计算机和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

这些接口可以在我的家用计算机上正常工作。脚本运行没有问题。

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

但是,我可以运行gatt-server.py脚本而不会出现问题,这意味着找到了“ org.bluez.GattManager1”并可以正常工作。我在这里想念什么?

我已经搜索了此问题,但是唯一的建议是启用实验性功能并确保我的内核> = 4.1。

布莱恩·麦格拉恩(Bryan McGrane):

我已经解决了我的问题!经过大量调试并查看了bluez错误日志后,我意识到我没有在Pi上正确安装bluez。以下是从全新安装的raspbian中正确安装bluez的步骤。

sudo apt-get update 
sudo apt-get upgrade 
mkdir bluez 
cd bluez 
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.43.tar.xz 
tar xvf bluez-5.43.tar.xz 
cd bluez-5.43/ 
sudo apt-get install -y libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev 
./configure 
sudo make 
sudo make install

然后,启用实验模式。Bluez v5.23可能不需要这样做,但是我还是这样做了。

cd
sudo nano /lib/systemd/system/bluetooth.service

在“ ExecStart = / usr / local / libexec / bluetooth / bluetoothd”行之后添加--experimental,因此它看起来应该像

ExecStart=/usr/local/libexec/bluetooth/bluetoothd --experimental

然后让蓝牙以这种新配置运行

sudo systemctl daemon-reload 
sudo systemctl restart bluetooth

如果您想投放测试广告,则可以使用以下方法:

sudo hciconfig hci0 up
sudo hciconfig hcio leadv 0

Pi3应该打出“ raspberrypi”的字样,如果您尝试使用自己喜欢的BLE应用程序(我在iOS上使用LiteBlue)连接到它,它应该具有一些默认特征。

为了检查'LEAdvertisingManager1'是否存在,我们需要运行

dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects

最后,不要尝试从我的原始文章中的链接运行脚本。他们太过时了。而是运行位于您创建的目录中的示例脚本。

cd bluez/bluez-5.43/tests

在运行之前,您需要通过以下方式安装dbus-python:

sudo apt-get install python-dev libdbus-1-dev libdbus-glib-1-dev 
sudo apt-get install python-pip 
sudo apt-get install --reinstall python-gi
sudo python2.7 -m pip install dbus-python

如果要使用python2.7运行example-advertise脚本(我这样做了),则必须将example-advertise的行更改为

import gobject

from gi.repository import GObject as gobject

如果要添加自己的自定义特征,则需要并发运行example-gatt-server,该服务器应无需修改即可运行。

我还有一个小问题,我的iPhone被卡在询问Pi3而无法连接。只需重置蓝牙即可解决此问题。

sudo systemctl daemon-reload 
sudo systemctl restart bluetooth

祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

等待DBus服务在Qt中可用

在Docker容器中运行dbus-daemon

dbus库中哪里缺少UnixSocket类?

更新Doctrine之后,Symfony中的“ ObjectManager和EntityManagerInterface之间的兼容性”是什么?

ZF2学说:何时刷新ObjectManager

Syncevolution(syncevo-dbus-server)在13.10中自动启动

dbus:[系统]无法激活服务'org.freedesktop.login1':超时

RESTKit:重用objectManager进行后续的“ POST”

ObjectManager方法createQuery()似乎不存在

TTY终端中的“ ruby-dbus”

当地址更改时,如何在tmux中更新DBUS_SESSION_BUS_ADDRESS?

在crontab中运行dbus程序,如何知道SESSION ID?

在Jhbuild安装过程中没有名为dbus.glib的模块吗?

为什么D-Bus目录的“ dbus-1”中的“ -1”?

从挂起返回时,DBus“操作已在进行中”错误

dbus-uuidgen返回/usr/local/lib/libdbus-1.so.3找不到

在远程系统中运行dbus-send

通过systemd激活单元'dbus-org.freedesktop.resolve1.service'失败:找不到单元dbus-org.freedesktop.resolve1.service

在最近发行的Ubuntu版本中,如何使用DBus创建没有dbus配置文件的客户端和服务器?

从外壳dbus-send在C中调用dbus

dbus-send在shell脚本中不起作用

在初始化脚本中启动时,如何设置会话DBus的环境变量?

dbus-cxx中的方法调用后接收多个参数

修改DBus /etc/dbus-1/system.conf破坏了启动过程

libQt5Dbus.so.5 上缺少符号?

谁将在 dbus 中调用 message_function。

使用 dbus 关闭 docker 容器和 python 中的树莓派

如何在 DBus 中获取 QDBusObjectPath?

在 dbus 消息中获取实际类型的变体数据