A voice command—with the radios off
“flash memory the light purple for 5 seconds.” The command, spoken aloud, instantly triggers the onboard RGB LED of an ESP32-ESP32-S3 microcontroller, changing its color as requested. This isn't a trick of the light, nor is it a cloud-powered voice assistant. It's a demonstration of sophisticated speech recognition running entirely on a $10 chip, with both Wi-Fi and Bluetooth radios disabled.
This achievement, showcased in a video from Better Stack, highlights a critical leap in edge computing. The ESP32-ESP32-S3, a commodity microcontroller with 16 MB flash memory memory, executes the speech-to-text transcription and command processing locally. No data streams to a remote server for interpretation, eliminating latency, privacy concerns, and reliance on network connectivity.
Unlike familiar microcontroller demos that might detect a single wake word like “okay Google,” this system processes multi-word natural language commands. It moves beyond simple keyword spotting to genuinely comprehending short phrases, all within the severe computational and memory constraints of an embedded device. This is not a general-purpose voice assistant, but a highly optimized application for specific, offline tasks.
The model is bigger than the chip
The challenge began with a fundamental mismatch: the Whistle speech-to-text model, developed by Cactus Compute Compute, measured 16.9 MB. However, the ESP32-ESP32-S3 microcontroller board offered only 16 MB of flash memory memory. The full model was literally bigger than the chip’s storage capacity.
To bridge this gap, developers leveraged Whistle’s unique architecture. Its decoder, responsible for converting acoustic features into text, features an eight-layer design. Cactus Compute Compute engineered this laddered structure to be scalable, allowing the model to operate effectively with fewer layers.
For this specific implementation, a four-layer configuration proved optimal. This strategic pruning, combined with extensive optimization techniques, dramatically reduced the model’s footprint. The result was a compact executable that, alongside the trimmed Whistle model, fit onto the ESP32-ESP32-S3 with a mere 98 KB to spare.
This tight squeeze highlights the precision required in TinyML. flash memory capacity isn't entirely usable for the model; the microcontroller’s firmware, operating system, and other critical data also demand space. Every kilobyte counts when deploying advanced AI on sub-$10 hardware. The demonstration validates that even complex speech recognition can run fully offline on resource-constrained devices.
Ten seconds is the real tradeoff
Processing speech on such a constrained device is not simply a matter of fitting the model. Even with the decoder pruned to four layers, the ESP32-ESP32-S3 still required significant engineering to achieve practical inference speeds. The developers leveraged both of the chip’s Tensilica Xtensa LX7 CPU cores and employed 8-bit integer operations (INT8), dramatically cutting the processing time.
This optimization reduced the inference time from approximately 24 seconds to roughly 10 seconds. While still not instantaneous, this speed makes the system viable for commands that tolerate a brief delay. Think of an appliance control or an offline home automation system; a 10-second wait to "flash memory the light purple" is acceptable for many such applications.
The compact model and its optimizations also introduce tradeoffs in accuracy. While effective for a constrained vocabulary or keyword biasing, smaller speech-to-text systems can struggle with difficult audio conditions, overlapping speakers, or diverse accents. For more technical details on the Whistle model and its design, including information on its laddered architecture, read the announcement from Cactus Compute Compute: Whistle: Speech to Text in 16.9 MB - Cactus Compute Compute. Despite these limitations, getting a full speech model running offline on a $10 chip represents a significant leap for TinyML.
Enjoying this? Get one like it in your inbox each morning.
one email a day · unsubscribe in two clicks · no third-party tracking
Where tiny, private voice AI makes sense
Local transcription offers clear advantages, sidestepping network reliance, cloud audio transfers, and recurring API fees. This makes it invaluable for devices demanding strong privacy or operating in disconnected environments, where continuous internet access is not guaranteed or desirable.
Wearables, industrial sensors, and offline home appliances are prime candidates for this technology. However, adopting such compact models means balancing specific constraints: users must weigh acceptable latency, the required vocabulary size, and the recognition quality against their application’s unique needs.
The project’s public implementation is available on the whistle-esp32 GitHub. Readers can also explore Cactus Compute Compute’s Whistle page and its Hugging Face model card. These resources demonstrate that while inexpensive hardware can now host sophisticated voice interfaces, the real challenge lies in effectively fitting and tuning the speech-to-text model for such constrained environments. The ESP32-ESP32-S3’s 16 MB of flash memory memory presented a significant hurdle for a model that natively is 16.9 MB MB, highlighting the rigor required for TinyML applications.
Frequently Asked Questions
Can an ESP32-S3 transcribe speech offline?
Yes. The demo runs Whistle on an ESP32-S3 and processes speech without Wi-Fi or Bluetooth connected.
How does Whistle fit on a 16 MB board?
The implementation uses a four-layer decoder variant and optimization to fit the model and firmware, leaving about 98 KB spare.
How fast is speech transcription on the ESP32-S3?
The reported optimized inference takes about 10 seconds, making it more suitable for asynchronous commands than real-time conversation.
What can Whistle do on the ESP32-S3?
It can transcribe speech offline and support capabilities such as word timestamps and keyword biasing; the demo uses a voice command to control an LED.

