说明¶
概述¶
命令模块为传感操作提供 MQTT 远程控制功能。它允许用户通过 MQTT 命令控制在线和离线传感,实现传感器数据采集的远程监控和控制。
命令格式¶
所有传感类命令以 SENSE, 开头,用于区分其他命令类型。
命令结构¶
其中: - <TYPE>: ONLINE 或 OFFLINE - <ACTION>: 命令操作(如 F=, D=, STOP, STATUS) - <PARAMETERS>: 命令特定参数
在线传感命令¶
启动/配置在线传感¶
F: 采样频率(Hz,浮点数,范围:0.1 - 10000 Hz)D: 持续时间(秒,浮点数,0 表示持续运行)
示例: - SENSE,ONLINE,F=20,D=60 - 20 Hz 采样,持续 60 秒 - SENSE,ONLINE,F=1,D=0 - 1 Hz 采样,持续运行
停止在线传感¶
立即停止在线传感操作。
查询在线传感状态¶
返回在线传感的当前状态和配置。
离线传感命令¶
立即启动¶
F: 采样频率(Hz,浮点数,范围:1 - 4000 Hz)D: 采样时长(秒,浮点数,必须 > 0)
示例: - SENSE,OFFLINE,F=100,D=10 - 100 Hz 采样,持续 10 秒
延迟启动¶
DL: 延迟时间(秒,整数,>= 0)
示例: - SENSE,OFFLINE,F=100,D=10,DL=5 - 5 秒后开始,然后以 100 Hz 采样 10 秒
定时启动¶
TIME: 时间格式YYMMDDHHMMSS(12 位数字)YY: 年份后两位(00-99,表示 2000-2099)MM: 月份(01-12)DD: 日期(01-31)HH: 小时(00-23)MM: 分钟(00-59)SS: 秒(00-59)
示例: - SENSE,OFFLINE,F=100,D=10,TIME=251216200000 - 在 2025-12-16 20:00:00 开始
停止离线传感¶
如果离线传感正在运行,则停止该操作。
查询离线传感状态¶
返回离线传感的当前状态。
响应格式¶
命令执行后,设备通过 MQTT 发布响应消息:
成功响应¶
SENSE,OK,ONLINE,F=20.00,D=60.00- 在线传感启动成功SENSE,OK,ONLINE,STOPPED- 在线传感停止成功SENSE,OK,OFFLINE,F=100.00,D=10.00- 离线传感启动成功SENSE,OK,OFFLINE,SAMPLES=1000,FREQ=100.00,DUR=10.00,SD=OK- 离线传感完成
错误响应¶
SENSE,ERROR,ONLINE,INVALID_FREQ- 无效的频率参数SENSE,ERROR,OFFLINE,ALREADY_RUNNING- 离线传感已在运行SENSE,ERROR,OFFLINE,TIME_PAST- 定时时间已过期SENSE,ERROR,SENSOR_NOT_INITIALIZED- 传感器未初始化
实现细节¶
命令处理架构¶
命令处理器使用基于队列的架构:
- 命令队列:命令被排队处理,避免阻塞 MQTT 回调
- 命令处理任务:专用的 FreeRTOS 任务从队列中处理命令
- 非阻塞操作:长时间运行的操作(如离线传感)在单独的任务中执行
参数解析¶
模块包含健壮的参数解析函数:
parse_float_param(): 提取浮点参数(如F=20.5)parse_int_param(): 提取整数参数(如DL=5)parse_time_param(): 解析YYMMDDHHMMSS格式的时间字符串
线程安全¶
- 命令通过队列顺序处理
- 传感器句柄在处理命令前设置
- 状态检查防止并发操作
使用注意事项¶
-
传感器初始化:在处理命令之前,必须使用
sensing_command_set_sensor_handle()设置传感器句柄。 -
MQTT 连接:必须连接 MQTT 才能处理命令和发布响应。
-
时间同步:对于定时启动(
TIME参数),系统时间必须同步(NTP)。 -
并发操作:系统防止在离线传感已运行时启动新的离线传感,但可以在线传感停止并使用新参数重新启动。
-
命令格式:命令区分大小写,必须遵循确切格式。多余的空格会自动修剪。
错误处理¶
命令处理器验证:
- 命令格式和结构
- 参数范围(频率、持续时间、延迟)
- 系统状态(传感器初始化、运行状态)
- 时间有效性(对于定时操作)
所有错误都通过 MQTT 响应消息报告,便于远程调试。