说明¶
Command Handler — 用 MQTT 远程指挥采集
通过 MQTT 消息从云端/手机发送命令,控制节点启动、停止和查询采集任务。
算法直觉¶
命令驱动架构¶
传感器节点本身不主动决定何时采集——它等待 MQTT 服务器发来命令。这样:
- 云端控制:服务器统一指挥所有节点
- 灵活调度:支持"5 分钟后开始采集 30 秒"这样的延时任务
- 低功耗:没事做的时候节点可以休眠
命令格式¶
所有命令通过 MQTT_SUBSCRIBE_TOPIC(/mqtt/server)接收,响应发到 MQTT_PUBLISH_TOPIC(/mqtt/node)。
基本格式:SENSE,<MODE>,<PARAMS>
完整命令列表¶
| 命令 | 含义 | 示例 |
|---|---|---|
SENSE,ONLINE,F=f | 启动在线采集,频率 f Hz | SENSE,ONLINE,F=20 |
SENSE,ONLINE,STOP | 停止在线采集 | |
SENSE,ONLINE,STATUS | 查询在线状态 | |
SENSE,OFFLINE,F=f,D=d | 启动离线采集 | SENSE,OFFLINE,F=100,D=30 |
SENSE,OFFLINE,F=f,D=d,DL=delay | 延时启动 | SENSE,OFFLINE,F=100,D=10,DL=300 |
SENSE,OFFLINE,F=f,D=d,TIME=YYMMDDHHMMSS | 定时启动 | SENSE,OFFLINE,F=100,D=10,TIME=251231120000 |
SENSE,OFFLINE,STOP | 停止离线采集 | |
SENSE,RT,START,F=f | 启动实时处理 | SENSE,RT,START,F=50 |
SENSE,RT,STOP | 停止实时处理 | |
SENSE,RT,DETECT=ON | 启用阈值检测 | |
SENSE,RT,DETECT=OFF | 禁用阈值检测 | |
SENSE,RT,STATUS | 查询 RT 状态 |
API 参考¶
// 初始化命令处理器(MQTT 初始化后调用)
esp_err_t sensing_command_init(void);
// 处理接收到的 MQTT 命令
esp_err_t sensing_command_process(const char *command, int command_len);
注意事项¶
响应格式
命令处理结果通过 MQTT 响应,格式为 SENSE,<MODE>,<STATUS>,<INFO>。例如:SENSE,ONLINE,OK,F=20。
命令大小写敏感
命令字符串区分大小写。SENSE,online 不会被识别。
延时启动的实现
延时启动通过 esp_timer 一次性定时器实现。延时期间可被 STOP 命令取消。