Aus dem Labor ins Wohnzimmer: Bau eines WiFi-Kameramoduls mit ESP32
Autor: DerSchneider
Kaum vorstellbar, dass eine Handvoll Mikrocontroller für weniger als zwei Euro pro Stück eine Technik ermöglicht, die noch vor wenigen Jahren den teuren Laboreinrichtungen großer Forschungseinrichtungen vorbehalten war: die Visualisierung von Funkwellen. Was wie ein Zaubertrick daherkommt, ist das Ergebnis kluger Ingenieursarbeit und vor allem eines: überraschend gut nachbaubar. Dieser Artikel liefert eine praxisnahe Anleitung für den Aufbau eines ESP32-basierten Antennenarrays zur WiFi-Signalvisualisierung samt Stückliste, Softwarebeispielen und einer ehrlichen Einordnung der Anwendungsmöglichkeiten.
Von der Theorie zur Hardware: Was du wirklich brauchst
Der Aufbau eines ESP32-Antennenarrays folgt einem strikten technischen Prinzip: Mehrere Empfangseinheiten müssen exakt synchronisiert werden, um aus den winzigen Phasenunterschieden eines eintreffenden Signals den Einfallswinkel berechnen zu können. Im Labor des Instituts für Nachrichtentechnik der Universität Stuttgart entstand das Projekt ESPARGOS (ESP32 ARray for GSM Operated Sensing) als Antwort auf diese Herausforderung – eine kostengünstige, dennoch präzise Plattform.
Bevor es an die Detailplanung geht, ein klares Wort vorweg: Ein vollwertiges 8-Kanal-Array mit exakter Phasensynchronisation ist kein Einsteigerprojekt. Wer mit dem ESP32 und seinen grundlegenden Funktionen noch nicht vertraut ist, sollte zunächst mit einem einfachen CSI-Reader auf Basis eines einzelnen ESP32 beginnen und sich dann steigern.
Kernhardware – das Herzstück des Arrays
Die Wahl des richtigen Mikrocontrollers ist entscheidend. Alle ESP32-Varianten ab der ersten Generation unterstützen den Zugriff auf die sogenannte Channel State Information (CSI), einem Datensatz, der die genaue Beschaffenheit des Funkkanals pro Unterträger beschreibt. Für den professionellen Nachbau eines Arrays eignen sich folgende Optionen:
- ESP32-S3: Aktuelle Generation mit verbessertem Wi-Fi-Frontend und mehr Rechenleistung – die erste Wahl für ambitionierte Nachbauten.
- ESP32-C6: Besitzt Unterstützung für Wi-Fi 6 (802.11ax) und kann mit 256 Unterträgern eine deutlich höhere Detailtiefe liefern.
- ESP32-WROOM-32: Der günstigste Vertreter der Familie, ebenfalls CSI-fähig, aber mit älterer Wi-Fi-Generation und geringerer Rechenleistung.
Das Antennen-Interface
Jeder ESP32 benötigt eine eigene Antenne. Hierfür nutzt man am besten ESP32-Module mit u.FL/IPEX-Anschluss, um eine direkte und verlustarme Verbindung zu den eigentlichen Antennen herzustellen. Darauf aufbauend kommen verschiedene Antennentypen in Frage:
- 2,4 GHz-Patchantennen (auf Leiterplatte realisiert) oder als fertige Bauteile mit geringer Bauhöhe
- Kleine omnidirektionale Stabantennen – einfacher zu beschaffen, aber weniger gebündelt
- Yagi-Antennen für gerichtete Experimente – empfohlen für Fortgeschrittene, wenn der Fokus auf der Untersuchung von Reflektionen liegt
Phasensynchronisation – die eigentliche Meisteraufgabe
Das Alleinstellungsmerkmal eines funktionierenden Antennenarrays ist nicht die Anzahl verbauter ESP32, sondern deren gegenseitige Synchronisation. Das im Video gezeigte System löst das Problem auf typisch clevere, kostengünstige Art:
- Einen gemeinsamen 40 MHz-Takt (beispielsweise generiert durch einen Si5341 oder einen hochwertigen TCXO) versorgt alle ESP32s mit derselben Frequenzreferenz.
- Ein zusätzlicher Master-ESP32 fungiert als Sender eines Phasenreferenzsignals. Dieses Signal läuft über eine Leiterbahn mit bekannter Länge und bekannter Ausbreitungsgeschwindigkeit zu den anderen ESP32 und erlaubt es, die zufälligen Phasenoffsets der einzelnen PLLs zu berechnen.
- Bei 2,4 GHz und den geforderten Phasengenauigkeiten müssen die Signalleitungen auf der Platine exakt gleich lang sein – Abweichungen von mehr als einem Millimeter führen bereits zu merklichen Phasenfehlern.
Die komplette Stückliste (BOM)
Die folgende Tabelle fasst die wichtigsten Komponenten für den Aufbau eines 2×4-Elemente-Arrays (acht Empfangskanäle) übersichtlich zusammen:
| Kategorie | Komponente | Geschätzte Anzahl | Richtpreis (pro Stück) |
|---|---|---|---|
| Kernhardware | ESP32-S3-Modul mit u.FL/IPEX für externe Antennen | 8 Stück | ca. 4–6 Euro |
| Referenztakt | Si5341 Clock Generator oder alternativ: TCXO 40 MHz + Puffer | 1 Stück | 5–15 Euro |
| Signalverteilung | SMA/IPEX-Kabel, hochwertige Leiterplatte (4-lagig), 50 Ohm | individuell | kalkulationsabhängig |
| Referenzverteilung | Microstrip-Leitungen mit garantierter Längengleichheit | – | auf der Leiterplatte |
| Zubehör | Netzteil 5V/3A, USB-zu-Seriell-Adapter, ggf. Gehäuse | 1 Satz | ca. 20 Euro |
| Antennen | 2,4 GHz-Patch- oder Stabantenne mit u.FL-Stecker | bis zu 8 Stück | 3–10 Euro |
Eine Anmerkung zum Preis: Die genannten Beträge sind Richtwerte. Wer selbst eine Leiterplatte entwickeln lässt, reduziert die Kabelverbindungen auf ein Minimum und erreicht beste elektrische Eigenschaften – zahlt allerdings eine einmalige Fertigungspauschale von etwa 50–100 Euro.
Wer nicht vollständig selbst entwickeln möchte, kann auf das ESPARGOS-System zurückgreifen. Die Entwickler der Universität Stuttgart bieten die Hardware in Kleinserien an, stellen die Firmware und eine umfangreiche Python-Bibliothek zur Verfügung, die die Kalibrierung und Signalverarbeitung bereits stark vereinfacht.
Software und Beispielcode: Von den Rohdaten zum Bild
Nachdem die Hardware steht, geht es an den eigentlichen Kern des Projekts: das Auslesen der CSI-Daten und deren Umwandlung in ein Bild. Das folgende Codebeispiel zeigt die grundlegenden Schritte für einen einzelnen ESP32.
Schritt 1: CSI aktivieren
Das folgende Arduino/C++-Beispiel aktiviert den CSI-Modus und gibt die Rohdaten über die serielle Schnittstelle aus. Die eigentliche Magie geschieht im Callback:
cpp
#include <WiFi.h>
// Callback-Funktion für eingehende CSI-Daten
void csi_callback(void *ctx, wifi_csi_info_t *csi_info) {
if (!csi_info || !csi_info->buf) return;
// Rohdaten ausgeben: Jeder Unterträger (subcarrier) liefert ein komplexes Zahlenpaar
for (int i = 0; i < csi_info->len; i++) {
int16_t real = csi_info->buf[i].i;
int16_t imag = csi_info->buf[i].q;
Serial.print(real); Serial.print(",");
Serial.print(imag); Serial.print(";");
}
Serial.println();
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin("SSID", "PASSWORT"); // Verbindung zu einem Access Point herstellen
// CSI konfigurieren
wifi_csi_config_t csi_config = {
.channel_filter = WIFI_CSI_CHAN_FILTER_AUTO,
.lltf_en = true,
.htltf_en = true,
.stbc_htltf2_en = false,
.manu_scale = 1,
.shift = 1,
.pkt_cnt_mask = 0
};
esp_wifi_set_csi_config(&csi_config);
esp_wifi_set_csi_cb(csi_callback, NULL);
esp_wifi_set_csi(true);
}
void loop() { delay(1000); }
Das Beispiel zeigt die grundsätzliche Struktur: Nach Verbindung mit einem WLAN-Netzwerk (oder wahlweise im Sniffer-Modus) konfiguriert das Programm den CSI-Mechanismus und richtet eine Callback-Funktion ein, die bei jedem empfangenen WLAN-Paket aufgerufen wird. Die so erhaltenen Daten sind die Grundlage jeder weiteren Analyse.
Schritt 2: Vom einzelnen ESP32 zum Array
Für ein ganzes Array aus mehreren synchronisierten ESP32-Modulen erweitert sich die Software um entscheidende Komponenten:
- Aufnahme von Phasenreferenzpaketen: Ein speziell dafür vorgesehener ESP32 sendet definierte Pakete, die von allen anderen empfangen werden. Die Abweichungen zwischen dem erwarteten und dem tatsächlichen Phasenwert liefern den individuellen Kalibrierungsfaktor.
- Auslesen und Weiterleiten der Messdaten: Jeder ESP32 sendet seine Rohdaten gebündelt über eine serielle Verbindung oder MQTT an einen zentralen Rechner. Dort übernimmt eine Python-Pipeline die Weiterverarbeitung.
- Aufbereitung der Messungen zur Bildberechnung: Zunächst werden die komplexen CSI-Werte durch eine Inverse Schnelle Fourier-Transformation (IFFT) in Impulsantworten (CIR) umgewandelt. Ein MUSIC-Algorithmus (Multiple Signal Classification) schätzt anschließend den Einfallswinkel der einzelnen Signalanteile. Das Ergebnis ist ein räumliches Spektrum, das als Heatmap oder direkt ins Kamerabild eingeblendet werden kann.
Anwendungen: Was du mit dem Array wirklich tun kannst
Die visuell beeindruckende Darstellung von WiFi-Signalen ist erst der Anfang. Das ESP32-Antennenarray eröffnet praktische Anwendungen in mehreren Bereichen, deren Anforderungen und Realisierbarkeit jedoch sorgfältig abgewogen werden müssen.
1. Durch-Wand-Bewegungserkennung (Human Presence Detection)
Die Fähigkeit des Arrays, Personen auch ohne Sichtkontakt zu erkennen, beruht auf der Analyse von Mehrwegeausbreitungen. Ein sich bewegender Mensch reflektiert und absorbiert die ohnehin vorhandenen WLAN-Signale; der empfangene CSI-Strom ändert sich dadurch charakteristisch. Dies funktioniert mit einem einzelnen ESP32-Paar (Sender und Empfänger) und eignet sich zur Erkennung, ob sich jemand in einem Raum aufhält, nicht jedoch zur genauen Positionsbestimmung.
Die Nachteile sind nicht zu unterschlagen: Das Verfahren reagiert empfindlich auf Umgebungsänderungen, benötigt eine Kalibrierungsphase (meist 10–30 Sekunden Ruhe) und zeigt eine gewisse Fehlalarm-Neigung. Vor Installation in realen Umgebungen ist ein ausführlicher Testbetrieb unerlässlich. Für sicherheitskritische Anwendungen (etwa Einbruchsalarme) ist die Technik derzeit noch nicht ausgereift.
2. Gerätelokalisierung (Device-Free Localization)
Die präzisere Ortung eines aktiven WLAN-Senders (beispielsweise eines Smartphones) gelingt mit dem vollständigen Antennenarray. ESPARGOS erreicht dabei in Sichtverbindung Genauigkeiten im Submeter-Bereich und kann auch hinter Wänden noch eine grobe Positionsschätzung liefern.
Die praktische Nutzung beschränkt sich auf Umgebungen mit einem oder wenigen aktiven WLAN-Sendern – in einer dicht besiedelten Büroumgebung mit Dutzenden Smartphones ist eine eindeutige Identifikation kaum noch möglich. Die Software filtert zwar nach MAC-Adressen, überwindet damit aber nicht die physikalische Überlagerung vieler Signale.
3. Forschung und Lehre (Channel Charting)
Die im Video gezeigte neuronal-net-zbasierte Lokalisierung ohne Sichtverbindung (Channel Charting) stellt den derzeitigen Höhepunkt des Projekts dar. Ein neuronales Netzwerk erlernt aus einer Vielzahl gemessener Kanaldaten die Geometrie des Raums, selbst wenn sich der Sender hinter einem Metallbehälter befindet. Diese Methode ist ein hervorragendes Forschungswerkzeug für Hochschulen und Forschungsinstitute. Für eine alltägliche Anwendung ist der Trainingsaufwand jedoch zu hoch und die Reproduzierbarkeit über verschiedene Räume hinweg noch nicht ausreichend erforscht.
Weitere Anwendungsmöglichkeiten umfassen:
- Bewegungsverfolgung von Robotern in Produktionshallen
- Präsenzbasierte Gebäudeautomation (Licht- und Heizungssteuerung, wenn ein Raum betreten wird)
- Berührungslose Gestensteuerung (Grobmotorische Bewegungen können bereits erkannt werden)
- Passive Radarnutzung: Ortung von Objekten aus reflektierenden Materialien durch Auswertung vorhandener WLAN-Signale (wie im Video mit der Alufolie demonstriert)
Einordnung: Chancen, Grenzen und realistische Erwartungen
Nach all der technischen Detailtiefe ist eine ehrliche Einordnung notwendig. Das ESP32-Antennenarray ist eine faszinierende Forschungsplattform, deren Fähigkeiten beeindrucken. Es ist jedoch (noch) kein ausgereiftes Konsumprodukt. Die folgenden Punkte verdeutlichen die aktuellen Grenzen:
- Installationsaufwand: Die exakte Positionierung der Antennen und der Synchronisationsleitungen erfordert Sorgfalt. Ein wild zusammengelötetes Kabelgewirr wird keine brauchbaren Ergebnisse liefern.
- Umgebungsabhängigkeit: Möbel, Personen und andere metallische Gegenstände verändern die Ausbreitungsbedingungen erheblich. Ein in einem Raum kalibriertes System versagt in einem anderen Raum oft komplett.
- Störanfälligkeit: Fremde WLAN-Netzwerke, Mikrowellen oder Bluetooth-Geräte überlagern die empfangenen Signale. Robuste Störunterdrückung ist noch Gegenstand aktueller Forschung.
Andererseits fallen die Stärken ebenso deutlich ins Gewicht:
- Überraschend niedrige Kosten: Ein vollwertiges 8-Kanal-Array lässt sich für etwa 150–200 Euro realisieren. Vergleichbare kommerzielle Systeme (etwa aus dem SDR-Bereich) kosten ein Vielfaches.
- Offene Plattform: Die gesamte Software-Basis ist offen einsehbar und veränderbar. Wer programmieren kann, kann das System stetig verbessern und an eigene Bedürfnisse anpassen.
- Datenschutzfreundlich: Anders als Kameras erfasst das System keine Gesichter oder Personen im Detail, sondern abstrahierte Bewegungsmuster. Eine ethischen Mehrwert bietet diese Technik insbesondere in sensiblen Bereichen wie Pflegeheimen.
Fazit und Ausblick
Der Nachbau eines ESP32-Antennenarrays ist ein ambitioniertes Projekt, das tiefe Einblicke in die moderne Nachrichtentechnik bietet. Die Kombination aus präziser Hardware-Synchronisation, ausgefeilten Signalverarbeitungsalgorithmen und maschinellem Lernen ist ein Paradebeispiel dafür, wie aus einfachen, kostengünstigen Bauteilen eine komplexe Gesamtfunktion entstehen kann.
In der Zukunft dürfte diese Technik noch weiter an Bedeutung gewinnen. Die ersten kommerziellen Produkte auf Basis von ESP32-CSI-Sensoren zeichnen sich bereits ab. Die Forschung arbeitet derzeit an der Verbesserung der Störfestigkeit, der Miniaturisierung der Hardware und der Entwicklung besserer neuronaler Netze für die Lokalisierung hinter Hindernissen. Es ist gut möglich, dass in wenigen Jahren ein kleiner, unscheinbarer WLAN-Router nicht nur Daten überträgt, sondern auch den Raum um sich herum „sieht“.
Wer heute mit dem Bau eines eigenen ESP32-Antennenarrays beginnt, arbeitet nicht nur an einem Bastelprojekt, sondern an einem relevanten Zukunftsthema der drahtlosen Sensorik. Die Bauteile sind bezahlbar, die Software ist frei verfügbar, und die nötige Anleitung – Stichwort ESPARGOS und ESP-CSI – steht im Netz bereit. Der Rest ist Neugier und die Bereitschaft, in die Tiefe zu gehen.
Quellen:
- ESPARGOS-Projektseite. https://espargos.net/
- ESPARGOS Python Client Library & Demos. GitHub. https://github.com/ESPARGOS/pyespargos
- Florian Euchner, Marc Gauger et al. (University of Stuttgart), ESPARGOS: An ESP32 Phased Array for Seeing WiFi.
- ESP32 CSI Tool. https://stevenmhernandez.github.io/ESP32-CSI-Tool/
- Espressif Systems. ESP-IDF Programming Guide – Wi-Fi Driver – Channel State Information (CSI). https://docs.espressif.com/
- IEEE 802.11-2020 – IEEE Standard for Information Technology—Telecommunications and Information Exchange between Systems Local and Metropolitan Area Networks—Specific Requirements. (Grundlage der OFDM-Physikalagerschicht)
- Mehrere Quellen bei. Hacker News (zur Bewertung der Praxisrelevanz)
- Forenbeiträge zu ESP32-CSI aus dem r/esp32 und r/RTLSDR auf Reddit. (Einschätzungen zur Nachbaubarkeit und typischen Fehlerquellen)
Kommentar abschicken