timzaak / blog

8 stars 1 forks source link

小程序蓝牙使用注意事项 #105

Closed timzaak closed 1 year ago

timzaak commented 1 year ago

BLE 蓝牙是当前智能设备不可或缺的模块。由于公司需求需要针对小程序蓝牙API,抽象出一个通用的工具类。故编写此文章。

前置条件

  1. 会 Typescript/Javascript 编程语言
  2. 本地安装微信开发者工具,对小程序开发流程有了解
  3. 掌握基本的 React Web 前端开发知识,react hook 要理解
  4. 会Git,了解Git branch、merge、squash、rebase 等常规 Git 操作
  5. 能编写基础的工具类
  6. 用到的:运行时:NodeJS(需要安装,最好用 nvm 安装), 框架:Taro、React,IDE: visual code(找一下Taro\小程序插件),文档:React官方、小程序官方、Taro官方。

    BLE 基本介绍

    蓝牙分为经典蓝牙和BLE, 经典蓝牙的编程范式类似socket编程,BLE的编程范式类似发布订阅和Map读写。BLE 设备的唯一标识是其MAC地址,但有些蓝牙固件可以重置它。

    BLE 的常规使用流程

ble drawio ble.drawio

小程序 BLE API

小程序 BLE API 有些奇葩, 需要格外注意小程序的官方文档。另外 BLE 在华为系的手机上表现较为特殊,需要多加测试。

可参考:

  1. https://github.com/wintton/MxBleDebugUtil/blob/f7be273bb5dabea14eb3dce31b85f506b690f40e/utils/bletool.js#L421
  2. https://github.com/PairZhu/Paper-Lamp/blob/db0462fbe39cd2302ab2b0c96f0506c4f49b3afa/%E7%BA%B8%E9%9B%95%E7%81%AF%E6%8E%A7%E5%88%B6%E5%B0%8F%E7%A8%8B%E5%BA%8F/utils/ecBLE.js#L246
  3. https://github.com/zhaodahai/wx-ant-ble
timzaak commented 1 year ago

蓝牙无法扫描到的原因

  1. 小程序蓝牙权限未授予。在 openAdapter 时触发错误,需要点击右上角三个点,点击设置,授予蓝牙权限。
  2. 蓝牙未打开
  3. GPS未打开
  4. 微信应用未被授予GPS、蓝牙权限

image 这是一个快速查看手机小程序各项参数的小程序,可以用来定位问题

timzaak commented 7 months ago

除了以上, 还有很多边界 case,例如关闭蓝牙,再打开蓝牙, 设备仍旧处于链接状态中。这些都是测试人员一点点测出来才行。

另外,在抽象状态时,扫描 和 链接是相互独立的,不应抽象到一个状态机中去表述。