AD:靠谱的微信小程序外包开发

admin

admin

发表于 2017-07-26 21:05:02

摘要:微信小程序开发者社区(www.mntuku.cn)为您提供:微信小程序实现BLE蓝牙连接
相关的资讯,希望对您有帮助。

微信小程序实现BLE蓝牙连接

网上实现小程序连接BLE的文章太多了,此文不再贴整体实现代码,侧重于BLE的特征及开发中遇到的一些小细节(细节虽小,一点不通很难进行下一步)

作者:全栈笔记,来自公众号:全栈笔记

自从微信小程序提供BLE蓝牙api后,网上随便一搜便是各种称实现了小程序连接ble 的功能的文章,上来就贴代码,贴效果图,对于我们这种没有与硬件开发打过交道的互联网开发者,单单看这些文章与小程序api 离自己真正调通还是有一段距离的。

一、BLE特征

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)

二、BLE连接操作流程

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

  1. stringToHexBuffer: function (data) {
  2. //var data = AA5504B10000B5
  3. var typedArray = new Uint8Array(data.match(/[da-f]{2}/gi).map(function (h) {
  4. return parseInt(h, 16)
  5. }))
  6. return typedArray.buffer
  7. },

2、接收到通知数据

ArrayBuffer解析出16进制

  1. buf2hex: function (buffer) { // buffer is an ArrayBuffer
  2. return Array.prototype.map.call(new Uint8Array(buffer), x => (00 + x.toString(16)).slice(-2)).join();
  3. },

js 16进制转10进制

eg:接收数据fe1105090b200e01 可能需要截取字段两位为一个解析 
解析第三、四位 11 为10进制 :

  1. parseInt(detail.substr(2,2),16).toString(10);

四、如何调试

1、正常流程是先出硬件,然后开发小程序去连接硬件,操作对应接口,硬件给出相应反馈,硬件操作写数据,通知小程序。

2、如果硬件没有出来需要先开发小程序怎么办。我此次开发就遇到了这个问题,硬件还没有,对方要求我们先用程序实现api ,对方再按照api 开发硬件。其实也有解决如下:

a.首先要准备一个串口BLE蓝牙设备(后续操作是基于这个设备有usb 插头,可插到电脑上)

b.下载并安装电脑usb 转 串口驱动(eg : windows下 CH340驱动)

c.下载并安装串口调试工具(eg: windows下 sscom) 打开进行简单设置(自行百度:本人测试时只改动了串口号为COM7,波特率为12900,同时勾选HEX显示,小程序写数据就可以在上面展示了)

到此结束,由于作为互联网开发者与硬件打交道甚少,此文纯属自己开发中遇到的一些问题及总结(其中若有理解错误望理解)(也许作为有经验的硬件开发者感觉这些内容不值一提,所以网上往往可以搜索到的相关文章不再提及这些,以至于我们这些小白入门甚难)


22阅读 | 0评论
你的回应
写文章

8051