问题标签 [characteristics]

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 回答
86 浏览

swift - 数据是否写入到写入后返回的 BLE 特征

我有一个工作的 BLE 应用程序,它从扫描仪读取数据,并在读取开始之前将配置发送到扫描仪。我使用以下代码将字符串发送到扫描仪。

我在回调中打印特征名称和值

打印的值不是我写的配置数据,而是一些旧扫描仪读取的数据。令人惊讶的是,即使在应用程序关闭后,仍然存在相同的旧读取数据。

那么回调中发送的特征是否有效,是否包含写入的数据?

0 投票
0 回答
1511 浏览

swift - 数据更新时核心蓝牙外围设备不通知中央

我正在尝试通过 BLE 发送大数据包。为此,我创建了一个特征,该特征应在数据更改时通知中心。问题是显然外设在特征中堆积数据,但很明显一旦特征达到552字节它就不能储存更多的数据。

中央只接收 552 个字节并调用该函数didReceiveRead3 次(我一次传输 200 个字节,所以 3 次是 600 个字节,但只有 552 个字节使它成为低谷(我认为这是自 iOS 10 以来的限制))。这段代码也只打印Unhandled Characteristic UUID: 00000000-0000-0000-0000-000000000000一次并管理到setNotifyValue我的特性true。也didUpdateNotificationStateFor只叫一次。

我想知道为什么我的特点是堆积数据而不像我想的那样一次发送 200 个字节。

外围设备使用的代码是:(函数块只取数据和我们想要的块大小的 int 并返回块和数据减去所取的块)

对于中央,代码是:

随意询问更多代码

谢谢。

0 投票
0 回答
94 浏览

properties - OWL中对象属性hasTopping在不同上下文中的特征定义

不同的汉堡有不同的配料,如奶酪、洋葱、牛肉、沙拉。让我们将汉堡和芝士汉堡视为可能的汉堡实例,并使用对象属性“has_Topping”来定义它们的属性。

首先,我们要模拟一个汉堡工厂,其中生产的每个汉堡都是一个实例。因此,我们有 cheeseburger_1、hamburger_1、cheeseburger_2、hamburger_1。每个汉堡都有自己的浇头实例,例如

与此一致,has_Topping 不是函数式的,而是反函数式的(因为浇头决定了它在哪个汉堡上构成)。此外,has_topping 是不对称的和不自反的。正确的?

其次,我们要对汉堡食谱数据库进行建模。因此,我们只有一个原始芝士汉堡和汉堡的食谱。我们的浇头只存在一次。

与此一致,has_Topping 不是函数式的,也不是反函数式的(因为浇头不能确定它是哪个汉堡的成分)。此外,has_topping 是不对称的和不自反的。正确的?

根据特定的用例,选择的特征是正确的还是存在思维错误?

0 投票
2 回答
4149 浏览

bluetooth - [RPi3][Bluez] 已成功连接到 BLE 设备,但无法列出 GATT 属性

我正在做一个项目,我需要使用 C++ 代码在两个 Raspberry Pi 3 on stretch (RPi) 之间无线创建通信,并具有回调功能。第一个应该向第二个发送数据。我决定使用板载蓝牙芯片在两者之间建立蓝牙连接。

所以首先我决定从源代码版本 5.50 在两个 RPi 上编译 Linux Bluetooth Stack: Bluez。遵循本教程:https : //learn.adafruit.com/install-bluez-on-the-raspberry-pi/installation on Adafruit。我设法使用以下代码从一个 pi 向另一个 pi 发送消息:https ://people.csail.mit.edu/albert/bluez-intro/x502.html 。但是要读取客户端发送的消息,我必须调用函数“read(client, buf, sizeof(buf))”,如服务器代码所示,这有点限制。我想在收到消息时收到通知,以便可以调用回调函数。我看到可以通过启用有关用于通信的 GATT 特性的通知来完成。

我从https://people.csail.mit.edu/albert/bluez-intro/x502.html获得的 C++ 代码并没有真正显示这种级别的规范。在通过以下方式提高了我对 GATT 的了解后:https ://www.novelbits.io/bluetooth-gatt-services-characteristics/ ,我决定按照 Tony D 的 youtube 教程了解如何使用 Bluez APi https://www.youtube .com/watch?v=5fQR2PHMDWE

为了方便起见,我决定将一个 RPi 放在一边,并尝试连接一个使用蓝牙 4.0 的蓝牙音频耳机 JBL T450BT,因此它应该支持蓝牙低功耗。

在 bluetoothctl 上,这是问题所在,我设法打开控制器电源,扫描并检测耳机。然后我信任、配对和连接。在 GATT 菜单中,我输入命令:list-attributes [dev address]。Bluetoothctl 不打印任何错误但不返回任何内容,并准备接收其他命令行。

正如我告诉你的那样,从那里我没有得到 bluetoothctl 的答案,但也没有错误。我无法发现服务/特征。在我关注的 youtube tuto 上,有人告诉我 GATT 服务和特征发现是在配对/第一次连接期间完成的。我假设 Pi 打算这样做但失败了。这可能就是我得到序列的原因:已连接:是,ServicesResolved:是配对成功,然后是 ServicesResolved:否,已连接否。没有类似:[NEW] XXX 服务或 Characteristcs 显示。我认为问题不在于耳机,因为它在我连接的其他设备上做同样的事情。我在 RPi 上安装了 pulseaudio 和 bluealsa 软件包。

正如本教程中提到的

这里是蓝牙状态:

这是 hciconfig 给出的:

这也是 D-Bus 内省工具返回的内容:

