Beacon通常指ibeacon,beacon是信标,是建立在低功耗蓝牙协议基础上的一种广播协议,它也是拥有这个协议的一款低功耗蓝牙从机设备,并在此基 上提供了对IOS的一些附加支持。 附件有对应的数据包,以6626为例子,广播间隔不能小0xA0 (0xA0*0.625ms = 100ms) 1.ibeacon 广播包 static uint8_t sdata[] = { 0x02, 0x01, 0x06, 0x1A, 0xFF, 0x4C, 0x00, 0x02, 0x15, 0xe2, 0xc5, 0x6d, 0xb5, 0xdf, 0xfb, 0x48, 0xd2, 0xb0, 0x60, 0xd0, 0xf5, 0xa7, 0x10, 0x96, 0xe0,//UUID 0x88, 0xAB, //major 0x04, 0x01, //minor 0xc5 }; 0xC5=197,根据补码测得256-197=-59dBm是距离设备1米测得的信号强度值(RSSI- Received Signal Strength Indication,接收到的信号强弱指标)。 假如接收到的信号强度减弱了,那么我们可能在远离。只要知道1米距离的RSSI,以及当前的RSSI(我们可以从接收到的信号中一块获取到这些信息),那么计算出当前的距离是可能的。 IOS已经实现了个这个功能,对于其它平台需要自己手动编码计算 void app_adv_init(void) { ob_event_callback_reg(app_adv_event_cb); adv_param.own_addr_type = OB_ADV_ADDR_TYPE_RANDOM; adv_param.prim_phy = OB_ADV_PHY_1M; adv_param.secd_phy = OB_ADV_PHY_1M; adv_param.tx_pwr = 0; adv_param.filter_policy = OB_ADV_FILTER_NONE; adv_param.prim_ch_map = OB_ADV_CH_ALL; adv_param.prim_intv_min = 0xB0; adv_param.prim_intv_max = 0xB0; adv_param.local_addr = local_addr; adv_param.peer_addr = &peer_addr; adv_param.adv_properties = OB_ADV_PROP_LEGACY_SCAN_IND; ob_gap_adv_start(0, &adv_param, &adv_data,NULL); } OB_ADV_PROP_LEGACY_SCAN_IND表示为可以被扫描到的不可连接广播 抓包截图如下 附件压缩包里面有对应的文档和参考代码 |
