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.
Why Your ESP32 OTA Update Silently Reboots: Run It in Its Own Task
An OTA download that resets the board with no panic and no log line is almost always the task watchdog. The cure is a dedicated FreeRTOS task, not a bigger timeout.
ESP32-P4 GPIOs Stuck at 1.2 V: The Internal LDO Power Domain Trap
Four unrelated-looking motor and encoder bugs on an ESP32-P4 board turned out to be one missing line: GPIO45-54 sit on a power domain fed by the chip internal LDO, and nobody had turned it on.