El kode dot integra un altavoz de 1W conectado a un amplificador. Así, solo te tienes que preocupar de darle sonido a tus proyectos a través del bus I2S y el amplificador se encargará de hacer todo el trabajo.
Este código reproduce el tono que especifiques en la variable frequency.
speaker_tone.ino
Copy
/** * Genera un tono cuadrado por I2S (48 kHz, 32-bit, mono) y habilita el amplificador vía expansor I/O. * El tono se guarda en flujo I2S continuo; el expansor activa la etapa de audio. * Usa pines personalizados para I2S y para el expansor TCA95XX_16BIT.*//* ───────── KODE | docs.kode.diy ───────── */#include <ESP_I2S.h>#include <esp_io_expander.hpp>/* Configuración de pines del expansor */#define I2C_SCL_PIN (47)#define I2C_SDA_PIN (48)#define I2C_ADDR (0x20)/* Pines de la interfaz I2S */const uint8_t I2S_SCK = 38; // Reloj serie (SCK)const uint8_t I2S_WS = 45; // Word Select / LRCLKconst uint8_t I2S_DOUT = 46; // Salida de datos (SD)/* Parámetros de la señal de audio */const int frequency = 300; // Frecuencia de la onda cuadrada en Hzconst int amplitude = 500; // Amplitud de la onda cuadrada/* Variables de estado para generación de señal */int32_t sample = amplitude; // Muestra actualint count = 0; // Contador de muestras/* Instancias globales */I2SClass i2s; // Objeto interfaz I2Sesp_expander::Base *expander = nullptr; // Puntero al expansorvoid setup() { Serial.begin(115200); Serial.println("Simple I2S tone"); /* Configura los pines de I2S (sin MCLK: pasar -1) */ i2s.setPins(I2S_SCK, I2S_WS, I2S_DOUT, -1); /* Inicializa I2S: modo estándar, 48 kHz, 32 bits, mono, ranura izquierda */ 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!"); while (1); // Detener en caso de fallo } Serial.println("I2S bus initialized."); /* Inicializa el expansor de E/S */ expander = new esp_expander::TCA95XX_16BIT(I2C_SCL_PIN, I2C_SDA_PIN, I2C_ADDR); expander->init(); expander->begin(); /* Configura el pin 3 del expansor como salida para habilitar el amplificador */ expander->pinMode(3, OUTPUT); expander->digitalWrite(3, HIGH); /* Habilita el amplificador */}void loop() { /* Conmuta el signo cada media longitud de onda para crear una cuadrada */ if (count % (48000 / frequency) == 0) { sample = -sample; } /* Escribe la muestra (mono) */ i2s.write(sample); // Canal izquierdo /* Incrementa el contador de muestras */ count++;}