小程序多页面间共享蓝牙连接状态

更新日期: 2021-06-08 阅读次数: 2550 字数: 405 分类: 微信小程序

场景

  • 设备列表页,展示可连接的蓝牙设备列表,并选中指定设备建立连接
  • 数据展示页,自动同步设备上的运行状态数值 (使用设备列表页已建立的连接)
  • 参数设置页,进行设置操作 (也需要用到设备列表页建立的连接)

发送、接收涉及的参数

发送:wx.writeBLECharacteristicValue

  • deviceId
  • serviceId
  • characteristicId

接收: wx.onBLECharacteristicValueChange & wx.notifyBLECharacteristicValueChange

  • deviceId
  • serviceId
  • characteristicId

所以,实际上这三个值全局共享就能实现。

共享方案一

共享三个 Id, 每个页面单独建立监听。

共享方案二

在 app.js 中,建立监听,但是接收的值,如何同步到 page 中?

看起来,只有方案一是可行的。而且可控。

逻辑

  • (设备列表页) 展示设备列表,选中建立连接;global 共享 connected 状态,设备名,deviceId;并返回数据展示页
  • (数据展示页) 查询 deviceId 对应的 services; 再查询 service 对应的特性值;再监听; 进行写入操作,以获得相关数据
  • (参数设置页) 优化上一步的流程,如果只有一个特性 Id, 只需要监听这一个。实际上我用的蓝牙模块,有两个特性,一个是可写入的,一个是可 notify 的

注意事项

https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html

  • 订阅操作成功后需要设备主动更新特征值的 value,才会触发 wx.onBLECharacteristicValueChange 回调。
  • 安卓平台上,在调用 notifyBLECharacteristicValueChange 成功后立即调用 writeBLECharacteristicValue 接口,在部分机型上会发生 10008 系统错误

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式