• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

MicroPython Beacon Library: A MicroPython library providing APIs to interact wit ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

MicroPython Beacon Library

开源软件地址:

https://gitee.com/walkline/micropython-beacon-library

开源软件介绍:

MicroPython Beacon Library

项目介绍

A MicroPython library providing APIs to interact with Beacons, for ESP32

相关知识

以个人理解介绍一些和Beacon相关的知识,尽量不误导

蓝牙设备的角色定义

  • Broadcaster Role (Advertiser):蓝牙设备想要被其它设备发现并使用,第一步就是要作为Advertiser(广播员角色,广告商,基站等等)进行数据广播,将自己的名字、MAC 地址、包含的服务和外观等关键信息发布出去

  • Observer Role (Scanner):有Advertiser发送广播就要有Scanner进行观察扫描,得到对方的关键信息,比如:MAC 地址,RSSI 信号强度,可连接性,和广播信息等

  • Central Role (GATT Client):Scanner扫描并得到关键信息后,可以选择和Advertiser进行连接,此时Scanner就转变为中心设备(Central

  • Peripheral Role (GATT Server):当Central选择进行连接后,Advertiser也就转变为外围设备(Peripheral),并终止数据广播

我们的Beacon设备为了做到不间断的数据广播,所以必须不具备可连接性,也就是只作为Advertiser角色使用

参考资料:

广播数据格式分析

Advertiser广播的数据,简单说就是若干组数据的组合,每组数据包含:

  • 数据长度(Length)
  • 数据类型(AD_TYPE
  • 数据内容(Data)

每条广播内容的长度限制为 37 字节,去掉 6 字节的设备 MAC 地址,我们实际可以使用的最大长度为 31 字节

ESP32 BLE 项目的HID 设备广播数据为例,它广播的数据为:

bytearray(b'\x02\x01\x06\x03\x03\x0f\x18\x03\x03\x0a\x18\x03\x03\x12\x18\x03\x19\xc1\x03\x06\xff\x06\x00\x03\x00\x80')# 拆分后得到 6 组数据b'\x02\x01\x06'b'\x03\x03\x0f\x18'b'\x03\x03\x0a\x18'b'\x03\x03\x12\x18'b'\x03\x19\xc1\x03'b'\x06\xff\x06\x00\x03\x00\x80'

根据数据格式分析后,得到如下内容:

LengthAD_TYPEData
1x02x01 (FLAGS)x06
2x03x03 (16BIT_SERVICE_UUID)x0fx18
3x03x03 (16BIT_SERVICE_UUID)x0ax18
4x03x03 (16BIT_SERVICE_UUID)x12x18
5x03x19 (APPEARANCE)xc1x03
6x06xff (MANUFACTURER_SPECIFIC_DATA)x06x00x03x00x80

逐一分析一下 4 个不同的AD_TYPE

  • x01:数据x06转换二进制为0b00000110,根据下表即可得到x06代表设备模式为:LE General Disconverable ModeBR/EDR Not Supported

    位数数值描述
    10LE Limited Discoverable Mode
    21LE General Disconverable Mode
    31BR/EDR Not Supported
    40LE and BR/ERD Capable (Controller)
    50LE and BR/ERD Capable (Host)
    60Reserved
    70Reserved
    80Reserved
  • x03:数据x0fx18大端模式表示的Service UUID,即0x180f,从 GATT Services | Bluetooth® Technology Website 页面查询可知0x180fBattery Service,其余两个分别为Device InformationHuman Interface Device

  • x19:数据xc1x03也是大端模式表示,转换十进制为961查询可知设备的AppearanceKeyboard,即图中左侧的图标

  • xff:数据x06x00x03x00x80可拆分为:

    • x06x00大端模式表示的公司标识符,从 Company Identifiers | Bluetooth® Technology Website 页面查询可知0x0006Microsoft
    • x03:代表微软的Swift Pair Beacon技术
    • x00:代表应用场景为Pairing over Bluetooth LE only
    • x80:代表已保留的发射功率值

    xff代表的AD_TYPE根据不同的制造商设置不同的参数数据

最终总结:

bytearray(b'\x02\x01\x06\x03\x03\x0f\x18\x03\x03\x0a\x18\x03\x03\x12\x18\x03\x19\xc1\x03\x06\xff\x06\x00\x03\x00\x80')

Scanner扫描到这条广播内容后分析得出,这个即将成为Peripheral的设备支持通用发现模式不支持 BR/EDR,它的外观图标为键盘,包含了Battery ServiceDevice InformationHuman Interface Device这 3 个服务(这是作为 HID 设备的必要服务),并且它还支持微软Swift Pair Beacon技术

需要广播的内容太多,31 字节不够用怎么办?

首先把我们必须要广播的数据准备好,再准备一个Scan Response数据然后进行广播,在Scanner扫描的时候同时会读取Scan Response的数据,整合两部分数据再进行内容分析,我们以此达到广播超过 31 字节内容的目的

Scan Response实际不会进行广播,它只是在响应Scanner扫描的时候才会进行传递

参考资料:

如何计算 tx_power

谷歌官方称为tx_power,苹果官方称为Measured Power,是根据设备自身性能统计得到的发射功率平均值,根据设备到设备之间的功率值计算相对距离,根据文档介绍,当相对距离大于1 米时得到的数值并不可靠,所以只需给出 4 种状态(Proximity State)即可:

状态简单描述
Immediate非常接近,甚至是叠放状态
Near1 到 3 米之内
Far仅可以接收到广播,但不稳定
Unknown无法确定距离

苹果官方给出的确定设备发射功率的方法如下:

  • 至少使用iPhone 5s
  • Apple Store下载Air Locate
  • 去掉手机保护壳,垂直方向握住手机并保证上半部分未被遮挡
  • Beacon 设备开始广播后,站在 1 米 距离,重复采样RSSI 数值至少 10 秒
  • 采样结果降序排序,去掉 10% 最高值和 20% 最低值
  • 将剩余采样结果求平均值,得到发射功率

参考资料:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap