雷达传感器配置
基于 Flutter + BLE 的毫米波雷达配置工具:距离门灵敏度、光照阈值、底噪检测与一键自动配置。
项目背景
毫米波雷达人体存在传感器(HLK-LD2410C)在出厂或现场部署时,需要配置检测距离、灵敏度、光照阈值等参数——传统方式是接串口用命令行工具调试,现场操作很不方便。这个项目把配置流程搬到了手机上:通过 BLE 蓝牙直连雷达模块,可视化地完成参数配置、实时数据观测与灵敏度调优,并配套整理了一份完整的 BLE 命令协议文档。
核心功能
- 设备扫描与连接:BLE 扫描过滤雷达设备、信号强度展示、连接状态监听与断线重连引导;完整处理 Android 12+ 的
BLUETOOTH_SCAN/BLUETOOTH_CONNECT运行时权限与旧版本位置权限差异 - 雷达参数配置:检测距离(9 个距离门,0–6 米)与灵敏度(0–100)双滑块调节、运动/静止独立灵敏度、光照阈值(超过阈值设备停止工作)、关闭延时(滚轮选择器)、波特率、距离分辨率、上报模式、恢复出厂、模块重启
- 实时数据可视化:解析雷达上报的目标信息(运动/静止目标的距离与能量),以 fl_chart 折线图实时绘制;支持工程模式数据展示与光感数值读数
- 底噪检测与自动配置:一键采集各距离门底噪的最小/最大/平均值(运动与静止分通道统计),基于噪声基准自动生成各距离门灵敏度配置——把「凭经验调灵敏度」变成「按环境实测」
- 原始数据日志:BLE 收发的原始帧落盘为日志文件,支持通过系统分享面板导出,便于现场抓包排查协议问题
- 中英双语:基于 GetX i18n 的完整国际化,跟随系统语言切换
BLE 协议实现
项目依据 LD2410C 串口通信协议实现了完整的命令栈,核心是一套二进制帧协议:
帧头 FD FC FB FA + 数据长度(2B) + 命令字(2B) + 参数(NB) + 帧尾 04 03 02 01
| UI 功能 | 命令字 | 说明 |
|---|---|---|
| 灵敏度 / 检测距离 | 0x0064 | 按距离门批量写入运动/静止灵敏度 |
| 光照阈值 / 辅助控制 | 0x00AD | 光感控制模式、阈值与输出电平 |
| 进入 / 退出配置模式 | 0x00FF / 0x00FE | 配置类命令的前置状态 |
| 验证密码 | 0xA8 | 配置模式前置鉴权 |
| 重启模块 | 0x00A3 | 使配置生效 |
协议层的几个关键处理:
- 配置模式状态机:验证密码 → 进入配置 → 执行配置命令 → 退出配置 → 重启生效,严格按协议时序编排
- ACK 响应匹配:设备响应帧的命令字为原命令 +0x0100,按命令字配对请求,超时判定失败
- 粘包处理:BLE 单包仅约 20 字节,按帧头/帧尾在接收缓冲区中切帧重组,再进入解析器
- 发送节流:命令间隔 ≥200ms 防止蓝牙缓冲区溢出,批量写入距离门配置时按序排队发送
技术实现
- 分层架构:
BluetoothService(单例,封装 flutter_blue_plus 的扫描/连接/特征读写与权限申请)→BluetoothController(协议编解码与业务状态,约 2600 行)→ 视图层(首页 / 设备详情 / 雷达配置 / 参数设置 / 底噪统计五个页面) - GetX 响应式状态:配置项、连接状态、图表数据全部为响应式变量,UI 与蓝牙事件解耦
- 数据流设计:通知特征订阅 → 缓冲切帧 → 帧分类(目标数据 / ACK / 参数回读)→ 状态更新,单一数据通道多协议复用
- 自定义 UI 组件:滑块轨道与滑块形状定制、灵敏度等级 SVG 图标动态切换(7 级可视化范围图示)、渐变光照阈值色条
配套整理了《雷达设备 BLE 命令协议文档》:帧格式定义、命令列表与示例帧、响应规则、UI 功能到命令字的完整映射表,协议实现参考 HLK-LD2410C 官方串口协议 V1.09。