问题标签 [bluetooth-peripheral]

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 投票
2 回答
540 浏览

linux - QT 低能量控制器外围模式崩溃并出现错误“资源不可用”

更新:

Qt 版本:5.11

平台:树莓派 3

操作系统 : Rasbpian

我正在将我的 linux Qt BLE 应用程序连接到 IOS 中央设备。它在大多数情况下都可以正常工作,但有时会因以下错误而崩溃

qt.bluetooth.bluez: void QBluetoothSocketPrivate::_q_readNotify() 29 错误:-1“资源暂时不可用”

这是代码和底层场景。

我有一个运行 Qt 5.11 的树莓派,我创建了一个 BLE 低功耗外围设备,它连接到 IOS 应用程序并发送和接收数据。

声明:

服务初始化:`

0 投票
1 回答
260 浏览

python-3.x - 如何将 nRF Connect(适用于 Android)操作模拟到 Pygatt 脚本?

我正在使用 nRF Connect for Android 来测试 BLE 外围设备。外围设备是 BSX Insight 残余肌肉氧监测仪,其软件应用程序不再起作用或不受制造商支持。因此,我使用我的设备 (BSX) 的唯一选择是编写我自己的控制软件。我编写了一个 Python 3.7 脚本,在我的 64 位 Win 10 笔记本电脑上的 tkinter 例程中运行。另外,我正在使用 Pygatt 库和 BLED112 BT 加密狗。

我可以连接到外围设备,读取和写入特性值,但我确信从 nRF Connect 中使用的进程到我的脚本的“转换”是不完整且低效的。所以我想确认的第一件事是使用了来自 Pygatt 的正确的相应功能。一旦我使用了 Pygatt 的正确函数,我就可以比较我想要捕获和存储的两个数据(特征值)流的各自输出。

nRF Connect 中的基本流程:
1. 扫描
2. 选择/连接 BSX Insight
3. 公开感兴趣的服务和特征
4. 启用 CCCD
5. 写入“开始数据”值 (04-02)

这些是来自 nRF Connect 日志文件的过程命令结果。从第四个开始:
4.
D 09:04:54.491 gatt.setCharacteristicNotification(00002a37-0000-1000-8000-00805f9b34fb, true) 11
D 09:04:54.496 gatt.setCharacteristicNotification(2e4ee00b-d9f0-54943334b-d1737ef真)20x
D 09:04:54.499 gatt.setCharacteristicNotification(2e4ee00d-d9f0-5490-ff4b-d17374c433ef,真)25x
D 09:04:54.516 gatt.setCharacteristicNotification(2e4ee00e-d9f0-5490-ffef4b-d1732x Dc43
) 09:04:54.519 gatt.setCharacteristicNotification(00002a63-0000-1000-8000-00805f9b34fb,真)36
D 09:04:54.523 gatt.setCharacteristicNotification(00002a53-0000-1000-8000-00805f9b3b4f)

以上是使用 nRF 命令“启用 CCCD”造成的。基本上每个可以启用的特性都被启用了,这很好。'x' 是我需要启用的三个。其他都是额外的。请注意,我已在行尾注释了这些 UUID 的相应句柄。

  1. V 09:05:39.211 将命令写入特性 2e4ee00a-d9f0-5490-ff4b-d17374c433ef
    D 09:05:39.211 gatt.writeCharacteristic(2e4ee00a-d9f0-5490-ff4b-d17374c433ef, value=0x0402)
    I 09:05:3 数据。写入 2e4ee00a-d9f0-5490-ff4b-d17374c433ef,值:(0x) 04-02
    A 09:05:39.214 "(0x) 04-02" 已发送

第五是我将 0402 写入上面的 UUID 的地方。此操作从以下位置发送数据/值流:

  • 2e4ee00d-d9f0-5490-ff4b-d17374c433ef,带有描述符句柄 26
  • 2e4ee00e-d9f0-5490-ff4b-d17374c433ef,描述符句柄 33

一旦我在 nRF Connect 中完成了上述基本步骤,两个特征值流就会激活,我可以立即在 Garmin Edge 810 主机中看到转换后的值。

因此尝试在我的 tkinter 片段中复制相同的过程:

问题:在我的 Atom 编辑器的输出窗口中,两个数据流按预期启动。例如:

I 09:05:39.983 从 2e4ee00d-d9f0-5490-ff4b-d17374c433ef 收到通知,值:(0x) 00- 00-00-00-C0-FF-00-00-C0-FF-84-65-B4- 3B-9E-AB-83-3C-FF-03

和...

I 09:05:39.984 从 2e4ee00e-d9f0-5490-ff4b-d17374c433ef 收到通知,值:(0x) 1C-00-00-FF-03-FF-0F-63-00-00-00-00-00- 00-16-32-00-00-00-00

在“流”停止之前,我会看到大约七到十行数据。会有大约 20 秒的间隔,然后是大量的值转储。这与 nRF Connect 的输出不同,后者是即时且连续的。

我有来自 nRF Connect 和 Python 的日志……但我不确定哪个日志条目指向停止的原因。这个问题可能与外围首选连接参数有关吗?读取的 nRF Connect 属性显示:

  • ConnectionInterval = 50ms~100ms
  • 从属延迟 = 1
  • 超级超时监视器 = 200

Python 日志条目显示了这一点:

INFO:pygatt.backends.bgapi.bgapi:连接状态:句柄=0x0,标志=5,地址=0xb'760b81afef0c',连接间隔=75.000000ms,超时=1000,延迟=0间隔,绑定=0xff

有人想吗?(真的,提前谢谢。)

0 投票
0 回答
349 浏览

android - Android:找不到我的 BLE 外围设备的自定义服务的 UUID

我的应用程序之一是作为蓝牙外围设备工作,我在其中添加了一个自定义服务和 3 个特征。我的客户端应用程序连接到外围设备后发现它的服务,但我的服务的 UUID 在不同的客户端中是不同的。我的一台三星设备完美地返回了我在宣传我的服务时添加的 UUID,而另一台设备显示了不同的 UUID。现在,如果服务 UUID 不匹配,我正在检查服务内部的特征,但令人惊讶的是,所有特征都在该服务内部。但是服务 UUID 不是我在服务中添加的。

这是我发现服务的代码

添加具有三个特征的自定义服务的示例代码

有什么方法可以识别我的服务和内部特征,可用于服务器和客户端之间的通信。

0 投票
1 回答
946 浏览

c++ - 连接到经典蓝牙设备时 Qt 蓝牙卡住

我目前正在尝试使用经典 BT 从外围设备读取蓝牙信号来控制我的 Qt 应用程序。稍后我可能会使用一个小的 BT 操纵杆,但现在我正在尝试连接到配对耳机上的按钮。

我以前有

  1. ..通过 扫描远程设备QBluetoothDeviceDiscoveryAgent,它返回了QBluetoothDeviceInfo我的耳机。
  2. ...使用 扫描该设备上的服务,QBluetoothServiceDiscoveryAgent返回QBluetoothServiceInfoQBluetoothUuid::AV_RemoteControl
  3. ...添加了一个应该连接到设备的套接字,如下所示:

    此时套接字状态变为ConnectingState,没有通过错误,也没有触发我的readyRead()功能。

我是蓝牙新手,可能会误解连接的确切工作原理,因此将不胜感激任何帮助。

PS.:我正在使用 Linux Ubuntu 18.04 并且应用程序日志还显示:

qt.bluetooth.bluez:缺少 CAP_NET_ADMIN 权限。无法确定找到的地址是随机地址还是公共地址。

0 投票
0 回答
173 浏览

android - BLE response back to Peripheral Connection mobile to mobile

Hey I am working on application in which I am using BLE to transfer User ID from mobile to mobile by using my application when they interact with each other , which means in one mobile my app will work as Peripheral Mode and in other it will work as a Central mode. So what I have done is I open my first app as a Peripheral Mode which starts advertising and other as Central which starts a service in background to scan device and make connection to read data. This functionality works fine I send message(User ID) from Peripheral to central it pops on central device. Now I want to send User ID of Central Mode device to Peripheral.

As per my understanding, In BLE we cannot send data from central to peripheral we can only scan from central. But I heard that we can write characteristics from Peripheral to get some response in back So is it possible that i can send my Used ID from Central to Peripheral through response or any other alternate way is possible? I want to do thisBLE Handshake

I am just new in BLE so I have no idea how to perform this functionality. I am sharing my code that what I am doing below :

SO Central Mode or You say scanning which I start in background service is:

GATT Service

And my Peripheral device which send Characteristic after successful connection is:

So what I am doing is I have a EditText in peripheral in which i enter the text like User ID and I am returning it back from service as response after reversing it and show notification in Central Mode.

But I am not able to get the response Can you guys help me please ?

If you guys know my scenario you can also assist me with new way through BLE by which I can exchange data between 2 android phones.

Thanks,

0 投票
1 回答
212 浏览

swift - 当应用程序在后台时扫描外围设备(例如屏幕锁定时)

我有一个在后台运行的应用程序。我使用 CBPeripheralManager 来做广告和 CBCentralManager 来扫描。我使用两个 ıos(IOS 11.3 和 IOS 13.4.1)设备。第一个是广告前景和背景。第二个是扫描前景和背景。我可以扫描;

后台应用程序,手机已解锁 - 完美运行

后台应用程序,手机被锁定,屏幕被点亮 - 完美运行

后台应用程序,手机锁定,屏幕关闭 - 不起作用!

/* 我检查了在 Android 设备中运行后台显示的广告应用 */

问题是什么。请告诉我。如何解决这个问题?我想在后台扫描两者。我的代码如下;

这是我的 info.plist;在此处输入图像描述

0 投票
0 回答
31 浏览

swift - 两个 ios 设备之间的后台扫描和广告

我有一个在后台运行的应用程序。我使用 CBPeripheralManager 来做广告和 CBCentralManager 来扫描。我使用两个 ıos(IOS 11.3 和 IOS 13.4.1)设备。第一个是广告前景和背景。第二个是扫描前景和背景。我可以扫描;

后台应用程序,手机已解锁 - 完美运行

后台应用程序,手机被锁定,屏幕被点亮 - 完美运行

后台应用程序,手机锁定,屏幕关闭 - 不起作用!

/* 我检查了在 Android 设备中运行后台显示的广告应用 */

问题是什么。请告诉我。如何解决这个问题?我想在后台扫描两者。我的代码如下;

这是我的 info.plist;在此处输入图像描述

0 投票
1 回答
47 浏览

ios - 什么可以用作特定制造商的一组蓝牙模块的唯一标识符?

我希望我的问题类型不违反问题类型规则!

我正在编写一个蓝牙 iOS 应用程序来控制外围设备(蓝牙扬声器),我希望该应用程序只识别一组独特的蓝牙模块(品牌)。

由于我首先想确定扬声器是否是品牌的一部分,因此我不能依赖某些类型的服务,因为任何其他扬声器也可以拥有它们。我也不能依赖标识符名称,因为它非常肤浅且容易更改。

我最接近的是 UUID 32 十六进制数字的前 16 位代码,即组织唯一标识符 (OUI)。例如,在下图中,D42A8779-F905-BA72-80AAD42A8779-F905-BA72-80AA-3186A18D4453用作品牌外围标识符是否是一种好习惯?

在此处输入图像描述

如果不是,我还能依靠什么?

0 投票
0 回答
35 浏览

android - 更改设备名称后多次启动外设广告

我正在开发一个应用程序,我想在后台接收到服务器的响应并开始广告后设置我的蓝牙适配器设备名称。所以流程就像

我第一次在我的 onStartCommand 中调用 startAsPeripheral 函数,它可以完美地开始广告,但是当我从服务器接收到数据时,我需要停止正在运行的广告,设置我的蓝牙适配器新名称,然后再次开始广告。

所以问题是每当我使用其他应用程序(如 nRF)扫描我的广告数据包时,甚至只是在从移动设置打开我的蓝牙扫描页面后,它会多次显示我的设备,并使用我已经设置的不同名称。

所以我的 StartAsPeripheral 函数是

和 StartAdvertising 是

所以我只想一次显示一个广告,所以扫描只会收到广告。我正在使用 BLE。所以现在你有了代码,你们可以让我知道我做错了什么?

0 投票
2 回答
138 浏览

android - 在 Android Thing 设备中配置和测试以太网、Wi-Fi 和蓝牙外设

我使用链接https://developer.android.com/things/sdk/pio/gpio中提供的信息开发了一个 Android 应用程序来测试 Android Thing 中的外围设备。该链接支持配置和测试 GPIO、SPI、UART、I2C 和 PWM,同样我想测试以太网、Wifi 和蓝牙。


是否有任何选项可以在 Android 设备中配置和测试以太网、Wifi 和蓝牙外围设备。