单片机互通调试初步完成

This commit is contained in:
2025-05-27 16:56:10 +08:00
parent 6aaae06bac
commit 5612b2e782
2 changed files with 171 additions and 47 deletions

View File

@@ -40,4 +40,40 @@
- 更新了MQTT通信约定、消息示例、单片机开发关键逻辑以及示例充电流程以反映"到达即充电"的新业务规则。
- **待考虑/后续**:
- `ChargingSessionServiceImpl.handleChargingStart` 方法目前因 `START_CHARGE` 指令不再由后端主动发送而可能不再被主要流程调用,其定位和用途需要进一步明确或在未来重构中调整。
- 前端界面和用户交互流程可能需要相应调整,以匹配后端"到达即充电"的逻辑(例如,可能不再需要用户在机器人到达后点击"开始充电"按钮)。
- 前端界面和用户交互流程可能需要相应调整,以匹配后端"到达即充电"的逻辑(例如,可能不再需要用户在机器人到达后点击"开始充电"按钮)。
## YYYY-MM-DD (自动填充日期)
### ESP32 固件与后端通信逻辑校准与文档更新
**主要变更点:**
1. **MQTT ACK 消息格式校准 (关键)**:
* **问题分析**: 通过深入分析后端代码 (`MqttMessageHandlerImpl.java``CommandTypeEnum.java`)发现后端期望的MQTT ACK消息格式与之前`README.md`及单片机固件发送的格式存在显著差异。
* 后端期望ACK中包含 `command_ack` 字段,其值为指令的**中文描述** (例如 "移动到指定点"),用于 `CommandTypeEnum.fromAck()` 方法匹配。
* 后端期望任务ID字段为 `task_id` (数字类型)。
* 后端期望成功状态字段为 `success` (布尔类型)。
* **`README.md` 更新**: 已更新 `README.md` (4.2.1节) 中的ACK消息示例以准确反映后端期望的格式。包括添加了 `command_ack`,并将 `taskId` 改为 `task_id``status` (String) 改为 `success` (Boolean)。
* **行动项 (开发者)**: **开发者需要修改 `esp32_robot_firmware/mqtt_handler.cpp` 中的 `mqtt_publish_ack` 函数使其发送的ACK JSON符合后端 `MqttMessageHandlerImpl.java` 的实际解析逻辑 (即包含中文描述的 `command_ack`,数字类型的 `task_id`,和布尔类型的 `success`)。**
2. **MQTT 下行 `MOVE_TO_SPOT` 指令校准**:
* **问题分析**: 后端 `ChargingSessionServiceImpl.java` 在发送移动指令时实际使用的payload是 `{"command":"MOVE", ...}`,而 `README.md` 先前示例为 `{"commandType":"MOVE_TO_SPOT", ...}`
* **`README.md` 更新**: 已更新 `README.md` (4.2.2节) 中移动指令的示例,以反映后端实际发送的 `command: "MOVE"`格式,并添加了说明指出单片机固件已做兼容处理。
* **行动项 (开发者, 可选)**: 为保持一致性,可考虑更新后端 `ChargingSessionServiceImpl.java`,使其发送移动指令时使用 `commandType: "MOVE_TO_SPOT"`
3. **文档整体一致性提升**:
* `README.md` 中关于单片机处理逻辑 (4.3节) 和示例流程 (4.4节) 的部分也相应作了调整以强调新的ACK格式要求和指令细节。
**代码分析涉及文件:**
* `springboot-init-main/src/main/java/com/yupi/project/service/impl/ChargingSessionServiceImpl.java` (下行指令发送)
* `springboot-init-main/src/main/java/com/yupi/project/service/impl/MqttServiceImpl.java` (下行指令封装与 `taskId` 注入)
* `springboot-init-main/src/main/java/com/yupi/project/mqtt/handler/MqttMessageHandlerImpl.java` (上行消息及ACK处理核心逻辑)
* `springboot-init-main/src/main/java/com/yupi/project/model/enums/CommandTypeEnum.java` (ACK中`command_ack`的解析方式)
* `esp32_robot_firmware/mqtt_handler.cpp` (单片机ACK发送逻辑 - **需修改**)
* `esp32_robot_firmware/esp32_robot_firmware.ino` (单片机指令回调处理)
**后续影响与建议**:
* **首要任务是修正单片机固件的ACK发送逻辑**,确保与后端正确对接。
* 在完成固件修改后建议进行完整的MQTT通信测试覆盖所有指令类型及其ACK流程。