问题标签 [gatttool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4033 浏览

bluetooth-lowenergy - 如何找到BLE设备不同UUID对应的句柄

使用 gattool,我可以找到与我的智能手表手柄相对应的 UUID,如下所示:

但是,我很困惑,如何确定哪个句柄适用于哪个 BLE 功能。例如,https ://www.bluetooth.com/specifications/gatt/characteristics/ 上的页面显示电池电量规格功能位于 0x2A19。但是,我不知道在哪里或如何在上面的 char-desc 输出中获取与 0x2A19 对应的 UUID。我怎么得到这个?

编辑:感谢答案中非常有用的描述(两者都非常好)。我已经添加了上面的特征信息。我还有一些额外的信息可能有用也可能没用。

通过反复试验,我能够确定血压测量值(从我按下表带上的按钮时获得)是从通知句柄的第三个和第四个条目(十六进制格式)获得的(见输出):

但是,当什么都不做时,即没有按下任何按钮,我得到:

相同的通知句柄在第 11 个条目中给出了心率(按下该按钮时):

然而,在所有情况下,第一个条目也发生了变化(并且它们似乎对操作和不作为是唯一的)。

例如,我想知道我是否可以访问这些信息,以及如何触发 BP 测量。再次感谢!

如果我的问题不清楚或需要更多信息,请在评论中告诉我。我很乐意根据需要提供更多信息。感谢您花时间阅读和提出建议/指示。

0 投票
0 回答
791 浏览

bluetooth - Gatttool 在几秒钟后停止接收通知(不是因为断开连接)

我使用 gattool 连接 Linux 虚拟机(Ubuntu)上的 BLE 设备。系统中共有三个角色:peripheral、central、laptop(只接收日志信息进行调试)

连接后,我需要向外围设备发送一条消息,以便在中央与外围设备交互时向 Linux 发送日志信息。所以我的代码是这样的:

如果外围设备可以继续向笔记本电脑发送日志记录,它可以正常打印通知。但是,如果外围设备在 (4-5) 秒内停止发送日志记录并在此之后恢复,则笔记本电脑将不再打印出该消息。但它并没有断开,因为之后我仍然可以写入外围并收到正常的反馈。而且也没有错误(gatttool:5840): GLib-WARNING **: Invalid file descriptor.

它的可能原因是什么以及如何解决它?谢谢!

样本结果:


经过测试,我认为它更接近于“接收通知并存储它,但直到下一个命令到gatttool时才将它打印到终端”如果我向外围设备发送一些命令,这意味着外围设备也会向笔记本电脑发送一些命令,无论 gatttool 的下一个命令是什么,它都会打印出“已保存”的通知。测试结果:


来自 btmon 的结果。外围设备在 19:36:30 左右发出通知,但是当我在 Linux 上发送另一个 cmd 时,btmon 上的时间戳是 19:37。

0 投票
1 回答
847 浏览

bluetooth - 无法连接到树莓派上的 BLE 设备(gatttool/bluetoothctl)

就像标题说的那样,我无法连接到我的树莓派 3 上的 le 设备。我试过: - 通过 bluetoothctl 我得到一个 AuthenthicationFailure - 通过 gatttool 我得到连接被拒绝(111)

我搜索了很多解决方案并已经尝试过(确保): - btmgmt le up - 将 bluez/bluez 重新安装到最新版本 - 使用 gatttool 时使用“-t random”

并且知道我真的不知道下一步该做什么。

什么可能很重要: uname -r = 4.19.58-v7+ bluetoothctl -v = 5.50 使用 Android 应用程序 nRF 连接到 le 设备的连接工作正常。

有人可以帮我吗?

在此先感谢,玛格达

0 投票
1 回答
424 浏览

bluetooth-lowenergy - Gatttool 非交互模式,多个 char-write-req

我想检索一个 stryd footpod 的数据。我想听 2 个单独的 uuid。在交互模式下,我会使用

但是,当我将它用作 perl 脚本的一部分时,我想利用非交互模式。

使用单个句柄启动 gatttool 可以正常工作:

但是如何同时通过两个句柄?以下不起作用。

谢谢!

0 投票
1 回答
416 浏览

python - 无法连接小米手环 3

我正在尝试使用我获得的一些库通过 Python 连接到 Mi Band 3,但我无法 - bluepy 返回此类错误:

我也尝试使用 gatttool 连接到设备,还有一些我不明白的问题:

也许你们中的任何人都可以给我一些建议,我在获取设备访问权限时做错了什么。我可以访问 VM 上的 BT,因为我可以在 MB3 中从控制台或设置中列出设备。

我的环境:

Ubuntu 19.10 上:Windows 10 教育版中的 VirtualBox 6.0.14

笔记本 MSIGP63 8RE-403XPL

连接时手环未与 MiFit 配对。

我相信你可以帮助我解决这个问题。

0 投票
0 回答
121 浏览

linux - gatttool 安全级别的含义(低 | 中 | 高)

linux gatttool三个安全级别(低、中、高)如何对应BLE安全模式和级别?gatttool 提供 3 种安全级别(低、中、高),而 BLE 安全规范有 4 种不同的安全级别(1、2、3 和 4)和至少 3 种不同的安全模式(1、2 和混合)。我试图了解 gatttool 中的每个安全级别(低、中和高)在 BLE 安全规范中对应的内容,或者至少只是了解这三者之间的区别。

提前致谢!

0 投票
1 回答
1270 浏览

python-3.x - 无法读取/写入 BLE 中的特性

我有一个 BLED112 加密狗和一个 BLE 设备,其中包含具有服务特性的 GATT 配置文件。我已经安装了 pygatt 来与我的 BLE 设备通信。

以下是我连接到我的 BLE 设备并读取/写入特性的 python 代码:-

我能够连接到我的设备。但是,我在读取或写入时收到以下错误:

C:\Python\Python37-32\lib\site-packages\pygatt\backends\bgapi\bgapi.py",第 570 行,在 expect_any 中引发 exc pygatt.backends.bgapi.exceptions.ExpectedResponseTimeout:等待 10.000000 秒后超时[]

我已经包含 wait_for_response=True在我的写指令中,但我仍然遇到这个问题。

我如何在没有任何错误的情况下读/写特征?

PS:在扫描时,我观察到上面的 UUID 属于“描述符”。

这是我收到错误的原因吗?

有没有办法在 pygatt 中写入“描述符”(而不是特征)?

0 投票
1 回答
1077 浏览

python-3.x - pygatt:无法执行 device.subscribe()

我正在尝试订阅 GATT 特性。

我已经为我的 BLE 设备中的 GATT 特性设置了“指示”、“通知”和“读取”属性。

我能够连接到我的 BLE 设备并读取/写入其他特性。

但是,我无法针对此特定特征执行 device.subscribe() 函数。

当我使用

我得到了错误

pygatt.backends.bgapi.exceptions.ExpectedResponseTimeout:等待 10.000000 秒后超时 []

在链接 https://github.com/peplin/pygatt/blob/master/pygatt/device.py中,订阅函数有参数“wait_for_response”

在我的代码中,如果我使用

它显示错误

TypeError: subscribe() 得到了一个意外的关键字参数“wait_for_response”

我如何消除这些错误并订阅特性?

编辑:

我将属性读取和写入以及通知和指示添加到特征

我可以使用以下代码读取和写入特征:-

但是,只是我无法订阅它。

我真的被困在这里了。

任何帮助深表感谢!

0 投票
0 回答
163 浏览

bluetooth - gatttool 特性在非交互模式下写入

我想gatttool在 shell 脚本中使用。

我想要实现的类似于这些:

在交互模式下,我可以这样做:

现在,如果我以非交互方式运行:

它只是挂起,我需要打破它,CTRL+C并且不会向设备发送任何内容。

现在,以上所有问题都建议使用--char-write-req而不是--char-write.

但这是误导,因为请求和命令意味着不同的东西。

我的设备不接受请求,只接受命令(即使在交互模式下!)。因此,尝试发送相同的数据request将失败:

现在当然使用上述问题 ( --char-write-req) 中的建议将失败:

那么,如果我不想为此使用任何 Python 或类似的过度杀伤力,那么编写特征命令的非交互式替代方法是什么?

0 投票
1 回答
2354 浏览

bluetooth-lowenergy - 间歇性出现连接错误:使用 gatttool 连接时未实现功能 (38)

我正在做一个项目,我需要从 BLE 环境传感器获取数据到树莓派上,并定期将其发送到服务器。我可以发送的越多越好。我在网上找到了一个脚本,它适用于我正在使用的特定类型的传感器,但它只读取一次数据并且不会更新,除非某些设备连接到传感器并断开连接。

因此,例如,如果我连续两次运行脚本,它将包含相同的数据,但如果我运行一次脚本,然后用我的手机连接和断开传感器,然后再次运行脚本,它将有新的, 更新数据。现在,我正在尝试使其完全自动化,并且不想每次都与手机保持连接和断开连接以获取新数据,因此我发现运行 gatttool 和连接具有与我相同的效果是连接和断开我的手机。所以我想出了一个有点笨拙的自动化解决方案,它都通过 crontab 运行:

  1. 运行脚本,使用 gatttool 连接并立即断开与传感器的连接
  2. 运行数据收集脚本并将数据发送到服务器
  3. 尽快重复

第 3 步是问题所在。我不能随心所欲地运行这个系列。理想的间隔是每 30 秒收集和发送一次数据,但由于某种原因,我间歇性地从 gatttool 收到错误消息:

我在 cron 计划的每次迭代中都会收到此错误,直到我设置了间隔以便脚本仅每2 分钟运行一次,即使如此,我也会间歇性地收到错误。我需要数据保持一致,并且绝对不像 2 分钟那样稀疏。1 分钟是我可以承受的发送数据的绝对最大间隔。

我怎样才能摆脱这个错误?

我连接和断开设备的脚本: