嵌赛笔记主控
比赛要求使用 STM32 作为主控,如何合理使用 ESP32?
如果比赛 强制要求 STM32 作为主控,那么 ESP32 不能作为主控制器,但可以作为 辅助模块(如 WiFi/蓝牙通信、摄像头图像传输)。以下是 符合比赛规则 的 STM32+ESP32 协同方案,确保 STM32 仍然主导核心控制逻辑。 —## 1. 系统架构设计### ✅ 符合比赛要求的方案| 模块 | STM32(主控) | ESP32(辅助) ||----------|------------------|------------------|| 功能 | 电机控制、传感器处理、决策 | WiFi/蓝牙通信、摄像头传输 || 通信方式 | UART/SPI/I2C | 接收STM32指令,返回数据 || 依赖关系 | 不依赖ESP32,可独立运行 | 仅作为通信扩展 |🔹 关键点: - STM32 必须能独立运行(即使 ESP32 断开,小车仍能完成基本功能)。 - ESP32 仅作为“无线透传模块”,不参与核心控制(如 PID 计算、电机驱动)。 —## 2. 硬件连接方案### (1)UART 串口通信(推荐)- STM32(USART) ↔ ESP32(UART) - STM32 发送控制指令(如 SPEED=100,ANGLE=30
)。 - ESP32 接收后通过 WiFi/蓝牙 转发给手机/电脑。 - ESP32 接收手机指令后,通过串口传给 STM32 执行。 接线示例:| STM32 | ESP32 ||-------|-------|| TX (PA9) | RX (GPIO16) || RX (PA10) | TX (GPIO17) || GND | GND |### (2)SPI/I2C(高速数据传输,适合摄像头)- 如果 ESP32-CAM 需要传输图像数据,可以用 SPI 或 I2C 发送压缩后的数据(如 JPEG 流)。 - STM32 解析关键数据(如颜色识别、目标跟踪),但 不依赖 ESP32 做决策。 —## 3. 软件实现(STM32+ESP32 协同代码)### (1)STM32 主控代码(Keil/STM32CubeIDE)c// STM32 通过 UART 发送控制指令给 ESP32void SendToESP32(char* command) { HAL_UART_Transmit(&huart1, (uint8_t*)command, strlen(command), 100);}// STM32 接收 ESP32 的指令(如手机发来的"F"代表前进)void ReceiveFromESP32() { char buffer[10]; HAL_UART_Receive(&huart1, (uint8_t*)buffer, 1, 100); if (buffer[0] == 'F') { Motor_Forward(); // STM32 控制电机 }}
### (2)ESP32 辅助代码(Arduino)cpp#include <HardwareSerial.h>HardwareSerial SerialSTM32(2); // 使用 UART2 (GPIO16=RX, GPIO17=TX)void setup() { Serial.begin(115200); // 调试串口 SerialSTM32.begin(115200); // 与 STM32 通信 WiFi.begin("SSID", "PASS");// 连接 WiFi}void loop() { // 1. 接收手机指令,转发给 STM32 if (Serial.available()) { char cmd = Serial.read(); SerialSTM32.write(cmd); // 发送给 STM32 } // 2. 接收 STM32 数据,上传服务器 if (SerialSTM32.available()) { String data = SerialSTM32.readString(); WiFiClient client; client.connect("192.168.1.1", 80); client.print("GET /upload?data=" + data + " HTTP/1.1\r\n"); }}
—## 4. 如何确保符合比赛规则?### ✅ 检查点1. STM32 必须独立完成核心控制(如电机驱动、传感器处理)。 2. ESP32 仅作为通信模块,不能影响 STM32 的决策(如 PID 计算、路径规划)。 3. 可以拔掉 ESP32,小车仍能运行(证明 STM32 是真正的主控)。 ### ⚠️ 避免违规- ❌ 不能把 PID 控制算法放在 ESP32 上。 - ❌ 不能依赖 ESP32 做关键决策(如自动避障)。 - ❌ 不能使用 ESP32 直接控制电机(必须通过 STM32)。 —## 5. 推荐方案| 需求 | 推荐方案 ||----------|-------------|| 基础控制(手机遥控) | STM32 + ESP32(UART 通信) || 摄像头+目标识别 | STM32 做决策,ESP32 仅传图 || 超低延迟控制 | STM32 单独控制,ESP32 仅用于调试 |—### 结论- 如果比赛强制 STM32 做主控,ESP32 可以作为 无线通信模块,但 不能参与核心控制。 - 推荐 UART 通信,STM32 发指令,ESP32 透传 WiFi/蓝牙。 - 确保 STM32 能独立运行,避免依赖 ESP32。 这样既能 符合比赛规则,又能 利用 ESP32 的无线功能! 🚀