问题标签 [bleno]

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

ios - 带有 Bluez 和 Bleno 的 Raspberry 蓝牙外设

我正在尝试创建一个覆盆子蓝牙外围设备,我正在使用 Raspbian 和 Bluez v 5.11,我已经尝试了很多让它工作,但我找不到解决问题的方法,我正在使用USB 蓝牙加密狗 Inatek BTA-CSR4B5,如果我这样做:

我有:

因此,如果我尝试将其设置为 iBeacon,例如执行此脚本,则该设备似乎运行良好:

ibeacon.conf:

ibeacon_start

有用。

但我想做一个蓝牙外围设备,为此我正在使用这个库:

https://github.com/sandeepmistry/bleno

当我在 bleno 项目中启动测试代码时,我可以找到该服务,但是当我尝试使用 iOS 设备连接到外围设备时,我得到一个超时连接。

我做了很多测试,我找到了问题的半解决方案,如果我用 bleno 启动服务,并且服务开启,在另一个终端我正在这样做:

当我尝试连接到外围设备时,当我断开与外围设备的连接并尝试再次连接时,它不再工作了,要让它再次工作,我必须再次这样做:

所以我的问题是,我该如何解决我的问题?所以避免每次都执行上述命令,并制作一个始终接受连接的蓝牙外围设备?

0 投票
1 回答
3228 浏览

bleno - 当外设本身改变特征值时如何实现更新值回调

假设外围设备正在侦听某个套接字或管道,我正在其中发送一个将修改特性的值。如何将更改通知到中央设备?外围设备和中央设备都在 Linux 平台上运行。因为无论为 Linux 设备给出的 Pizza 示例,都只会在中心写入内容时通知中心。假设如果 Bleno 之外的某个程序更改了值,那么我应该在哪里实现updateValueCallback()?是开onSubscribe还是onNotify

0 投票
1 回答
930 浏览

bluetooth - BLE 设备连续发送多个 GATT 通知失败

我正在用 GATT 试验蓝牙 LE,我遇到了一个需要你帮助的问题。

我在客户端(一个 Android 应用程序和一个 iOS 应用程序)和服务器(当前运行 Bleno)之间来回发送数据。

我选择了一个只有一个特性的架构(我认为它是一个套接字),我在上面写了来自客户端的请求。服务器使用通知响应请求。通知只能是 20 字节长,所以我有时不得不将响应分成几个块并将其作为单独的通知发送。

我的问题是,当我将响应分成 10 个或更多块时,客户端永远不会收到它们。(对于 1..9 块,一切都按预期工作)。

我使用 HCIDump ( hcidump -i hci0 -X) 来检查通过 BLE 发送的命令,无论是失败还是成功。

发送通知成功时,从 HCIDump 获取以下输出:

(对于每个通知块)

当发送通知失败时,下一个输出来自 HCIDump:

但是我没有收到“完成的数据包”事件,而是一个简单的device: disconnected.

我还没有弄清楚错误发生在通信的哪一侧。据我所知,这可能是客户端无法“足够快”地接收和确认通知,因为我在服务器端排队了太多请求。

我已经测试在服务器上发送每个通知之间添加 Sleep() 命令。它确实有效,但感觉太不稳定了。对于 10 条通知,我需要 6 毫秒的延迟才能通过,对于 30 条通知,我需要 10 毫秒的延迟。

有谁知道从哪里开始寻找问题?如果需要,我很乐意提供更多信息。

笔记:

  • 我已经测试并发现与我的 Android 和 iOS 设备完全相同的限制。
0 投票
4 回答
4319 浏览

python - 覆盆子 BLE 外设替代 bleno

到目前为止,我已经开发了几个程序来在我的 Raspberry Rpi2 和 RPi3 中使用 bleno 作为 BLE 外围设备。谁能告诉我是否有替代 Bleno 的方法,在 Python 中,甚至在 C 中更好,为我的 Raspberry 开发 BLE 外设服务代码?

0 投票
1 回答
1922 浏览

swift - 为什么 CBPeripheral 标识符和 UUID 不同?

我有知道 UUID 的 iBeacon。如果我从 Android 设备搜索此信标 - 我可以看到确切的 UUID。

但是当我从 iOS 设备搜索这个 iBeacon 时,找不到这个 UUID。我发现标识符与 UUID 不同的外围设备。

为什么它们不同?如何搜索具有已知 UUID 的外围设备?

0 投票
1 回答
436 浏览

ios - 取消订阅 bleno 中断开事件的任何订阅特征

我编写了简单的 iOS 应用程序,通过低功耗蓝牙与树莓派通信,应用程序订阅特性,以不时获取新数据。当我通过专用方法手动断开我的应用程序时,一切正常,bleno 的特征被取消订阅并断开连接。

当应用程序处于前台并且使用任务切换器时,我终止了应用程序,触发了 applicationWillTerminate 事件,然后调用取消订阅方法并且应用程序因终止而断开连接。

