使用 DBus 和 Bluez 将数据写入蓝牙设备
Posted
技术标签:
【中文标题】使用 DBus 和 Bluez 将数据写入蓝牙设备【英文标题】:Write data to Bluetooth device with DBus and Bluez 【发布时间】:2021-12-10 06:27:34 【问题描述】:我需要使用 Python dbus 库通过 DBus 和 Bluez 将数据写入蓝牙设备。
但只知道如何连接和断开设备:
import dbus
system_bus = dbus.SystemBus()
device = system_bus.get_object('org.bluez','/org/bluez/hci0/dev_FF_FF_99_96_64_60')
object = dbus.Interface(device, dbus_interface='org.bluez.Device1')
object.Connect()
object.Disconnect()
这是来自 DFeet 应用程序的方法描述:
<method name="WriteValue">
<arg name="value" type="ay" direction="in"/>
<arg name="options" type="asv" direction="in"/>
</method>
更新:添加了写入转换字节的代码
import dbus
import binascii
system_bus = dbus.SystemBus()
device = system_bus.get_object('org.bluez','/org/bluez/hci0/dev_FF_FF_99_96_64_60')
object = dbus.Interface(device, dbus_interface='org.bluez.Device1')
object.Connect()
device_2 = system_bus.get_object('org.bluez','/org/bluez/hci0/dev_FF_FF_99_96_64_60/service000c/char000d')
object_2 = dbus.Interface(device_2, dbus_interface='org.bluez.GattCharacteristic1')
#bytes = dbus.ByteArray(binascii.unhexlify("025a06000000"))
bytes = binascii.unhexlify("025a06000000")
object_2.WriteValue(bytes,)
object.Disconnect()
【问题讨论】:
这是蓝牙 LE 设备还是蓝牙经典设备?假设它是 BLE,您需要找到要写入的 GattCharacteristic1 接口的 DBus 路径。更多信息可能对您有帮助:***.com/a/63751113/7721752 @ukBaz 是的,它是 BLE。我已经找到了路径和接口,我的核心问题是如何准备字节或字节数组(例如“025a06000000”)并发送它。 您可能想要更新您的问题,显示您如何进行写入以及如何转换为字节。对于您在此处给出的示例:binascii.unhexlify("025a06000000")
= b'\x02\x5a\x06\x00\x00\x00'
@ukBaz 感谢您的回答。添加了写入命令,但不确定是“bytearray”还是“unhexlify”的结果。我会尽快使用 BtleJuice 框架进行检查。
【参考方案1】:
经过 BtleJuice 框架的一些测试可以确认这足以发送字节:
bytes = binascii.unhexlify("025a06000000")
object_2.WriteValue(bytes,)
在这样描述的方法中:
<method name="WriteValue">
<arg name="value" type="ay" direction="in"/>
<arg name="options" type="asv" direction="in"/>
</method>
至少它在我的情况下有效。
【讨论】:
以上是关于使用 DBus 和 Bluez 将数据写入蓝牙设备的主要内容,如果未能解决你的问题,请参考以下文章