Pour utiliser un ESP32 comme radio Wi-Fi d’un Raspberry Pi, ESP-Hosted-Linux relie un circuit ESP compatible à la carte Linux et expose une interface réseau wlanX. Vous devez choisir un bus pris en charge, réaliser le câblage, installer le firmware ESP et charger le pilote Linux correspondant. Ce parcours s’adresse aux makers qui veulent intégrer une radio au système Linux, plutôt que simplement faire communiquer deux appareils déjà connectés au même réseau Wi-Fi.

Le point central : Linux garde la main sur la connexion. Le nom du réseau, l’authentification et la configuration IP se règlent côté Raspberry Pi, avec les outils réseau habituels.

Ce que fait ESP-Hosted-Linux

Dans cette architecture, l’ESP sert de coprocesseur radio : il fournit la partie sans fil à l’ordinateur hôte, c’est-à-dire la machine Linux qui le pilote. Un bus — la liaison matérielle qui transporte les échanges entre les deux composants — relie les appareils.

ESP-Hosted-Linux, maintenu par Espressif, s’intègre aux mécanismes Wi-Fi ordinaires de Linux, cfg80211 et nl80211. Le résultat est une interface WLAN, autrement dit une interface de réseau local sans fil, utilisable par les outils Linux. Le projet prend en charge le fonctionnement en client Wi-Fi et en point d’accès ; ce guide suit le parcours client, pour rejoindre un point d’accès existant.

Cela change la répartition du travail par rapport à un programme autonome sur ESP32. Vous ne placez pas les identifiants Wi-Fi dans un sketch chargé de gérer sa propre connexion : Linux associe l’interface au réseau et configure l’adresse IP.

ESP-Hosted-MCU suit une autre logique : davantage de gestion de la connexion reste sur l’ESP, qui conserve un rôle plus autonome. Si votre objectif est seulement d’échanger des données entre une application ESP32 et une application Raspberry Pi, les deux appareils peuvent utiliser leurs propres interfaces réseau. L’intégration d’un coprocesseur est un chantier différent.

Choisir une cible ESP32 et un transport

Commencez par le modèle exact du circuit, puis choisissez le transport, c’est-à-dire le bus utilisé par ESP-Hosted-Linux. SDIO, SPI et USB ne sont pas interchangeables sur tous les ESP.

La matrice de compatibilité d’Espressif donne les combinaisons suivantes :

Cible ESPTransports pris en chargeBandes Wi-Fi
ESP32SDIO, SPI2,4 GHz
ESP32-S2SPI2,4 GHz
ESP32-S3SPI2,4 GHz
ESP32-S31SPI, USB2,4 GHz
ESP32-C2SPI2,4 GHz
ESP32-C3SPI2,4 GHz
ESP32-C5SDIO, SPI2,4 et 5 GHz
ESP32-C6SDIO, SPI2,4 GHz
ESP32-C61SDIO, SPI2,4 GHz

Pour un montage en SDIO, les choix sont donc ESP32, ESP32-C5, ESP32-C6 et ESP32-C61. L’ESP32-C6 prend en charge les normes 802.11b/g/n/ax en 2,4 GHz. Si votre projet nécessite la bande 5 GHz, ESP32-C5 offre cette possibilité, avec les normes 802.11a/b/g/n/ac/ax.

Côté USB, Espressif prend en charge ESP32-S31. La référence Raspberry Pi indique que ce chemin ne nécessite ni GPIO du Raspberry Pi ni overlay Device Tree, la description complémentaire du matériel utilisée par le noyau.

Ce qu’il faut préparer côté hôte

La compatibilité du circuit ESP n’est qu’une partie du montage. La carte Linux doit aussi disposer d’un contrôleur pour le bus choisi, avec une configuration des broches et une intégration au noyau adaptées. Une plage de versions du noyau, à elle seule, ne suffit pas à garantir le fonctionnement d’une carte particulière.

Avant de passer au câblage, réunissez :

  • une carte Linux dont le bus choisi peut être configuré pour ce montage ;
  • une carte ESP correspondant à une combinaison prise en charge ;
  • les connexions du bus, de la masse et de la réinitialisation ;
  • une alimentation stable et, pour le SDIO, les résistances de rappel nécessaires ;
  • ESP-IDF, l’environnement de développement utilisé pour construire le firmware ESP ;
  • le code du pilote hôte correspondant au transport retenu.

