Les contrôleurs ESP32 sont largement utilisés dans les projets d’IdO, de domotique et de commande à distance. En plus du Wifi, l’ESP32 dispose d'une interface I2S efficace pour transmettre et recevoir des signaux audio numériques. Associé à un DAC I2S, un ADC I2S et une carte SD, elle permet de réaliser de nombreux projets audio. Dans ce projet, nous combinons tous ces éléments avec un émetteur-récepteur nRF24 pour la transmission et la réception de données (audio), le tout sur un circuit imprimé prêt à souder. Dans cette première partie, nous présentons le schéma fonctionnel, le circuit et un logiciel de démonstration.

Le choix de l'ESP32

Les contrôleurs ESP32 sont populaires pour leur prix abordable, leur rapidité et leur facilité de programmation, notamment via l’IDE Arduino. Dotés du Wifi, ils sont omniprésents dans les projets IdO, de maison connectée et de commande à distance, et les projets Elektor ne font pas exception. Ce que l’on sait moins, c’est que l’ESP32 intègre aussi une interface I2S performante, idéale pour les flux audio numériques (voir l’encadré «Interface I2S»). Pour lire de l’audio, il suffit de connecter un DAC I2S qui convertit les données I2S de l’ESP32 en signal analogique. Inversement, pour capturer l’audio, un ADC audio avec interface I2S est nécessaire. Dans ce projet, nous avons associé un module de développement basé sur l’ESP32-S3 à une carte d’extension ADC/DAC I2S montée sur un PCB support. Nous y avons aussi intégré une option pour connecter un module sans fil Nordic nRF24 afin de transmettre et recevoir des données numériques. Une carte SD, plusieurs connecteurs d’extension et diverses options d’alimentation complètent l’ensemble

Audio transceiver board project
Le projet de carte d'émetteur-récepteur audio
Je m'abonne
Abonnez-vous à la balise thématique ESP32 pour être averti dès qu'une information relative à ce sujet sera publiée par Elektor !

Cas d’usage

Cette carte est avant tout destinée aux applications audio, mais vous pouvez l'utiliser pour échantillonner, transmettre, stocker ou recevoir d’autres types de signaux et de données. Voici quelques cas d’usage possibles — certains seront développés dans les prochains articles:

  • Lecteur audio lisant des fichiers depuis une carte SD (voir le logiciel de démonstration ci-dessous)
  • Enregistreur audio
  • Processeur audio (échantillonnage, traitement, sortie)
  • Émetteur/récepteur audio sans fil via Wifi ou ESP-NOW
  • Émetteur/récepteur audio sans fil via Nordic nRF24
  • Enregistreur de données◦: capteurs connectés via SPI/I2C, données sauvegardées sur carte SD
  • Nœud de capteurs sans fil : transmission des mesures via Wifi ou nRF24
  • Génération ou mesure de signaux basse fréquence
 
PCB1-V3 - ESP32 Audio Transceiver
Figure 1. Les blocs et connecteurs de 'émetteur-récepteur audio ESP32.

Blocs principaux

Les différents blocs et connecteurs de l'émetteur-récepteur audio ESP32 sont visibles à la figure 1.

ESP32-S3-DevKit-C

Le cœur du projet est la carte ESP32-S3-DevKit-C à 44 broches [1], placée au centre de notre circuit imprimé. Elle intègre un module ESP32-S3-WROOM (processeur double cœur), des connecteurs d’extension au format DIL adaptés aux makers, et deux ports USB pour la programmation et l’alimentation (voir figure 2). Notez qu’il existe plusieurs variantes du S3 DevKit-C, compatibles au niveau des broches. Certaines embarquent une antenne PCB intégrée, d’autres disposent d’un connecteur pour antenne externe — idéal si vous souhaitez intégrer la carte dans un boîtier métallique tout en conservant les fonctions Wifi.

