问题标签 [gatt]

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 投票
0 回答
661 浏览

android - BLE 4.0 自动连接和扫描

我正在尝试制作一个可以切换连接到 BLE 设备的 LED 的应用程序。当我尝试扫描设备并连接到它不起作用的服务时。在 LE Scan 上使用变量“mBTdevice”始终显示空值

这是我的 code.java 文件

这是我的 xml 文件

0 投票
1 回答
27391 浏览

raspberry-pi - 即使可以使用 hcitool lescan 发现设备,BLE gatttool 也无法连接

我正在使用 USB 蓝牙加密狗运行 RPi。当我使用 hcitool 时,我可以发现 SmartTag 设备。但是当我使用 gatttool 时,我无法连接。它显示“主机已关闭 (112)”。这是我的命令:

检查我的 RPi 上的蓝牙适配器,我得到:

然后,当我像这样使用 gatttool 时,我得到:

当我输入连接时,我得到这个:

我在网上找到一些信息说“主机已关闭”意味着蓝牙传感器未处于可发现模式。但就 SmartTag 而言,这是不正确的,因为我按下了传感器上的一个按钮(侧面按钮),TI 说要推动它以使其可被发现。hcitool lescan 使用相同的设备来查找设备。还有一个在手机上运行的安卓应用程序,当按下同一个按钮时,它会扫描、连接和读取 SmartTag 传感器。

有谁知道问题可能是什么?提前致谢

0 投票
1 回答
2241 浏览

linux - Gatttool:限制为 5 个连接?

我通过在 python* 中使用 pexpect 生成 gatttools 来连接到五个设备。当我尝试手动连接到第六台设备(对所有连接使用相同的 CSR 4.0 加密狗)时,我遇到:

这是 gatttool 限制还是硬件限制?我在http://git.kernel.org/cgit/bluetooth/bluez.git克隆了源代码并运行grep -r "attempting"但没有得到任何结果。

我想通过蓝牙低功耗连接到 20 个设备,我认为这在硬件和固件方面应该是可行的。

=====

系统设置:Ubuntu 14.04、bluez v5.20、CSR 4.0 dongle、adafruit ble nrf8001 breakout。

参考

0 投票
6 回答
62881 浏览

android - Android BluetoothGatt - 状态 133 - 注册回调

首先,我阅读了SOLVED: GATT callback failed to register并采取了该帖子中建议的步骤来解决此问题,但没有成功。如果您还没有阅读,推荐的修复方法是直接从主线程或使用处理程序进行所有 BLE 调用。

我正在开发一个 BLE 应用程序,想要运行一个执行这些任务的服务(每 10 秒从活动调用一次):

所以问题......一切都很好。我可以执行整个服务 start {startService(...); 在 mainActivity}中完成{stopSelf(); 在服务} 6 次。

第 7 次我收到 BluetoothGatt 无法注册回调。我不确定为什么我可以成功运行它 6 次,然后在第 7 次失败。

请记住,我正在从主线程进行所有 BLE 调用,并且已在多个位置的 log cat 中确认了这一点。

这是我的代码的大纲:

服务.JAVA

所以,就像我说过的,所有 BLE 的东西都是通过处理程序从主线程调用的。该服务从开始到结束成功运行 6 次。在第 7 次,我得到那个愚蠢的未能注册回调。

如果您认为相关,我可以提供更多 logcat 信息。我没有在原始帖子中,因为我向它输出了很多信息以验证收到的数据等。

以下信息是我的服务从开始到结束第 7 次运行的 logcat 信息。

如果你在这里成功了,谢谢!我找不到任何关于 status=133 意味着什么的信息?!它仅在回调失败时发生。每隔一段时间它是状态= 0。

如果有人甚至可以回答这个..它可能会对我有很大帮助。或者,如果有人能告诉我为什么它只运行 6 次。任何见解或预感都会有所帮助!

谢谢大家!

0 投票
3 回答
15409 浏览

linux - BlueZ:如何从命令行设置 GATT 服务器

我想知道是否有办法从 Linux 命令行设置 gatt 服务器。我知道 BlueZ gatttool 命令允许您充当 gatt 客户端并询问远程 gatt 服务器,但是,我认为该工具不能用于设置服务器。

