Mit ESP-Hosted-Linux kannst du einen unterstützten ESP32 als WLAN-Funkmodul für einen Raspberry Pi unter Linux verwenden. Dafür verbindest du die Platinen über einen passenden Hardwarebus, installierst die ESP-Firmware und lädst den zugehörigen Linux-Treiber. Anschließend erscheint eine WLAN-Schnittstelle, über die Linux die Funkverbindung und die IP-Konfiguration verwaltet. Die Anleitung richtet sich an Maker, die eine Funkanbindung auf Hardware- und Treiberebene integrieren wollen.

Was ESP-Hosted-Linux auf dem Raspberry Pi macht

Bei ESP-Hosted-Linux übernimmt der ESP die Rolle eines Funk-Coprozessors: Er stellt dem Linux-Rechner seine Funkschnittstelle über eine Kabelverbindung zur Verfügung. Der Raspberry Pi ist dabei der Host, also der Rechner, der das Netzwerk verwaltet.

Espressifs Projekt bindet die WLAN-Schnittstelle über cfg80211 und nl80211 ein, die üblichen Linux-Komponenten für die Verwaltung drahtloser Netzwerke. Die Schnittstelle heißt beispielsweise wlan0 oder wlan1; wlanX steht hier für den jeweiligen Namen. Damit lassen sich die normalen Linux-Netzwerkwerkzeuge verwenden. Das Projekt unterstützt sowohl die Verbindung zu einem Zugangspunkt als auch den Betrieb als Zugangspunkt. Hier geht es um die Verbindung zu einem vorhandenen WLAN.

Das ist eine andere Architektur als der Datenaustausch zwischen einem ESP32 und einem Raspberry Pi, die jeweils selbst mit demselben WLAN verbunden sind. In diesem Fall besitzen beide Geräte ihre eigene Netzwerkschnittstelle und ihre Anwendungen kommunizieren über das Netzwerk. Wenn du lediglich Daten zwischen zwei bereits vernetzten Geräten austauschen möchtest, brauchst du die hier beschriebene Funk-Coprozessor-Anbindung dafür nicht.

Auch ESP-Hosted-MCU verteilt die Aufgaben anders: Dort bleibt mehr WLAN-Verbindungsmanagement auf dem ESP. Bei ESP-Hosted-Linux verwaltet dagegen Linux die Verbindung zum Zugangspunkt und die IP-Adresse. Die WLAN-Zugangsdaten richtest du deshalb später auf dem Raspberry Pi ein.

ESP32-Ziel und Übertragungsweg auswählen

Die erste Entscheidung betrifft den genauen ESP-Chip und den Bus, also die elektrische Datenverbindung zwischen ESP und Host. Espressif unterstützt je nach Chip SDIO, SPI oder USB. SDIO ist eine Schnittstelle für SD-Ein-/Ausgabegeräte; SPI ist ein serieller Peripheriebus. Beide benötigen passende Signalleitungen und eine entsprechende Konfiguration auf dem Linux-Rechner.

Die Kompatibilitätsübersicht von Espressif nennt folgende Kombinationen:

ESP-ChipUnterstützte VerbindungWLAN-Frequenzband und Standards
ESP32SDIO, SPI2,4 GHz; 802.11b/g/n
ESP32-S2SPI2,4 GHz; 802.11b/g/n
ESP32-S3SPI2,4 GHz; 802.11b/g/n
ESP32-S31SPI, USB2,4 GHz; 802.11b/g/n
ESP32-C2SPI2,4 GHz; 802.11b/g/n
ESP32-C3SPI2,4 GHz; 802.11b/g/n
ESP32-C5SDIO, SPI2,4 und 5 GHz; 802.11a/b/g/n/ac/ax
ESP32-C6SDIO, SPI2,4 GHz; 802.11b/g/n/ax
ESP32-C61SDIO, SPI2,4 GHz; 802.11b/g/n/ax

