Retour à l'accueil

Radio Internet ESP32-S3 : code et schéma

Le projet radio Internet ESP32-S3 utilise UDA1334 pour l'audio I2S et l'affichage OLED. L'interface web permet de changer de stations et d'entrer des flux personnalisés. Code complet et schémas de connexion.

Radio Internet ESP32-S3 en une soirée : schéma + code
Advertisement 728x90

Radio Internet ESP32-S3 : Circuit, Code et Interface Web

L'ESP32-S3 N16R8 avec DAC UDA1334 permet de construire une radio internet minimale en une soirée. Ce projet utilise l'I2S pour la sortie audio, un afficheur OLED SSD1306 pour le statut et une interface web pour la gestion des stations. Il permet de basculer entre des flux prédéfinis et d'entrer des URL personnalisées.

Composants et Câblage

Composants requis :

  • ESP32-S3 N16R8
  • DAC UDA1334 pour le décodage MP3
  • Amplificateur avec haut-parleurs (barre de son)
  • Fils Dupont

Optionnel : OLED SSD1306 0,96" I2C.

Google AdInline article slot

Câblage UDA1334 vers ESP32-S3 :

| ESP32-S3 | UDA1334 |

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

Google AdInline article slot

| GPIO41 | BCLK |

| GPIO42 | WSEL |

| GPIO45 | DIN |

Google AdInline article slot

| GND | GND |

| 3V3 | 3V3 |

Câblage OLED SSD1306 :

| ESP32-S3 | SSD1306 |

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

| GPIO21 | SDA |

| GPIO20 | SCL |

| GND | GND |

| 3V3 | 3V3 |

Alimentation : Séparateur USB depuis une alimentation 100W. L'ESP32 et l'amplificateur sont alimentés en parallèle.

Code Principal du Projet

Code complet dans un seul fichier .ino. Bibliothèques : 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>

// Paramètres WiFi
const char* ssid = "ssid";
const char* password = "password";

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

// I2C pour 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;

L'I2S est initialisé pour l'UDA1334. L'afficheur montre le statut WiFi, le nom de la station avec défilement du texte et un indicateur de volume.

Interface de Gestion Web

Le serveur sur le port 80 sert une page HTML avec :

  • Liste des stations prédéfinies (cliquer pour changer)
  • Curseur de volume (0-21)
  • Champs pour une station personnalisée (nom + URL)
  • Statut de la station actuelle et adresse IP

Points d'accès clés :

  • /change?station=N — changer de station
  • /volume?value=N — régler le volume
  • /custom?name=NOM&url=URL — station personnalisée

Le HTML est généré dynamiquement avec des styles CSS et du JavaScript pour les requêtes AJAX.

Sortie sur Afficheur OLED

L'afficheur se met à jour toutes les 100 ms :

  • Ligne du haut : EN LIGNE/HORS LIGNE
  • Nom de la station défilant (défile si trop long)
  • Volume sous forme de nombre et de barre
void updateDisplay() {
  display.clearDisplay();
  // Statut WiFi
  bool wifiConnected = (WiFi.status() == WL_CONNECTED);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println(wifiConnected ? "EN LIGNE" : "HORS LIGNE");
  // ... logique restante
  display.display();
}

Points Clés

  • Minimalisme : Un seul fichier .ino, bibliothèques Audio et Adafruit prêtes à l'emploi
  • I2S + UDA1334 : Décodeur MP3 complet sans surcharge
  • Contrôle Web : Gestion sans matériel supplémentaire, IP affichée sur l'écran
  • Flux Personnalisés : URL arbitraires via formulaire
  • Stabilité : Fonctionne sur alimentation USB 100W sans réinitialisations

Recommandations d'Amélioration

  • Optimiser l'alimentation : régulateurs séparés pour ESP32 (3,3V/1A) et amplificateur
  • Ajouter des boutons GPIO pour un contrôle local
  • Implémenter la sauvegarde d'état dans NVS (dernière station, volume)
  • Prendre en charge FLAC/OPUS via mise à jour de la bibliothèque Audio
  • Boîtier avec montage pour barre de son

Le projet convient au prototypage. Le passage à l'échelle nécessite une refonte du code et une conception de PCB.

— Editorial Team

Advertisement 728x90

Lire ensuite