DBus.ObjectManager.GetManagedObjects 中缺少 LEAdvertisingManager1
LEAdvertisingManager1 missing from DBus.ObjectManager.GetManagedObjects
我运行正在用我的家用电脑测试 运行正在 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 发现 here,因为我想使用我自己的自定义特征。
家用电脑 - 内核版本 4.4.0-31 通用
我可以通过 运行ning example-gatt-server.py 和 example-advertise.py 创建自定义特征和做广告,在我的家用电脑上没有任何问题。我遇到的一个障碍是我需要通过将 --experimental
添加到位于 /lib/systemd/system/bluetooth.service
的 bluetooth.service 文件来启用 Bluez 实验模式。安装 dbus-python 库也有点麻烦,因为我必须自己为 Python2.
构建和安装它
advertise.py 脚本查找名为 "org.bluez.LEAdvertisingManager1" 的特定广告接口。 gatt-server.py 脚本查找 "org.bluez.GattManager1"。我可以通过 运行ning 以下命令检查该接口是否存在:
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects
这些接口在我的家用电脑上找到并运行良好。脚本 运行 没有问题。
Raspberry Pi - 内核版本 4.4.38-v7+
使用相同的 bluez 版本并启用实验性功能,我 运行 在尝试 运行 advertise.py:
时遇到此错误
LEAdvertisingManager1 interface not found.
当我执行命令 "systemctl status bluetooth" 时,它显示实验标志已启用,但在 运行ning 时我没有看到 LEAdvertistingManager1。
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects
不过我可以 运行 gatt-server.py 脚本没有问题,这意味着 "org.bluez.GattManager1" 已找到并正常工作。我在这里错过了什么?
我搜索过这个问题,但唯一的建议是启用实验性功能并确保我的内核 >= 4.1。
我的问题解决了!经过大量调试和查看 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
最后,不要尝试运行我原来的link中的脚本post。他们太过时了。相反,运行 示例脚本位于您创建的目录中。
cd bluez/bluez-5.43/tests
在 运行ning 之前,您需要通过以下方式安装 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 的示例广告脚本(我这样做了),您必须将示例广告中的行从
更改为
import gobject
至
from gi.repository import GObject as gobject
如果您想添加自己的自定义特征,您需要并发 运行 example-gatt-server 应该运行 无需修改.
我还有一个小问题,我的 iPhone 在询问 Pi3 时卡住了,无法连接。只需重置蓝牙即可解决此问题。
sudo systemctl daemon-reload
sudo systemctl restart bluetooth
祝你好运!
虽然这是将 Bluetoothctl 升级到最新版本的 Bluez,但 Bluetoothd 仍停留在旧版本 5.23。问题似乎是,当您安装 pi-bluetooth 时,它会安装 5.23 作为依赖项。如何让 Blueoothd 也升级到最新版本?我注意到显然是从上面的步骤安装的。重新启动后仍然是 5.23。
pi@raspberrypi:~/bluez-5.37 $ bluetoothd -v
5.23
pi@raspberrypi:~/bluez-5.37 $ bluetoothctl -v
5.37
我运行正在用我的家用电脑测试 运行正在 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 发现 here,因为我想使用我自己的自定义特征。
家用电脑 - 内核版本 4.4.0-31 通用
我可以通过 运行ning example-gatt-server.py 和 example-advertise.py 创建自定义特征和做广告,在我的家用电脑上没有任何问题。我遇到的一个障碍是我需要通过将 --experimental
添加到位于 /lib/systemd/system/bluetooth.service
的 bluetooth.service 文件来启用 Bluez 实验模式。安装 dbus-python 库也有点麻烦,因为我必须自己为 Python2.
advertise.py 脚本查找名为 "org.bluez.LEAdvertisingManager1" 的特定广告接口。 gatt-server.py 脚本查找 "org.bluez.GattManager1"。我可以通过 运行ning 以下命令检查该接口是否存在:
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects
这些接口在我的家用电脑上找到并运行良好。脚本 运行 没有问题。
Raspberry Pi - 内核版本 4.4.38-v7+
使用相同的 bluez 版本并启用实验性功能,我 运行 在尝试 运行 advertise.py:
时遇到此错误LEAdvertisingManager1 interface not found.
当我执行命令 "systemctl status bluetooth" 时,它显示实验标志已启用,但在 运行ning 时我没有看到 LEAdvertistingManager1。
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects
不过我可以 运行 gatt-server.py 脚本没有问题,这意味着 "org.bluez.GattManager1" 已找到并正常工作。我在这里错过了什么?
我搜索过这个问题,但唯一的建议是启用实验性功能并确保我的内核 >= 4.1。
我的问题解决了!经过大量调试和查看 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
最后,不要尝试运行我原来的link中的脚本post。他们太过时了。相反,运行 示例脚本位于您创建的目录中。
cd bluez/bluez-5.43/tests
在 运行ning 之前,您需要通过以下方式安装 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 的示例广告脚本(我这样做了),您必须将示例广告中的行从
更改为import gobject
至
from gi.repository import GObject as gobject
如果您想添加自己的自定义特征,您需要并发 运行 example-gatt-server 应该运行 无需修改.
我还有一个小问题,我的 iPhone 在询问 Pi3 时卡住了,无法连接。只需重置蓝牙即可解决此问题。
sudo systemctl daemon-reload
sudo systemctl restart bluetooth
祝你好运!
虽然这是将 Bluetoothctl 升级到最新版本的 Bluez,但 Bluetoothd 仍停留在旧版本 5.23。问题似乎是,当您安装 pi-bluetooth 时,它会安装 5.23 作为依赖项。如何让 Blueoothd 也升级到最新版本?我注意到显然是从上面的步骤安装的。重新启动后仍然是 5.23。
pi@raspberrypi:~/bluez-5.37 $ bluetoothd -v 5.23 pi@raspberrypi:~/bluez-5.37 $ bluetoothctl -v 5.37