首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过命令行向BLE设备发送蓝牙数据包/写入请求?

如何通过命令行向BLE设备发送蓝牙数据包/写入请求?
EN

Unix & Linux用户
提问于 2022-03-16 16:18:50
回答 1查看 1.7K关注 0票数 0

我有一个BLE灯,我想用编程控制。通过在我的手机(它有一个控制灯的应用程序)和灯之间的蓝牙数据包上进行嗅探,我发现了以下信息:

  • 设备mac地址: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,但我似乎也无法与设备连接。

如有任何意见,将不胜感激。

EN

回答 1

Unix & Linux用户

发布于 2022-05-13 07:58:44

代码语言:javascript
运行
复制
connect error: Device or resource busy (16)

意味着您的界面很忙,您的膝上型计算机是连接到设备上,还是另一个工具正在使用它?例如,您不能使用bluetoothctl进行扫描并同时使用gatttool。除非你有两个不同的接口。

使用以下方法确保蓝牙工作正常,其中hci0是您正在使用的hci接口。

代码语言:javascript
运行
复制
$ hciconfig hci0 down && hciconfig hci0 up
$ service bluetooth restart

要检查您的接口,-a是可选的,但提供了额外的信息。

代码语言:javascript
运行
复制
$ hciconfig -a

读取值时自动将十六进制转换为ascii:

代码语言:javascript
运行
复制
$ gatttool -b [MAC] --char-read -a [characteristic] | awk -F':' '{print $2}' | tr -d ' ' | xxd -r -p; printf '\n'

根据我的经验,gatttool是非常有用的,其他可以试用的工具:bettercapubertooth one

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/694642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档