问题是当我在应用程序处于后台时从任务切换器终止应用程序时,因为 applicationWillTerminate 事件没有被触发。

因此,我希望我的 bleno“服务器”取消订阅断开连接的设备的任何订阅特征。

因为它是 node.js,我想它可以完成,但我不是 node.js 专家。

请帮忙!谢谢!

0 投票
2 回答
1440 浏览

node.js - 无法在节点 js 上使用 BLENO 为主要服务显示 BLE 特征

我有一个简单的应用程序,如下所示。我在 Rpi3 上的节点 js 上使用 BLENO 创建了一个主要服务并为我的服务添加了特性。

看来我的应用程序启动并运行正常。我使用了两个工具来查看我的 BLE 服务,即 Nordic nRF 应用程序和我在 Android 中编写的一个简单应用程序。

使用这些应用程序,我可以看到我的 BLE 应用程序广告,我也可以连接到它。连接后,我可以看到三个服务,两个是通用服务,一个是我的“未知服务”,它具有匹配的 UUID,正如我在我的 BLE 服务器应用程序中设置的那样。

我遇到的问题是,当我使用服务时,它告诉我没有为我的服务设置特征。

如果有人可以查看下面的代码并检查我的服务中没有出现任何特征的可能原因,我将不胜感激。

我的 node.js 应用程序的输出是

0 投票
1 回答
921 浏览

node.js - 如何使用 bleno 发布多条 BLE 特征数据

我正在尝试学习如何使用bleno实现 BLE 外围设备。我想使用高贵的外围设备发现和阅读。例如,我想知道如何实现一个简单的智能秤,按照GATT 重量测量规范报告体重、BMI 等。

我无法弄清楚是否可以从一个特征中读取多条信息。体重测量GATT 规范使您似乎可以在一个贵族characteristic.read()中同时检索体重、BMI、身高等。

例如,这个简单的 bleno 特性:

如果有人能够在onReadRequest()上面实现/伪代码,我认为这将有助于我的想法。

问题:

  1. 规范C<number>的“字段要求”列中的值是否表示传入的值?如果消费者想要获得“体重 - SI”(),他们会以某种方式构建一个触发? 如果是这样,是如何构建的?offsetonReadRequest()C1characteristic.read()onReadRequest(1,function())characteristic.read()
  2. 我如何构造一个贵族characteristic.read()来获得价值Flags
  3. 我如何构建一个贵族characteristic.read(),它会在一次阅读中返回多个(或所有)属性?例如:给我这个外围设备支持的所有值(重量 - SI、BMI 等)。
  4. 如果我的外围设备支持英制重量、用户 id、bmi 和身高,我如何dataonReadRequest(). 我上面的内容正确吗?
  5. 是如何offset填充的?它是什么意思onReadRequest(offset,callback)

或者,我做这一切都错了吗?我应该对每个值都有一个特征吗?例如:体重的单一特征 - SI,以及 BMI 的另一个特征?我想避免这种情况,宁愿节省往返行程并在一次通话中获得多个值。

0 投票
1 回答
1004 浏览

ios - 在 raspberry-pi 上配置 wifi,将其用作 BLE 外围设备

我必须开发一个 iOS 应用程序,通过蓝牙连接到 raspberry-pi 并配置 RPi 的 wifi 以连接到特定的 ssid。ssid 和密码是通过蓝牙从应用程序提供的。

这可能吗?我想知道是否可以在从应用程序收到的 RPi 上执行命令。

同样,我们需要使用 Android 来完成。我们可以在 pi 上使用 Bleno 和 Bluez 来实现这一点吗?

0 投票
1 回答
2097 浏览

javascript - Android BLE 客户端仅在 onCharacteristicRead 中返回 600 字节的数据

我有一个蓝牙服务器,它使用 bleno 并向客户端返回可用 Wifi 网络的列表。的代码readCharacteristic看起来基本上是这样的:

(我已经尝试过 data = data.slice(offset+1, offset+bleno.mtu);并且喜欢这个data = data.slice(offset+1);

客户端是读取此特性的 Android 应用程序。

用于阅读的 Android 部分如下所示:

MTU 调整为 256 字节。我在阅读列表时反映在服务器上。调用本身工作正常并返回列表,但如果列表包含超过600个字节,则在 Android 上只有 600 个字节可用。我以某种方式确定 JS 服务器发送了所有数据,但由于某种原因,Android 客户端仅接收或缓存 600 个字节,这似乎不正确。

我发现了这篇文章:Android BLE - 外设 | onCharacteristicRead 返回错误值或其一部分(但重复)

还有这个: Android BLE - 如何以块的形式读取大特征值(使用偏移量)?

但两者都没有解决我的问题。我知道在开始下一次读取之前我需要等待一次读取返回,并且在继续读取数据之前我需要等到 MTU 被写入。据我所知,这反映在您在上面看到的来源中。我有点迷失在这里。

任何想法都是高度赞赏的。

非常感谢