notify时未从beak回调获取所有字节

2024-09-19 19:09:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用bleak连接到GATT服务器并收集从外围设备传输的数据包。服务器是使用通知设置的,因此我正在使用函数start_notify注册一个回调,以捕获由特征生成的字节并记录它们。这个特定回调处理的特性以固定的间隔发送200字节。我能

  • 连接到服务器
  • 启动此特性的通知
  • 并在通知时从该特性收集数据

然而,我似乎只收集了可用字节的一小部分。启动通知的调用如下所示

await self.client.start_notify(self.data, self.data_notification_cb, )

实际的回拨看起来像

    def data_notification_cb(self, sender: str, data: str):
        hdata = binascii.hexlify(data)
        print("Current data value is %s" % hdata)
        self.write_voice.write(hdata)

服务器生成的数据如下所示

b8 5b 2e 64 ab 77 5e d3 05 08 27 39 8e 9d 3d 2a
e1 0d bf 3c bf 19 5f 44 05 86 e7 35 98 22 a7 9f
cc e1 aa 4d 5b b4 5e 5b b2 91 e8 98 8e 0f 38 92
78 b9 90 0f 2b 62 e7 5f 56 e8 83 83 65 e8 56 32
81 48 85 11 cc cd c3 a6 e8 6b 49 d9 77 b4 b4 34
b7 87 f2 eb 9c 05 7e 65 52 36 98 20 b2 9b 64 d8
fc d2 92 e1 cd fd f5 e5 81 9a 97 5b a9 f0 98 6c
6b ca 08 0c 77 19 34 4d 93 25 8e 5a 31 a9 9f a7
53 fd 7a 1e b7 97 44 e5 d4 25 02 42 04 b6 e0 7b
06 b7 ea 96 77 7b 0f 8c 63 ca 7e bd 3e 52 a1 a0
82 50 29 dc 6b 0e 3a 1d 68 92 21 88 0c b7 54 b8
8c f3 16 ed 4b 78 3c a3 2d 78 ba 09 b3 25 d1 c9
ec af 0c d9 7a 0d a9 b1

而回调返回的数据会像这样被截断

b'b85b2e64ab775ed3050827398e9d3d2ae10dbf3c'

所以它最多返回19个字节。以前有人见过这个吗?我是否对这个回调进行了错误配置,使其只获取可用字节的子集


Tags: 数据self服务器data字节notifynotification特性
1条回答
网友
1楼 · 发布于 2024-09-19 19:09:12

您运行脚本的设备(可能是笔记本)的BLE适配器似乎只支持BLE 4.0。根据this答案,BLE 4.0只支持每个通知最多20个字节

你可以使用另一种能够更高版本的设备来检查其他设备是否正常工作。我为您的移动设备推荐nRF Connect App

如果一切都在你的移动设备上运行,那么使用USB适配器可以帮助你实现目标

相关问题 更多 >