Un ESP32 può ascoltare senza aggiungere un solo componente analogico. Basta un microfono MEMS omnidirezionale INMP441, collegato su bus I2S, per ottenere campioni audio digitali a 24 bit. Il progetto di Rui Santos e Sara Santos è una guida introduttiva a questo abbinamento, scritta per Arduino IDE, e propone tre esempi: la misura dell’intensità sonora in RMS, la visualizzazione della forma d’onda e l’accensione di un’uscita al battito di mani.
Il modulo INMP441 va alimentato a 3,3 V e comunica su I2S. Il pin L/R sceglie il canale: collegato a GND seleziona il canale sinistro, collegato a 3V3 seleziona il canale destro. Il pin WS, detto anche LRCLK, va collegato a un GPIO dell’ESP32, così come il pin SCK, detto anche BCLK. Il pin SD porta i dati audio e va collegato a un GPIO dell’ESP32 in ingresso.
Configurare il driver I2S e leggere i campioni a 24 bit
Il driver si configura con due strutture. La i2s_config_t imposta la modalità master in ricezione, il sample rate, i bit per campione e il formato del canale. La i2s_pin_config_t assegna i pin. Poi si avvia tutto con i2s_driver_install, i2s_set_pin e i2s_zero_dma_buffer.
Nel codice il sample rate è di 16000 campioni al secondo, il buffer per il calcolo dell’RMS è di 512 campioni e il DMA è configurato con 8 buffer. Il buffer dei campioni è di tipo int32_t, cioè a 32 bit per campione. Il dato audio del microfono è a 24 bit ed è allineato a sinistra dentro la parola a 32 bit, quindi il campione va shiftato di 8 bit a destra prima dei calcoli. Il baud rate del monitor seriale è 115200.
- GPIO 40 per WS, il Word Select
- GPIO 42 per SCK, il Serial Clock
- GPIO 41 per SD, il Serial Data
- L/R a GND per il canale sinistro, a 3V3 per il destro
- Alimentazione del modulo a 3,3 V
I tre esempi partono dagli stessi campioni. Nel primo i valori letti con i2s_read vengono elevati al quadrato, sommati, mediati e di cui si estrae la radice quadrata, per ottenere il valore RMS, cioè l’indicatore dell’intensità sonora. Nel secondo gli stessi campioni finiscono sul Serial Plotter, che ne disegna la forma d’onda. Nel terzo il livello sonoro supera una soglia e l’ESP32 accende o spegne un’uscita al battito di mani. Chi vuole rifare il circuito trova la breakout con il microfono I2S MEMS già pronta, senza saldare il componente a montaggio superficiale.
Cosa serve per rifare i tre esempi sul banco
Serve una scheda ESP32-S3, un modulo INMP441, alcuni fili di collegamento e una breadboard. Lato software bastano Arduino IDE e il driver i2s.h, incluso di default nel core Arduino ESP32. Non servono amplificatori, filtri o convertitori esterni, perché il microfono restituisce già dati digitali.
Chi vuole ripercorrere il lavoro dall’inizio trova sul sito del maker la guida di Rui Santos e Sara Santos con il cablaggio, la configurazione del driver e i tre sketch completi. Gli stessi esempi si possono adattare a un’altra scheda della famiglia ESP32, cambiando i GPIO assegnati a WS, SCK e SD.
Fonte: https://randomnerdtutorials.com/esp32-inmp441-i2s-microphone-arduino/
