基于uni-app的商用化蓝牙通讯模块设计

基于uni-app的商用化蓝牙通讯模块设计

编程文章jaq1232025-08-31 0:12:306A+A-

前言

物联网设备与外界交互,一般使用蓝牙模块、WIFI模块、4G模块、网卡模块4大模块中的一种或多种同时共用,但蓝牙通讯是其中最经济的一种,也是搭配最广泛的一种。

uni-app是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。

基本上我们在uni-app下开发完善好蓝牙通讯模块,可以适配全端,给用户提供更流畅的体验。

来百度APP畅享高清图片

设备与APP交互流程

初始化蓝牙设备 - 开启搜索周边设备 - 选择物联网设备连接 - 获取设备服务 - 监听设备Notify服务及获取写通道UUID - 通过写通道向设备发消息、通过Nofity服务获取物联网设备回返消息

强壮商用模块要点

一、初始化蓝牙前的鉴权及主动授权

  1. 小程序鉴定是否开启蓝牙及位置服务授权,未授权主动提示用户去手动开启授权(APP环境跳过此步骤)
  2. 检测对APP授权蓝牙、位置权限,未授权提示用户进入APP授权页,让用户手动授权。安卓可直接授权、IOS必须手动授权
  3. 初始化蓝牙设备,错误消息码处理 如已授权,但用户关闭了蓝牙,需要提示用户主动开启蓝牙

二、搜索周边设备

  1. 根据广播名筛选功能 如开始名规则匹配、全名匹配、模糊匹配等过滤规则
  2. 根据信号值筛选功能 如RSSI值 > -80dBm
  3. 自动记忆功能,方便生产环境下,已记忆的广播名无需搜索,直接连设备

三、连接设备

  1. 连接失败尝试重连 任何连接都不能保证百分百,重连机制可保证生产的稳健性。

四、获取设备主服务

  1. 连接成功设备需延时获取设备主服务,第一时候获取设备主服务,基本上获取不到,具体可成功获取时间视物联网设备而定,这里需要做三次及以上,每次延时1秒的尝试
  2. 安卓针对物联网设备比较友好,如物联网设备出厂时已固化通道UUID,可直接跳过获取主服务步骤,直接监听Notify服务

五、监听Notify服务

  1. 监听Notify服务失败尝试重监听

六、队列化执行事件

实际应用场景中,需求千变万化。但根据场景,基本上归结为4类事件

  1. MacIsWork 设备是否在广播中
  2. ConnectMac 连接指定的广播设备
  3. NotityMac 连接并监听设备Notify服务
  4. SendMessageToMac 发送数据包到设备,未连接先连接,未Notify先Notify,直到发送成功或发生错误

无论以哪种场景下与物联网设备交互,均遵守上面提到的“设备与APP交互流程”,但需要根据场景,跳过已完成的流程及补全未完成的流程。所以第一个动作均需要把“设备与APP交互流程”形成一个队列,按队列执行完后,触发完成事件钩子,失败触发失败事件钩子。

六、蓝牙模块的状态

  1. 模块各类状态:
  2. DeviceStatus:{
  3. IsInit:false//初始化状态
  4. ,available:true//设备是否可用
  5. ,Discovery:false//搜索设备中
  6. ,Connecting:false//连接中
  7. ,Connected:false//是否连接
  8. ,HadNotify:false//是否初始化通道
  9. }
  10. 设备错误描述详细

  11. DeviceErrorRes:
  12. {
  13. InitError:null//初始化错误
  14. ,DiscoveryError:null//发现设备错误
  15. ,ConnectDeviceError:null//连接设备错误
  16. ,GetDevicesError:null//获取主服务错误
  17. ,NofityError:null//通道错误
  18. }

结语

涉及到硬件交互的模块,均需要大量的试错,优化调整。此蓝牙通讯模块均以实际应用场景为测试环境,经过8次重大优化调整而总结出来的可商用化的模块方案,分享给大家

点击这里复制本文地址 以上内容由jaq123整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

苍茫编程网 © All Rights Reserved.  蜀ICP备2024111239号-21