GATTTool 无法读/写特征值。

5

我正在尝试使用bluez的gatttool向BLE自定义板上的一些演示特征写入数据。具体而言,我希望能够向一个特征中写入数据并读取回传的值。以下是我的操作步骤(其中0x25是该特征的句柄):

bluepy$ gatttool -b EC:24:B8:23:1C:39 -I
[   ][EC:24:B8:23:1C:39][LE]> connect
[CON][EC:24:B8:23:1C:39][LE]> char-read-hnd 0x0025 
[CON][EC:24:B8:23:1C:39][LE]> Characteristic value/descriptor: 01
[CON][EC:24:B8:23:1C:39][LE]> char-write-cmd 0x25 0x02
[CON][EC:24:B8:23:1C:39][LE]> char-read-hnd 0x0025
[CON][EC:24:B8:23:1C:39][LE]> Characteristic value/descriptor: 00

有人知道为什么读取的特征值是00而不是02(char-write-cmd的第二个参数)吗?

任何帮助将不胜感激。


gatttool非常挑剔。尝试使用char-write-cmd 0x25 02代替(即在值中不包含0x)。 - kaylum
1
我会避免使用 gatttool,因为我从未有过好的使用体验。相反,尝试使用 bluetoothctlbtgatt-client,看看是否对您更有效。此外,请注意描述符与值不同。 - Zimano
检查您是否具有写入权限,而且char-write-cmd没有任何响应,所以最好使用char-write-req;如果您没有权限,它会提示错误。 - Jagdish
@kaylum 你是对的!移除 0x 就可以了。这是否意味着第二个参数被假定为十六进制? - WKleinberg
2个回答

4
虽然BLE有规则和标准,但底层设备可以简单地忽略这些规则并自行处理。因此,它可能将属性列为读写,并似乎接受新值,但实际上仅仅是丢弃这些值。虽然不应该这样做,但也没有理由不能这样做。
然而,您应该确保它实际上正在发送正确的数据,问题出在设备上... 如评论中所述,gatttool在解释输入方面可能会有些混乱(新版本比旧版本更好),因此请尝试使用02或2而不是0x02。您还可以尝试使用btmon来检查gatttool是否实际上发送您打算发送的值。

"hcidump"是一个非常过时的工具,不再维护!尝试使用"btmon" :) - Zimano
明白了!022已经实现了。看来它默认将参数解释为十六进制。 - WKleinberg

1

检查是否有其他软件正在访问蓝牙。

当我尝试读取特征并且node-red也在访问同一设备时,我遇到了类似的问题。gatttool连接到设备,但无法进行读/写通信。一旦我停止了node-red,它就开始工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接