Tutoriel : streaming Wifi Http avec ESP32 & ESP32_LyraT –

Notre objectif :

Mette en oeuvre la technologie ESP32 et sa variante ESP32-LyraT au travers d’un exemple consacré à la restitution locale d’un flux audio transporté en Http sur Wifi.

Nous nous donnons l’objectif d’être courts, de citer plutôt que de paraphraser les sources d’informations disponibles autour de l’ESP32 et de sa variante ESP32-LyraT.

Diffusion du flux Deezer au sein de la maison

Les contraintes de Deezer et le choix du Wifi

Quand on souscrit un contrat Deezer, tout est fait, et c’est bien comme çà, pour limiter l’usage à la restitution des titres du catalogue sur votre smartphone ou sur votre ordinateur. Deezer ne propose pas d’application permettant par elle-même de disposer du flux d’une playlist en DLNA ou en tant que flux réseau. Le mode d’utilisation privilégié consiste à utiliser le player Deezer ou son navigateur Internet pour jouer les titres en instantané sur son smartphone ou son ordinateur portable.

Pour rappel, nous avions déjà consacré un tutoriel permettant alors de rediriger le son Deezer vers un ensemble Hifi de qualité par le biais de Bluetooth.

Ici, nous allons privilégier la rediffusion locale du son Deezer à partir du Wifi, dans la mesure où cela offre plus de flexibilité pour atteindre les différentes pièces de la maison à partir d’un diffuseur central.

La rediffusion en Wifi depuis une plateforme Linux

J’ai expérimenté deux techniques permettant de repiquer le signal sonore de puis la carte son de l’ordinateur Linux installé dans la pièce qui me sert de bureau et de le diffuser ensuite vers des récepteurs situés dans les autres pièces de la maison.

  • Le serveur audio DLNA intégré à PulseAudio. Il s’installe à partir du package pulseaudio-dlna disponible sur Debian et Ubuntu. Il permet de rediffuser le flux numérisé depuis la carte son vers les récepteurs du réseau local.
xxx@debian:/etc$ sudo aptitude install pulseaudio pavucontrol pulseaudio-dlna
  • L’encapsulation du signal audio en tant que flux HTTP disponible à partir  un serveur local intégré à ma configuration Linux. Il s’agit pour faire cela de mettre en oeuvre les applications darkice et icecast2 disponibles sous Debian et Ubuntu.

La première solution se révèle bien adaptée pour ce qui concerne la rediffusion vers mon ensemble Home-Cinema, équipé d’un player DLNA bien intégré. Par contre l’exemple de player dlna proposé sur la carte ESP32-LyraT n’a pas permis d’obtenir de résultat correct.

C’est donc la deuxième option qui a été privilégiée avec l’exemple pipeline_http_select_decoder disponible sur ESP32-LyraT Notre test s’est avéré plutôt concluant, avec quelques réserves. Il perfectionne l’exemple  pipeline_http_mp3 et permet de sélectionner le type de codec audio, au delà du mp3, avec une liste déjà assez fournie (aac, ogg, …).

Configuration darkice et icecast2 – Linux Debian

Installation

xxx@debian:/etc$ sudo apt-get install icecast2 darkice

Configuration

La ligne de commande suivante permet de lancer la configuration du service icecast2 (fichier /etc/icecast2/icecast.xml) et de relancer le service.

xxx@debian:/etc$ sudo dpkg-reconfigure 

xxx@debian:/etc$ ps -aux | grep icecast2
icecast2  1331  0.0  0.0 443220  9988 ?        Sl   mars10   1:01 /usr/bin/icecast2 -b -c /etc/icecast2/icecast.xml
xxx 29097  0.0  0.0  12784   968 pts/0    S+   10:56   0:00 grep icecast2


Choix du codec audio utilisé par darkice

Nous choisissons de coder le flux en mp3, avce un bitrate constant. Nous avons essayé les valeurs de 192 kbit/s et 320 kbit/s, pour une qualité en 1.0, mais nous avons constaté un niveau de bruit parasite qui a disparu avec le repli à 128 kbit/s, en qualité 0.8. Notons que l’échantillonnage sous 24 bits n’est pas disponible sous darkice.

Contenu du fichier /etc/darkice.cfg
ls darkice[general]			# CONFIGURATION GENERALE DE DARKICE
duration=0                      # Durée du stream en seconde, mettre 0 pour un stream en continu
bufferSecs=1                    # Durée du buffer en seconde
reconnect=yes                   # Reconnexion automatique en cas de déconnexion
                                
