You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python dbus库结合DBus与Bluez实现蓝牙设备数据写入

使用Python 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()

二、GATT特征WriteValue方法定义

通过DFeet工具查看到的GATT特征写入方法WriteValue的定义如下:

<method name="WriteValue">
    <arg name="value" type="ay" direction="in"/>
    <arg name="options" type="a{sv}" direction="in"/>
</method>

参数说明:

  • value:类型为ay,即字节数组,需要传入你要写入的二进制数据
  • options:类型为a{sv},即键值对格式的可选参数,无特殊配置时传入空字典即可

三、完整的写入数据实现代码

以下是已验证可运行的、实现十六进制指令转换并写入蓝牙特征的完整代码:

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()

# 这里的路径需要替换为你自己设备对应GATT特征的DBus路径
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 = binascii.unhexlify("025a06000000")
# 旧版本dbus库可能需要显式转为dbus.ByteArray,写法如下:
# bytes = dbus.ByteArray(binascii.unhexlify("025a06000000"))

object_2.WriteValue(bytes,{})

object.Disconnect()

注意事项

  • 示例中的GATT服务和特征路径service000c/char000d需要替换为你的目标蓝牙设备对应可写特征的实际路径,可通过DFeet或者bluetoothctl工具查询获取
  • 运行代码需要root权限,否则无法访问系统DBus的BlueZ接口
  • 执行写入前请确保设备已正常配对,不存在连接权限问题

内容的提问来源于stack exchange,提问作者TwentySix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:57:04