The DevKit-C board integrates a ESP32-S3-WROOM SoC
Figure 2. La carte DevKit-C intègre un SoC ESP32-S3-WROOM et deux ports USB
pour la programmation et l’alimentation. À gauche, une version avec antenne PCB
et largeur de 1". À droite, la version vendue par la boutique Elektor,
avec une largeur de 0,9 pouce et un connecteur pour antenne Wifi externe.

Comme il existe des versions du DevKit-C en largeur 0,9 pouce et 1 pouce, notre PCB support est conçu pour accueillir les deux, grâce à une rangée de broches supplémentaire. Si vous utilisez une version 0,9 pouce, l’en-tête externe (J3) peut aussi servir de connecteur d’extension.

Un DevKit-C avec antenne intégrée coûte environ 8€ et peut être facilement remplacé. Il suffit simplement de souder deux rangées de broches. Nous prévoyons déjà une seconde version de la carte, avec le module S3-WROOM directement soudé, afin de gagner de la place et de réduire encore les coûts.

DAC/ADC I2S

Le marché regorge de cartes d’extension I2S pour l’échantillonnage et la lecture de signaux audio. Nous avons finalement choisi le module Pmod I2S2 de Digilent [2], qui embarque un DAC Cirrus CS4344 (jusqu’à 192 kHz/24 bits) et un ADC CS5343 de Cirrus (jusqu’à 96kHz/24bits), tous deux reliés à des prises audio stéréo (voir figure3). Il s’agit en réalité de deux cartes en une. Le connecteur 2x6 donne accès à deux interfaces I2S indépendantes : l’une pour la sortie, l’autre pour l’entrée audio (voir l’encadré «Interface I2S»). Les broches d’alimentation VCC et GND sont également doublées. Le positionnement horizontal de ce connecteur peut surprendre, mais il est conforme à la spécification Pmod de Digilent. Pour fixer ce module sur notre carte, il suffit de souder un connecteur femelle coudé au format 2x6.

Digilent I2S2 Pmod module: Audio transceiver board project
Figure 3. Le module Pmod I2S2 de Digilent embarque un DAC Cirrus CS4344
et un ADC Cirrus CS5343, tous deux connectés à des prises audio stéréo.

Le module Pmod I2S2 n’est pas le plus économique, mais il offre une très bonne qualité audio et une compatibilité parfaite avec l’ESP32 en tant que maître I2S. Il fonctionne immédiatement, sans configuration préalable, pour la lecture comme pour l’échantillonnage audio.

Sur notre carte, le connecteur Pmod 2x6 est relié aux broches GPIO35 à GPIO40, ainsi qu’aux GPIO47 et 48. Il est tout à fait possible d’y connecter d’autres modules Pmod (comme des capteurs de courant ou des amplificateurs audio), ou bien d’y brancher votre propre carte d’extension avec un connecteur 2x6 au pas standard de 2,54 mm.

Émetteur-récepteur nRF24

En plus des capacités Wifi et ESP-NOW de l’ESP32, nous voulions proposer une troisième voie, optimisée pour la transmission audio continue à très faible latence. Le protocole radio propriétaire de Nordic utilisé par les modules nRF24 se révèle extrêmement rapide: les paquets peuvent être transmis en moins d’1ms. Ces puces nRF24 [3] sont largement utilisées dans les projets IoT, notamment grâce à leur prix accessible et à la disponibilité de bibliothèques compatibles, notamment pour Arduino. Les versions intégrant un amplificateur et un connecteur d’antenne sont particulièrement intéressantes. Selon nos tests, la portée en intérieur est souvent meilleure que celle du Wifi. Autre avantage: les transmissions s’effectuent sur des canaux de 1MHz distincts des bandes Wifi souvent encombrées. En revanche, la taille maximale des paquets est limitée à 32octets, et le débit réel reste nettement inférieur au débit nominal de 2 Mbit/s. Nous reviendrons sur ce point dans le prochain article.

