Características

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.

Esquema de conexión

El altavoz está conectado al ESP32-S3 de la siguiente manera:
MicrófonoESP32-S3
SCKGPIO38
WSGPIO45
DOUTGPIO46
SDEXP3
El amplificador por defecto está apagado para no gastar energía. Para encenderlo, pon el pin EXP3 del expansor de pines en HIGH.

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 reproduce el tono que especifiques en la variable frequency.
speaker_tone.ino
/**
 * 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 / LRCLK
const 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 Hz
const int amplitude   = 500;    // Amplitud de la onda cuadrada

/* Variables de estado para generación de señal */
int32_t sample = amplitude;  // Muestra actual
int count = 0;               // Contador de muestras

/* Instancias globales */
I2SClass i2s;                // Objeto interfaz I2S
esp_expander::Base *expander = nullptr;  // Puntero al expansor

void 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++;
}

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