Wake Word Detection with ESP32-S3: A Device That Responds to Voice Commands
Advanced13/6/2026- Author: IoTSpark Maker

Wake Word Detection with ESP32-S3: A Device That Responds to Voice Commands

This project shows you how to build a device that always listens through a microphone with an ESP32-S3 and an INMP441 I2S microphone — when the user says the programmed wake word, the device automatically wakes up and responds.

ESP32-S3Wake WordWakeNetESP-SRAIoTI2SINMP441
6 steps7 components
← Back to project
Detailed guide

ESP32-S3 to INMP441 I2S Microphone Wiring Diagram

Updated 31/08/2026

Overview of the ESP32-S3 and INMP441

The ESP32-S3 is a powerful microcontroller with audio-processing capability and WiFi/Bluetooth support. The INMP441 is an I2S microphone that captures high-quality audio, well suited for speech-recognition applications.

Wiring Diagram

Below is the wiring diagram between the ESP32-S3 and the INMP441 microphone:


ESP32-S3 Pin      INMP441 Pin
------------------------------
GPIO 35 (SCK)     SCK
GPIO 36 (WS)      WS
GPIO 37 (SD)      SD
GND               GND
3.3V              VDD

Connection Details

  • SCK (Serial Clock): connects to GPIO 35, ensuring a high data-transfer rate.

  • WS (Word Select): connects to GPIO 36, used to control the audio data format.

  • SD (Serial Data): connects to GPIO 37, where audio data is received from the microphone.

  • GND: a common ground shared by both devices.

  • 3.3V: supplies power to the INMP441 microphone. Check your specific INMP441 module's voltage requirement before connecting.

Tip: make sure the connections are solid to avoid signal loss while capturing audio.

Programming the ESP32-S3

To use the INMP441 microphone, you need to use the I2S library in the Arduino IDE. Below is a sample snippet to initialize the microphone:


#include 

void setup() {
    i2s_config_t i2s_config = {
        .mode = I2S_MODE_MASTER | I2S_MODE_RX,
        .sample_rate = 44100,
        .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
        .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
        .communication_format = I2S_COMM_FORMAT_I2S_MSB,
        .intr_alloc_flags = 0,
        .dma_buf_count = 8,
        .dma_buf_len = 1024,
        .use_apll = false
    };
    i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);

    i2s_pin_config_t pin_config = {
        .bck_io_num = 35,
        .ws_io_num = 36,
        .data_out_num = I2S_PIN_NO_CHANGE,
        .data_in_num = 37
    };
    i2s_set_pin(I2S_NUM_0, &pin_config);
}