Le module nRF24 est piloté via une interface SPI, ainsi que deux lignes de contrôle (Chip Enable et Interrupt). Un standard existe pour le connecteur 2x4, ce qui permet d’utiliser facilement différents modèles. Nous conseillons le module E01-ML01DP5 de chez Ebyte [4], qui intègre un connecteur SMA et un amplificateur d’antenne (voir figure 4). Notre circuit imprimé est prévu pour ce module, avec un emplacement pour le connecteur d’antenne en bord de carte, de manière à s’intégrer parfaitement dans un boîtier plastique ou métallique.

Audio transceiver board 4
Figure 4. Le module nRF24 d’Ebyte◦[4] comprend la puce transceiver,
un connecteur SMA et un amplificateur d’antenne intégré.

As the 2x4 connector on our board is routed to the SPI interface of the ESP32, nothing prevents you to connect here any other SPI modules — for example, a sensor.

Lecteur de carte SD

La carte intègre un lecteur de carte microSD, offrant un moyen pratique de stocker localement des données enregistrées, des fichiers de configuration ou du contenu audio. Il est relié à l’ESP32-S3 via l’interface SPI (MOSI, MISO, SCK et une ligne CS dédiée), ce qui permet une compatibilité immédiate avec les bibliothèques Arduino SD ou SdFat, très répandues. Le lecteur est monté sur la face supérieure de la carte et orienté pour un accès facile. Des condensateurs de découplage sont positionnés à proximité des broches d’alimentation pour garantir la stabilité lors des écritures. Comme la carte SD partage le bus SPI avec d’autres composants, comme le module nRF24, il est essentiel de bien gérer les lignes Chip Select dans le logiciel pour éviter tout conflit.

Connecteurs d’extension

La carte comprend plusieurs connecteurs d’extension (J7 à J10) exposant des broches GPIO non utilisées de l’ESP32-S3. Ils permettent de connecter facilement des capteurs ou modules supplémentaires. Ces connecteurs sont polyvalents, parfaits pour des applications générales ou pour des interfaces utilisateur telles que des afficheurs (par exemple OLED via I²C), des boutons-poussoirs, des LED ou des récepteurs infrarouges. Chaque connecteur intègre des broches d’alimentation et de masse, simplifiant ainsi le câblage.

Options d’alimentation

La carte peut être alimentée soit par une prise jack DC standard, soit par un bornier à vis de 5,08 mm, offrant ainsi une grande souplesse d’intégration selon votre montage. Un régulateur linéaire TLV76733 abaisse la tension d’entrée (jusqu’à 16 V) à 3,3 V pour alimenter l’ESP32-S3 et ses périphériques. Ce régulateur LDO peut fournir jusqu’à 1 A, avec une précision de ±1%, un faible courant de repos, et des fonctions de protection intégrées comme l’arrêt thermique et la limitation de courant. Son taux de réjection de l’alimentation élevé (70dB à 1kHz) assure la stabilité du système même avec une alimentation bruitée, et sa faible tension de décrochage permet un fonctionnement efficace même lorsque la tension d’entrée approche les 3,3V.

Il est également possible d’alimenter la carte via l’un des ports USB du module S3-DevKit-C. On peut aussi combiner l’alimentation par la prise jack et la connexion USB à un PC — par exemple pour échanger des données série.

Schéma

Puisque nous avons déjà présenté les modules à connecter, le schéma est simple à appréhender. Le diagramme électrique (figure 5) montre un système à microcontrôleur centré sur la carte de développement ESP32-S3-DevKit-C. L’alimentation est fournie via une entrée 12V sur le connecteur J1, abaissée à 3,3V par un régulateur LDO (IC1). Cette tension régulée alimente à la fois la carte ESP32-S3 et l’ensemble des composants basse tension du circuit. Plusieurs condensateurs de découplage (C1 à C4) assurent la stabilité et réduisent le bruit électrique. L’ESP32-S3 constitue l’unité centrale de traitement et communique avec les différents périphériques via ses broches GPIO.

Schematic for the project
Figure 5. Le schéma (cliquez pour PDF) illustre un système à microcontrôleur centré autour de la carte de développement ESP32-S3-DevKit-C.

