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.

C++

#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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *