问题描述
我有一个与蓝牙设备通信的应用程序,我正在尝试用一些代码替换该应用程序。
我尝试使用 C# InTheHand nuget、微软的蓝牙 LE 资源管理器、python 的套接字和其他工具来发送数据,看看会发生什么。
但是我仍然不明白 - 在使用不同库的每种方式中,我在wireshark 中看到了不同的协议:ATT、RFCOMM、L2CAP...
当我使用前面提到的应用从手机中嗅探蓝牙流量时,我看到的主要是 HCI_CMD 协议流量。
如何选择要发送的协议?有没有一个简单的包?有什么要读的吗?
我需要自己构建数据包吗?包括标题等?
谢谢!
更新:
使用微软的蓝牙 LE 资源管理器,我能够发送一个数据包点亮我的灯,从 02010e10000c00040012(data)
开始
使用 bleak 我能够发送以 02010e10000c00040052(data)
开头的数据包
差异使灯不亮,我不确定是否可以通过 bleak 更改它,因为它不是我发送的数据的一部分
解决方法
我认为您所展示的是 bleak 执行 write without response
而 MS BLE Explorer 执行 write_with_response
。
查看 write_gatt_char
的 Bleak documentation 似乎一致,因为 response
默认为 False
write_gatt_char 参数:
-
char_specifier(BleakGATTCharacteristic、int、str 或 UUID)。要写入的特征,由整数句柄 UUID 指定 或直接通过代表它的 BleakGATTCharacteristic 对象。
-
data (bytes or bytearray) – 要发送的数据。
-
response (bool) – 如果应该完成 write-with-response 操作。默认为 False。
我希望以下内容能达到预期的效果:
await client.write_gatt_char(LIGHT_CHARACTERISTIC,b"\x55\xaa\x03\x08\x02\xff\x00\xff\xf5",True)