URL-TEXT
/project/ble_device_manager
Start Date
Sep 1, 2022
End Date
Jun 1, 2023
SubTtile
个人独立负责
设备管理系统(独立开发) 2022.09 ~ 2023.06
小程序端演示动画

项目简介
从需求上:
产品(Android 设备)需要加入鸿蒙智联,负责 Android 产品接入 HarmonyOS Connect 生态,使得用户能够通过华为智慧生活 App 来使用产品的相关功能。另外,项目分析,既然开放了产品的 BLE 能力,那么就基于微信小程序,实现一个自己的设备管理小程序,用户也能够通过微信小程序,使用产品的相关服务。
从技术上:
采的 BLE(低功耗蓝牙)的接入方式。项目包括微信小程序(客户端),华为智慧生活(客户端),和 Android(服务端),它们通过 BLE 进行通信。用户可以通过微信小程序或华为智慧生活管理所有的 Android 设备,并使用 Android 设备的相关功能。
技术栈
- Android
BLE
,GATT
,Kotlin
,Service
,Broadcast
等;
- 微信小程序
TypeScript
,NPM
,Flexbox布局
,BLE
,TDesign
,Animation
,Promise
,async/await
等;
- 华为智慧生活
HTML5
,低代码开发
等;
负责内容
- 基于华为蓝牙 BLE 设备接入规范,实现 Android 服务端
- 基于蓝牙广播规范,实现广播数据包和扫描响应数据包的封装;
- 根据华为通用 UUID 规范,配置 GATT 的 Service、Characteristics、Permissions,完成外围设备的 GATT 服务;
- 根据设备连接注册流程,通过密封类和枚举实现一个状态机,去执行设备的配对,连接,配网,注册,验证流程。实现外围设备的注册与连接。
- 基于数据传输规范,通过一个缓冲队列处理数据的分包,配合滑动窗口的检测包的完整性,通过自定义数据类,和数据包的解析与封装流程,实现字节数组到数据类实例的相互转换,完成稳定的数据收发。
- 设备的广播,连接,指令收发流程是固定的,变动的是不同产品的型号,功能和配置,所以通过定义产品类型接口,让不同的产品实现自己的配置,就可以使得不同能够快速接入。


- 小程序客户端的实现
- 通过 TypeScript 实现相关逻辑代码,UI 上主要使用 Flexbox 进行布局,控件主要使用的 TDesign 和原生的组件;
- 基于小程序的 BLE 相关 API,实现小程序作为中心设备,去扫描广播,通过过滤广播数据中的产品标识,筛选出公司产品,并显示到页面;
- 分析设备都具有连接,验证,数据传输流程和功能,把通用的功能和UI进行提取为父组件,具体设备只需要在父组件的基础上,完成自己的功能相关的UI和通过父组件提供的数据收发接口,对指令进行处理;
- 由于小程序中大部分接口都是 Promise 的,在处理 BLE 相关的流程时,容易出现代码嵌套过深的逻辑不好分析的问题,通过 async/await 的方式减少代码的嵌套。
- Android 和 IOS 上蓝牙的表现不同,Android 上 deviceId,IOS 上 UUID,需要做适配,IOS 上通过广播中附带的 deviceId,进行设备区分。部分 UI 的显示,也有不同,也具体分析后,做了适配;
- 通过工厂模式,设备类型工厂接口,用于创建设备的实例,定义了设备类型的接口,并实现了一个单例的设备管理类,通过工厂创建的设备实例,都会添加到设备管理类中,其中会有一个 deviceId 作为 Key,设备实例对象作为 value 的 Map 去实际存储设备实例。个人绘制的类图:
- 华为智慧生活客户端:
- 由于华为有线上低代码开发平台,所以直接根据产品的相关配置,在线上配置好后,通过拖动 UI,进行设计,比较简单,不涉及技术难点。