[input]                         # CONFIGURATION DU DISPOSITIF D'ENTREE ET D'ECHANTILLONAGE
device=default                # Choix du dispositif audio pour envoyer tout ce qui sort de la carte son
sampleRate=44100                # Fréquence d’échantillonnage du flux
bitsPerSample=16                # Nombre de bits
channel=2                       # Nombre de canaux
                                
[icecast2-0]                    # CONFIGURATION DE L'ENCODAGE ET DE L'ENVOI DU FLUX
bitrateMode=cbr                 # Mode d'encodage ici variable
bitrate=128
quality=0.8                     # Réglage de la qualité de 0.0 à 1.0
format=mp3              # Choix du format du flux ici ogg
server=localhost                # Adresse du server Icecast2
port=8090                       # Port du server Icecast2
password=falbala                 # Mot de passe pour la source Icecast2
mountPoint=toto      # Point de montage du flux Icecast
name=phil                # A partir d'ici ces paramètres sont optionnels → Nom de votre radio
description=Une super radio...  # La description de votre radio
url=http://localhost        # Un site utile
genre=hardcore                  # Le style de votre radio

Lancement du service darkice et vérification sous chrome

xxx@debian:/etc$ sudo darkice

Il est possible de vérifier la disponibilité du service par le biais du navigateur (chrome pour ce qui nous concerne) , en utilisant  l’URL qui devient la référence pour l’accès au service :

http://localhost:8090/toto

Un player reproduisant le flux audio de la carte son devrait s’ouvrir …

Configuration ESP32-LyraT

1. Création d’un répertoire projet

xxx@debian:/home/xxx$ mkdir /home/xxx/esp
xxx@debian:/home/xxx$ cd /home/xxx/esp


2. Installation de l’atelier de développement

Installer l’atelier esp-adf (variante esp32-lyrat) et l’atelier esp-idf (coeur esp32)  depuis github.

xxx@debian:/home/xxx/esp$ clone --recursive https://github.com/espressif/esp-adf.git

3. Définition des variables d’environnement

xxx@debian:/home/xxx/esp$ export IDF_PATH=/home/xxx/esp/esp-idf
xxx@debian:/home/xxx/esp$ export ADF_PATH=/home/xxx/esp/esp-adf
xxx@debian:/home/xxx/esp$ export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"

4. Création d’un sous-répertoire de travail à partir du dossier exemple

xxx@debian:/home/xxx/esp$ cp -R  esp-adf/examples/player/pipeline_http_select_decoder .
xxx@debian:/home/xxx/esp$ cd pipeline_http_select_decoder

5. Création de la configuration

  • La carte dispose de 2 ports micro-usb qu’il faut connecter ; 1 pour l’alimentation, 1 pour la liaison avec le PC.

Ensuite il faut renseigner des options non documentées dans le menu de configuration avec les valeurs ci-dessous. Sinon ça me marche pas !

  • Example Configuration : renseigner le SSID et mot de passe Wifi
  • Partition table : custom CSV avec le nom du fichier contenu dans le répertoire exemple : partitions_http_select_decoder_example.csv
  • Component Configuration/Wifi : décocher l’option Wifi NVS Flash
  • Component Configuration/Phy : décocher les 2 options de stockage
xxx@debian:/home/xxx/esp/pipeline_http_select_decoder$ make menuconfig

6. Modification du fichier source de l’exemple

L’objectif est de renseigner le type de codec choisi (mp3) et l’URL du flux réseau Http produit par l’équipement diffuseur

  • Il s’agit de 2 lignes du fichier play_http_select_decoder_example.c, présent dans le répertoire « main »
  • Ajouter : #define SELECT_MP3_DECODER 1
  • Commenter :  // audio_element_set_uri(http_stream_reader, selected_file_to_play);
  • Remplacer par : audio_element_set_uri(http_stream_reader, « http://adresse_diffuseur:8090/toto »);
xxx@debian:/home/xxx/esp/pipeline_http_select_decoder$ gedit main/play_http_select_decoder_example.c

7. Compilation et chargement sur la carte esp32-lyrat

Pour placer la carte esp32-lyrat en attente de téléchargement, il faut presser la touche boot par un appui long, au milieu duquel on doit aussi presser la touche reset.

xxx@debian:/home/xxx/esp/pipeline_http_select_decoder$ make flash monitor

8. Lancement de l’application

  • La carte esp32-lyrat sera alimentée par son port micro-usb dédié.
  • Il faut ensuite connecter la carte esp32-lyrat à une entrée de niveau AUX sur une configuration ampli HiFi par l’intermédiaire du connecteur minijack. Attention le niveau son n’est pas réglable  !
  • En cas de coupure WiFi, il faut relancer la carte par un appui sur sa touche reset (un point faible, c’est certain).