单片机互通调试初步完成

This commit is contained in:
2025-05-27 16:44:45 +08:00
parent 22e1109d81
commit 6aaae06bac
22 changed files with 1678 additions and 129 deletions

View File

@@ -0,0 +1,46 @@
#ifndef MQTT_HANDLER_H
#define MQTT_HANDLER_H
#include <PubSubClient.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include "config.h" // 引入配置文件以获取 MQTT 设置和设备ID
// 定义机器人可能的状态枚举,与后端和需求文档对齐
enum RobotStatus {
IDLE,
MOVING,
CHARGING,
COMPLETED,
FAULTED // 或 ERROR根据后端实际使用的枚举值
};
// 回调函数指针类型,用于通知主程序收到了特定指令
// 参数: commandType, taskId, targetSpotId (如果指令是移动)
typedef void (*CommandCallback)(const char* commandType, const char* taskId, const char* targetSpotId);
void mqtt_setup(CommandCallback cmd_callback); // MQTT 初始化,传入指令回调函数
void mqtt_loop(); // 在主 loop 中调用保持MQTT连接和处理消息
void mqtt_publish_status_update(
RobotStatus current_status,
const char* location,
int battery_level,
const char* current_task_id, // ID ()
const char* target_spot, // 仅在MOVING状态下
const char* current_spot, // 仅在CHARGING, COMPLETED状态下
unsigned long charge_duration_seconds, // 仅在CHARGING状态下
int error_code, // 仅在FAULTED状态下
const char* error_message // 仅在FAULTED状态下
); // 发布状态更新
void mqtt_publish_ack(
const char* task_id,
bool success,
const char* message,
RobotStatus current_robot_status_at_ack,
const char* ack_context_spot_id // 例如MOVE_TO_SPOT完成后的spotId
); // 发布ACK消息
// 内部状态,供其他模块查询 (可选,或者通过回调传递)
RobotStatus mqtt_get_current_robot_status_commanded(); // 获取后端指令可能影响的最新状态
#endif // MQTT_HANDLER_H