Zpět na domů

ESP32-S3 internetové rádio: kód a schéma

Projekt internetového rádia na ESP32-S3 používá UDA1334 pro I2S audio a OLED displej. Webové rozhraní umožňuje přepínat stanice a zadávat libovolné proudy. Kompletní kód a schémata připojení.

Internetrádio ESP32-S3 za večer: schéma + kód
Advertisement 728x90

Internetové rádio na ESP32-S3: schéma, kód a webové rozhraní

ESP32-S3 N16R8 s DAC UDA1334 umožňuje sestavit minimální internetové rádio za večer. Projekt využívá I2S pro výstup zvuku, OLED displej SSD1306 pro stav a webové rozhraní pro ovládání stanic. Podporuje přepínání přednastavených streamů a zadávání vlastních URL.

Komponenty a zapojení

Povinné prvky:

  • ESP32-S3 N16R8
  • DAC UDA1334 pro dekódování MP3
  • Zesilovač s reproduktory (soundbar)
  • Propojovací vodiče Dupont

Volitelně: OLED 0.96" I2C SSD1306.

Google AdInline article slot

Zapojení UDA1334 k ESP32-S3:

| ESP32-S3 | UDA1334 |

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

Google AdInline article slot

| GPIO41 | BCLK |

| GPIO42 | WSEL |

| GPIO45 | DIN |

Google AdInline article slot

| GND | GND |

| 3V3 | 3V3 |

Zapojení OLED SSD1306:

| ESP32-S3 | SSD1306 |

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

| GPIO21 | SDA |

| GPIO20 | SCL |

| GND | GND |

| 3V3 | 3V3 |

Napájení: USB rozbočovač z napájecího zdroje 100W. ESP32 a zesilovač jsou napájeny paralelně.

Hlavní kód projektu

Úplný kód v jednom .ino souboru. Knihovny: 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>

// Nastavení WiFi
const char* ssid = "ssid";
const char* password = "password";

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

// I2C pro 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 je inicializován pro UDA1334. Displej zobrazuje stav WiFi, název stanice s běžícím textem, indikátor hlasitosti.

Webové rozhraní pro ovládání

Server na portu 80 obsluhuje HTML stránku s:

  • Seznamem přednastavených stanic (kliknutím pro přepnutí)
  • Posuvníkem hlasitosti (0-21)
  • Polí pro vlastní stanici (název + URL)
  • Stavem aktuální stanice a IP adresou

Klíčové endpointy:

  • /change?station=N — přepnutí na stanici
  • /volume?value=N — nastavení hlasitosti
  • /custom?name=NAME&url=URL — vlastní stanice

HTML je generováno dynamicky s CSS styly a JavaScriptem pro AJAX požadavky.

Zobrazení na OLED

Displej se aktualizuje každých 100 ms:

  • Horní řádek: ONLINE/OFFLINE
  • Běžící text názvu stanice (posun při přetečení)
  • Hlasitost číslem a pruhem
void updateDisplay() {
  display.clearDisplay();
  // Stav WiFi
  bool wifiConnected = (WiFi.status() == WL_CONNECTED);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println(wifiConnected ? "ONLINE" : "OFFLINE");
  // ... zbytek logiky
  display.display();
}

Co je důležité

  • Minimalismus: Jeden .ino soubor, hotové knihovny Audio a Adafruit
  • I2S + UDA1334: Plnohodnotný MP3 dekodér bez režie
  • Webová kontrola: Ovládání bez dodatečného hardware, IP se zobrazuje na displeji
  • Vlastní streamy: Libovolné URL přes formulář
  • Stabilita: Funguje s USB napájením 100W bez resetů

Doporučení pro vylepšení

  • Optimalizovat napájení: samostatné stabilizátory pro ESP32 (3.3V/1A) a zesilovač
  • Přidat tlačítka na GPIO pro lokální ovládání
  • Implementovat ukládání stavu do NVS (poslední stanice, hlasitost)
  • Podpora FLAC/OPUS aktualizací knihovny Audio
  • Kryt s uchycením soundbaru

Projekt je vhodný pro prototypování. Škálování vyžaduje refaktorizaci kódu a PCB.

— Editorial Team

Advertisement 728x90

Číst dál