问题标签 [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 投票
1 回答
247 浏览

bluetooth-lowenergy - BLE 设备未断开连接

我正在使用 BLE 设备。并使用带有 bluez 5.4 代码的 nrf 控制器。我正在自定义 gatttool 源代码,以便多个设备可以连接和断开连接。

我现在的重点是如何使用 gatttool api 断开 ble 设备。

我在代码中找到了一种我们可以使用的解决方案:

这 2 个 API 用于断开 ble 设备。

我在我的手机中使用 nrf 连接应用程序来连接生成虚拟设备,以便我可以执行操作。

当我使用它来断开设备时,两者之间是否需要任何其他手续,或者只有这些 API 可以?

我无法使用这些 API 断开连接。有时它会生效,有时它不起作用。

如果有人对此有任何想法,请回复。

提前致谢。

0 投票
1 回答
467 浏览

python - pygatt 通知超时:无

我尝试从基于 BLE 的传感器中读取特征数据。因此我使用 pygatt 模块

每次我尝试在我的 Linux 控制台(使用 Python 2.7.16)中运行它时,我都会收到一个错误:

我完全迷失了这个错误。你知道如何解决这个问题吗?对此非常感谢任何帮助。提前致谢...

0 投票
1 回答
118 浏览

bluetooth-lowenergy - 在非交互模式下使用 gatttool 连接到 BLE 设备

我正在尝试从我的体重秤蓝牙低功耗设备中读取数据。测量后,秤会通过蓝牙发布新数据约一分钟。我可以像这样使用 gatttool 阅读它:

-I 选项以交互模式运行 gatttool。然后,成功连接后,我得到如下数据:

我可以从中读取值,但我需要在 gatttool 非交互模式下执行此操作,因此我可以在我的 Qt 应用程序中使用 QProcess 类读取它的输出。gatttool -h关于如何与设备连接并没有多说。没有类似的命令: gatttool -b MAC_ADDRESS connect。有读取或写入的命令,但我不需要这个。我只想连接并等待来自设备的即将到来的数据。谁能告诉我如何使用 gatttool 以非交互模式连接?

谢谢。

0 投票
0 回答
120 浏览

bluetooth-lowenergy - 如何通过gatttool从Huawei Watch GT-DEE读取BMP数据包?

目前我正在做一个项目,该项目需要从和读取Huawei Watch GT-DEE一些传感器。这里的服务端和客户端分别是华为手表和树莓派。但是,我得到的这篇文章非常接近我的目标。我一直在寻找更多细节,并得到了这篇文章这篇文章。无论如何,我得到以下 BLE服务:gatttoolPythonRaspberry Pi 4primary

并获得以下特征:

根据这篇文章,2a00 服务(uuid:0000 2a00 -0000-1000-8000-00805f9b34fb,char 值句柄为 0x0003)指的是设备名称(主要为 1800),我得到正确如下:

但是,我正在寻找由(或主要)输出部分中2a37缺少的服务定义的 BMP 值。根据规格(请查看传感器部分),它具有. 无论如何,我可以在手表屏幕和手机的健康应用程序中看到心率。characteristics180dOptical heart rate sensor

问题:

为什么gatttool不在2a37特征或180d主要部分显示服务?

0 投票
1 回答
1325 浏览

python - 如果在脚本或 python 上使用,蓝牙 BLE Gatttool 无法重复执行,但如果手动使用它可以正常工作。(树莓派 4)

我在墙上砸了我的头,因为我不明白为什么如果我使用脚本、python 甚至单行命令,只能在第一次运行时工作,然后在以下执行时无法再次连接到设备.
在 Raspberry Pi 4 上运行,带有最新的 Raspberry OS 和 bluez 堆栈。

手动执行

如果我手动输入 gatttool 交互,每次都可以正常工作。

“流水线”执行

非常第一次工作正常,但以下没有。即使我在脚本执行后尝试手动执行,也不行。

Python中的预期

与“流水线”相同,第一次可以正常工作,但接下来的不行。即使我在脚本执行后尝试手动执行,也不行。

最后的话

我迷路了。我什至尝试在 scritps/python 上使用 bluetoothctl 而不是 gatttool,但结果始终相同:第一次工作,而不是下一次工作(直到 BLE 设备重置连接)。我很困惑为什么通过手动执行任务每次都可以工作,而不是脚本。我不是这些主题的专家,但也不是新手。任何帮助将不胜感激!

更新 1

Bluez 与 Python 中的 D-bus API

我仍然得到与其他选项相同的结果(第一次尝试有效,但下一次无效)

蓝牙

第一次执行显示连接活动,第二次不显示任何活动。

比特币

删除了一些与“LE Set Scan Enable”相关的部分,以减少讲座。

0 投票
1 回答
970 浏览

bluetooth - 使用 gatttool 从蓝牙温度计读取数据

我偶然发现了这个问题:Reading Thermometer Data with Bluez Bluetooth Low Energy ,并试图从我得到的蓝牙温度计中读取数据。

我能够使用以下命令提取和读取所有句柄:

其中一些喜欢例如在使用 HEX 转换为 ASCII 转换器时逐个字母4d 61 6e 75 66 61 63 74 75 72 65 72 20 4e 61 6d 65读取,但其中一些喜欢例如使用一些空白方块Manufacturer Name02 1c 00 2a 2a read **

我还尝试将一些数字转换为十进制以尝试获得温度值,但没有运气。

每次读取它们时值都保持不变,所以我想这不是读取温度值的方法。

我是否必须以某种方式从这些句柄请求数据。如何从我上面的数据中找到温度值?

当我读到这个温度是从 19.8 到 20.2°C 时,类似的东西(如果它隐藏在我上面列出的那些值中的某个地方)

我只想从中读出温度值。

更新:

打开后scan onbluetoothctl我从蓝牙温度计获取了这个数据包:

让我们获取第一组数据:

我注意到跳过了55 44 33 22 11 00设备的前 2 个字节 MAC 地址,但相反。

之后该24 0c部分在其他集合中类似地重复,例如在下一个中23 0c

接下来的 2 个字节43 01(这是我计算温度的方法。反转字节顺序 -> 01 43-> 0x0143->323十进制 -> 323/16->20.1875向上20.2舍入。这是我的温度计上的准确温度,我在温度越来越高时尝试过,它总是显示准确的温度。

同样,接下来的两个75 040x0475->1141十进制-> 1141/16=71.3125向下舍入71%->温度计上显示的湿度

这是正确的解释吗?

让我感到困惑的是第三组数据更长,数据包在这两者之间交替:

那是温度计发送的其他数据吗?

0 投票
1 回答
247 浏览

bluetooth - 我需要写入哪个 BluetoothLE 句柄才能启用通知?

这是我第一次使用蓝牙,我很困惑应该发送我的写入数据包以启用通知的通道。我正在使用Fitness Machine 0x1826 服务,我正在尝试从0x2AD2 特征中获取数据,特别是 0x0030 句柄。

当我运行“sudo gatttool -t random -b [MAC ADDRESS] -I --char-write-req -a 0x0030 - 0300 --listen”时,我没有得到任何回应,所以我相信我正在发送数据包到错误的句柄,因为设备应该通过我的操作发送通知。

谢谢你的帮助!

0 投票
1 回答
505 浏览

bluetooth-lowenergy - hcitool 找不到 ble 设备,但 blueman 找到了,bettercap 和 bluetoothctl 也找到了

我对这个问题感到困惑。我有以下设备(它是一款中国智能手表),其 MAC 地址显示在 blueman 和 Bettercap 上,但没有出现在 hcitool 上。

我用:

但是Q1的设备MAC地址EB:15:0C:38:C9:B0没有出现。

我尝试更好的帽:

但是,我也得到:

当我做:

但是我不确定这一切意味着什么。我发现 bettercap 非常令人困惑。

我也试过 gattool:

我很抱歉,但我不知道该怎么做。如果可能的话,我想读写这个设备。我在 Fedora 33 Linux 上。

提前感谢您的帮助!

感谢您提供有关 bluetoothctl 的信息。所以,我试试这个并得到:

但是从这里阅读:https ://budimir.cc/2020/02/27/ble-on-linux-with-bluetoothctl/看来我应该得到比上述更多的信息。

但是,我补充说:

并且似乎确实获得了服务列表(我现在将对其进行调查):

0 投票
2 回答
673 浏览

bluetooth-lowenergy - C中的轻量级蓝牙LE库

我一直在寻找一个简单的 C 语言蓝牙 LE 库,它允许我扫描 BLE 设备,连接并接收来自 BLE 设备的给定服务 UUID 的定期通知。直接与蓝牙套接字和 libbluetooth(从 BlueZ 创建)一起使用而不使用 DBUS 的东西。不需要配对和安全功能。

遇到了https://github.com/labapart/gattlib。看起来不错,但使用 dbus API 并且依赖于 libdbus、glib 等。要使用这个库,需要额外的 5MB 库,因此决定不使用 dbus。我们的设备上没有空间来支持压缩 rootfs 映像上的 5MB 蓝牙堆栈。我们的 rootfs 映像的总大小为 9 MB。带有 dbus 的蓝牙堆栈本身似乎是我们 rootfs 大小的 50% 以上。

还有 - https://github.com/edrosten/libblepp是 c++ 并且不使用 dbus。这将需要编写用于 C 程序的 C 包装器以及 C++ 构造的开销,例如编译器生成的复制构造函数、赋值运算符等。还有交叉编译的问题。

目标板是运行 Linux 的 Xilinx Zynq,构建系统是 buildroot。

请建议。

谢谢

0 投票
0 回答
289 浏览

bluetooth - 蓝牙守护进程的初始化序列

我正在寻找来自 Bluez 的轻量级蓝牙工具,而不依赖于 bluetoothd 和 dbus。BlueZ的文件夹“ src/shared ”有这些工具的代码。例如:btgattclient.c 在编译时产生“gattclient”。gattclient 能够连接到 ble 外围设备并读取/写入或接收来自 ble 设备的通知,但它需要初始化 hci0 接口,这是蓝牙正在做的事情。

在运行 bluetoothd 执行初始化之后,如果我杀死了 bluetoothd,gattclient 仍然可以正常工作,连接到 ble 设备并接收通知。似乎 bluetoothd 正在适配器上进行一些设置或初始化,以使“socket connect()”成功,而无需运行 bluetoothd 进行初始化,gattclient 为“connect()”套接字调用返回“连接被拒绝”。btmon 日志显示“connect()”在主机本身失败,没有到目标 BD 地址的连接请求。

如果这里的 BLE 专家可以指出蓝牙的初始化序列/命令,这将很有帮助,这样我就可以手动(使用 btmgmt)或以编程方式实现它,以促进 gattclient 的成功工作。

以下是蓝牙启动时的 btmon 日志 -

请指教。

谢谢