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

Send data using over bluetooth using different protocols

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

我尝试使用 C# InTheHand nuget、Microsoft 的蓝牙 LE Explorer、python 的套接字和其他工具发送数据,看看会发生什么。

但有些事情我仍然不明白 - 我在 wireshark 中看到的使用不同库的每种方式都有不同的协议:ATT、RFCOMM、L2CAP...

当我使用前面提到的应用从 phone 嗅探蓝牙流量时,我看到的主要是 HCI_CMD 协议流量。

如何选择要发送的协议?有一个简单的包吗?有什么要读的吗?

我需要自己构建数据包吗?包括 headers 等等?

谢谢!

更新: 使用 Microsoft 的 Bluetooth LE Explorer,我能够发送一个点亮我的 lamp 的数据包,从 02010e10000c00040012(data)
开始 使用 bleak 我能够发送一个以 02010e10000c00040052(data)
开头的数据包 差异使 lamp 不亮,我不确定我是否可以通过 bleak 更改它,因为它不是我发送的数据的一部分

我认为你所展示的是 bleak 做了 write without response 而 MS BLE Explorer 做了 write_with_response.

查看 write_gatt_charBleak documentation 似乎与 response 默认一致 False

write_gatt_char Parameters:

  • char_specifier (BleakGATTCharacteristic, int, str or UUID). The characteristic to write to, specified by either integer handle, UUID or directly by the BleakGATTCharacteristic object representing it.

  • data (bytes or bytearray) – The data to send.

  • response (bool) – If write-with-response operation should be done. Defaults to False.

我希望以下内容能达到预期的效果:

await   client.write_gatt_char(LIGHT_CHARACTERISTIC, b"\x55\xaa\x03\x08\x02\xff\x00\xff\xf5", True)