Für eine SDIO-Anbindung kommen damit ESP32, ESP32-C5, ESP32-C6 und ESP32-C61 infrage. Wenn dein Aufbau ein 5-GHz-WLAN nutzen soll, bietet der ESP32-C5 diese Funkoption. Der ESP32-C6 arbeitet hier im 2,4-GHz-Band.

Der ESP32-S31 eröffnet einen anderen Weg: Laut Raspberry-Pi-Referenz von Espressif benötigt seine USB-Anbindung weder Raspberry-Pi-GPIOs noch ein Device-Tree-Overlay. Ein solches Overlay ergänzt die Hardwarebeschreibung, mit der Linux Anschlüsse und Controller konfiguriert. ESP-Firmware und Host-Treiber gehören auch beim USB-Weg zur Einrichtung.

Was du vor dem Aufbau brauchst

Lege zunächst diese Voraussetzungen fest:

  • Einen ESP-Chip mit Unterstützung für den gewählten Bus.
  • Einen Raspberry Pi oder anderen Linux-Einplatinenrechner mit nutzbarem Host-Controller für diesen Bus.
  • Eine passende Zuordnung der Anschlüsse, die nötige Pin-Konfiguration und die Kernel- beziehungsweise Device-Tree-Integration.
  • Eine stabile Stromversorgung und die für den Bus erforderliche Verdrahtung.
  • ESP-IDF zum Konfigurieren, Übersetzen und Flashen der ESP-Firmware sowie die Möglichkeit, den Host-Treiber für dein Linux-System zu bauen.

Der Linux-Kernel ist der Betriebssystemkern; der Host-Treiber vermittelt zwischen ihm und dem angeschlossenen ESP. Chipunterstützung und Platinenintegration sind zwei getrennte Voraussetzungen. Prüfe daher neben dem ESP-Modell auch den Bus-Controller und dessen Einbindung auf deinem konkreten Linux-Rechner. Eine passende Kernelversion allein reicht dafür nicht aus.

ESP32-C6 per SDIO mit dem Raspberry Pi verbinden

Für den ESP32-C6 gibt Espressif eine SDIO-Zuordnung zum physischen 40-Pin-Steckverbinder des Raspberry Pi vor. Die Zahlen in der mittleren Spalte bezeichnen die tatsächlichen Positionen auf diesem Steckverbinder. Auf der ESP-Seite stehen die Standard-GPIOs des ESP32-C6.

Die Zuordnung ergibt sich aus der Raspberry-Pi-Referenz und der Anleitung zur Hardwareeinrichtung:

SignalPhysischer Raspberry-Pi-PinESP32-C6-Anschluss
DAT313GPIO 23
CLK15GPIO 19
CMD16GPIO 18
DAT018GPIO 20
DAT122GPIO 21
DAT237GPIO 22
ESP-Reset31RST
Masse39Masse

CLK ist das Taktsignal, CMD die Befehlsleitung und DAT0 bis DAT3 sind die Datenleitungen. Die Reset-Leitung dient dem Zurücksetzen des ESP.

Signalpegel und Pull-ups beachten

SDIO- und SPI-Signale verwenden 3,3-V-Logik. Lege keine 5-V-Signalpegel an diese Leitungen an. Sorge außerdem für eine stabile Versorgung und eine zuverlässige gemeinsame Masseverbindung.

Espressif verlangt Pull-up-Widerstände an CMD und DAT0 bis DAT3. Diese Widerstände ziehen die Leitungen im Ruhezustand auf einen definierten hohen Pegel. Der SDIO-Schaltplan verwendet externe 10-kΩ-Pull-ups. Prüfe vor dem Einbau, welche Widerstände auf deiner ESP-Platine bereits vorhanden sind: Espressif warnt vor zusätzlich eingebauten Pull-ups, wenn die Platine sie schon besitzt.