La communication sans fil est assurée par le module nRF24L01 (MOD1), qui échange avec l’ESP32 via les lignes SPI: MISO, MOSI, SCK, CSN, CE et IRQ. Ces lignes sont protégées par des résistances de 100 Ω (R1 à R3), et un condensateur (C6) stabilise l’alimentation du module. Côté stockage, le système intègre un lecteur microSD MSD-11-A (J4), connecté aux lignes SPI/SDIO classiques, avec gestion du déverrouillage et détection de carte.

Le système permet l’ajout de périphériques via plusieurs connecteurs GPIO (J7 à J10), chacun fournissant alimentation, masse et lignes de données pour connecter facilement des écrans, boutons ou autres modules. Une interface I2C est accessible par des connecteurs compatibles Grove (J6) et Qwiic (J5), facilitant l’utilisation de capteurs et modules numériques. Enfin, un connecteur Pmod (MOD2) permet d’interfacer des modules compatibles Digilent.

Je m'abonne
Abonnez-vous à la balise thématique audio pour être averti dès qu'une information relative à ce sujet sera publiée par Elektor !

Circuit imprimé

Le PCB est organisé autour du module ESP32-S3-DevKitC (voir figure 6). Tous les connecteurs principaux — prise d’alimentation, bornier à vis, connecteur Qwiic et lecteur de carte SD — sont placés sur la face supérieure de la carte. Le connecteur Pmod est positionné sur le bord inférieur afin d’assurer la compatibilité avec une large gamme de modules Pmod. Le module nRF24 est situé sur le bord droit, tandis que les connecteurs J7 à J10 sont placés au centre-droit pour offrir un accès étendu aux broches GPIO destinées à des modules externes. Les pistes I2C, courtes et étroites, conviennent aux vitesses de communication classiques. Les pistes d’alimentation, plus larges, assurent une bonne distribution du courant, avec un plan de masse couvrant la majorité de la surface du PCB.

PCB layout
Figure 6. L'implantation du circuit imprimé repose sur le module ESP32-S3-DevKitC.

Boîtier

La carte entre parfaitement dans un boîtier en aluminium de 100×97×40 mm, équipé d’un couvercle coulissant [5]. Elle se fixe directement sur les rails internes, et le couvercle permet d’accéder rapidement à l’intérieur en cas de besoin. Ce type de boîtier offre une protection mécanique robuste et un blindage efficace contre les interférences, mais il bloque également les signaux haute fréquence comme le Wifi ou le Bluetooth. Le boîtier agit comme une cage de Faraday, ce qui rend la communication sans fil impossible avec une antenne intégrée à la carte, sauf si une ouverture est prévue. C’est pourquoi la zone d’antenne de l’ESP32-S3 est située en bas de la carte, afin de pouvoir ménager une petite ouverture dans la paroi pour laisser passer les signaux. Si vous utilisez une version avec connecteur d’antenne — comme celle proposée par la boutique Elektor — vous pouvez facilement monter une antenne externe sur la face avant ou arrière du boîtier.

Le connecteur SMA du module nRF24 est positionné de manière à permettre la fixation de l’antenne à l’extérieur via un perçage dans la face avant (voir figure 7).

Audio transceiver board 7
Figure 7. Le connecteur SMA du module nRF24 est placé de façon à permettre
un montage d’antenne en façade, via un perçage — ce qui garantit
l’usage du module même dans un boîtier métallique.

Logiciel de démonstration

Comme annoncé, nous présenterons dans les prochaines éditions plusieurs applications et extensions du projet. Par exemple, dans l’édition « sans-fil » d’Elektor prévue en septembre 2025, vous découvrirez un logiciel dédié à la transmission et à la réception audio. Mais nous voulions déjà conclure cet article avec un premier exemple de logiciel de démonstration.

