python-3.x - 无法读取/写入 BLE 中的特性
问题描述
我有一个 BLED112 加密狗和一个 BLE 设备,其中包含具有服务特性的 GATT 配置文件。我已经安装了 pygatt 来与我的 BLE 设备通信。
以下是我连接到我的 BLE 设备并读取/写入特性的 python 代码:-
import pygatt
adapter = pygatt.BGAPIBackend()
#adapter = pygatt.BGAPIBackend()
adapter.start()
adapter.scan(timeout=1)
device = adapter.connect('30:F5:6A:01:2D:05',address_type=pygatt.BLEAddressType.public)
characteristic = "f1126ec4-6e99-5552-5286-55bc21d65776"
device.char_write(characteristic, bytearray([0x00]), wait_for_response=True)
value = device.char_read(characteristic)
print(value)
adapter.stop()
我能够连接到我的设备。但是,我在读取或写入时收到以下错误:
C:\Python\Python37-32\lib\site-packages\pygatt\backends\bgapi\bgapi.py",第 570 行,在 expect_any 中引发 exc pygatt.backends.bgapi.exceptions.ExpectedResponseTimeout:等待 10.000000 秒后超时[]
我已经包含 wait_for_response=True
在我的写指令中,但我仍然遇到这个问题。
我如何在没有任何错误的情况下读/写特征?
PS:在扫描时,我观察到上面的 UUID 属于“描述符”。
这是我收到错误的原因吗?
有没有办法在 pygatt 中写入“描述符”(而不是特征)?
解决方案
我终于通过将特征 UUID 更改为特征句柄来得到它。以下是工作代码: -
import pygatt
import time
adapter = pygatt.BGAPIBackend()
#adapter = pygatt.BGAPIBackend()
adapter.start()
adapter.scan(timeout=1)
device = adapter.connect('30:F5:6A:01:2D:05',address_type=pygatt.BLEAddressType.public)
characteristic = "26"
device.char_write_handle(characteristic, bytearray([0x00, 0x09]), wait_for_response=True)
time.sleep(2)
value = device.char_read_handle(characteristic)
print(value)
adapter.stop()
推荐阅读
- macos - 在 Mac 中编辑 unix 二进制文件后,如何通过代码签名检查?
- telegram - 是否有 tg 协议 url 可以在 Telegram 桌面中打开已知联系人?
- reactjs - 在 Laravel React 应用程序中使用 Ionicons 5
- sql - PostgreSQL - 分组到列
- vue.js - 带有可扩展导航抽屉的 Vuetify 布局
- r - 更改 R 中的因子标签会改变预测吗?
- android - onActivityResult 从未从小部件启动的活动中调用
- reactjs - Webpack-Dev-Server:编译时出错。防止重新加载。(堆栈:反应)
- wordpress - 努力在 Chrome Inspect 中查找元素 - 如何自定义?
- angular - 如何以角度5从URL(使用blob)下载图像