首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LEAdvertisingManager1从DBus.ObjectManager.GetManagedObjects失踪

LEAdvertisingManager1从DBus.ObjectManager.GetManagedObjects失踪
EN

Stack Overflow用户
提问于 2016-12-27 20:04:38
回答 2查看 7.5K关注 0票数 8

我正在用我的家用计算机运行Ubuntu和Python2.7来运行测试,希望Raspberry Pi 3能够使用带有自定义服务和特性的BLE进行广告宣传。我已经在这两种设备以及dbus-python上安装了Bluez版本5.42 (使用推荐的方法)。我的计算机和Raspberry都能够使用hci0 lescan 0命令进行广告宣传,但我想用bluez示例脚本来做广告,例如-gatt-client.py和示例- 这里,因为我想使用自己的自定义特性。

家用计算机-内核版本4.4.0-31通用

我可以通过运行示例来创建自定义特性和广告--gatt-server.py和examse.py,在我的家用计算机上没有任何问题。我遇到的一个问题是,我需要通过将--experimental添加到位于/lib/systemd/system/bluetooth.service的bluetooth.service文件中来启用/lib/systemd/system/bluetooth.service实验模式。此外,安装dbus库也有点麻烦,因为我必须自己为Python2构建和安装它。

advertise.py脚本寻找一个名为"org.bluez.LEAdvertisingManager1“的特定广告界面。The脚本查找"org.bluez.GattManager1“。我可以通过运行以下命令来检查该接口是否存在:

代码语言:javascript
运行
复制
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects

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

覆盆子Pi -内核版本4.4.38-v7+

在启用了相同的bluez版本和实验特性之后,我在尝试运行advertise.py时遇到了这个错误:

找不到LEAdvertisingManager1接口。

当我执行命令"systemctl状态蓝牙“时,它显示启用了实验标志,但在运行时没有看到LEAdvertistingManager1。

代码语言:javascript
运行
复制
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects

不过,我可以运行gatt-server.py脚本,这意味着找到了"org.bluez.GattManager1“并正常工作。我在这里错过了什么?

我已经搜索过这个问题,但唯一的建议是启用实验特性,并确保我的内核是>= 4.1。

EN

Stack Overflow用户

回答已采纳

发布于 2016-12-30 15:47:29

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

代码语言:javascript
运行
复制
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

然后,启用实验模式。这可能不是蓝军5.23版的要求,但我还是做到了。

代码语言:javascript
运行
复制
cd
sudo nano /lib/systemd/system/bluetooth.service

在行"ExecStart=/usr/local/libexec/bluetooth/bluetoothd“之后添加-实验性的,所以它应该看起来像

代码语言:javascript
运行
复制
ExecStart=/usr/local/libexec/bluetooth/bluetoothd --experimental

然后让蓝牙运行这个新的配置

代码语言:javascript
运行
复制
sudo systemctl daemon-reload 
sudo systemctl restart bluetooth

如果要运行测试广告,只需使用以下内容:

代码语言:javascript
运行
复制
sudo hciconfig hci0 up
sudo hciconfig hcio leadv 0

你的Pi3应该被宣传为"raspberrypi“,如果你想用你最喜欢的BLE应用程序(我在iOS上使用LiteBlue )连接到它,它应该有一些默认特性。

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

代码语言:javascript
运行
复制
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects

最后,不要试图从我最初文章中的链接中运行脚本。它们太过时了。相反,运行位于您创建的目录中的示例脚本。

代码语言:javascript
运行
复制
cd bluez/bluez-5.43/tests

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

代码语言:javascript
运行
复制
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运行示例广告脚本(我这样做了),则必须更改示例中的行

代码语言:javascript
运行
复制
import gobject

代码语言:javascript
运行
复制
from gi.repository import GObject as gobject

如果您想添加您自己的自定义特性,您将需要concurrently运行示例-关贸总协定-服务器,它应该运行没有修改。

我还遇到了一个小问题,我的iPhone被困在询问Pi3时,无法连接。这是通过简单地重置蓝牙来解决的。

代码语言:javascript
运行
复制
sudo systemctl daemon-reload 
sudo systemctl restart bluetooth

祝你好运!

票数 13
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41351514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档