Le choix pratique se fait donc dans les deux sens : partez du circuit ESP que vous possédez, mais vérifiez aussi ce que votre carte Linux permet réellement de raccorder.

Relier l’ESP32-C6 au Raspberry Pi en SDIO

Le SDIO utilise une horloge, une ligne de commande et des lignes de données. Pour ESP32-C6, les correspondances suivantes réunissent le brochage physique Raspberry Pi et les GPIO ESP par défaut indiqués par Espressif dans ses références de câblage.

Les numéros Raspberry Pi sont ceux des broches physiques du connecteur à 40 broches. Les numéros côté ESP32-C6 sont des GPIO.

SignalBroche physique Raspberry PiConnexion ESP32-C6 par défaut
DAT313GPIO 23
CLK15GPIO 19
CMD16GPIO 18
DAT018GPIO 20
DAT122GPIO 21
DAT237GPIO 22
Réinitialisation ESP31RST
Masse39Masse

Le raccordement doit être accompagné de la configuration du contrôleur SDIO et des broches côté Linux. Les fils établissent la liaison électrique ; le noyau doit ensuite pouvoir exploiter ce bus.

Les exigences électriques à respecter

Espressif impose des résistances de rappel au niveau haut, souvent appelées pull-ups, sur CMD et DAT0 à DAT3. Son schéma SDIO utilise des résistances externes de 10 kΩ. Vérifiez celles déjà présentes sur votre carte afin de ne pas les doubler inutilement.

Les signaux SDIO et SPI utilisent une logique à 3,3 V, pas à 5 V. Soignez aussi la liaison de masse, gardez les connexions courtes et fournissez une alimentation stable. Espressif recommande de réduire la fréquence d’horloge SDIO si les transferts sont instables.

Pour un montage en SPI, prévoyez également les signaux Handshake et Data Ready, qui servent à coordonner les échanges, ainsi que la réinitialisation. Le câblage SDIO de ce tableau ne se transpose donc pas tel quel au SPI.

Préparer le firmware et le pilote Linux

Configurer un ESP32 comme coprocesseur Wi-Fi pour Raspberry Pi

La procédure de démarrage d’Espressif repose sur un accord entre trois éléments : la cible ESP, le transport et le pilote de l’hôte. Choisissez cette combinaison avant de construire le logiciel ; elle doit rester cohérente des deux côtés du bus.

Suivez cet ordre, en séparant bien les opérations :

  1. Sélectionnez la cible dans ESP-IDF. Le firmware doit être construit pour le modèle exact de votre circuit, par exemple ESP32-C6.
  2. Sélectionnez le transport du firmware. Ce réglage détermine la liaison que l’ESP utilisera avec Linux : SDIO, SPI ou USB selon la cible.
  3. Compilez le firmware ESP. Cette étape produit le programme correspondant à la combinaison choisie.
  4. Flashez le firmware sur l’ESP. Le circuit reçoit ainsi le programme qui assurera son rôle de coprocesseur.
  5. Préparez le bus côté Linux. Configurez le contrôleur, les broches et l’intégration matérielle nécessaires sur votre carte. Les réglages dépendent de la plateforme et du transport.
  6. Compilez le module hôte correspondant. Choisissez le pilote sdio, spi ou usb adapté au firmware et au câblage.
  7. Chargez le module dans Linux. Le pilote peut alors prendre en charge le périphérique raccordé et exposer son interface réseau.

Le pilote hôte est le composant du noyau qui permet à Linux de dialoguer avec l’ESP. Il doit correspondre au transport réellement utilisé. Un firmware réglé pour SPI et un pilote préparé pour SDIO ne constituent pas une configuration cohérente, même si chacun a été compilé correctement.

Configurer le Wi-Fi sous Linux

Une fois le pilote chargé, la suite se passe sur le Raspberry Pi. Le guide du mode client Wi-Fi d’Espressif utilise l’interface créée par le pilote et laisse également la configuration IP à Linux.

  1. Repérez l’interface avec iw dev. Cette commande permet d’identifier l’interface sans fil prise en charge par Linux. Son nom suit le principe wlanX ; ne supposez pas qu’il sera forcément wlan0.
  2. Contrôlez sa présence avec ip link. Vous vérifiez ainsi que Linux expose bien l’interface réseau attendue.
  3. Associez cette interface au point d’accès. Utilisez votre gestionnaire réseau Linux ou wpa_supplicant, le service chargé de l’authentification Wi-Fi. C’est ici que vous configurez le réseau à rejoindre.
  4. Configurez l’adresse IP sous Linux. Votre gestionnaire réseau ou un client DHCP peut obtenir l’adresse auprès du réseau. DHCP est le mécanisme d’attribution automatique des paramètres IP.

