> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kode.diy/llms.txt
> Use this file to discover all available pages before exploring further.

# Altavoz

# 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ófono | ESP32-S3 |
| --------- | -------- |
| SCK       | GPIO38   |
| WS        | GPIO45   |
| DOUT      | GPIO46   |
| SD        | EXP3     |

<Note>El amplificador por defecto está apagado para no gastar energía. Para encenderlo, pon el pin EXP3 del [expansor de pines](/es/kode-dot/io-expander) en HIGH.</Note>

## Librerías recomendadas

### Arduino

* [ESP\_I2S](https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP_I2S)
* [ESP32\_IO\_Expander](https://github.com/esp-arduino-libs/ESP32_IO_Expander)

### ESP-IDF

* [ESP-ADF](https://github.com/espressif/esp-adf)
* [esp\_io\_expander\_tca95xx\_16bit](https://components.espressif.com/components/espressif/esp_io_expander_tca95xx_16bit)

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

## Ejemplo de código

Este código **reproduce el tono que especifiques en la variable `frequency`.**

```cpp speaker_tone.ino lines icon="microchip" theme={null}
/**
 * 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](https://drive.google.com/drive/folders/1rJPxfOXun4p1ijXyRdREydyOMEUJju0u)
