作者:全栈笔记,来自公众号:全栈笔记
自从微信小程序提供BLE蓝牙api后,网上随便一搜便是各种称实现了小程序连接ble 的功能的文章,上来就贴代码,贴效果图,对于我们这种没有与硬件开发打过交道的互联网开发者,单单看这些文章与小程序api 离自己真正调通还是有一段距离的。
1、BLE(Bluetooth Low Energy),蓝牙4.0核心profile,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输,缺点:数据传输速率低,由于其具有低功耗特点,所以经常用在可穿戴设备之中。
2、关于数据传输:每个设备包含了多个service(可以理解为服务)。每个service 同时又包含了多个characteristic特征值,每一个具体的characteristic特征值才是BLE通信的主要通道。BLE主机与从机均是通过characteristic来进行通信。
3、如何写入监控数据: 通过第二条可以知道每个设备有多个service ,每个service 又有多个特征值,那如果要往蓝牙设备写数据写到哪里呢? 其实连接蓝牙设备是需要 硬件开发者告诉你需要操作的 service的UUID(唯一值)及 可写特征的UUID及接收通知的特征的UUID的,或者遍历服务和特征值,查出同一个服务下 同时有可写特征,也有notify 特征的 ,与硬件开发者确认。(注:可写特征和通知特征 必须是 同一个服务下的两个特征值) 。
这些是需要写死到程序的当调用:
wx.writeBLECharacteristicValue(OBJECT) 往可写特征写数据
wx.notifyBLECharacteristicValueChanged 打开通知(特征值为notify 的特征UUID)
1、初始化蓝牙适配器
2、全局监听蓝牙适配器状态变化事件
3、扫描展示可连接蓝牙设备
4、停止扫描(扫描比较耗费电量)连接指定蓝牙设备
5、连接成功,同时扫描服务,扫描特征(在扫描特征值成功后开启监听)
6、启用低功耗蓝牙设备特征值变化时的 notify 功能(wx.notifyBLECharacteristicValueChange)注:监听可notify特征,
同时开启监听通知(wx.onBLECharacteristicValueChange)此处可获取通知信息(16进制串)在此处做接收到通知后的逻辑处理
7、写数据
8、断开连接(一个BLE只能同时被一个主机连接。如果不用或换主机连接需要先断开当前连接)
9、关闭蓝牙模块。调用该方法将断开所有已建立的链接并释放系统资源
因为和BLE蓝牙设备通信的数据是 16进制的 ArrayBuffer。所以写数据前及接收到数据后需要进行相应的格式转换
1、写数据: 数字转16进制
js转16进制还是比较方便的 直接用 int.toString(16) 即可,有时候需要转的是字符串需要做一些parseInt处理再转16进制
16进制数据转ArrayBuffer
2、接收到通知数据
ArrayBuffer解析出16进制
js 16进制转10进制
eg:接收数据fe1105090b200e01 可能需要截取字段两位为一个解析 解析第三、四位 11 为10进制 :
1、正常流程是先出硬件,然后开发小程序去连接硬件,操作对应接口,硬件给出相应反馈,硬件操作写数据,通知小程序。
2、如果硬件没有出来需要先开发小程序怎么办。我此次开发就遇到了这个问题,硬件还没有,对方要求我们先用程序实现api ,对方再按照api 开发硬件。其实也有解决如下:
a.首先要准备一个串口BLE蓝牙设备(后续操作是基于这个设备有usb 插头,可插到电脑上)
b.下载并安装电脑usb 转 串口驱动(eg : windows下 CH340驱动)
c.下载并安装串口调试工具(eg: windows下 sscom) 打开进行简单设置(自行百度:本人测试时只改动了串口号为COM7,波特率为12900,同时勾选HEX显示,小程序写数据就可以在上面展示了)
到此结束,由于作为互联网开发者与硬件打交道甚少,此文纯属自己开发中遇到的一些问题及总结(其中若有理解错误望理解)(也许作为有经验的硬件开发者感觉这些内容不值一提,所以网上往往可以搜索到的相关文章不再提及这些,以至于我们这些小白入门甚难)