Custom Wake Word on ESP32-S3 with INT8 TFLite Micro

August 2026 · ESP-IDF · TFLite Micro · Custom wake word

The open-source ESP32 component accepts 16 kHz PCM, extracts Mel features and runs an INT8 TFLite wake-word model locally. Live microphone audio does not need a cloud inference service.

Verified boundary: the complete example has been tested on an ESP32-S3-HMI-DevKit at 240 MHz with 8 MB octal PSRAM, 16 MB flash, four MEMS microphones through ES7210, ESP-IDF 6.0.1 and esp-tflite-micro 1.3.5. Other ESP32-S3 boards require microphone/codec BSP and memory adaptation; other ESP32 families are not yet validated.

Measured performance

On the tested board, Mel extraction takes approximately 28.5–33 ms and TFLite Invoke() approximately 154.9–155.7 ms. The newest 98-frame window is scheduled every 160 ms. Results vary by model and target.

Run the tested example

The public demo detects Hey Robot, then accepts commands that change an LED color. The model file and head.h are a matched pair and must be replaced together.

git clone https://github.com/voicute/onnx-wakeword.git
cd onnx-wakeword/esp32/examples/esp32s3_hmi_devkit
idf.py set-target esp32s3
python patch_led_strip.py
idf.py build
idf.py -p COM6 flash monitor

Use your own wake word

A training pipeline can export a matched INT8 TFLite model and head for a custom English, German, French, Japanese or Chinese phrase. Evaluate the Basic model first, then validate it again on the final microphone, distance and background noise. Keyword-specific false triggers may require examples of those sounds as custom negative data.

Open ESP-IDF component and tested example: onnx-wakeword/esp32.

Disclosure: Voicute develops the open-source ESP32 inference component and a separate commercial service for training and exporting custom models.
Train and evaluate a Basic wake-word model