Met ESP-Hosted-Linux kun je een ondersteunde ESP32-chip als wifi-radio aan een Raspberry Pi koppelen. Je verbindt de hardware via een geschikte bus, installeert de bijpassende ESP-firmware en Linux-driver en configureert daarna de draadloze verbinding in Linux. Dit is een hardwareproject voor makers die een ESP-radio als netwerkinterface willen gebruiken: Linux krijgt een wlanX-interface, terwijl de ESP het radiowerk uitvoert.
Wat ESP-Hosted-Linux doet
Bij deze opstelling loopt het netwerkverkeer van de Raspberry Pi via een fysieke verbinding naar de ESP-radio. Een bus is hier de dataverbinding tussen beide apparaten, bijvoorbeeld SDIO of SPI. De Linux-driver koppelt die verbinding aan het draadloze netwerksysteem van Linux.
ESP-Hosted-Linux gebruikt daarvoor cfg80211 en nl80211, de gebruikelijke Linux-mechanismen waarmee drivers en netwerkprogramma’s wifi beheren. Daardoor kun je de verbinding bedienen met normale Linux-netwerktools. Het project ondersteunt zowel verbinding met een toegangspunt als gebruik als toegangspunt; deze handleiding volgt de route waarbij je verbinding maakt met een bestaande wifi-router.
Dat verschilt van een ESP32 en Raspberry Pi die ieder zelfstandig op hetzelfde wifi-netwerk zitten. In die situatie wisselen hun toepassingen gegevens uit via het netwerk. Hier wordt de ESP juist de radio achter een Linux-netwerkinterface.
Ook de taakverdeling met ESP-Hosted-MCU verschilt. Bij ESP-Hosted-MCU blijft meer verbindingsbeheer op de ESP zelf. Bij ESP-Hosted-Linux beheert Linux de wifi-associatie — het aanmelden bij een toegangspunt — en de IP-configuratie. Je voert de netwerkgegevens dus in aan de Linux-kant.
Kies een ESP32-chip en verbinding
Begin met de combinatie van chip en bus. De naam ESP32 is geen garantie dat een model alle aansluitmogelijkheden ondersteunt. Espressif geeft in de hardwarematrix de volgende combinaties:
| ESP-chip | Ondersteunde verbinding | Wifi-band |
| ESP32 | SDIO, SPI | 2,4 GHz |
| ESP32-S2 | SPI | 2,4 GHz |
| ESP32-S3 | SPI | 2,4 GHz |
| ESP32-S31 | SPI, USB | 2,4 GHz |
| ESP32-C2 | SPI | 2,4 GHz |
| ESP32-C3 | SPI | 2,4 GHz |
| ESP32-C5 | SDIO, SPI | 2,4 en 5 GHz |
| ESP32-C6 | SDIO, SPI | 2,4 GHz |
| ESP32-C61 | SDIO, SPI | 2,4 GHz |
Wil je SDIO gebruiken, dan komen ESP32, ESP32-C5, ESP32-C6 en ESP32-C61 in aanmerking. SDIO gebruikt een kloklijn, een commandolijn en datalijnen. SPI is een andere seriële bus en wordt door alle modellen in deze tabel ondersteund, maar vereist bij dit project ook extra signalen voor de afstemming van gegevensoverdracht.
Voor een verbinding op 5 GHz is ESP32-C5 de relevante keuze in deze lijst. ESP32-C6 ondersteunt 2,4 GHz en de standaarden 802.11b/g/n/ax. De bandkeuze is een concrete reden om een ander model te kiezen; het maakt de ESP32-C5 niet automatisch geschikter voor ieder project.
ESP32-S31 biedt een USB-route. Volgens Espressifs Raspberry Pi-referentie gebruikt die route geen GPIO-aansluitingen op de Pi en heeft ze geen Device Tree-overlay nodig. Bij SDIO en SPI moet je juist rekening houden met de pinnen en busconfiguratie van de host.
Wat je vooraf nodig hebt
Zorg dat deze onderdelen op elkaar aansluiten:
- Een Linux-host met een bruikbare buscontroller. De Raspberry Pi moet de gekozen verbinding kunnen aanbieden, inclusief de juiste pintoewijzing en kernelondersteuning.
- Een ondersteunde ESP-chip en passende print. Controleer welke aansluitingen de print beschikbaar maakt en welke weerstanden al aanwezig zijn.
- Bedrading en stabiele voeding. Voor SDIO zijn ook pull-upweerstanden nodig, tenzij de print daarin al voorziet.
- ESP-IDF voor de ESP-firmware. Daarmee configureer, compileer en flash je de firmware voor jouw chip en verbinding.
- Een omgeving om de Linux-driver te bouwen. De hostmodule moet passen bij de gekozen bus en de Linux-configuratie.
De hostintegratie omvat onder meer pin control, de toewijzing van functies aan aansluitpinnen, en waar nodig de Device Tree, waarmee Linux de aangesloten hardware beschrijft. Ondersteuning van een ESP-chip is dus één deel van de puzzel; de bus moet ook op jouw Linux-print werken.
ESP32-C6 via SDIO op de Raspberry Pi aansluiten
Voor ESP32-C6 via SDIO geeft Espressif een concrete aansluiting op de 40-pins header van de Raspberry Pi. De Raspberry Pi-referentie en de hardwarehandleiding leveren samen deze mapping:
| Signaal | Fysieke Raspberry Pi-headerpin | Standaardaansluiting ESP32-C6 |
| DAT3 | 13 | GPIO 23 |
| CLK | 15 | GPIO 19 |
| CMD | 16 | GPIO 18 |
| DAT0 | 18 | GPIO 20 |
| DAT1 | 22 | GPIO 21 |
| DAT2 | 37 | GPIO 22 |
| ESP-reset | 31 | RST |
| Massa | 39 | Massa |
De Pi-kolom gebruikt fysieke pinnummers: tel de posities op de header. De ESP32-C6-kolom gebruikt GPIO-nummers. Houd die twee nummeringen bij het aansluiten uit elkaar.
Pull-ups, signaalniveau en voeding
CMD en DAT0–DAT3 hebben pull-upweerstanden nodig. Die houden een signaallijn op een hoog niveau wanneer niemand haar actief laag aanstuurt. Espressifs SDIO-schema gebruikt externe weerstanden van 10 kΩ. Controleer eerst welke pull-ups op jouw print zitten, zodat je ze niet onnodig dubbel aanbrengt.
De SDIO- en SPI-signalen werken met 3,3 V-logica. Voer geen 5 V-signaal op deze lijnen aan. Zorg daarnaast voor een stabiele voeding, korte busverbindingen en een goede gemeenschappelijke massa.
De tabel beschrijft de signaalbedrading. De voedingsaansluiting moet passen bij de ESP-print die je gebruikt. Ook moet je de SDIO-controller en de bijbehorende pinfuncties op de Pi configureren voordat de driver met de ESP kan communiceren.
Gebruik je SPI, volg dan de aansluitingen voor die bus. Naast de SPI-signalen en reset vereist ESP-Hosted-Linux daar Handshake en Data Ready: extra lijnen waarmee host en ESP de overdracht afstemmen.
Firmware en Linux-driver opbouwen
Leg vóór het bouwen vast welke chip en verbinding je gebruikt. Voor het voorbeeld in de bedradingstabel is dat ESP32-C6 met SDIO. Diezelfde keuze moet terugkomen in de ESP-firmware én in de hostdriver.
Volg daarna de volgorde uit Espressifs snelstartgids. De instellingen voor de hostbus blijven afhankelijk van je Linux-print en gekozen verbinding.
- Configureer de ESP-firmware in ESP-IDF. Selecteer de juiste chip en bus. Hiermee bepaal je welke hardware en welk transport de firmware gebruikt.
- Compileer de ESP-firmware. Dit levert de firmware op voor de zojuist gekozen combinatie.
- Flash de firmware naar de ESP. De chip krijgt daarmee de software waarmee hij als radio achter de Linux-host kan functioneren.
- Bereid de hostbus in Linux voor. Stel de buscontroller, pinfuncties en eventuele Device Tree-configuratie in volgens de instructies voor je platform.
- Bouw de bijpassende Linux-hostmodule. Kies de module voor
sdio,spiofusb, overeenkomstig de firmware en bedrading. - Laad de hostmodule. Daarmee krijgt Linux de driver die de verbinding met de ESP en de draadloze interface verzorgt.
- Zoek de draadloze interface met
iw dev. Hiermee controleer je of Linux een wifi-interface heeft aangemaakt. - Controleer de netwerkinterface met
ip link. Zoek de bijbehorende interfacenaam en status voordat je de netwerkconfiguratie uitvoert.
De interface heet wlanX, waarbij de uiteindelijke naam kan variëren. Gebruik bij volgende handelingen de naam die jouw systeem toont. Ga dus niet automatisch uit van wlan0.
Wifi in Linux configureren
Zodra de interface bestaat, voer je de netwerkconfiguratie uit op de Raspberry Pi. De ESP-firmware hoeft daarvoor geen toepassingssketch met je SSID en wachtwoord te worden. Linux beheert de verbinding via de ESP-radio.
Espressifs wifi-stationgids volgt deze taakverdeling:
- Maak verbinding met het toegangspunt. Gebruik je Linux-netwerkbeheerder of
wpa_supplicantop de gevonden interface. Deze stap verzorgt het aanmelden bij het wifi-netwerk. - Configureer een IP-adres. Laat de netwerkbeheerder of een DHCP-client op Linux de adresconfiguratie afhandelen. Daarmee krijgt de interface haar IP-instellingen.
Controleren of de opstelling werkt
Controleer de voortgang per laag. iw dev laat zien of de draadloze interface bestaat; ip link toont de netwerkinterface en haar status. De Linux-netwerkbeheerder of wpa_supplicant verzorgt vervolgens de verbinding met het toegangspunt. Daarna moet Linux ook de IP-configuratie hebben toegepast.
Een zichtbare interface is dus een bruikbare eerste mijlpaal. De volgende mijlpalen zijn de wifi-verbinding en de adresconfiguratie. Door die afzonderlijk te controleren, kun je een driverprobleem scheiden van een probleem bij het aanmelden op het netwerk.
De SDIO-doorvoercijfers van ESP32-C6
Espressif rapporteert voor ESP32-C6 via SDIO metingen op 2,4 GHz, met wifi-kanaalbreedtes van 20 en 40 MHz. TCP en UDP zijn verschillende netwerkprotocollen; Tx staat voor verzenden en Rx voor ontvangen.
De prestatiereferentie geeft deze resultaten:
| Wifi-kanaalbreedte | TCP Tx (Mbps) | TCP Rx (Mbps) | UDP Tx (Mbps) | UDP Rx (Mbps) |
| 20 MHz | 40,9 | 55,6 | 67,8 | 68,3 |
| 40 MHz | 41,7 | 51,0 | 90,4 | 58,4 |
De 55,6 Mbps is de hoogste TCP-waarde in deze ESP32-C6 SDIO-referentiemetingen, bij Rx en een kanaalbreedte van 20 MHz. Het UDP-maximum van 90,4 Mbps hoort bij Tx en 40 MHz. De hoogste waarden horen daarmee bij verschillende richtingen en radio-instellingen.
Espressif presenteert de cijfers als referentieresultaten en geeft geen snelheidsgarantie voor iedere Raspberry Pi-opstelling. De hostgegevens en de beschrijving van de Tx/Rx-meetmethode zijn niet voor alle resultaten volledig. Gebruik de afzonderlijke waarden daarom bij het plannen van je toepassing, met behoud van protocol, richting en kanaalbreedte.
Problemen bij het opstarten oplossen
Verschijnt er geen draadloze interface, bekijk dan dmesg op Linux en de seriële loguitvoer van de ESP. Daarmee kun je de hostdriver en de ESP-firmware elk aan hun eigen kant volgen.
Loop vervolgens de onderdelen na die samen de verbinding vormen:
- Chip en transport: ondersteunt jouw ESP-model de gekozen bus?
- Firmware en driver: gebruiken beide dezelfde chip- en transportconfiguratie?
- Hostbus: zijn controller en pinfuncties op de Linux-print correct ingesteld?
- SDIO-bedrading: kloppen de fysieke Pi-pinnen, ESP-GPIO’s en pull-ups?
- SPI-bedrading: zijn ook Handshake, Data Ready en reset aangesloten?
- Elektrische verbinding: zijn voeding, massa en signaalniveau in orde?
Bij instabiele SDIO-overdracht adviseert Espressif korte bedrading, een goede massaverbinding en zo nodig een lagere SDIO-klokfrequentie.
Bij één ESP32-C6-opstelling werd gemeld dat de verbinding na het uitschakelen en opnieuw inschakelen van de ESP-voeding terugkwam, zonder crash of uitval van de kernelmodule. Die waarneming betreft die afzonderlijke opstelling.