Notes from the bench
This site documents the engineering behind a small ESP32-P4 combat robot and the side projects around it: firmware on ESP-IDF, motor drivers, IMUs, low-latency networking, batteries, and PCB design. Every article comes from a real bug or a real decision, with the measurements that settled it.
Latest articles
DRV8833 vs MX1508 for N20 Motors on a 2S Pack: Why the Cheap One Stays on the Shelf
Two common dual H-bridge drivers compared for a small 7.4 V robot. The DRV8833 has real protection and rarely dies; the MX1508 sits too close to its voltage ceiling to trust with regenerative braking.
ESP-IDF on Windows: Five Build Failures That Are Not Your Code
Non-ASCII paths, file(GLOB) not seeing new sources, the wrong Python, Git Bash vs PowerShell, and a build directory that cannot be moved. Each one wasted an afternoon; here is the two-line diagnosis for each.
Choosing a Battery for a Small ESP32 Robot: Why Boost Converters, 18650s and Series 1S Packs All Lost
Four N20 motors can stall at over 3 A combined, and a consumer LiPo cell with a 2 A protection board cannot deliver it. The budget, the four rejected options, and the 2S high-discharge pack that won.
Your "MPU6050" Module Is Probably an MPU6500: WHO_AM_I, AD0, and a Self-Healing I²C Driver
A cheap IMU board labelled MPU6050 returned WHO_AM_I = 0x70, and a floating AD0 pin made it disappear from the bus entirely. How to write a driver that copes with both, plus the streaming design that gets 44 Hz attitude over UDP.
Mecanum Wheel Control on ESP32: Keep All Motion Logic in the Firmware
The app sends intent (strafe, drive, rotate); the ESP32 does the wheel mixing, gear limits, dead-band compensation and fail-safe. Why that split is right, and the numbers behind it.
Why I Replaced MQTT with Direct IPv6 UDP for Robot Joystick Control
Cloud MQTT relay jitter kept tripping a 300 ms link-loss watchdog and made the motors stutter. A direct UDP channel over IPv6, discovered via the MQTT heartbeat, fixed it. Design notes and packet format.
ESP32-P4 + C6 Wi-Fi: When esp_wifi_set_ps() Does Nothing and Your First Packet Takes 1 Second
On the ESP32-P4-WIFI6 the radio lives on a separate C6 chip over SDIO, and the P4 cannot switch off its power saving. Here is how to get 10 ms UDP latency anyway.
"Failed to create socket" on ESP32: You Have Run Out of LWIP Sockets
A voice assistant that went silent after a firmware update turned out to be an exhausted LWIP socket pool. How to recognise it, why the symptom misleads, and the one Kconfig value to change.