体征传感器-接口文档


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广播协议格式>文档进行下一步解析即可。


页面列表

ITEM_HTML