一看就会,超有用活字格技能:一百九十一、用HAC读写蓝牙BLE设备(GATT协议)
本帖最后由 willning 于 2024-1-22 13:56 编辑如果你在寻找对接蓝牙BLE的解决方案,来看看HAC的新功能吧。
蓝牙是物联网设备的常见协议,为了适配不同的应用场景,蓝牙设备通常提供有不同的调用方式。部分设备还会支持多种调用方式,如双模蓝牙设备通常支持GATT和SPP两种。
调用方式交互模式与活字格交互的方式典型设备
A2DP/HFP/HSP主动(主机→蓝牙设备) N/A无线耳机、车载主机
HID(也称蓝牙文本、模拟键盘)被动(蓝牙设备→主机)输入框默认支持扫码器、电子秤
GATT(标准BLE)双向HAC 电子秤、POS、温度标签、心电仪、智能家居
SPP(蓝牙串口)主动(主机→蓝牙设备)N/A 无线打印机
iBeacon(非标BLE)主动(主机→蓝牙设备)N/A 导航信标
其中,GATT协议的BLE应用范围相对较广,特别是生产制造和供应链等领域,BLE凭借成本、功耗等综合优势,正在成为主流的物联网通讯方案。本文将为大家介绍如何利用HAC(活字格安卓容器)方案,在PDA上对BLE设备进行扫描、读取和写入。效果如下面视频所示,包含扫描周边的蓝牙设备、利用标准设备信息服务(1800)的设备名称特性(2a00)读取并展示设备名称的全流程,该示例已经包含在HAC的Demo中:
https://hac.app.hzgcloud.cn/upload/FileDownloadUpload/Download?file=82df5525-7bd7-4e2a-8b3a-c2c1902a12e3_hac_ble_demo.mp4
一、基础概念
BLE的最小操作单位是特性Characteristic,您可以通过编程接口(插件中已经封装好了,不需要您手工写代码)读写这些特性的值。有一些特性是出厂固化的,如设备名称、序列号等;有一些特性是可配置项目,如采样频率、发射功率等;有一些特性是供外部读取的传感器值,如温度、心率、重量等。对于这些特性,BLE提供了一种写入方式和三种读取方式。如果读取特性的当前值,可以用read;如果需要在特性的值发生变化时通知到您,用notify;在notify的基础上,如果设备需要您接受通知后发送回执,用indicate。
为了方便管理,BLE将这些特性分类成服务Service(类似于组)。一个设备有若干个服务,每个服务下面有若干个特性。每个设备有不同的mac物理地址,可以此作为区分和定位使用。
如果希望详细了解BLE的架构和概念,可以阅读这篇文章:BLE蓝牙开发基础 。
二、扫描
扫描操作需要使用【PDA(Android)交互命令】插件提供的“扫描BLE设备/标签”命令。该命令将调用蓝牙的扫描功能,获取周边的设备(不局限于BLE,所有蓝牙设备都会被扫描到),以数组的形式填充到输入框类型单元格中。您可以在该单元格的命令中,做进一步处理,如利用“操作单元格命令”将其填充到组合框里。
数组中每个元素代表一个设备,数据结构如下:
{"key":"Mi Smart Band 4DB:3A:05:40:1C:D4","mac":"DB:3A:05:40:1C:D4","name":"Mi Smart Band 4","rssi":-90,"timestampNanos":1705902905903}
其中mac属性为该设备的MAC物理地址,name属性是显示的名称,rssi是信号强度。
三、读取
读取BLE设备的信息时,无需先配对并保持连接,这也是BLE能耗更低的关键原因。BLE支持三种读取方式,read(主动进行读取)、notify(订阅,无需回执)和indicate(订阅,自动发送回执),操作单元是服务+特征的组合。具体采用那种方式,请参考设备的开发手册,或咨询对方的技术支持人员。
需要注意的是,BLE返回的数据是一个byte数组,大部分设备都会将值的文本(如名称、版本号、扫描结果等)以Base64的方式编码成byte数组,对于这种情况,您可以通过“目标单元格:数据(BASE64加密)”获得BASE64的文本,再利用【字符串加解密】插件“BASE64加解密”解析为文本;对于一些数值类型的值,设备也可能将其直接放到Byte数组中,虽然这是一种非标的做法,但实际中非常常见,此时,您可以通过“目标单元格:数据(整数数组)”获得原始数据,再根据设备的开发手册手工做解析。
此外,如果您需要对接的设备没有按照BLE的规范设计服务和特征(可参考蓝牙标准规范),即并不是以“-0000-1000-8000-00805f9b34fb”结尾,也可以在命令中直接填写完整的uuid(如果是0x开头的hex十六进制,则需要先通过第三方工具转换为uuid才能使用),插件大概率也能正常运行。
提示:实际项目开发中,建议将设备的MAC地址保存到数据库或本地缓存,而不是由用户自由选择。这样做一方面能减少等待时间,更重要的是可以减少误操作的风险。
四、写入
写入时,请参考设备的开发手册组织参数,对于文本类型的特征,大部分设备接受BASE64加密的字符串(可通过【字符串加解密】插件“BASE64加解密”命令获得),其他类型需要传递元数的Byte数组,表现为0x开头的十六进制字符串(可通过HEX、DEC2HEX等函数获得)。
写在最后
如果您尚未采购设备,在对比哪些支持HID模式的设备和仅支持GATT模式的设备之间,推荐您尽可能选择支持HID的。HID意味着开发时完全无需关注,只需要将输入焦点放在活字格的文本框中,收到设备发来的数据时,会自动填充进去,效果非常顺滑、便捷。
页:
[1]