Halte die Busleitungen kurz und die Masseführung zuverlässig. Bei instabilen Übertragungen empfiehlt Espressif, den SDIO-Takt zu reduzieren. Die Pinverbindungen sind dabei nur der elektrische Teil: Der Raspberry Pi muss den SDIO-Bus auch mit der passenden Pinbelegung und Host-Konfiguration betreiben.

Wer SPI wählt, benötigt zusätzlich zu den Busleitungen die Signale Handshake und Data Ready sowie Reset. Diese Signale müssen ebenfalls verdrahtet und auf dem Host konfiguriert werden. Übernimm dafür die SPI-Konfiguration aus Espressifs Hardware- und Raspberry-Pi-Anleitung statt die SDIO-Pinliste umzudeuten.

Firmware und Linux-Treiber einrichten

ESP32 als WLAN-Modul am Raspberry Pi einrichten

Nach der Hardwarewahl folgt die Softwareeinrichtung. Das verbindende Prinzip ist einfach: ESP-Firmware und Host-Treiber müssen denselben Chip und denselben Übertragungsweg verwenden. Die Schnellstartanleitung von Espressif führt durch die jeweiligen Build- und Installationsbefehle; die Host-Konfiguration hängt von der Platine und dem Bus ab.

  1. Konfiguriere die ESP-Firmware. Wähle in der ESP-IDF-Konfiguration den genauen Zielchip und den vorgesehenen Transport, beispielsweise ESP32-C6 mit SDIO. Damit legst du fest, über welche Schnittstelle die Firmware mit Linux kommuniziert.
  2. Übersetze die ESP-Firmware. Baue die zuvor ausgewählte Konfiguration mit ESP-IDF. So entsteht die Firmware für deinen Chip und deinen Bus.
  3. Flashe die Firmware auf den ESP. Übertrage den erstellten Build auf die ESP-Platine. Der Mikrocontroller benötigt diese Firmware, um als Funk-Coprozessor zu arbeiten.
  4. Bereite den Host-Bus unter Linux vor. Richte Controller, Pin-Konfiguration und gegebenenfalls Device Tree entsprechend deinem Raspberry Pi und dem gewählten Transport ein. Erst damit kann Linux den angeschlossenen ESP über den Bus erreichen.
  5. Baue den passenden Host-Treiber. Verwende die zum Transport gehörende Variante sdio, spi oder usb. Dieser Treiber stellt die Verbindung zwischen Linux und der ESP-Firmware her.
  6. Lade das Host-Modul. Aktiviere den gebauten Treiber auf dem Linux-Rechner. Anschließend kannst du prüfen, ob die WLAN-Schnittstelle angelegt wurde.

WLAN und IP-Adresse unter Linux konfigurieren

Sobald die Schnittstelle vorhanden ist, erfolgt die WLAN-Einrichtung auf dem Raspberry Pi. Espressifs Anleitung für den WLAN-Clientbetrieb verwendet dafür die normalen Linux-Netzwerkwerkzeuge.

  1. Ermittle die WLAN-Schnittstelle mit iw dev. Notiere den Namen der ESP-gestützten Schnittstelle. Verwende ihn für die weitere Konfiguration; er muss nicht wlan0 lauten.
  2. Prüfe die Netzwerkschnittstelle mit ip link. Damit kontrollierst du, ob Linux sie als Netzwerkgerät führt. Eine sichtbare Schnittstelle ist der erste Erfolg der Firmware- und Treibereinrichtung.
  3. Verbinde die Schnittstelle mit deinem Zugangspunkt. Verwende den Linux-Netzwerkmanager oder wpa_supplicant, einen Dienst für die WLAN-Anmeldung. Hier richtest du WLAN-Name und Zugangsdaten ein.
  4. Richte die IP-Konfiguration unter Linux ein. Lass den Netzwerkmanager oder einen DHCP-Client eine Adresse beziehen. DHCP ist das Verfahren, mit dem ein Netzwerk automatisch IP-Adressen zuweist.

Woran du den Erfolg erkennst

