我有一个与蓝牙设备通信的应用程序,我正在尝试用一些代码替换该应用程序。
我试着使用C#InTheHand nuget、微软的蓝牙LE Explorer、python的套接字和其他工具来发送数据,看看会发生什么。
但有一点我仍然不明白——在使用不同库的各个方面,我在wireshark中看到了不同的协议:ATT、RFCOMM、L2CAP。。。
当我使用前面提到的应用程序从手机中嗅探蓝牙流量时,我看到的主要是HCI_CMD协议流量。
如何选择要发送的协议?有简单的包装吗?读点什么?
我需要自己制作包吗?包括页眉之类的?
谢谢!
更新:使用微软的蓝牙LE Explorer,我能够发送一个点亮我的灯的数据包,从02010e10000c00040012开始(数据(
使用crushe,我能够发出一个从02010E10000c000400m52开始的数据包(数据(差异使灯不亮,我不确定我是否可以通过crushe更改它,因为它不是我发送的数据的一部分
我认为您所展示的是,萧瑟执行write without response
,而MS BLE Explorer执行write_with_response
。
查看write_gatt_char
的Bleak文档,该文档似乎是一致的,因为默认情况下response
是False
write_gatt_char参数:
char_specifier(BleakGATTCharacteristic、int、str或UUID(。要写入的特征,由整数句柄、UUID指定或者直接通过代表它的BleakGATT特征对象。
data(字节或字节数组(–要发送的数据。
response(bool(–如果应该执行带响应的写入操作。默认为False。
我希望以下内容能达到预期效果:
await client.write_gatt_char(LIGHT_CHARACTERISTIC, b"x55xaax03x08x02xffx00xffxf5", True)