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.
Este código graba 5 segundos de audio y lo guarda en la microSD en formato WAV.
record_to_microsd.ino
Copy
/** * 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);}