我有一个BLE灯,我想用编程控制。通过在我的手机(它有一个控制灯的应用程序)和灯之间的蓝牙数据包上进行嗅探,我发现了以下信息:
XX:XX:XX:XX:XX:XX
0x0009
c7e3f68520e8d5ae5acd17760a01459d
在研究这个问题时,我偶然发现了(不推荐的)实用程序gatttool
。根据他们的文件,我可以这样写到BLE设备上:
sudo gatttool --char-write-req -b XX:XX:XX:XX:XX:XX -a 0x0009 -n c7e3f68520e8d5ae5acd17760a01459d
这在某种程度上是可行的。当我用手机连接到灯上并执行上述命令时,我会收到以下响应:
connect error: Connection refused (111)
这是意料之中的,因为我已经用手机连接到设备上了。当我断开电话时,我会收到以下回复:
connect error: Device or resource busy (16)
不幸的是,这不是我希望看到的。我在网上读到,这个问题可能是由于gatttool
被弃用而发生的。
总之,我要找的是:
gatttool
在这种情况下工作的一些信息/想法。gatttool
)。我查看了bluetoothctl
,但我似乎也无法与设备连接。如有任何意见,将不胜感激。
发布于 2022-05-13 07:58:44
connect error: Device or resource busy (16)
意味着您的界面很忙,您的膝上型计算机是连接到设备上,还是另一个工具正在使用它?例如,您不能使用bluetoothctl
进行扫描并同时使用gatttool
。除非你有两个不同的接口。
使用以下方法确保蓝牙工作正常,其中hci0是您正在使用的hci接口。
$ hciconfig hci0 down && hciconfig hci0 up
$ service bluetooth restart
要检查您的接口,-a是可选的,但提供了额外的信息。
$ hciconfig -a
读取值时自动将十六进制转换为ascii:
$ gatttool -b [MAC] --char-read -a [characteristic] | awk -F':' '{print $2}' | tr -d ' ' | xxd -r -p; printf '\n'
根据我的经验,gatttool是非常有用的,其他可以试用的工具:bettercap
、ubertooth one
。
https://unix.stackexchange.com/questions/694642
复制相似问题