Task-free I2S speaker (audio sink) component for ESP-IDF v6.0.x, built on the modern i2s_std driver. Application calls a blocking i2s_spk_send_buffer() to hand off pre-filled audio buffers; there is no internal FreeRTOS task and no TX-side application callback — the blocking call's return is the sole completion signal.
Task-free, ISR-driven I2S microphone component for ESP-IDF v6.0.x, built on the modern i2s_std driver. Application posts pre-allocated buffers; the component copies captured audio into them from ISR context and invokes an application callback. No internal FreeRTOS task.
WiFi lifecycle manager for ESP-IDF. Handles scanning, credential-based reconnection, and BLE provisioning as a single owned component — including disconnect recovery, multi-AP priority, time-window deadlines, retry-in-place provisioning and NVS-persisted credentials with LRU ranking. Other components observe state through an event interface and never touch esp_wifi directly.
ESP-IDF component for controlling air conditioners over infrared using the ESP32 RMT peripheral. Provides a common IR transmission layer with protocol implementations for Gree, Haier, and Midea air conditioners.
PWM-driven matrix keypad driver for ESP-IDF using row pulse-width encoding and MCPWM capture for simultaneous multi-key detection. Supports multiple keys per column with hardware-assisted decoding.
Streaming region-of-interest JPEG decoder for ESP32 based on tjpgd. Stream JPEG data in from any source, stream decoded pixel rows out to your callback — without loading the full image into RAM, without a seekable source, without a full-frame output buffer. Stream in from a file, a flash blob, an HTTP response body, a UART byte stream, a FreeRTOS queue, a TCP socket, or a DMA ring buffer. If you can hand bytes to a callback, you can decode a JPEG.
Timestamp service for ESP32 that works without a dedicated RTC module. Starts from build time on every boot, then corrects via SNTP sync or manual set — whichever suits the application. All corrections are explicit and observable via jump callbacks, safe for logging systems.