Características

El kode dot integra un micrófono MEMS digital. Este tipo de micrófonos son muy comunes en dispositivos electrónicos modernos y dan una gran fiabilidad ya que no dependen de ninguna parte analógica.

Esquema de conexión

El micrófono está conectado al ESP32-S3 de la siguiente manera:
MicrófonoESP32-S3
SCKGPIO38
WSGPIO45
DINGPIO21

Librerías recomendadas

Arduino

ESP-IDF

El uso de ESP-ADF es para usuarios avanzados. Si no tienes experiencia en este framework, te recomendamos usar la librería de Arduino.

Ejemplo de código

Este código graba 5 segundos de audio y lo guarda en la microSD en formato WAV.
record_to_microsd.ino
/**
 * Graba 5 segundos de audio por I2S (48 kHz, 32-bit, mono) y los guarda en /sdcard/test.wav.
 * Usa el bus I2S del ESP32-S3 y una microSD en modo SD_MMC de 1 bit con pines personalizados.
 * Muestra por Serial el estado de inicialización, grabación y escritura en la tarjeta.
*/
/* ───────── KODE | docs.kode.diy ───────── */

#include "ESP_I2S.h"
#include "FS.h"
#include "SD_MMC.h"

/* Asignación de pines I2S */
const uint8_t I2S_SCK   = 38;  /* Pin de reloj serie (SCK) */
const uint8_t I2S_WS    = 45;  /* Pin de selección de palabra (LRCLK) */
const uint8_t I2S_DIN   = 21;  /* Pin de entrada de datos (SD) */

/* Pines de la tarjeta SD para SD_MMC en modo 1 bit */
const uint8_t SD_CMD    = 5;   /* Pin de comando (CMD) */
const uint8_t SD_CLK    = 6;   /* Pin de reloj (CLK) */
const uint8_t SD_DATA0  = 7;   /* Pin de datos 0 (D0) */

/* Instancia de la interfaz I2S */
I2SClass i2s;

/* Variables para almacenar el WAV y su tamaño */
uint8_t *wav_buffer;
size_t wav_size;

void setup() {
  /* Inicializa el puerto serie para depuración */
  Serial.begin(115200);
  Serial.println("Starting setup...");

  /* Configura los pines I2S (MCLK no usado: pasar -1) */
  i2s.setPins(I2S_SCK, I2S_WS, -1, I2S_DIN);

  /* Inicializa I2S en modo estándar: 48 kHz, 32 bits, mono, slot alineado a izquierda */
  Serial.println("Initializing I2S bus...");
  if (!i2s.begin(
        I2S_MODE_STD,
        48000,
        I2S_DATA_BIT_WIDTH_32BIT,
        I2S_SLOT_MODE_MONO,
        I2S_STD_SLOT_LEFT)) {
    Serial.println("Failed to initialize I2S bus!");
    return;
  }
  Serial.println("I2S bus initialized.");

  /* Configura los pines de SD_MMC para modo 1 bit */
  Serial.println("Configuring SD card pins...");
  if (!SD_MMC.setPins(SD_CLK, SD_CMD, SD_DATA0)) {
    Serial.println("Failed to configure SD pins!");
    return;
  }

  /* Monta la tarjeta SD en "/sdcard" */
  Serial.println("Mounting SD card...");
  if (!SD_MMC.begin("/sdcard", true)) {  /* true => bus de 1 bit */
    Serial.println("Failed to initialize SD card!");
    return;
  }
  Serial.println("SD card mounted successfully.");

  /* Aviso de inicio de grabación */
  Serial.println("Recording 5 seconds of audio...");

  /* Graba 5 s de audio WAV en wav_buffer */
  wav_buffer = i2s.recordWAV(5, &wav_size);

  /* Abre el archivo de salida en la SD */
  File file = SD_MMC.open("/test.wav", FILE_WRITE);
  if (!file) {
    Serial.println("Failed to open file for writing!");
    return;
  }

  /* Escribe los datos grabados y verifica escritura completa */
  Serial.println("Writing audio data to file...");
  if (file.write(wav_buffer, wav_size) != wav_size) {
    Serial.println("Failed to write audio data to file!");
    file.close();
    return;
  }

  /* Cierra el archivo al terminar */
  file.close();
  Serial.println("Audio recording and save complete.");
}

void loop() {
  delay(10000);
}

Descarga de ejemplos

Puedes probar los códigos de ejemplo mediante el IDE de Arduino o el IDE de ESP-IDF o descargar los códigos en nuestro drive: Ejemplos de audio