问题标签 [btle]
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.
android - Android 7 是否需要更长的 BLE 断开确认时间?
在将我的一些设备更新到 Android 7 后,我注意到一个奇怪的 BLE 行为。基本上,Android 7 似乎需要更长的时间来关闭连接,导致之前连接到 Android 的 BLE 设备在重新连接时失败。更具体地说,Android 正在返回在 onServicesDiscovered() 回调中发现的服务的空列表。看来,在调用 close() 后,我需要让 BLE 设备开机约 2 秒钟,以便正确断开它与 Android 设备的连接。在以前的 Android 版本中,我们几乎可以立即关闭 BLE 设备,它会重新连接到 Android,而不会出现任何问题。有谁知道 Android 7 BLE 堆栈发生了什么变化导致了这种情况?让 BLE 设备等待额外时间只是为了彻底断开连接似乎是错误的。
intel-edison - 如何从 yocto linux 访问 BTLE 属性表
我正在将 BTLE 外围设备与英特尔爱迪生连接起来。我正在使用 puTTY 访问 linux 环境。到目前为止,我已经实现了连接,但是当我列出属性时,它为我提供了具有句柄值的服务和字符。但我没有任何表格可以将句柄与相应的服务相匹配。我确实拥有设备的完整 BT 协议,因此我知道每个服务的 UUID,但我不知道哪个句柄代表哪个服务,因此我无法配置寄存器并读取所需的数据。如何获取属性表?
我在控制台上得到的内容如下:
我想要的是这样的sensorTag属性表: http ://processors.wiki.ti.com/images/a/a8/BLE_SensorTag_GATT_Server.pdf
ios - 关闭/打开 iOS 蓝牙后重新连接到绑定的外围设备
我对 iOS 并不陌生,但总体上对 CoreBluetooth 和 BTLE 比较陌生。使用运行 iOS 10 或更高版本(当前为 11.2)的设备,我发现如果打开和关闭蓝牙,则无法再访问绑定的外围设备。
稍微调试了一下,好像一旦bonded,两端保存的安全信息中就包含了每个peer的地址。iOS 端可以很好地记住外围设备,但是在关闭并再次打开蓝牙后,iOS 设备的地址会自行更改,因此对于外围设备,其当前注册的绑定对等点(地址)不再存在。为此,在清除外设侧的bonding信息之前,两者之间的连接是不可能的(Peripheral device一旦bonded就执行直接通告,只有其bonded peer才能看到)。
我想知道 A)在关闭/打开蓝牙后,无论如何要在 iOS 端保留相同的地址 B)如果无法保留/调用地址,处理这种情况的常用方法是什么?
我已经搜索了核心蓝牙编程参考,并尽我所能搜索了这个问题,但无济于事。
与 iOS 中心绑定时通过串行连接进行外围输出:
BTA=001EC0461948 名称=The_Lock1948 已连接= 7DD350CC912D ,1 已绑定=7DD350CC912D,1 服务器服务=00000001 功能=20000000 TxPower=4
iOS 蓝牙关闭/打开,然后与完全相同的 iOS 设备重新连接:
BTA=001EC0461948 名称=The_Lock1948 已连接= 5DDC08C0B0A3 ,1 已绑定=7DD350CC912D,1 服务器服务=00000001 功能=24000000 TxPower=4
如您所见,“已连接”地址已更改,而外围设备仍绑定到先前的地址。两者之间的唯一区别是 BT 设置的切换。当我说 BT 电源关闭/打开时,我的意思是真正关闭和打开电源,而不是 iOS 11+ 中的“允许新连接”设置。
顺便说一句,补充一点,我已经看到其他 2 个 BTLE 外围设备(键盘)在 iOS BT 电源切换后无法重新连接,直到它们以某种方式重置。
bluetooth - Tshark 不会使用 nRF 嗅探器捕获 BTLE 数据包
我在使用 tshark 捕获 BTLE 广告数据包时遇到问题。
该系统与 Wireshark 配合得非常好。但是,当我尝试从命令行运行 tshark 时,它会立即退出并显示“捕获了 0 个数据包”。
任何想法为什么它可能在 Wireshark 中工作但在 Tshark 中不起作用?
设置: 我使用 nRF51 DK 作为嗅探器。正如我提到的,这在 Wireshark(2.6.1 版)中运行良好。我有一个外围设备正在发送 Wireshark 很容易检测到的广告数据包(即我知道硬件工作正常并且正在发送广告数据包)。
使用的命令: 在命令行上导航到我的 Wireshark 文件夹后,我键入:
我的 nRF 嗅探器是接口 6。一切都在 Windows 10 机器上运行。
更多信息: 如果我尝试捕获 wifi,Tshark 工作正常
其中接口 1 是 wifi 接口。
谢谢!
wireshark - 没有带有 ubertooth-btle 的 ATT 数据包
我试图通过在终端中输入来嗅探我的手机和智能灯泡之间的蓝牙连接:$ubertooth-btle -f -t @MAC -c smartbulb.pcap.
问题是没有 ATT 数据包。当我用手机改变灯泡的颜色时,我只会得到ADV_IND
和数据包。SCAN_REQ
版本信息 Ubuntu 18.04
Ubertooth 工具版本(ubertooth-rx -V):libubertooth 1.0(2017-03-R2)、libbtbb 1.0(2017-03-R2)
Ubertooth 固件版本(ubertooth-util -v):固件版本:2017-03-R2 (API:1.02)
bluetooth - 无法在 Ionic 3 中保持 BTLE 在后台运行
要么我做错了,要么最新版本的 iOS 和 Android 不再允许此功能。
我将(https://github.com/katzer/cordova-plugin-background-mode.git)与 Ionic 3 的本机 BLE 插件结合使用。
我需要在后台维护(或查找并连接)配对蓝牙设备,但似乎 iOS 在一段时间后(如 10-15 分钟)会严重影响后台 BLE 连接。我知道 iOS 会在 10 分钟后停止后台活动,但假设 katzer 插件允许 BTLE 进程在后台继续。
这是我试图保持 BLE 连接有效的方法。我需要能够连接或检测与 BLE 的断开连接,以便向我的服务器报告设备的最后已知地理位置。
哪里bleLoop()
是扫描新设备连接的功能。
是否有人能够使用 ionic 3 让 BLE 连接到新设备或在后台调用断开回调?
c# - C# 从 BT LE 设备转换字节数组
我正在使用 Nordic Thingy:52 在 UWP 应用程序中记录环境数据,并按照 Windows 通用示例应用程序中的示例连接到 BT LE 设备。
到目前为止,我已经能够连接到设备以检索服务和特征信息,但是当从传感器接收实际数据时,我无法将字节数组转换为可用数据。
检查字节数组的内容时,您可以看到已收到某些内容,但在知道如何将此数组转换为有用数据时,我感到很困惑。
python - 不知道为什么我没有收到通知
我从未收到来自 6E40000 6 -B5A3-F393-E0A9-E50E24DCCA9E 的通知。我必须通过写入0x01
特性 6E40000 9 -B5A3-F393-E0A9-E50E24DCCA9E 来启用传感器。我正在使用Bluepy Python Library。
使用 LightBlue iOS 应用程序验证的服务和特征。日志:
结果:
bluetooth - 如何检查 BLE 广告是否已启用(HCI)
BLE 广告可以使用HCI_LE_Set_Advertising_Enable
[1] 命令启用,0x00
如果HCI_LE_Set_Advertising_Enable 命令成功则返回状态,如果命令失败则返回状态码0x01 to 0xFF
[2]。
如果广告已启用(例如,第二次调用此命令,Advertising_Enable
参数设置为0x01
),则此或HCI_LE_Set_Advertising_Data
命令将返回 status 0x0C (Command Disallowed)
。
这有(至少)两个问题:
在已经启用的情况下启用广告可能会导致随机地址发生变化。禁用已禁用的广告无效。[1]
- BlueZ 堆栈在大多数 HCI 库函数的末尾包含以下代码:
这会导致例如
hci_le_set_advertise_enable
函数返回通用失败代码-1
并设置errno
为EIO
,这与任何其他 BlueZ 错误、HCI 错误或实际 IO 错误(HCI 层使用 UART)无法区分。
如何检查 LE 广告是否已经启用以能够执行安全/严格的错误处理?我在 BT Core Specs 中找不到任何获取广告状态的命令。我不能依赖类似的东西
谢谢你。
参考:
- [1] BT CS 5.2 [第 4 卷] E 部分,第 7.8.9 节
- [2] BT CS 5.2 [Vol 1] F 部分,控制器错误代码
bluetooth - Raspberry PI BTLE 可以发现 Fitbit 和 Scale 设备,但无法配对
我一直在尝试将FitBit Inspire HR和RENPHO ES-26R 体重秤与我的 Raspberry Pi(3B+、4B 和零)配对,结果都相同。运行bluetoothctl (v5.50),可以看到设备(ED:67是规模,01:C5是 Fitbit):
规模
当我尝试配对或连接秤时,bluetoothctl、hcidump 和 gatttool 的输出如下:
蓝牙控制
hcidump
加特工具
根据我看到的几个线程,我尝试使用公共和随机的地址类型,没有任何变化。hcidump 似乎对 Scale 没有太多影响。
编辑
进一步检查秤,它似乎不是“可连接的”。鉴于没有明确的服务或特征,我开始查看广告中的“制造数据” 。我可以看到,随着尺度上的测量值发生变化,部分数据也在发生变化:
现在我只需要确认更新的部分实际上是重量数据——一旦我弄清楚汤里有什么(例如,计量单位、重量等)。
FITBIT
对于 Fitbit,有更多的输出,但配对仍然失败:
蓝牙控制
hcidump
加特工具
与 Scale 不同,我可以使用 gatttool 连接到 Fitbit 并检索特征:
附加信息
蓝牙服务状态
dmesg | grep 蓝牙
联系
WiFi 和蓝牙在所有 PI 上都处于活动状态,我通过 SSH 连接。
结束
我一直在浏览来自多个论坛的许多线程,并进行了各种推荐的配置更改(保持 PI 3B+ 干净作为控件),但没有成功。我非常感谢任何关于下一步去哪里的建议或指示。一定是我在某处遗漏了一些东西——很可能是一些简单的东西让你们中的大多数人像以前从未笑过一样大笑:)
感谢您花时间阅读这个冗长的问题。