Tutoriel : Premiers essais sur ESP32 & ESP32_LyraT – exemple du streaming Bluetooth

Notre objectif :

Rendre compte de nos premières impressions sur la technologie ESP32 et de la variante ESP32-LyraT au travers d’un exemple simple : le streaming Bluetooth.

Nous nous donnons l’objectif d’être courts, de citer plutôt que de paraphraser les sources d’informations  qui nous amènent à envisager des résultats très prometteurs avec l’ESP32.

L’intérêt à utiliser un ESP32 pour nos applications audio

Le besoin

Notre objectif, à terme , c’est de 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. Les premiers critères nous permettant de juger de la pertinence d’une solution sont les suivants :

  • Le coût : nous visons un prix de revient inférieur à 30€ par point de connexion
  • La facilité de mise en oeuvre : nous voudrions une plateforme de développement facile à utiliser, bien sûr gratuite, et permettant de nous appuyer sur des exemples conduisant à un résultat très proche du besoin final, tout en autorisant  l’ajout de mécanismes complémentaires pour une meilleure intégration
  • La qualité : l’architecture pour le traitement du signal, et les mécanismes pour le conversion analogique/numérique et numérique/analogique doivent permettre d’obtenir à terme que qualité de signal compatible du HiFi.

Et avec cette première énumération on pressent déjà l’intérêt de la plateforme ESP32 par rapport à ce que nous avions déjà pratiqué avec les plateformes Raspberry ou Arduino.

Le hardware ESP32

  • 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

Nous disposons de deux cartes de développement :

  • une carte ESP32 DevKitC . Achetée via Amazon. Elle intègre le module ESP-WROOM-32. Avec 4 Moctets Flash & 4 Moctets RAM
  • 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 -> ESP32-WROVER Data Sheet (2018)
ESP32-DevKitC V4 Getting Started Guide-> ESP32-WROOM-32 (2018)
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-DevKitC, le module ISP n’est pas implanté et on doit en coupler un en externe, ou se contenter du conertisseur 8 bits intégré (pas assez performant vu nos ambitions). 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 fabuleux pour notre essai.

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

L’atelier de développement ESP-IDF 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-IDF qu’il permet de se former 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 bien documenté dans le guide de programmation, du moins tant qu’on ne cherche pas à modifier les exemples déjà construits,et installables depuis github.

Source : 
ESP32-IDF programming guide (2018)
sur  https://docs.espressif.com/projects/esp-idf/en/latest/

Pour utiliser la carte ESP32-LyraT, on est amené à installer une variante de l’atelier, l’ADF-ESP cette fois

Source : 
ESP32-ADF programming guide (2018)
sur  https://docs.espressif.com/projects/esp-adf/en/latest/

So what

Une carte ESP32, à condition de la programmer avec l’atelier ESP-IDF ou ASP-IDF, ça doit permettre d’obtenir les performances (faible latence, absence de gigue …) dont on a besoin pour traiter le signal audio en temps réel; Attention, je ne vois vraiment pas ce qu’on obtiendrait de bien à utiliser l’Arduino, dont les principes ne vont pas en faveur du temps réel.

Bien sûr, il y a bien la tentation d’utiliser un Raspberry avec le confort d’un bel OS, Linux en l’occurence. Mais ce serait moins intégré, plus gros de ce fait, plus cher çà c’est sûr aussi. Et au bout du compte, aurait on de meilleures performances temps réel avec un Raspberry ? J’avoue en douter tant cette architecture ESP32 semble coller au besoin.

Alors à suivre, mais avant de partir regardez les conclusions du premier essai. Elles sont plutôt encourageantes …

Alors, les premières impressions, en streaming Bluetooth, sur profil a2dp ?

Nous avons choisi d’utiliser la carte ESP32-LyraT, dans la mesure où elle intégrait l’ensemble des composants nécessaires entre l’antenne et le jack de sortie pour connection à notre ampli AV.

L’exemple qui convenait à notre objectif est celui du 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.

Alors, les premières conclusions ?
- ça marcherait du premier coup, si on savait qu'il faut appuyer sur deux touches pour charger la Flash
(mais ça je l'expliquerai volontiers à ceux qui me posteront un mail gentil 😉
- on devrait avoir un effet des 4 touches configurables, et moi je n'ai pas vu d'effet
- le double connecteur microUSB, pour l'alimentation  et le lien série, c'est agaçant
- j'ai un peu de mal à associer la carte à mon téléphone, parfois il faut passer par un on/off Bluetooth
sur le téléphone et ça débloque
- mais le son serait plutôt correct, très correct même, s'il n'y avait ce ronflement résiduel 
dans les phases de presque silence, dont on peut se demander par quel moyen on pourra s'en débarrasser.