URL-TEXT
/project/ble_device_manager
Start Date
Sep 1, 2022
End Date
Jun 1, 2023
SubTtile
个人独立负责

设备管理系统(独立开发) 2022.09 ~ 2023.06

小程序端演示动画

notion image

项目简介

从需求上:
产品(Android 设备)需要加入鸿蒙智联,负责 Android 产品接入 HarmonyOS Connect 生态,使得用户能够通过华为智慧生活 App 来使用产品的相关功能。另外,项目分析,既然开放了产品的 BLE 能力,那么就基于微信小程序,实现一个自己的设备管理小程序,用户也能够通过微信小程序,使用产品的相关服务。
从技术上:
采的 BLE(低功耗蓝牙)的接入方式。项目包括微信小程序(客户端),华为智慧生活(客户端),和 Android(服务端),它们通过 BLE 进行通信。用户可以通过微信小程序或华为智慧生活管理所有的 Android 设备,并使用 Android 设备的相关功能。
 

技术栈

  • Android
    • BLEGATTKotlinServiceBroadcast 等;
  • 微信小程序
    • TypeScriptNPMFlexbox布局BLETDesignAnimationPromiseasync/await 等;
  • 华为智慧生活
    • HTML5低代码开发 等;

负责内容

  1. 基于华为蓝牙 BLE 设备接入规范,实现 Android 服务端
    1. 基于蓝牙广播规范,实现广播数据包和扫描响应数据包的封装;
    2. 根据华为通用 UUID 规范,配置 GATT 的 Service、CharacteristicsPermissions,完成外围设备的 GATT 服务;
    3. 根据设备连接注册流程,通过密封类和枚举实现一个状态机,去执行设备的配对,连接,配网,注册,验证流程。实现外围设备的注册与连接。
      1. notion image
    4. 基于数据传输规范,通过一个缓冲队列处理数据的分包,配合滑动窗口的检测包的完整性,通过自定义数据类,和数据包的解析与封装流程,实现字节数组到数据类实例的相互转换,完成稳定的数据收发。
      1. notion image
    5. 设备的广播,连接,指令收发流程是固定的,变动的是不同产品的型号,功能和配置,所以通过定义产品类型接口,让不同的产品实现自己的配置,就可以使得不同能够快速接入。
  1. 小程序客户端的实现
    1. 通过 TypeScript 实现相关逻辑代码,UI 上主要使用 Flexbox 进行布局,控件主要使用的 TDesign 和原生的组件;
    2. 基于小程序的 BLE 相关 API,实现小程序作为中心设备,去扫描广播,通过过滤广播数据中的产品标识,筛选出公司产品,并显示到页面;
    3. 分析设备都具有连接,验证,数据传输流程和功能,把通用的功能和UI进行提取为父组件,具体设备只需要在父组件的基础上,完成自己的功能相关的UI和通过父组件提供的数据收发接口,对指令进行处理;
    4. 由于小程序中大部分接口都是 Promise 的,在处理 BLE 相关的流程时,容易出现代码嵌套过深的逻辑不好分析的问题,通过 async/await 的方式减少代码的嵌套。
    5. Android 和 IOS 上蓝牙的表现不同,Android 上 deviceId,IOS 上 UUID,需要做适配,IOS 上通过广播中附带的 deviceId,进行设备区分。部分 UI 的显示,也有不同,也具体分析后,做了适配;
    6. 通过工厂模式,设备类型工厂接口,用于创建设备的实例,定义了设备类型的接口,并实现了一个单例的设备管理类,通过工厂创建的设备实例,都会添加到设备管理类中,其中会有一个 deviceId 作为 Key,设备实例对象作为 value 的 Map 去实际存储设备实例。个人绘制的类图:
      1. notion image
  1. 华为智慧生活客户端:
    1. 由于华为有线上低代码开发平台,所以直接根据产品的相关配置,在线上配置好后,通过拖动 UI,进行设计,比较简单,不涉及技术难点。
Loading...
shuouyang
shuouyang
android开发 ReactNative开发 小程序开发
最新发布
AOSP 环境搭建
2025-3-29
View 绘制流程-源码解析
2025-3-12
HTTP
2025-3-4
JVM 虚拟机
2025-2-28
蓝牙-BLE-基础
2025-2-28
从 OkHttp 的原理来看 HTTP
2025-2-19
公告
🎉热点信息🎉
--- 1 ---
Jet Brains 推出新的跨平台支持 Kotlin MultiPlatform
--- 2 ---
新的小巧便捷的依赖注入框架 Koin
--- 3 ---
新一代 API 查询语言 GraphQL