如何用蓝牙基站扫描蓝牙设备

金桔蓝牙基站默认是常开蓝牙扫描,通过金桔ACserver可以关闭基站的蓝牙扫描功能,金桔蓝牙基站主要对四种设备进行扫描传输:beacon设备(锚点设备),金桔定位设备(定位卡,定位手环,资产定位等),一般蓝牙广播设备和中继。用户对接第三方蓝牙设备属于一般蓝牙广播设备,注意,尽量对某一类数据进行扫描透传数据,如果开多种数据透传,那么降低基站带的节点数量,以下对金桔ACserver配置基站参数的说明:

广播透传功能

基站透传一般蓝牙广播数据开启,比如第三方蓝牙设备。如果用户需要透传第三方设备数据,需要打开此功能,此功能需要配合其他几个参数来用,以下将分参数说明如何接入第三方的蓝牙设备。

透传厂商数据

厂商数据是蓝牙标准里0xFF段数据,蓝牙标准里规定厂商自定义的数据放在此数据段里,所以大多数的标准蓝牙设备只要厂商部分数据即可(跟设备厂家相关)。例如,我们在手机上找个蓝牙设备:

如何用蓝牙基站扫描蓝牙设备
看起来是一个苹果的蓝牙设备,我们看下广播格式:
如何用蓝牙基站扫描蓝牙设备

我们不用关系其他的段数据,发现这个数据有0xFF段数据,我们打开基站的广播 透传功能,并暂时关闭过滤(参见地址过滤),我们这样设置金桔蓝牙基站:

如何用蓝牙基站扫描蓝牙设备

我们看下透传的数据,因为没有开过滤,所有扫描到的蓝牙数据都透传过滤所以数据比较多:

{ 
    "Gateway": "10000060", 
    "NodeId": "00000000", 
    "SystemId": "10990145", 
    "Type": "ble_station_online", 
    "online": [ 
        { 
            "addr": "8C34DC964241", 
            "adv": "07,0F,00,02,20,41,42,96,DC,34,8C,F5,64,E4,58,09,00", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -73
        }, 
        { 
            "addr": "76E1DAB29237", 
            "adv": "01,09,20,02,39,F9,C5,F7,28,AE,6A,A6,05,DA,BB,98,04,F3,A5,EC,E6,91,EE,3B,C3,3E,3C", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -48
        }, 
        { 
            "addr": "100000054342", 
            "adv": "03,10,00,00,60,EA,02,3B,10", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -22
        }, 
        { 
            "addr": "297D1285EC5F", 
            "adv": "10,05,41,1C,61,98,20", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -48
        }, 
        { 
            "addr": "DD0E5AAD62EA", 
            "adv": "02,15,B5,B1,82,C7,EA,B1,49,88,AA,99,B5,C1,51,70,08,D9,00,01,DD,0E,C5", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -61
        }, 
        { 
            "addr": "DCB951E05C48", 
            "adv": "10,05,03,1C,B1,22,85", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -70
        }, 
        { 
            "addr": "EBB6CA6BD71D", 
            "adv": "01,09,20,02,9D,90,CA,D0,D9,5F,85,DA,CE,49,0E,AE,B4,8C,15,AF,20,8D,FF,82,CC,A8,70", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -75
        }, 
        { 
            "addr": "E48B86593B18", 
            "adv": "01,09,20,02,84,42,8C,BD,D4,81,77,18,DB,66,3D,AF,C9,F3,8C,1A,A7,0E,65,6D,4B,F4,7D", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -77
        }, 
        { 
            "addr": "E20D237D282D", 
            "adv": "01,09,20,02,A6,82,56,06,7B,BE,0C,90,98,E9,A2,9D,E6,B3,1B,0C,FF,6A,AE,D4,F5,25,D0", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -66
        }, 
        { 
            "addr": "E60BF9204B5A", 
            "adv": "10,05,13,1C,DE,96,FF", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -69
        }, 
        { 
            "addr": "A97F4F3FF742", 
            "adv": "10,06,17,1E,57,BD,E5,E8", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -72
        }, 
        { 
            "addr": "3137F8BA387F", 
            "adv": "10,05,54,1C,95,76,94", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -68
        }, 
        { 
            "addr": "8B55C7C37A79", 
            "adv": "10,05,13,18,B0,B5,D6", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -83
        }
    ]
}

我们只关心其中是41:42:96:DC:34:8C 的设备,注意,基站解析地址是小字节序跟手机上的地址正好相反所以我们要找地址为8c34dc964241的设备

{ 
            "addr": "8C34DC964241", 
            "adv": "07,0F,00,02,20,41,42,96,DC,34,8C,F5,64,E4,58,09,00", 
            "advType": "adv", 
            "nodeType": "node", 
            "rssi": -73
        },

我们看下adv字段里就是该设备广播的数据跟上图手机上的厂商数据是一致的。

包含厂商编码

上个例子中,我们透传的数据中没有包含0x4c00 这两位的厂商编码,一般来说这两位是固定的,是厂商的编码,所以不包含在数据当中,当我们打开基站设置的的这个功能时就可以包含厂商编码,例如我们这样设置基站:

如何用蓝牙基站扫描蓝牙设备
我们再次看一下透传数据,我们只看41:42:96:DC:34:8C 的设备:

{ 
    "addr": "8C34DC964241", 
    "adv": "4C,00,07,0F,00,02,20,41,42,96,DC,34,8C,F5,18,E4,4A,09,00", 
    "advType": "adv", 
    "nodeType": "node", 
    "rssi": -72
}

透传的数据包含4C00 是整个0xFF(厂商数据)段数据。
注意,厂商编码开启或者关闭,只有在开启透传厂商数据功能开启时才有效,如果厂商数据功能关闭,这个功能开启与否没有效果。

完全透传蓝牙数据

如果我们关闭了透传厂商数据将是透传整个蓝牙广播包,我们先看下手机上的一个蓝牙设备的数据,这里我们随机找一个设备:
如何用蓝牙基站扫描蓝牙设备
我们这样设置蓝牙基站:
如何用蓝牙基站扫描蓝牙设备
我们再看一下广播的数据:

{ 
    "addr": "C789AF11577B", 
    "adv": "02,01,06,0A,FF,4C,00,10,05,07,1C,22,81,34", 
    "advType": "adv", 
    "nodeType": "node", 
    "rssi": -71
}

跟手机看到的原始广播包是一致的。
蓝牙广播的标准原始数据格式是:段长度+段类型+段数据,如上面的例子02 是长度 01是类型(广播标志) 06是数据;再往后,0A又是长度,FF是类型(厂商数据)后面是10个字节的数据。

猜你喜欢

转载自blog.51cto.com/14958685/2541638
今日推荐