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

Python notify时未从beak回调获取所有字节,python,bluetooth-lowenergy,Python,Bluetooth Lowenergy,我正在使用连接到GATT服务器并收集从外围设备传输的数据包。服务器是使用通知设置的,因此我正在使用函数start\u notify注册一个回调,以捕获特征产生的字节并记录它们。这个特定回调处理的特性以固定的间隔发送200字节。我能 连接到服务器 启动此特性的通知 并在通知时从该特性收集数据 然而,我似乎只收集了可用字节的一小部分。启动通知的调用如下所示 await self.client.start_notify(self.data, self.data_notification_cb, )

我正在使用连接到GATT服务器并收集从外围设备传输的数据包。服务器是使用通知设置的,因此我正在使用函数
start\u 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
实际的回拨看起来像

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
服务器生成的数据如下所示

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个字节。以前有人见过这个吗?我是否对该回调进行了错误配置,使其仅获取可用字节的子集?

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

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


如果您的移动设备上一切正常,使用USB适配器可以帮助您实现目标。

叹气……这是一个很好的观点。我忘记了DLE,所以MTU谈判的规模可能比我要求的要小得多。幸运的是,这不是一台笔记本电脑,我可以访问多个运行不同版本BT的BT收音机。需要明确的是,DLE在4.2版本中处于活动状态,而不仅仅是5个兼容堆栈。您还可以获得BLE 5.0加密狗,这样您就不必切换设备(笔记本电脑)。bleuio对我来说真的很好…所以这其实不是问题所在。控制器配置指示控制器为堆栈为5.0。您是否尝试过nRF Connect应用程序?这将有助于查明问题的根源。如果应用程序不能正常工作,则外围设备有故障。