我想要实现的是一个 gatt 服务器,从命令行创建,并且可以被任何中央设备(例如 iOS 或 Android 设备)查询以连接到 GATT 服务器,发现服务和特征,并操作数据。特征。

例子:

具有 1 个服务的 Gatt 服务器,其中包含 3 个特征。

  • 服务 uuid = 0xFFFF
  • 字符 1 uuid = 0xAAAA,值 = 01,属性 = 可读
  • Char 2 uuid = 0xBBBB, value = 00, properties = 可读 & writable
  • 字符 3 uuid = 0xCCCC,值 = 02,属性 = 可通知

我正在使用内核版本 3.11.0 和 BlueZ 5.19

0 投票
1 回答
1209 浏览

bluetooth-lowenergy - 如何为蓝牙 BLE 模块实现特定的 GATT 配置文件

我有一个关于 GATT 配置文件实施的小问题。

那就是……我如何在蓝牙 4.0 模块上实现特定的 GATT 配置文件……?专门买了一个 CC2541 BLE 模块,我如何在其中实现 GATT 配置文件,特别是心率监测配置文件。

0 投票
1 回答
4197 浏览

android - 如何将 Android BLE BluetoothGattCallback 设置为具有状态 BluetoothProfile.STATE_CONNECTING?

我正在为开源计步器编写一个 BLE 应用程序,到目前为止,它工作得很好,但有一个烦人的问题:在 BLE 服务的 BluetoothGattCallback void 方法“onConnectionStateChange”中,参数“int newState”只能是两个之一值,STATE_DISCONNECTED 或 STATE_CONNECTED”,如此处所述:

BluetoothGattCallback 文档

问题是当我断开连接并重新尝试连接到我的 BLE 设备时,它可以工作,但是当它处于连接状态时我没有反馈。屏幕保持静止,从断开连接到连接,可能需要 3 秒到 15 秒。

因此,我的问题是,我是否可以直接访问 BluetoothGattCallback 的 onConnectionStateChange 方法并在其中传递“BluetoothProfile.STATE_CONNECTING”的值,以便状态“STATE_CONNECTING”的“else if”语句中的代码行执行?如果是这样,怎么做?

我附上了我的 onConnectionStateChange 和 connect 方法。它们与开发人员网站上提供的示例心率监测器应用程序中提供的内容基本没有变化。我唯一的改变是 STATE_CONNECTING 的“else if”。

谢谢。

0 投票
4 回答
13081 浏览

bluetooth - 如何解码 FreeTec PX-1737-919 蓝牙 4.0 温度传感器的蓝牙 LE 包/帧/信标?

传感器宣传这些蓝牙 LE 包:

我该如何解码?

LE 广告报告:

0 投票
1 回答
17661 浏览

bluetooth - 如何在 Linux 中使用 Bluez 实现蓝牙 LE

我正在为 BLE 演示设置两个 Linux 系统。显然,一个系统将是外围设备,而一个系统将是中央设备。我对这两种配置都有几个问题。

环境

外围设备设置

首要任务是通过配置 GATT 服务器进行外围系统设置和广告。目前,似乎无法从命令行配置 GATT 服务器。因此,虽然启动 USB 加密狗并对其进行宣传是一项简单的任务,但这并不允许创建自定义服务和特性。我能找到的 GATT 服务器的唯一示例是 Bluez 包中的 gatt-example.c 文件。所以我下载并构建了最新的 bluez-5.23 源代码。(http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html)。另外使用 --enable-maintainer-mode 标志配置以强制将 gatt-example.c 插件构建到 bluetoothd。我从~/bluez-5.23/plugins目录中验证了构建后有一个bluetoothd-gat-example.o文件。这告诉我 gatt-example 至少是成功构建的。

然后我修改了配置文件以启用 LE 和属性服务器。

然后只需重新启动或重新启动蓝牙守护程序...

中央设备设置

由于中央设备不需要像外围设备那样构建任何特殊插件,我只是使用apt-get. 这似乎已经根据bluetoothd -v.