Ce logiciel est un lecteur audio simple pour fichiers WAV. Vous pouvez le télécharger depuis la page Labs dédiée à la carte Audio Transceiver [6]. Au démarrage, l’ESP32 lit les fichiers présents à la racine d’une carte SD (sans sous-dossiers), puis crée une liste des noms de fichiers WAV. Il commence alors à lire le premier fichier. Un appui sur un bouton, connecté au GPIO7 de l’ESP32 (via le connecteur J8), stoppe le morceau en cours et passe au suivant. La Figure 8 montre un prototype équipé de ce bouton. Pour ce prototype, nous n’avons pas utilisé le lecteur de carte SD intégré sur la carte principale ; à la place, nous avons employé un petit module SD externe relié en SPI à l’ESP32, en utilisant le connecteur 2x4 normalement prévu pour le module nRF24.

The WAV player prototype
Figure 8. Prototype du lecteur WAV avec bouton permettant de passer à la chanson suivante.
Pour ce prototype, nous n’avons pas utilisé le lecteur de carte SD
de la carte principale, mais un pet it module SD externe relié à l’ESP32 via SPI.

Si vous connectez l’ESP32 à un PC par USB, vous pouvez également contrôler le lecteur depuis un terminal. La commande “b” passe au morceau suivant, et "a" revient au précédent. À noter que notre lecteur ne prend pas encore en charge les fichiers MP3, mais vous pouvez facilement convertir vos chansons préférées au format WAV à l’aide d’un outil gratuit tel que [7].

Le code de démonstration est structuré de manière modulaire. Le module le plus central est sans doute Stream_I2S.h, chargé d’envoyer les octets audio vers l’interface I2S. (Voir l’encadré sur l’API I2S de l’ESP32.) Nous avons délibérément choisi de ne pas utiliser une grosse bibliothèque audio, comme Arduino Audio Tools de Phil Schatzmann [8]. Ces bibliothèques sont puissantes, compatibles avec de nombreuses plateformes, riches en fonctionnalités et très bien documentées. Mais elles ont tendance à masquer les données audio brutes, alors que nous souhaitions justement montrer à quel point il est simple de manipuler directement les octets représentant le signal audio audio.

En plus de notre bibliothèque Stream_I2S, une petite bibliothèque SDCardFiles.h, basée sur les bibliothèques Arduino standard, gère l’accès aux fichiers sur carte SD. Une autre librairie légère, Button.h, gère quant à elle la détection des appuis sur le bouton.

Voici la boucle principale la plus importante du programme:

 

uint8_t bBuffer[128];

...

 

while (SDCardFiles_DataLeftToRead())

{

SDCardFiles_ReadInBuffer(bBuffer, 128);

I2S_WriteFromBuffer(bBuffer, 128);

 

...

}

Nous commençons par lire 128 octets depuis la carte SD, puis ces 128 octets sont immédiatement envoyés à l’interface I2S de l’ESP32. Cela laisse ensuite suffisamment de temps pour vérifier si un bouton a été pressé ou si un caractère a été reçu sur l’interface série.

Ce programme doit être vu comme une simple démonstration : il illustre à quel point il est facile de manipuler des données audio. Bien sûr, un lecteur pleinement fonctionnel devrait intégrer un affichage ainsi que des commandes plus évoluées, comme un encodeur rotatif.

Component list


la prochaine partie de cette série, nous expérimenterons la transmission et la réception audio sans fil. En attendant, jetez un œil à la figure 7, qui montre un prototype du récepteur sans fil. À suivre !


Note de l'éditeur : Cet article (250384-01) figure dans le numéro spécial 2025 d'Elektor Circuit.


Des questions sur le projet Audio Transceiver ? 

Si vous avez des questions sur cet article ou sur le projet d'émetteur-récepteur audio en général, n'hésitez pas à envoyer un courriel à l'équipe éditoriale d'Elektor à l'adresse editor@elektor.com.

Je m'abonne
Abonnez-vous à la balise thématique Embedded & AI pour être averti dès qu'une information relative à ce sujet sera publiée par Elektor !