【WCH蓝牙系列芯片】-基于CH592开发板—蓝牙 iBeacon 应用
------------------------------------------------------------------------------------------------------------------------------------
iBeacon 是基于蓝牙低功耗蓝牙传输技术一种应用。iBeacon 基站不断向四周发送蓝牙信号,当设备进入设定区域时,就能够收到信号。
iBecaon是苹果基于BLE广播的一个技术规范,由于 iBeacon 只广播、不连接,且功耗极低,有很多应用。比如:
-
室内定位与导航: 在商场、机场或地下车库部署多个 iBeacon 节点,手机接收到不同信标的信号强度(RSSI),就可以通过三角定位算法计算出你的精确位置。
-
消息推送应用: 实体店可以在特定商品货架旁放置 iBeacon。当顾客拿着手机靠近时,商家的 APP 会被唤醒并推送该商品的优惠券或介绍信息,也就是说要实现动态的信息推送。
-
资产追踪与考勤打卡: 将 iBeacon 贴在重要资产上,通过网关持续监听其位置;或者作为固定的打卡点,员工手机靠近即可自动完成考勤。
-
智能家居无感触发: 当你走到家门口,手机检测到门口的 iBeacon,智能家居系统自动为你开门、亮灯。
一、 iBeacon 广播的原理
蓝牙广播数据包的最大长度是 31 字节。苹果公司利用了蓝牙协议中的厂商自定义数据类型(类型码 0xFF),在这 31 个字节中定义了一套自己的标准,从而实现iBeacon 广播。
一个标准的 iBeacon 广播包核心包含以下几个部分:
-
UUID(16字节):临近通用唯一识别码,区分不同企业或大类业务的唯一标识。
-
Major(2字节): 主设备号,通常用来标识特定的片区。
-
Minor(2字节): 次设备号,用来标识具体的单个节点。
-
TX Power(1字节): 发射功率参考值,距离设备 1 米处的参考信号强度,用于手机端校准距离,计算 RSSI。


AD Field Length 表示有用的广播信息长度。 Type 广播类型 Company ID 数据字段以两字节的公司 ID 码开始。SIG 将这些 ID 码发放给公司,并且能知道应用程序如何解析这些字段。如0x004C 就是 apple 公司的 ID。0x0059 是 Nordic Semiconductor 公司的 ID。
IBeacon type 指明了其类型是“proximity beacon”,就是 0x02。
IBeacon Length 长度字段描述了剩下的字段的长度。
IBeacon UUID 表示该设备服务分配的私有任务的 128bit 的基础 UUID。
Major 和 Minor 字段包含了位置信息,
Major 字段表示分组号,指示了建筑物。
Minor 指示的是该分组内的单元编号,指示建筑物里的位置信息。两个参数可以表示哪个分组里的哪个ibeacon。
Tx Power 字段表示 app 通过 ibeacon 发送信号强度估算出的在 1m 的时候的 RSSI 强度。
详细的ibecaon详情可见规范:
二、 CH592实现 iBeacon测试程序
static uint8_t advertData[] = { // 1. 标志位 (Flags) 0x02, GAP_ADTYPE_FLAGS, // 0x01 GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED | GAP_ADTYPE_FLAGS_GENERAL, // 不支持经典蓝牙,普通发现模式 // 2. 厂商自定义数据 (这就是 iBeacon 的本体) 0x1A, // 长度:26字节 GAP_ADTYPE_MANUFACTURER_SPECIFIC, // 0xFF: 厂商自定义数据类型 // --- 下面是 Apple 规定的 iBeacon 格式 --- 0x4C, 0x00, // 苹果公司的 Company ID (0x004C,低字节在前) 0x02, 0x15, // 0x02 表示 iBeacon 类型,0x15(21) 表示后续数据长度 // UUID (16字节) 0xFD, 0xA5, 0x06, 0x93, 0xA4, 0xE2, 0x4F, 0xB1, 0xAF, 0xCF, 0xC6, 0xEB, 0x07, 0x64, 0x78, 0x25, // Major (主ID: 2) 0x00, 0x02, // Minor (次ID: 30513) 0x77, 0x31, // TX Power (-100 dBm,十六进制补码表示为 0x9C) 0x9C, };

在 iBeacon 规范中,通常不需要扫描响应,但为了让手机扫描工具能看到设备名字,程序中设置 scanRspData扫描应答包,
-
0x0B:长度 11 字节。
-
GAP_ADTYPE_LOCAL_NAME_COMPLETE:完整设备名。
-
名字:"WCH592-001"。
在初始化函数中,将广播类型设置GAP_ADTYPE_ADV_SCAN_IND,让 CH592 发送的是可扫描但不可连接的广播。手机可以向它发请求获取 scanRspData获取到蓝牙名字,但不能与它建立蓝牙配对连接。

可以用NRFconnect蓝牙调试软件,查看到整个iBeacon的数据

浙公网安备 33010602011771号