如何用蓝牙基站扫描蓝牙设备
金桔蓝牙基站默认是常开蓝牙扫描,通过金桔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个字节的数据。
- iOS开发中可以扫描到却无法连接蓝牙设备的解决办法
- 扫描已匹配的蓝牙设备
- 安卓经典蓝牙:从设备扫描到数据接收
- android 如何修改蓝牙搜索设备的最大数目
- 如何优雅的抓取低功耗蓝牙ble的数据(未经测试,需要花钱买ble设备,类似网卡)
- Android 6.0 Kotlin 蓝牙BLE扫描(改为指定时间没有发现新设备后停止扫描使用interface)
- Android开发之蓝牙--扫描已经配对的蓝牙设备
- 蓝牙BLE如何连接连接多台设备
- android之蓝牙通信(一)(检测蓝牙、开启蓝牙、扫描附近蓝牙设备)
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- 4000 Android 如何获取已连接的蓝牙设备
- 扫描周围可用蓝牙设备、以及设置蓝牙设备的可见性
- 笔记本链接蓝牙设备后还是笔记本在播放而不是蓝牙设备如何设置
- Android开发之蓝牙 --修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备
- WINCE蓝牙如何检测被其他设备发起配对请求
- 如何配置和配对两个HC-05蓝牙模块作为主设备和从设备
- Android 扫描附近的蓝牙设备并连接蓝牙音响的示例
- 如何根据O2O自助设备扫码需求确定一款合适的条码扫描模块?
- Android 扫描蓝牙设备
- 如何自行架设一个 iOS 7 设备可用的 iBeacons 广播基站?