# esp4stm32 **Repository Path**: duck_6/esp4stm32 ## Basic Information - **Project Name**: esp4stm32 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-27 - **Last Updated**: 2026-09-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # esp4stm32 — ESP32 给 STM32 小车做 WiFi 桥 让 **轮趣 L150Pro(C30D-V2.2 主板 / STM32F407VET6)** 通过 WiFi 遥控: ESP32 收到电脑/手机发来的指令 → 串口送进 STM32 → 驱动电机; 同时把主控的遥测回传,并把 **WiFi 信息 + 任意文字显示在主控 OLED 上**。 > 已实机跑通并验证:链路 `link:true`、遥测 20 Hz、电池 11.5 V、发消息后主控回执 `stm_ack` 递增、电脑端遥控 GUI 前后左右可控。 --- ## 目录结构 ``` docs/ 接线说明.md ← 先看这个:ESP32 接主控哪个口、怎么接、怎么判断通了 烧录命令.md ← ESP32 / STM32 / 电脑端 三套命令,复制即用 协议.md ← 速度帧、遥测帧、UDP/HTTP 接口的字节级说明 data_path.html ← 一张图看懂数据从 WiFi 到轮子的 8 段路 oled_page_preview.html ← 车屏显示效果预览 esp32/ micropython/main.py ← 桥接程序(MicroPython,实测烧的就是这个) arduino/esp32_wifi_bridge.ino ← 同一套逻辑的 Arduino 版(备用) stm32/ ← Keil MDK 工程源码(C30D-V2.2,含修改过的 WiFi/OLED 代码) USER/WHEELTEC.uvprojx HARDWARE/, BALANCE/, CORE/, FWLIB/, FreeRTOS/, ICM20948/, SYSTEM/ firmware/ WHEELTEC_WiFi_OLED.hex ← 编译好的固件,可直接烧 firmware_changes.diff ← 相对原厂固件的全部改动 pc/ car_gui.py ← 遥控 GUI(鼠标按住就走/松开就停 + 键盘 WASD + 遥测显示) udp_cmd.py ← 命令行发单条指令 tools/ ← 离线自检脚本(协议编解码、固件解析、MicroPython 逻辑) ``` --- ## 三步跑起来 **1) 接线**:ESP32-S2 `GPIO17→CN4-3(PD2)`、`GPIO16→CN4-1(PC12)`、`GND→CN4-2`、`5V→CN4-4`, 并**拔掉原车 N10 激光雷达**(同口复用)。细节与排查见 [docs/接线说明.md](docs/接线说明.md)。 **2) 烧录**: ```bash # ESP32-S2: 擦除 → 烧 MicroPython → 拷 main.py(先改成你自己的 WiFi 名/密码) python -m esptool --port COM5 --chip esp32s2 erase_flash python -m esptool --port COM5 --chip esp32s2 --baud 460800 write_flash -z 0x1000 esp32s2_mp.bin python -m mpremote connect COM5 fs cp esp32/micropython/main.py :main.py python -m mpremote connect COM5 reset # STM32: ST-Link 接 SWD, 直接烧现成固件 "D:\Keil_v5\ST-LINK Utility\ST-LINK_CLI.exe" -c SWD HOTPLUG -ME -P "stm32\firmware\WHEELTEC_WiFi_OLED.hex" -V -Run ``` 全部命令(含从源码用 Keil 编译)见 [docs/烧录命令.md](docs/烧录命令.md)。 **3) 遥控**: ```bash python pc/car_gui.py # GUI: 九宫格按住就走, 键盘 WASD/方向键, 空格急停 python pc/car_gui.py --probe # 只测通路(车不动) python pc/udp_cmd.py 192.168.1.50 V 300 0 0 # 命令行: 前进 0.3 m/s ``` 只依赖 Python 3 标准库(tkinter / socket / urllib)。 --- ## 打包成 exe(可选,双击即用) ```bash uv tool install pyinstaller pyinstaller --onefile --windowed --name car_gui --noconfirm --clean car_gui.py ``` * 程序做了无控制台适配:`--probe` / `--selftest` 的结果会弹成窗口,同时写日志 `%TEMP%\car_gui.log` * 双击 exe 就是遥控界面;`car_gui.exe --ip <车IP>` 可指定地址 * onefile 首次启动需解压,约 2~4 秒出界面;部分杀软会误报,加白名单即可 * 生成的 exe 体积约 12MB,不适合放进 git,建议作为 Release 附件分发 ## ESP32 端配置(`esp32/micropython/main.py` 顶部) ```python WIFI_SSID = "YOUR_WIFI_SSID" # ← 改成你的 WiFi WIFI_PASS = "YOUR_WIFI_PASSWORD" # ← 改成你的密码 LINK_UART_ID = 1 # ESP32-S2 只有 UART0/1 → 用 1;经典 ESP32 用 2 LINK_MODE_ROS = 1 # 1 = 走 CN4/UART5 的 11 字节速度帧(推荐, 本仓库方案A) UDP_PORT = 8888 # 电脑端 UDP 指令端口 CMD_TIMEOUT_MS = 500 # 断流自动停车 ``` ## STM32 端改了什么 原厂固件基础上加了 WiFi/OLED 支持(完整 diff 在 `stm32/firmware/firmware_changes.diff`): * `HARDWARE/usartx.c/.h`:UART5 收 WiFi 文本行(`#W` / `#M`)解析、回执 `!M` 发送、WiFi 数据统计 * `BALANCE/show.c/.h`:OLED 增加 WiFi 页(IP / 链路+RSSI / SSID / 速度 / 消息两行滚动), `OLED_ONLY_WIFI=1` 时只显示 WiFi 信息,长按按键仍可切页 * 文本通道与二进制速度帧**互斥**:只在帧空闲时接受文本,避免帧内出现 `0x23` 被误判 * 原有功能(蓝牙 APP / PS2 / 航模遥控 / 陀螺仪零点校准)保持不动 > STM32 源码是 **GBK 编码**(Keil 中文环境默认),改动时不要存成 UTF-8,否则中文注释乱码。 --- ## 实机验证记录(2026-09) | 项目 | 结果 | |---|---| | ESP32-S2 联网 | SSID 连接成功,RSSI ≈ -36 dBm,拿到 IP | | ESP32 ↔ STM32 串口 | `link:true`,`age_ms` 15~40 ms,遥测 20 Hz 稳定 | | 电池电压 | 11.5 V(主控回传 `mv`) | | 文字下发 | `/msg?text=...` → 车屏显示,`stm_ack` 递增(主控确认收到) | | 遥控链路 | UDP `V 300 0 0` → ESP32 回 `{"ok":1}` → 主控收到并驱动电机 | | 电脑端 GUI 自检 | 鼠标/键盘/指令映射 18 项全通过(dry-run 不发指令) | | 固件编译 | Keil ARMCC v5.06:0 error / 0 warning,Code=42290 | ## 已知坑(都踩过) 1. **CN4 上不能同时插激光雷达**——同一组 UART5 引脚。 2. **ESP32-S2 没有 UART2**,代码里必须用 `UART(1, tx=Pin(17), rx=Pin(16))`。 3. 普通串口助手读 ESP32 串口时若没把 **DTR/RTS 置为无效电平**,ESP32-S2 会被反复复位。 4. 主控**上电前 10 秒**会丢弃串口指令(原厂 `CONTROL_DELAY`),别急。 5. 车上**使能开关**必须拨到 ON;电池低于 10 V 电机也不会动。 6. 若已用蓝牙 APP/PS2 手柄/航模遥控接管,主控只认那一路,WiFi 指令会被忽略。 7. 车屏字体只有 ASCII,中文会显示成空白——请用英文/数字发消息。 ## 许可 STM32 侧代码来自轮趣科技原厂工程(随车资料),改动部分照原样分享,仅供学习调试用; ESP32/电脑端代码可自由使用。