tutoriel : streaming bluetooth avec esp32 & esp32_lyrat

Notre objectif : doter  une mini-chaîne HiFi Marantz du service de réception en Bluetooth pour 15€

Avec la technologie ESP32 et la variante ESP32-LyraT on traite ici, sous forme de tutoriel, d’un exemple simple : le streaming Bluetooth, avec lequel on souhaite pouvoir rajeunir une mini-chaîne HiFi de bonne qualité. Le prix de revient, à 15€, est attractif par rapport aux solutions du commerce.

Ce tutoriel a été mis à jour le 4/12/2020, afin de le rendre plus synthétique, et d’exploiter la synergie avec le tutoriel sur le streaming WiFi HTTP, qui peut aider à l’installation de l’atelier de développement esp-adf.

L’ESP32 au coeur  de la conversion du signal audio

Un couplage Bluetooth audio avec ESP32 et ESP32-LyraT

Disposer d’une plateforme évolutive pour  la  capturer ou la restitution  d’un signal audio sur un équipement d’extrémité et en liaison avec l’Internet, voilà l’objectif à terme. Les premiers critères pour juger de la pertinence d’une solution sont les suivants :

  • Le coût, avec un prix de revient inférieur à 30€ par point de connexion
  • La facilité de mise en oeuvre, la disponibité d’exemples
  • La qualité, l’architecture pour le traitement du signal devant permettre d’aller vers une qualité de signal compatible du HiFi.

Pour réaliser un récepteur Bluetooth audio, nous avons choisi la plateforme ESP32 et sa variante ESP32-LyraT, qui bénéficie des ressources de l’atelier esp-adf, développé par Espressif. Avec notamment des exemples plus ciblés audio que sur les plateformes Raspberry ou Arduino.

Le hardware ESP32 et la variante ESP32 LyraT

  • L’ESP32 dispose d’un CPU 32 bits double coeur,  et d’une capacité mémoire partagée antre les deux cœurs compatibles d’un  couplage dual et natif  avec le Bluetooth et le Wifi. Sur les cartes de développement ESP32 VROOM32 et ESP32 LyraT, les capacités Flash et SRAM sont fournies par le biais d’une mémoire externe au CPU.
Source : 
ESP32 Technical Reference Manual (2018)
sur https://www.espressif.com/en/support/download/documents

Carte de développement :

  • une carte ESP32 LyraT. Achetée chez Mouser. Elle intègre de module ESP-WROVER (un peu plus long que l’ESP-WROOM-32). Avec 4 Moctets Flash & 8 Moctets RAM.
Sources : 
ESP32-LyraT User Guide ->
sur https://www.espressif.com/en/support/download/documents

La  conversion de signal en mode DAC et ADC dispose d’une performance en  mode 24 bits, avec l’adjonction d’un circuit I2S piloté par le CPU. Sur la carte ESP32-LyraT, on dispose d’un codec DAC/ADC 24 bits intégré, le circuit ES8388, couplé en lien I2S avec le module ESP32-WROVER. La carte dipose par ailleurs de 4 touches tactiles, et d’une capacité d’amplification permettant de lui connecter deux HP en sortie, ou un JACK AUX, ce qui est utile pour notre cas.

Source : 
Low Power Stereo Audio CODEC With Headphone Amplifier (2018)
sur http://www.everest-semi.com/pdf/ES8388%20DS.pdf

L’atelier de développement esp-adf

L’atelier de développement esp-adf fourni par la société Espressif est à même de nous faire disposer des caractéristiques d’un FreeRTOS, et  d’exploiter le CPU double cœur.

On constate en installant l’atelier esp-adf qu’il permet de gagner du temps au travers d’exemples, fournis dans les répertoires d’installation. On dispose d’une faculté rudimentaire e ligne de commande pour :

  • éditer les choix de consfiguration (make config)
  • flasher le programme (make flash)
  • lancer l’application et la console de mise au point (make monitor).

Tout est documenté dans le guide de programmation, du moins tant qu’on ne cherche pas à modifier les exemples déjà construits, et installables depuis github.

installer esp-adf : l'atelier de développement d'applications 
-------------------------------------------------------------
xxx@debian:mkdir esp
xxx@debian:cd ~/esp
xxx@debian:/home/xxx/esp$ git clone --recursive https://github.com/espressif/esp-adf.git

Pour ce qui concerne l’installation et la mise en oeuvre de l’environnement, il est possible de consulter le tutoriel traitant du streaming audio en mode WiFi HTTP, également disponible sur Philoc.

Les attentes

Une carte ESP32, programmée avec l’atelier ESP-IDF ou ASP-IDF, permet  d’obtenir les performances (faible latence, absence de gigue …) dont on a besoin pour traiter le signal audio en temps réel. Avec les exemples fournis sur l’atelier esp-adf, on dispose des services essentiels sans avoir à développer de code par soi-même.

Une alternative serait d’utiliser un Raspberry, apportant le confort d’un bel OS, Linux en l’occurence. Mais le coupleur  serait moins intégré, plus gros et  plus cher. Et au bout du compte, aurait on de meilleures performances temps réel avec un Raspberry plutôt qu’avec un ESP32.  Pa si sûr, comme nous allons pouvoir en juger en jouant  de la musique Deezer diffusée depuis un smartphone, vers une mini-chaîne intégrée Marantz de plutôt bonne qualité.

Réception Bluetooth, profil a2dp : le bilan

La carte ESP32-LyraT intègre bien l’ensemble des composants nécessaires entre l’antenne et le jack de sortie pour connection à notre ampli AV. Encore faudra-t-il penser au moyen de pouvoir la fixer, sur la face arrière de notre mini-chaîne par exemple, mais tout en laissant la possibilité d’accès au bouton de reset ( RST ) pour lancer la recherche d’association.

Couplage Bluetooth sur mini-chaîne Marantz avec ESP32 LyraT

L’exemple qui colle à notre objectif, sans avoir une ligne de code à développer,  est celui du pipeline_bt_sink, qui permet d’utiliser le mode traditionnel de Bluetooth (nous ne maîtrisons pas le Bluetooth Low  Energy). Le profil pour l’échange audio est l’a2dp. On ‘est pas avec celà dans une capacité donnant accès au HiFi et on n’a pas vu mention dans la documentation de la possibilité de mettre en oeuvre le profil adp+, adapté pour une meilleure définition.

Un premier bilan :

- ça marche du premier coup, si on sait qu'il faut appuyer sur deux touches pour charger la Flash
(mais ça je l'expliquerai volontiers à ceux qui me posteront un mail gentil ;-)
- il faut appuyer sur le bouton RST de la carte pour lea mettre en écoute et en association avec le host ( smartphone ou pc ), ensuite, l'association est automatique, pas de code à taper, c'est bien.
- on aurait pu attendre voir un effet utile des 4 touches configurables, et moi je n'ai rien vu à ce sujet.
- avoir un double connecteur microUSB, un pour l'alimentation  et un en plus pourle lien série, c'est agaçant
- j'ai parfois un peu de mal à associer la carte à mon téléphone, il faut alors passer par un on/off Bluetooth
sur le téléphone et ça débloque.
- le son restitué sur ma mini-chaîne Marantz est très correct.

Pour un coût d'achat de 15€ par carte, l'objectif est atteint !