6.MQTT对接BLE广播体征数据教程
1.服务器信息
1.1 服务器地址:mqtt.he-info.cn 1.2 服务器端口:1883 1.3 类型:tcp 1.4 测试账号:iot_device_smartmattres 1.5 测试密码:brj5vYjviaMqzo45R9m3EnZOkSq3Abb0eoiI10ythoLcid7S6P19fr22AaHaM3ky
2.数据信息
2.1 发布主题:bgup 2.2 发布消息类型为J001
3.ble4.2广播帧搜索算法
uint16_t ble_advdata_search(uint8_t* p_encoded_data,uint16_t data_len,uint16_t* p_offset,uint8_t ad_type)
{
uint16_t i = 0;
while (((i < *p_offset) || (p_encoded_data[i + 1] != ad_type)) && (i < data_len))
{
i += (p_encoded_data[i] + 1);
}
if (i >= data_len)
{
return 0;
}
else
{
uint16_t offset = i + 2;
uint16_t len = p_encoded_data[i] - 1;
if ((offset + len) > data_len)
{
return 0;
}
*p_offset = offset;
return len;
}
}
4.数据处理
exp1:
{
"t": 1,
"u": "AABB11223344"
"m": "348518b1a3da",
"r": -45,
"d": "CAlBSVRILVYyFf/t/wNqNIUYsaPYAAAAAeV9YAECAA=="
}
t:业务类型,必须为1 u:网关设备自己的mac地址 m:当前广播包是哪个设备地址发出的 r:信号强度 d:经过base64编码后的标准ble4.2广播帧 ……………………………………………………………………………………………… 开始解算数据: 1.获取t字段,如果不等于1则丢弃消息 2.获取d字段 d=[CAlBSVRILVYyFf/t/wNqNIUYsaPYAAAAAeV9YAECAA==] 3.base64解码后的二进制数据 array=[0X08,0X09,0X41,0X49,0X54,0X48,0X2D,0X56,0X32,0X15,0XFF,0XED,0XFF,0X03,0X6A,0X34,0X85,0X18,0XB1,0XA3,0XD8,0X00,0X00,0X00,0X01,0XE5,0X7D,0X60,0X01,0X02,0X00] 4.由于体征传感器使用了厂商自定义数据特征码(AD_TYPE=0XFF)进行携带数据,所以需要使用ble_advdata_search算法在array数组中查找ad_type=0XFF的数据并提取出来 5.提取数据
uint16_t offset=0;
uint16_t ulen = ble_advdata_search(array, array数组的长度, &offset, 0XFF);
6.ulen<=0代表搜索失败,当前广播包不存在厂商自定义数据,丢弃即可,本例中ulen=0x14 7.offset代表当前提取到的数据在array的偏移,本例中offset=0x0b 8.由于厂商自定义数据在最开始2字节固定为UUID,体征传感器使用UUID=0xedff作为其服务UUID
uint16_t cuuid=array[offset]*256+array[offset+1]
9.通过计算得到cuuid,如果cuuid!=0xedff,丢弃数据包即可 10.得到体征传感数据,其开始位置为array+offset+2,长度为ulen-2 11.得到体征传感器数据为:[0X03,0X6A,0X34,0X85,0X18,0XB1,0XA3,0XD8,0X00,0X00,0X00,0X01,0XE5,0X7D,0X60,0X01,0X02,0X00] 12.从上一步得到的数据请使用本系列教程中<5.体征传感器BLE广播协议格式>文档进行下一步解析即可。