在广播 iBeacon 时广播设备名称 - Raspberry Pi OS
Posted
技术标签:
【中文标题】在广播 iBeacon 时广播设备名称 - Raspberry Pi OS【英文标题】:Broadcast device name while advertising iBeacon - Raspberry Pi OS 【发布时间】:2022-01-02 06:01:54 【问题描述】:我有一个基于 Debian Stretch 的 Raspberry Py OS,它使用我的 UUID 和 Major/Minor 广播 iBeacon。通过我们团队构建的一个APP,我能够通过UUID识别它并读取它的Major/Minor。
现在,我将不得不通过 Chrome 浏览器阅读相同的 iBeacon。但是,我无法使用 iBeacon 广播一个有意义的名称来帮助用户找到设备, 它只向我显示“未知或不受支持的设备”
据我从 iBeacon 和 AltBeacon 了解到,除了 UUID 和 Major/Minor 之外,不可能发送额外的数据。它是否正确?是否可以在信标帧内宣传此信息?
用于宣传信标的命令。
sudo hciconfig hci0 leadv 3
sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 06 1A FF 4C 00 02 15 <<UUID>> <<Major/Minor>> C8 00
查阅蓝牙系统规范我尝试更改了几个name或ID功能,但均无效,例如:
sudo hcitool -i hci0 cmd 0x03 0x0013 <<Local Name>>
sudo hcitool -i hci0 cmd 0x03 0x0014
我想询问社区是否可以在使用信标时宣传这个名称,或者我是否应该开始使用 GATT 服务器来执行它。
提前谢谢大家。
【问题讨论】:
【参考方案1】:是的,Linux 可以同时发布本地名称和 iBeacon 制造商广告。您设置它的方式是正确的,所以不清楚为什么您在 Chrome 网络浏览器中看不到它。
要知道的一点是,本地名称不会与您在问题中显示的 iBeacon 数据一起在同一个数据包中公布。 (在主广告包中根本没有空间。)相反,本地名称被放入所谓的扫描响应包中。这是一个额外的数据包,蓝牙 LE 外围设备将发送出去,以响应来自蓝牙 LE 中心(例如您的 Chrome 设备)的活动扫描请求数据包。可能是 Chrome 没有发出扫描请求包,所以它不会读取本地名称。
您可以通过使用其他设备(例如使用 Nordic nRF Connect 蓝牙测试应用的 android 或 ios 手机)来确认这一点,以查看他们是否在扫描期间读取了本地名称。
如果您发现这些其他设备确实读取了本地名称,那么您下一步将尝试将 Chrome 配置为进行主动扫描,以便它请求扫描响应数据包。目前尚不清楚如何或是否可能。
【讨论】:
以上是关于在广播 iBeacon 时广播设备名称 - Raspberry Pi OS的主要内容,如果未能解决你的问题,请参考以下文章
iOS 中的 iBeacons - 没有来自实际 BLE 设备的回调,但是当另一个 iOS 设备用作广播器时会调用 didRangeBeacons