使用不同协议通过蓝牙发送数据

问题描述

我有一个与蓝牙设备通信的应用程序,我正在尝试用一些代码替换该应用程序。

我尝试使用 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_charBleak 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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...