对于在配对和连接方面遇到问题的人来说,这个来源是一个巨大的帮助:https ://www.sigmdel.ca/michel/ha/rpi/bluetooth_02_en.html

无论如何,这是我的问题。我想访问特性及其 UUID,以便能够修改他们的权限或创建具有适合我项目的自身特性的新服务。到目前为止,我认为这是在蓝牙通信中实现带有回调的通知器的唯一方法。也许我错了。你有什么线索吗?:)

0 投票
0 回答
195 浏览

bluetooth-lowenergy - createCharacteristic 具有 3 个或更多特性的 BLE 应用程序?

我正在使用 ESP32 Arduino 平台开发 BLE 应用程序,并且担心有 2 个或更多特性属性,想知道下面的语句是否有效且有效?我之前一直看到具有 2 个属性但没有 3 或 4 个属性的代码示例。我尝试了代码,没有错误,但我的 Android 应用程序在看到通知时出现问题。

有没有想过要改进或让它变得更好?

0 投票
1 回答
179 浏览

android - readCharacteristic 返回 true,但未调用 onCharacteristicRead

连接到 BLE 设备并发现其服务后,我检查某个特征是否可读,然后调用readCharacteristic. 此调用返回true,但未调用回调onCharacteristicRead
仅仅 30 秒后,onCharacteristicRead就会以特性 == nullonDeviceDisconnected调用 ,并以等于 22 的状态码调用 。

我已经测试了 nRF Connecte 以读取相同的特性,并且效果很好。

什么可能是错的?

0 投票
0 回答
108 浏览

swift - 当字节长于 20 时如何修复此代码?

我试图弄清楚如何从具有超过 20 个字节的特征的蓝牙设备解析值。

我有下面的代码,基本上每次更新特征值时都会触发。但是,由于值的总量很长,所以在我获得数据总量之前,didUpdateValueFor 函数似乎发出了 4 或 5 个通知。目前,我正在遍历该值并附加到一个数组,我将使用该数组来绘制一些数据。有没有一种方法可以将所有数据放入一个数组中而不必每次都执行此循环?目前我得到的数据如下:

[89, 0, 44, 0, 84, 0, 112, 0, 125, 0, 125, 0, 134, 0, 144, 0, 153, 0, 162, 0]

[89, 1, 163, 0, 163, 0, 162, 0, 167, 0, 169, 0, 172, 0, 176, 0, 176, 0, 177, 0]

[89, 2, 182, 0, 181, 0, 181, 0, 182, 0, 181, 0, 169, 0, 164, 0, 157, 0, 139, 0]

[89, 3, 135, 0, 119, 0, 117, 0, 101, 0, 101, 0, 84, 0, 85, 0, 70, 0, 70, 0]

[84, 4, 55, 0, 46, 0, 26, 0, 21, 0]

每个数组中的第一个值并不重要。但是,第二个值是 MS 值,应该为零。但是,每次循环运行时,它似乎每次都增加一。因为我需要将这个数字乘以 256(如果 LS 值的值超过 256),如果我简单地忽略它,我会遇到麻烦(这就是我的代码现在所做的,如下所示)

对于这组数据,每个数组中的第二个值应该是 0。提前感谢您提供的任何帮助。

0 投票
0 回答
1021 浏览

bluetooth-lowenergy - 记录访问控制点BLE解释-葡萄糖

我正在尝试使用蓝牙 LE 从葡萄糖计(Contour One Plus)获取葡萄糖测量值。我能够连接到设备。我不知道如何从记录访问控制点开始。我可以发现所有的特征和服务。我要求解释理论基础。那么,如果我连接到设备 - 第一步是向 RACP 发送我想要读取数据的请求?接下来发生了什么?如果响应代码值发送 value="success" 我应该查看葡萄糖测量特性吗?

0 投票
1 回答
1300 浏览

android - 从具体的 BLE 特征 Kotlin 中读取值

我正在尝试从我的应用程序中的具体 BLE 特征中读取值,但目前我尝试从所需特征中读取值,onCharacteristicRead 函数似乎没有被触发。

首先,我使用 onServicesDiscovered 从设备获取每项服务:

如您所见,我使用了一个 for 循环,以便通过 readCharacteristic 函数实现与每个服务关联的每个服务名称和特征

所有这些过程最终返回给我下一个结果

这是完全正确的(它向我显示设备上的每个服务以及该服务中的每个特征),但是当我尝试从 00002a53-0000-1000-8000-00805f9b34fb 中正确报告的characteristicRS 中读取值时,我的问题就出现了返回终端,但重点是(据我所知),在我打电话的那一刻

功能

应该被触发并向我返回特征中的值,但毕竟没有输入。我忘记了什么?

PD:数据被声明为字节数组

0 投票
1 回答
858 浏览

java - 编写特征属性检查总是假的 Android BluetoothGatt 类

我想创建一个 android 应用程序,以便从 ESP32 板连接和检索数据,以及使用蓝牙低功耗通信向板发送值的能力。

我有一个内部带有 BLE 服务器的 ESP32 板。我已经实现了一个具有以下特性的自定义服务。

我在 android 应用程序中成功实现了所有的扫描、读取和通知功能,但是在编写 BluetoothGatt.writeCharacteristic 时,第一个条件总是返回 false:

在调试 android 应用程序时,characteristic.getProperties() 始终为 18。

下面是使用上述函数的写特征代码:

我已经尝试在没有读取或通知的情况下执行写入操作,以防止多个请求,但结果是相同的。

我还尝试使用具有读写通知功能的外部 BLE 应用程序,它们都与我的 ESP32 设置完美配合。