Volver al inicio

Radio internet ESP32-S3: código y esquema

El proyecto de radio internet ESP32-S3 usa UDA1334 para audio I2S y pantalla OLED. La interfaz web permite cambiar estaciones e ingresar streams personalizados. Código completo y esquemas de conexión.

Radio Internet ESP32-S3 en una tarde: esquema + código
Advertisement 728x90

Radio por Internet con ESP32-S3: Circuito, Código e Interfaz Web

El ESP32-S3 N16R8 con DAC UDA1334 te permite construir una radio por internet mínima en una tarde. El proyecto utiliza I2S para la salida de audio, una pantalla OLED SSD1306 para el estado y una interfaz web para la gestión de emisoras. Soporta cambiar flujos predefinidos e introducir URLs personalizadas.

Componentes y Conexiones

Componentes necesarios:

  • ESP32-S3 N16R8
  • DAC UDA1334 para decodificación MP3
  • Amplificador con altavoces (barra de sonido)
  • Cables Dupont

Opcional: OLED SSD1306 de 0.96" I2C.

Google AdInline article slot

Conexión del UDA1334 al ESP32-S3:

| ESP32-S3 | UDA1334 |

|----------|---------|

Google AdInline article slot

| GPIO41 | BCLK |

| GPIO42 | WSEL |

| GPIO45 | DIN |

Google AdInline article slot

| GND | GND |

| 3V3 | 3V3 |

Conexión del OLED SSD1306:

| ESP32-S3 | SSD1306 |

|----------|---------|

| GPIO21 | SDA |

| GPIO20 | SCL |

| GND | GND |

| 3V3 | 3V3 |

Alimentación: Divisor USB de una fuente de 100W. El ESP32 y el amplificador se alimentan en paralelo.

Código Principal del Proyecto

Código completo en un solo archivo .ino. Librerías: WiFi, HTTPClient, Audio, Adafruit_GFX, Adafruit_SSD1306.

#include <WiFi.h>
#include <HTTPClient.h>
#include <WebServer.h>
#include "driver/i2s.h"
#include "Audio.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// Configuración WiFi
const char* ssid = "ssid";
const char* password = "password";

// Pines I2S
#define I2S_BCLK 41
#define I2S_LRC 42
#define I2S_DOUT 45

// I2C para OLED
#define I2C_SDA 21
#define I2C_SCL 20
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

struct RadioStation {
  const char* name;
  const char* url;
};

const RadioStation radioStations[] = {
  {"RSJ", "http://stream.srg-ssr.ch/m/rsj/mp3_128"},
  {"Revma", "https://stream.revma.ihrhls.com/zc238"},
  {"Jazz Stream", "http://jazz.streamr.ru/jazz-128.mp3"},
  {"Paris Jazz", "http://parisjazz.ice.infomaniak.ch/parisjazz-high.mp3"},
  {"Smooth Jazz", "http://smoothjazz.cdnstream1.com/2619_128.mp3"},
  {"Jazz WR06", "http://jazz-wr06.ice.infomaniak.ch/jazz-wr06-128.mp3"},
  {"Jazz WR07", "http://jazz-wr07.ice.infomaniak.ch/jazz-wr07-128.mp3"},
  {"Jazz WR10", "http://jazz-wr10.ice.infomaniak.ch/jazz-wr10-128.mp3"}
};

const int radioStationsCount = sizeof(radioStations) / sizeof(RadioStation);

int currentStationIndex = 0;
Audio audio;
int currentVolume = 18;

I2S se inicializa para el UDA1334. La pantalla muestra el estado WiFi, el nombre de la emisora con texto desplazante y un indicador de volumen.

Interfaz Web de Gestión

El servidor en el puerto 80 sirve una página HTML con:

  • Lista de emisoras predefinidas (clic para cambiar)
  • Control deslizante de volumen (0-21)
  • Campos para emisora personalizada (nombre + URL)
  • Estado de la emisora actual y dirección IP

Endpoints clave:

  • /change?station=N — cambiar emisora
  • /volume?value=N — ajustar volumen
  • /custom?name=NOMBRE&url=URL — emisora personalizada

El HTML se genera dinámicamente con estilos CSS y JavaScript para peticiones AJAX.

Salida en Pantalla OLED

La pantalla se actualiza cada 100ms:

  • Línea superior: ONLINE/OFFLINE
  • Nombre de emisora desplazante (se desplaza si desborda)
  • Volumen como número y barra
void updateDisplay() {
  display.clearDisplay();
  // Estado WiFi
  bool wifiConnected = (WiFi.status() == WL_CONNECTED);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println(wifiConnected ? "ONLINE" : "OFFLINE");
  // ... lógica restante
  display.display();
}

Puntos Clave

  • Minimalismo: Un archivo .ino, librerías Audio y Adafruit listas para usar
  • I2S + UDA1334: Decodificador MP3 completo sin sobrecarga
  • Control Web: Gestión sin hardware adicional, IP mostrada en pantalla
  • Flujos Personalizados: URLs arbitrarias mediante formulario
  • Estabilidad: Funciona con alimentación USB de 100W sin reinicios

Recomendaciones de Mejora

  • Optimizar alimentación: reguladores separados para ESP32 (3.3V/1A) y amplificador
  • Añadir botones GPIO para control local
  • Implementar guardado de estado en NVS (última emisora, volumen)
  • Soporte FLAC/OPUS mediante actualización de la librería Audio
  • Carcasa con montaje para barra de sonido

El proyecto es adecuado para prototipado. Escalarlo requiere refactorizar código y diseño de PCB.

— Editorial Team

Advertisement 728x90

Leer después