Versioned EEPROM Settings on Arduino

As firmware evolves, stored settings formats change. If EEPROM layout is not versioned, upgrades can silently load garbage and produce hard-to-diagnose behavior.

Rust no_std Patterns for Embedded Systems

Writing `no_std` Rust firmware requires different habits than server Rust. Memory is constrained, timing is strict, and panic strategy must be deliberate.

Embedded State Machines in Rust

Many firmware bugs are actually invalid state transitions. Rust helps by making state explicit and hard to misuse, modelling each controller state as an enum variant with transitions that consume the old state and return the next one.

Rust Cross-Compilation for ARM Targets

Cross-compiling Rust is easy to start and hard to standardize across teams. I treat toolchains as part of the project, not local machine state. Target triples, linker config, and environment variables live in versioned project files.

Testing Hardware Abstractions in Rust

Hardware abstraction layers are where embedded code often becomes difficult to test. I design traits around capabilities, then keep business logic independent from concrete drivers.

ESP32 Wi-Fi Recovery Patterns for Unstable Networks

Many ESP32 projects run perfectly on a developer desk and collapse once deployed in apartments, offices, or industrial spaces with noisy Wi-Fi conditions. The main mistake is treating every disconnect as an exceptional event.

LoRa Sensor Node Power Budgeting in Practice

LoRa is chosen for range and efficiency, but many nodes still miss battery targets by a large margin. The reason is usually poor budgeting assumptions and missing field validation.