Prueba Esp32-CAM con micrófono INMP441 y el amplificador MAX98357
Esta es una excelente combinación para audio. Estás utilizando el protocolo I2S (Inter-IC Sound), lo cual es ideal porque mantiene la señal digital y evita el ruido analógico que suele afectar a la ESP32-CAM.
Para que esto funcione, configuraremos la ESP32 como el «Cerebro» que recibe audio del INMP441 (Entrada) y lo envía inmediatamente al MAX98357 (Salida). Esto creará un efecto de «pasarela» o megáfono en tiempo real.
Conexiones (Pinout)
Es vital conectar correctamente los pines, ya que la ESP32-CAM tiene pocos pines libres debido a la cámara y la SD.
| Componente | Pin Dispositivo | Pin ESP32-CAM | Notas |
| INMP441 | VCC / GND | 3.3V / GND | Alimentación |
| SD (Serial Data) | GPIO 13 | Datos de entrada | |
| WS (Word Select) | GPIO 15 | Reloj de palabra | |
| SCK (Serial Clock) | GPIO 14 | Reloj de bits | |
| L/R | GND | Selecciona canal izquierdo | |
| MAX98357 | Vin / GND | 5V / GND | El amplificador rinde mejor a 5V |
| DIN (Data In) | GPIO 2 | Datos de salida | |
| LRC (Left/Right) | GPIO 15 | Compartido con INMP441 | |
| BCLK (Bit Clock) | GPIO 14 | Compartido con INMP441 |
GAIN DEL MAX98357 VA CONECTADO A TIERRA
[!IMPORTANT]
Los pines SCK/BCLK y WS/LRC son compartidos para sincronizar ambos dispositivos al mismo ritmo.
Código de Prueba (Arduino IDE)
Copia este código. No necesitas librerías externas complejas, ya que usaremos el driver i2s.h integrado en el núcleo de ESP32.
#include <driver/i2s.h>
// Configuración de Pines
#define I2S_WS 15
#define I2S_SD_IN 13 // Micrófono (INMP441)
#define I2S_SD_OUT 2 // Amplificador (MAX98357)
#define I2S_SCK 14
#define SAMPLE_RATE 16000
#define BUFFER_SIZE 512
void setup() {
Serial.begin(115200);
// 1. Configuración del Driver I2S
i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_TX), // Rx y Tx simultáneos
.sample_rate = SAMPLE_RATE,
.bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT, // El INMP441 usa 24-bit en slots de 32
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_STAND_I2S,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 8,
.dma_buf_len = BUFFER_SIZE,
.use_apll = false
};
// 2. Configuración de Pines
i2s_pin_config_t pin_config = {
.bck_io_num = I2S_SCK,
.ws_io_num = I2S_WS,
.data_out_num = I2S_SD_OUT,
.data_in_num = I2S_SD_IN
};
// 3. Instalar y activar
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
i2s_set_pin(I2S_NUM_0, &pin_config);
i2s_zero_dma_buffer(I2S_NUM_0);
Serial.println("Sistema de audio listo. Habla al micrófono...");
}
void loop() {
uint8_t buffer[BUFFER_SIZE];
size_t bytes_read = 0;
size_t bytes_written = 0;
// Leer audio del micrófono
i2s_read(I2S_NUM_0, &buffer, BUFFER_SIZE, &bytes_read, portMAX_DELAY);
// Enviar audio directamente al amplificador
i2s_write(I2S_NUM_0, &buffer, bytes_read, &bytes_written, portMAX_DELAY);
}
Notas de Depuración
-
Ruido de estática: Si escuchas un siseo constante, asegúrate de que el pin L/R del INMP441 esté conectado físicamente a GND.
-
Alimentación: La ESP32-CAM consume mucha energía. Si el audio se corta al subir el volumen, es posible que necesites una fuente de alimentación externa de 5V/2A para alimentar el MAX98357.