Die Einrichtung hat mehrere Etappen: iw dev findet die WLAN-Schnittstelle, ip link führt sie als Netzwerkgerät, anschließend besteht die Verbindung zum Zugangspunkt und Linux hat eine IP-Adresse eingerichtet. Die reine Erkennung des Funkmoduls ist also erst der Anfang der Netzwerkeinrichtung.

Wenn die Schnittstelle nicht erscheint, prüfe die Kernelmeldungen mit dmesg und die seriellen Protokollausgaben des ESP. Espressif empfiehlt beide Protokolle zur Fehlersuche. Kontrolliere dazu die gewählte Firmwarekonfiguration, den geladenen Transporttreiber und die Host-Bus-Einrichtung. Bei SDIO gehören auch Pull-ups, kurze Leitungen, Stromversorgung und Masseführung auf die Prüfliste.

Welche Datenraten Espressif für ESP32-C6 über SDIO misst

Espressif veröffentlicht für den ESP32-C6 über SDIO folgende Referenzmessungen im 2,4-GHz-WLAN. Die Kanalbreite betrifft den WLAN-Funkkanal. Sie ist eine andere Einstellung als der Takt des SDIO-Busses.

Die Leistungsübersicht von Espressif unterscheidet TCP und UDP sowie die als Tx und Rx bezeichneten Sende- und Empfangsrichtungen:

WLAN-KanalbreiteTCP Tx/Rx in Mbit/sUDP Tx/Rx in Mbit/s
40 MHz41,7 / 51,090,4 / 58,4
20 MHz40,9 / 55,667,8 / 68,3

TCP ist ein Transportprotokoll mit zuverlässiger, geordneter Zustellung; UDP überträgt Datagramme ohne entsprechende Zustellgarantie. Die beiden Protokolle liefern deshalb unterschiedliche Messwerte. Auch innerhalb eines Protokolls unterscheiden sich die Richtungen und Kanalbreiten.

Die oft interessante Zahl 55,6 Mbit/s gehört zur TCP-Rx-Messung bei 20 MHz Kanalbreite. Die 90,4 Mbit/s stammen dagegen aus der UDP-Tx-Messung bei 40 MHz. Espressif beschreibt diese Ergebnisse als Referenzwerte und garantiert sie nicht für jeden Aufbau. Das Unternehmen weist außerdem auf unvollständige Angaben zum Testhost und eine nicht durchgehend vollständig beschriebene Tx/Rx-Methodik hin.

Linux-Modul und Funkmodul im Betrieb

Auch beim späteren Betrieb bleibt das Zusammenspiel aus ESP-Firmware, Buskonfiguration und Host-Treiber entscheidend. Wenn du den Übertragungsweg wechselst, muss die Konfiguration auf beiden Seiten zum neuen Bus passen.

Bei einem einzelnen ESP32-C6-Aufbau wurde berichtet, dass sich die Verbindung nach dem Abschalten und Wiederherstellen der ESP-Stromversorgung wieder aufbaute, ohne dass das Kernelmodul abstürzte oder ausfiel. Diese Beobachtung bezieht sich auf diesen Aufbau; sie ist keine allgemeine Zuverlässigkeitszusage.

Kurzreferenz für die Fehlersuche

  • Keine WLAN-Schnittstelle: Mit iw dev, ip link, dmesg und den seriellen ESP-Protokollen die Erkennung prüfen; Zielchip, Transport und Host-Bus-Konfiguration kontrollieren.
  • Instabile SDIO-Übertragung: Pull-ups, Leitungslänge, Masseverbindung und Versorgung prüfen; Espressif empfiehlt bei Instabilität einen niedrigeren SDIO-Takt.
  • Schnittstelle vorhanden, aber noch keine Netzwerkverbindung: Die Anmeldung am Zugangspunkt über den Linux-Netzwerkmanager oder wpa_supplicant einrichten und anschließend die IP-Konfiguration über Linux abschließen.