会话设置

那么连接过程应该相当简单。我将外围设备设置为广告,然后与中央设备连接:

周边:

中央:

而且我们看到 gatt 示例中没有一项服务或特征可用。

问题

- 外围设备

  1. 我将如何创建自己的自定义 GATT 服务器?它可以是独立的 C 应用程序,还是需要像 gatt-example 那样作为插件内置到 bluetoothd 中?这个问题的答案(创建 GATT 服务器?)意味着您执行以下操作:“首先初始化 GATT 库和其他模块”,然后“注册您的 GATT 数据库”。但是没有一个如何实现这些通用语句的示例,并且提供的链接只是蓝牙网站的 URL。
  2. GATT 规范 ( https://developer.bluetooth.org/gatt/Pages/default.aspx ) 提供了许多可以以 XML 格式下载的“采用”服务和特征。但是没有关于如何使用它们的说明?!
  3. 如何验证我的 GATT 服务器是否正在运行?

--中央设备

  1. 为什么我的中央设备看不到外围设备上运行的 GATT 服务器的服务和特征?

我可以提供任何必要的额外信息。谢谢。

0 投票
0 回答
5734 浏览

android - 从 BLE 设备同步读取多个特征(Android 推荐方法)

我正在开发一个从 BLE 设备读取数据的 android 应用程序。我在这里遇到了很多关于如何读取多个特征的解决方案,其中大多数都建议使用队列。

我确实实现了 Queue 方法,并且在我的代码中一切正常。我开始这个线程的原因是为了找到最好的和最有效的解决方案,同时也为了消除我对某些 BLE 服务特性如何工作的一些疑问。

我已将以下两个链接作为参考,这有助于我使我的代码正常工作。

来源 1:

Android:BLE如何读取多个特征?

来源 2:

Android BLE API:未收到 GATT 通知

我的要求是读取心率测量值电池电量。最初我尝试将心率和电池特性添加到队列中,然后为每个添加的元素调用读取/设置方法。

主要活动:

蓝牙HDP服务:

回到MainActivity:(一旦触发读取特性 BLE 回调操作)

我使用广播接收器来读取/设置下一个队列元素。

上述代码片段仅适用于一个特征(心率)BLE 设备继续发送心率测量数据,而对于另一个特征(电池百分比)BLE 设备仅发送一次电池百分比数据。请注意,队列元素的顺序是首先读取/设置心率特征并从队列中删除,然后是电池特征。

最初我认为队列没有按预期工作,并尝试交换队列中的特征顺序,电池百分比是要读取/设置和删除的第一个元素,然后是心率特征,以查看问题是否确实与不正确有关编程。

但事实并非如此,因为 BLE 设备做了和以前一样的事情(继续发送心率测量数据,而电池百分比只发送一次)。

因此,考虑到上述情况,我得出的结论是电池电量百分比特性需要每隔一段时间读取/设置一次,以强制 BLE 设备发送其数据。下面的帖子进一步帮助了这一点,其中一位开发人员必须使用计时器线程来定期从 BLE 设备获取电池百分比更新。

如何在android中的ble中每5秒更新一次电池电量

我不愿意在我的代码中使用计时器线程,因为这会使我已经很复杂的代码变成复杂的无穷大。然后我在read_Characteristic()方法中添加了以下条件来克服这个问题。

@主活动

通过这样做,电池特性永远不会从队列中删除,并且read_Characteristic()方法将通过广播接收器每隔一段时间调用一次(保持同步模式)。这目前在我的代码中完美运行,但我需要专家建议这是否正确。

这个问题是否仅与电池或其他特性有关。幸运的是,到目前为止,我只需要这两个特征的数据(心率测量数据和电池百分比)。

我没有尝试过两个以上的特性,因为我的 BLE 设备只有有限的一组特性,而这些是目前仅有的两个特性。

这是因为 BLE 设备无法在给定的时间内向 android 设备发送大数据包吗?原因是,即使上面的代码运行良好,也从来没有一个实例同时发送两个数据(心率和电池百分比)。

如果有人可以对此有所了解,我将不胜感激。

提前致谢!