问题标签 [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.
bluetooth-lowenergy - BLE 设备未断开连接
我正在使用 BLE 设备。并使用带有 bluez 5.4 代码的 nrf 控制器。我正在自定义 gatttool 源代码,以便多个设备可以连接和断开连接。
我现在的重点是如何使用 gatttool api 断开 ble 设备。
我在代码中找到了一种我们可以使用的解决方案:
这 2 个 API 用于断开 ble 设备。
我在我的手机中使用 nrf 连接应用程序来连接生成虚拟设备,以便我可以执行操作。
当我使用它来断开设备时,两者之间是否需要任何其他手续,或者只有这些 API 可以?
我无法使用这些 API 断开连接。有时它会生效,有时它不起作用。
如果有人对此有任何想法,请回复。
提前致谢。
python - pygatt 通知超时:无
我尝试从基于 BLE 的传感器中读取特征数据。因此我使用 pygatt 模块
每次我尝试在我的 Linux 控制台(使用 Python 2.7.16)中运行它时,我都会收到一个错误:
我完全迷失了这个错误。你知道如何解决这个问题吗?对此非常感谢任何帮助。提前致谢...
bluetooth-lowenergy - 在非交互模式下使用 gatttool 连接到 BLE 设备
我正在尝试从我的体重秤蓝牙低功耗设备中读取数据。测量后,秤会通过蓝牙发布新数据约一分钟。我可以像这样使用 gatttool 阅读它:
-I 选项以交互模式运行 gatttool。然后,成功连接后,我得到如下数据:
我可以从中读取值,但我需要在 gatttool 非交互模式下执行此操作,因此我可以在我的 Qt 应用程序中使用 QProcess 类读取它的输出。gatttool -h
关于如何与设备连接并没有多说。没有类似的命令:
gatttool -b MAC_ADDRESS connect
。有读取或写入的命令,但我不需要这个。我只想连接并等待来自设备的即将到来的数据。谁能告诉我如何使用 gatttool 以非交互模式连接?
谢谢。
bluetooth-lowenergy - 如何通过gatttool从Huawei Watch GT-DEE读取BMP数据包?
目前我正在做一个项目,该项目需要从和读取Huawei Watch GT-DEE
一些传感器。这里的服务端和客户端分别是华为手表和树莓派。但是,我得到的这篇文章非常接近我的目标。我一直在寻找更多细节,并得到了这篇文章和这篇文章。无论如何,我得到以下 BLE服务:gatttool
Python
Raspberry Pi 4
primary
并获得以下特征:
根据这篇文章,2a00 服务(uuid:0000 2a00 -0000-1000-8000-00805f9b34fb,char 值句柄为 0x0003)指的是设备名称(主要为 1800),我得到正确如下:
但是,我正在寻找由(或主要)输出部分中2a37
缺少的服务定义的 BMP 值。根据规格(请查看传感器部分),它具有. 无论如何,我可以在手表屏幕和手机的健康应用程序中看到心率。characteristics
180d
Optical heart rate sensor
问题:
为什么gatttool
不在2a37
特征或180d
主要部分显示服务?
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”相关的部分,以减少讲座。
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 Name
02 1c 00 2a 2a read
**
我还尝试将一些数字转换为十进制以尝试获得温度值,但没有运气。
每次读取它们时值都保持不变,所以我想这不是读取温度值的方法。
我是否必须以某种方式从这些句柄请求数据。如何从我上面的数据中找到温度值?
当我读到这个温度是从 19.8 到 20.2°C 时,类似的东西(如果它隐藏在我上面列出的那些值中的某个地方)
我只想从中读出温度值。
更新:
打开后scan on
,bluetoothctl
我从蓝牙温度计获取了这个数据包:
让我们获取第一组数据:
我注意到跳过了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 04
:0x0475
->1141
十进制-> 1141/16
=71.3125
向下舍入71%->温度计上显示的湿度
这是正确的解释吗?
让我感到困惑的是第三组数据更长,数据包在这两者之间交替:
那是温度计发送的其他数据吗?
bluetooth - 我需要写入哪个 BluetoothLE 句柄才能启用通知?
这是我第一次使用蓝牙,我很困惑应该发送我的写入数据包以启用通知的通道。我正在使用Fitness Machine 0x1826 服务,我正在尝试从0x2AD2 特征中获取数据,特别是 0x0030 句柄。
当我运行“sudo gatttool -t random -b [MAC ADDRESS] -I --char-write-req -a 0x0030 - 0300 --listen”时,我没有得到任何回应,所以我相信我正在发送数据包到错误的句柄,因为设备应该通过我的操作发送通知。
谢谢你的帮助!
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/看来我应该得到比上述更多的信息。
但是,我补充说:
并且似乎确实获得了服务列表(我现在将对其进行调查):
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。
请建议。
谢谢
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 日志 -
请指教。
谢谢