La présence de wlanX, l’association Wi-Fi et l’obtention d’une adresse IP sont trois étapes distinctes. Cette séparation est utile pour diagnostiquer un problème : inutile de commencer par la configuration DHCP si le pilote n’a pas encore créé d’interface.

Erreurs fréquentes et contrôles utiles

  • Confondre broche physique et numéro GPIO. Reprenez les deux colonnes du tableau de câblage avant de brancher l’ESP32-C6.
  • Choisir le bus d’après le seul nom ESP32. Vérifiez le suffixe exact du modèle et sa ligne dans la matrice de compatibilité.
  • Oublier les pull-ups SDIO ou la masse. Contrôlez les lignes CMD et DAT0 à DAT3, les résistances déjà présentes et le retour de masse.
  • Chercher les identifiants Wi-Fi dans le firmware ESP. L’association au réseau se configure sur l’hôte Linux.
  • Utiliser systématiquement wlan0. Repérez d’abord le nom réel avec iw dev.

Si l’initialisation échoue, Espressif recommande d’examiner dmesg et les journaux série de l’ESP. Le premier donne les messages du noyau ; les seconds permettent de suivre le démarrage du firmware. Pour valider le parcours, contrôlez successivement l’apparition de l’interface, son association au point d’accès et sa configuration IP.

Interpréter les mesures SDIO de l’ESP32-C6

Espressif publie les mesures de référence suivantes pour ESP32-C6 en SDIO, sur la bande 2,4 GHz. Les largeurs de 20 et 40 MHz correspondent au canal radio Wi-Fi, tandis que Tx et Rx désignent les sens émission et réception indiqués dans son tableau.

TCP et UDP sont deux protocoles de transport réseau différents. Il faut conserver cette distinction pour évaluer les débits.

Largeur du canal radioTCP Tx / Rx (Mbps)UDP Tx / Rx (Mbps)
20 MHz40,9 / 55,667,8 / 68,3
40 MHz41,7 / 51,090,4 / 58,4

Le maximum TCP de ces lignes est 55,6 Mbps en Rx avec un canal de 20 MHz. Le maximum UDP est 90,4 Mbps en Tx avec un canal de 40 MHz. Ces deux valeurs correspondent donc à des modes de mesure différents.

Espressif précise que les détails sur l’hôte sont incomplets et que la méthode Tx/Rx n’est pas entièrement décrite de façon uniforme pour tous les résultats. Ces chiffres sont des références du projet, pas des débits garantis pour chaque montage Raspberry Pi.

Pour dimensionner votre projet, choisissez la ligne correspondant au protocole et à la largeur radio qui vous intéressent. Le tableau montre notamment qu’un canal de 40 MHz n’a pas donné un débit supérieur dans chaque colonne : en TCP Rx, la valeur publiée est de 51,0 Mbps à 40 MHz, contre 55,6 Mbps à 20 MHz.

Exploitation du module Linux

Le fonctionnement repose sur l’intégration du bus au noyau et sur le module hôte correspondant à votre montage. Conservez les choix de cible et de transport utilisés pour construire le firmware et le pilote : ils sont aussi utiles lors d’une nouvelle compilation que pendant le premier démarrage.

Dans un montage individuel utilisant ESP32-C6, le concepteur a rapporté qu’une coupure puis un rétablissement de l’alimentation de l’ESP avaient entraîné une déconnexion suivie d’une reconnexion, sans plantage ni défaillance du module noyau. Cette observation concerne ce montage particulier.

Repères rapides pour la mise en service

  • Avant la compilation : choisir le modèle ESP exact et un transport pris en charge par le circuit comme par l’hôte.
  • Avant le démarrage : vérifier le câblage, les niveaux logiques, la masse et les pull-ups nécessaires.
  • Après le chargement du pilote : identifier l’interface avec iw dev et ip link.
  • Pour rejoindre le réseau : configurer l’association Wi-Fi, puis l’adresse IP avec les outils Linux.
  • En cas d’échec d’initialisation : consulter dmesg et les journaux série de l’ESP.