
Ein voll funktionsfähiger WiFi-NAT-Router (und jetzt auch ein WiFi-Repeater)
Ein voll funktionsfähiger WiFi NAT-Router (und jetzt auch ein WiFi-Repeater, auch L2-Bridge genannt)
NEU 2026: 10 Jahre nach der ersten Veröffentlichung ist es endlich geworden, was es immer vorgab zu sein: ein echter WiFi-Repeater. Um keine bestehenden Dokumentationen und Links zu brechen, bleibt die Standard Edition weiterhin die bekannte NAT-Router-Version mit allen erweiterten Funktionen. Aber wenn Sie an einer abgespeckten echten L2-Bridge interessiert sind, schauen Sie unten im Abschnitt ESP8266 WiFi Repeater - L2-Bridge nach.
Dies ist eine Implementierung eines WiFi NAT-Routers auf dem esp8266 und esp8285. Es enthält auch Unterstützung für eine paketfilternde Firewall mit ACLs, Portweiterleitung, Traffic Shaping, Hooks für Remote-Überwachung (oder Paket-Sniffing), ein MQTT-Management-Interface, einfache GPIO-Interaktion und Energiemanagement. Für ein Setup mit mehreren Routern in einem Mesh zur Abdeckung eines größeren Bereichs wurde ein neuer Modus "Automesh" hinzugefügt.
Wenn Sie nach einer Möglichkeit suchen, die NAT-Funktion in Ihr Arduino-Projekt zu integrieren - sehen Sie hier .
EPS32 NAT Router ist das fortgeschrittene Projekt für den ESP32.
Typische Anwendungsszenarien sind:
Standardmäßig fungiert der ESP als STA und als Soft-AP und leitet jeglichen IP-Verkehr transparent durch. Da es NAT verwendet, sind weder auf der Netzwerkseite noch auf den angeschlossenen Stationen Routing-Einträge erforderlich. Stationen werden standardmäßig über DHCP im 192.168.4.0/24-Netz konfiguriert und erhalten ihre DNS-Resolver-Adresse aus dem bestehenden WiFi-Netzwerk.
Messungen zeigen, dass es etwa 5 Mbps in beide Richtungen erreichen kann, sodass sogar Streaming möglich ist.
Einige Details werden in diesem Video erklärt.
Zum direkten Flashen auf das Gerät verwenden Sie den Web-Installer.
Der esp_wifi_repeater startet mit der folgenden Standardkonfiguration:
Nach dem ersten Start (oder Werksreset) wird es ein WiFi-Netzwerk mit einem offenen AP und der SSID "MyAP" anbieten. Es versucht noch nicht, automatisch eine Verbindung zu einem Uplink-AP herzustellen (da es keine gültige SSID oder Passwort kennt).
Verbinden Sie sich mit diesem WiFi-Netzwerk und führen Sie die grundlegende Konfiguration entweder über eine einfache Weboberfläche oder die vollständige Konfiguration mit allen Optionen über die Konsole durch.
Die Weboberfläche ermöglicht die Konfiguration aller Parameter, die für die grundlegende Weiterleitungsfunktionalität erforderlich sind. Dank an rubfi für die Hauptarbeit daran: https://github.com/rubfi/esp_wifi_repeater/ . Rufen Sie Ihren Browser auf "http://192.168.4.1" auf. Diese Seite sollte erscheinen:
Geben Sie zunächst die entsprechenden Werte für das Uplink-WiFi-Netzwerk ein, die "STA-Einstellungen". Verwenden Sie das Passwort "none" für offene Netzwerke. Aktivieren Sie das Kontrollkästchen "Automesh" genau dann, wenn Sie den Automesh-Modus wirklich verwenden möchten. Klicken Sie auf "Verbinden". Der ESP startet neu und stellt eine Verbindung zu Ihrem WiFi-Router her. Die Status-LED sollte nach einigen Sekunden blinken.
Wenn Sie Automesh ausgewählt haben, sind Sie mit der Konfiguration fertig. Die Konfiguration der "Soft-AP-Einstellungen" ist nicht erforderlich, da diese im Automesh-Modus identisch mit den "STA-Einstellungen" sind. Dieselbe SSID wird von allen verbundenen ESP-Repeatern angeboten.
Wenn Sie Automesh nicht verwenden, können Sie jetzt die Seite neu laden und die "Soft-AP-Einstellungen" ändern. Klicken Sie auf "Setzen" und der ESP startet erneut neu. Jetzt ist es bereit, Datenverkehr über den neu konfigurierten Soft-AP weiterzuleiten. Beachten Sie, dass diese Änderungen auch die Konfigurationsschnittstelle betreffen, d.h. für weitere Konfigurationen verbinden Sie sich über eines der neu konfigurierten WiFi-Netzwerke mit dem ESP. Für den Zugriff über den Soft-AP merken Sie sich die Adresse des Soft-AP-Netzwerks, falls Sie diese geändert haben (der ESP hat in diesem Netzwerk immer die Adresse x.x.x.1).
Wenn Sie möchten, können Sie das Kontrollkästchen "Sperren" markieren und auf "Sperren" klicken. Jetzt kann die Konfiguration nicht mehr geändert werden, ohne sie zuvor mit dem Passwort des Uplink-WiFi-Netzwerks zu entsperren (definieren Sie eines, auch wenn das Netzwerk offen ist).
Wenn Sie nicht-ASCII- oder Sonderzeichen in der Weboberfläche eingeben möchten, müssen Sie die HTTP-Hex-Kodierung wie "My%20AccessPoint" verwenden. Dies ergibt eine Zeichenkette "My AccessPoint". Mit dieser Hex-Kodierung können Sie jeden beliebigen Byte-Wert eingeben, außer 0 (aus C-internen Gründen).
Wenn Sie einen Fehler gemacht haben und jeglichen Kontakt zum ESP verloren haben, können Sie trotzdem die serielle Konsole verwenden, um ihn wiederherzustellen ("reset factory", siehe unten).
Erweiterte Konfiguration muss über die Befehlszeile auf der Konsolenschnittstelle erfolgen. Diese Konsole ist entweder über die serielle Schnittstelle mit 115200 Baud oder über den TCP-Port 7777 verfügbar (z.B. "telnet 192.168.4.1 7777" von einer verbundenen STA).
Verwenden Sie die folgenden Befehle für eine Ersteinrichtung:
Auch hier, wenn Sie nicht-ASCII- oder Sonderzeichen eingeben möchten, können Sie die HTTP-Hex-Kodierung verwenden (z.B. "My%20AccessPoint") oder, nur in der CLI, als Abkürzung C-Style-Anführungszeichen mit Backslash (z.B. "My\ AccessPoint"). Beide Methoden ergeben eine Zeichenkette "My AccessPoint".
Die Befehlszeile versteht noch viele weitere Befehle:
Ausreichend, um es in fast allen Umgebungen zum Laufen zu bringen.
Die meisten set-Befehle werden erst nach save und reset wirksam.
Jeder Teil einer Befehlszeileneingabe nach einem einzelnen "#" bis zum Ende der Zeile wird als Kommentar behandelt und ignoriert.
In der Standardkonfiguration ist GPIO2 so konfiguriert, dass es eine Status-LED (an GND angeschlossen) mit den folgenden Anzeigen ansteuert:
Mit "set status_led GPIO-Nummer" kann der GPIO-Pin geändert werden (jeder Wert > 16, z.B. "set status_led 255" deaktiviert die Status-LED vollständig). Wenn auf GPIO1 konfiguriert, funktioniert es mit der eingebauten blauen LED auf den ESP-01-Boards. Da GPIO1 jedoch auch der UART-TX-Pin ist, bedeutet dies, dass die serielle Konsole nicht funktioniert. Die Konfiguration ist dann auf Netzwerkzugriff beschränkt.
Wenn Sie einen ausgewählten GPIO für mehr als 3 Sekunden auf Low ziehen, führt der Repeater einen Werksreset durch und startet mit der Standardkonfiguration neu. Mit "set hw_reset GPIO-Nummer" kann der GPIO-Pin geändert werden (jeder Wert > 16, z.B. "set hw_reset 255" deaktiviert die Hardware-Werksreset-Funktion).
Für viele Module, einschließlich ESP-01s und NodeMCUs, ist es wahrscheinlich eine gute Idee, GPIO 0 dafür zu verwenden, da es ohnehin verwendet wird. Es ist jedoch nicht der Standard-Pin, da dies das Herunterziehen während des Flashens stören könnte. Wenn Sie also einen vorhandenen Taster auf GPIO 0 für den Hardware-Werksreset verwenden möchten, konfigurieren Sie es mit "set hw_reset 0" und "save" nach dem Flashen. Ein durch den HW-Pin ausgelöster Werksreset setzt die konfigurierte hw_reset-GPIO-Nummer NICHT zurück ("reset factory" von der Konsole aus tut dies).
Um Clients aus dem externen Netzwerk zu erlauben, eine Verbindung zu Server-Ports im internen Netzwerk herzustellen, müssen Ports gemappt werden. Ein externer Port wird auf einen internen Port einer bestimmten internen IP-Adresse gemappt. Verwenden Sie den Befehl "portmap add" dafür. Portweiterleitungen können mit dem Befehl "show" aufgelistet und mit der aktuellen Konfiguration gespeichert werden.
Um jedoch sicherzustellen, dass das erwartete Gerät an einer bestimmten IP-Adresse lauscht, muss sichergestellt werden, dass dieses Gerät nach einem Neustart des Geräts oder des ESP die gleiche IP-Adresse hat. Um dies zu erreichen, können entweder feste IP-Adressen in den Geräten konfiguriert werden oder der ESP muss sich seine DHCP-Leases merken. Dies kann mit dem Befehl "save dhcp" erreicht werden. Er speichert den aktuellen Zustand und alle DHCP-Leases, sodass sie nach einem Neustart wiederhergestellt werden. DHCP-Leases können mit dem Befehl "show stats" aufgelistet werden.
Die Unterstützung für WPA2 Enterprise (PEAP) wurde nun in das Projekt aufgenommen. Es ermöglicht einen "Konverter", der ein WPA2 Enterprise-Netzwerk mit PEAP-Authentifizierung in ein WPA2-PSK-Netzwerk übersetzt. Dies löst ein häufiges Problem, insbesondere in Universitätsumgebungen: Das lokale WiFi-Netzwerk ist ein WPA2 Enterprise-Netzwerk mit PEAP-MSCHAPv2-Authentifizierung. Ein sehr prominentes Beispiel ist das "eduroam"-Netzwerk, das an vielen Universitäten weltweit verfügbar ist. Das Problem ist, dass viele IoT-Geräte die WPA2 Enterprise-Authentifizierung nicht verarbeiten können. Daher sind Entwicklung und Demos schwierig. Sehr hilfreich ist ein "Konverter", der sich in das WPA2 Enterprise-Netzwerk einloggt und seinen Clients ein einfacheres WPA-PSK-Netzwerk anbietet.
Um es zu verwenden, setzen Sie die folgenden Konfigurationsparameter: ssid, use_peap, peap_identity, peap_username und peap_password (Sie benötigen nicht den üblichen password-Parameter). Diese Konfiguration muss über die CLI erfolgen (und gespeichert werden) und ist nicht in der Weboberfläche verfügbar.
Der Code überprüft derzeit nicht das Zertifikat des RADIUS-Servers. Er ist anfällig für MITM-Angriffe, wenn jemand einen betrügerischen AP und RADIUS-Server einrichtet. Obwohl das Passwort nicht im Klartext gesendet wird, gilt das verwendete MSCHAPv2 als gebrochen. Beachten Sie auch die Tatsache, dass der ESP8266 jetzt Ihr Unternehmensnetzwerk-Passwort enthält. Der gesamte Datenverkehr, der von ihm weitergeleitet wird, kann nun vom Netzwerkadministrator Ihrem Konto zugeordnet werden. Verwenden Sie es nicht missbräuchlich und bieten Sie es nicht unvertrauenswürdigen Dritten an, z.B. durch Konfiguration eines offenen Netzwerks. Und selbst wenn das Gerät gesperrt ist, kann Ihr Unternehmensnetzwerk-Passwort über die serielle Schnittstelle aus dem Flash des ESP im Klartext extrahiert werden.
Manchmal möchte man mehrere esp_wifi_repeater hintereinander oder in einem Mesh verwenden, um eine größere Distanz oder Fläche abzudecken. Im Allgemeinen kann dies mit NAT-Routern problemlos durchgeführt werden, tatsächlich hat man dann mehrere NAT-Ebenen. Dies bedeutet jedoch, dass die Konnektivität eingeschränkt ist: Alle Knoten können mit dem Internet kommunizieren, aber im Allgemeinen gibt es keine direkte IP-Konnektivität zwischen den Knoten. Und natürlich sinkt die verfügbare Bandbreite mit jedem zusätzlichen Hop. Aber Benutzer haben berichtet, dass selbst 5 esp_wifi_repeater hintereinander recht gut funktionieren.
Bei einem solchen Setup ist die Konfiguration eine ziemlich zeitaufwändige und fehleranfällige Tätigkeit. Um dies zu vereinfachen, hat der esp_wifi_repeater jetzt einen neuen Modus: "Automesh". Konfigurieren Sie einfach die SSID und das Passwort und schalten Sie "automesh" ein (entweder in der CLI mit "set automesh 1" oder in der Weboberfläche durch einfaches Aktivieren des Kontrollkästchens). Dies bewirkt Folgendes:Jeder so konfigurierte esp_wifi_repeater bietet automatisch ein WLAN-Netzwerk auf dem AP mit derselben SSID/demselben Passwort an, mit dem er verbunden ist. Clients können dieselben WLAN-Einstellungen für das ursprüngliche Netzwerk oder die wiederholten Netzwerke verwenden. Jeder esp_wifi_repeater, der mit "automesh" konfiguriert ist, sucht zunächst nach dem besten anderen AP, mit dem er sich verbinden kann. Dies ist derjenige, der dem ursprünglichen WLAN-Netzwerk am nächsten ist und die beste Signalstärke (RSSI) aufweist.
Die Signalstärke ist mit einem Scan leicht zu messen, aber welcher ist der dem ursprünglichen WLAN-Netzwerk am nächsten, wenn man mehrere APs mit derselben SSID sieht? Daher verwendet das Protokoll einen etwas schmutzigen Trick: Die esp_wifi_repeater im 'automesh'-Modus manipulieren ihre BSSID (eigentlich, gemäß IEEE 802.11-Standard, wäre dies die 'ESSID', da es ein AP ist, aber das SDK nennt es 'BSSID'), d.h. die MAC-Adresse ihrer AP-Schnittstelle, die mit jedem Beacon-Frame etwa 10 Mal pro Sekunde gesendet wird. Es verwendet das Format: 24:24:mm:rr:rr:rr. '24:24' ist nur die eindeutige Kennung eines Repeaters (es gibt eine minimale Wahrscheinlichkeit, dass dies mit der echten AP-MAC kollidiert, aber das können wir vernachlässigen, da wir dieses Präfix bei Bedarf ändern können). 'mm' bedeutet die 'Mesh-Ebene', dies ist die Entfernung in Hops zum ursprünglichen WLAN-Netzwerk. Die letzten drei 'rr:rr:rr' sind nur Zufallszahlen, um die verschiedenen ESPs zu unterscheiden. Der ursprüngliche AP behält seine BSSID, d.h. die ohne das Präfix '24:24' wird als Root erkannt, genannt Mesh-Ebene 0.
Nun kann jeder esp_wifi_repeater lernen, welcher andere esp_wifi_repeater dem ursprünglichen WLAN-Netzwerk am nächsten ist, kann sich mit diesem verbinden und seine eigene BSSID entsprechend wählen. Auch die IP-Adresse des internen Netzwerks wird an die Mesh-Ebene angepasst: 10.24.m.0. Dies erzeugt einen Baum (ein ganz besonderes Mesh) mit dem ursprünglichen WLAN-AP als Wurzel und wiederholenden Knoten auf mehreren Mesh-Ebenen (tatsächlich funktioniert es ähnlich wie das Spanning Tree Protocol (STP) auf der Sicherungsschicht oder das Routing auf der Vermittlungsschicht mit einem Distanzvektor-Protokoll). Sobald ein Uplink-Verlust erkannt wird, wird die Konfiguration neu gestartet. Dies sollte Schleifen vermeiden, da während der (Neu-)Konfiguration auch keine Beacons mit einer BSSID gesendet werden.
Der Einfachheit halber versucht der esp_wifi_repeater nach der 'automesh'-Konfiguration zunächst zu prüfen, ob er eine Verbindung zu einem Uplink-AP herstellen kann. Wenn dies fehlschlägt, selbst wenn ein AP mit der korrekten SSID gefunden wurde, nimmt er an, dass der Benutzer einen Fehler mit dem Passwort gemacht hat, und setzt auf Werkseinstellungen zurück. Nachdem er einmal erfolgreich verbunden war, geht er davon aus, dass die Konfiguration korrekt ist, und versucht es nach einem Verbindungsverlust oder Reset so lange weiter, wie nötig (um einen DOS-Angriff mit einem falsch konfigurierten AP zu vermeiden).
Wenn sich mehr als ein ESP in Reichweite befindet, kann es einen Kompromiss zwischen einem kürzeren 'schlechten' Pfad und einem längeren 'guten' Pfad geben (gut und schlecht im Sinne der Verbindungsqualität). Der Parameter am_threshold bestimmt, was eine schlechte Verbindung ist: Wenn der RSSI in einem Scan kleiner als dieser Schwellenwert ist, ist die Verbindung schlecht und ein Pfad mit einem weiteren Hop wird bevorzugt. D.h. bei einem am_threshold von 85 und zwei erkannten automesh-Knoten im Scan: A mit Level 1 und RSSI -88 dB und B mit Level 2 und RSSI -60 dB, dann wird eine Verbindung zu A als zu schlecht angesehen (-88 dB < -am_threshold) und B wird bevorzugt. Der neue Knoten wird zu einem Level-3-Knoten mit Uplink über B. am_threshold wird als positiver Wert angegeben, bedeutet aber eine negative dB. Ein kleinerer Wert ist besser.
Wenn Sie mehr Einblick in die Topologie eines automesh-Netzwerks erhalten möchten, könnten Sie in Betracht ziehen, alle Knoten mit einem MQTT-Broker zu verbinden und sie das Thema 'Topology' veröffentlichen zu lassen (siehe unten). Wenn Sie nun auf '/WiFi/+/system/Topology' abonnieren, erhalten Sie alle Knoten- und Link-Informationen einschließlich des RSSI (der verbundenen ESPs), die Sie benötigen, um den vollständigen Graphen zu rekonstruieren und schwache Verbindungen im Mesh zu erkennen. Das TopologyInfo-Thema enthält die folgende JSON-Struktur, die verwendet werden kann, um einen vollständigen Graphen eines automesh-Netzwerks zu rekonstruieren:``` { "nodeinfo" { "id":"ESP_07e37e", "ap_mac":"24:24:01:72:c7:f9", "sta_mac":"60:01:bc:07:e3:7e", "uplink_bssid":"00:1a:54:93:23:0a", "ap_ip":"10.24.1.1", "sta_ip":"192.168.178.33", "rssi":"-66", "mesh_level":"1", "no_stas":"2" }, "stas":[ {"mac":"5c:cf:45:11:7f:13","ip":"10.24.1.2"}, {"mac":"00:14:22:76:99:c5","ip":"10.24.1.3"} ] }
Mit den beiden Parametern _am_scan_time_ und _am_sleep_time_ kann im automesh-Modus Energiemanagement implementiert werden, wenn Sie GPIO16 mit RST verbunden haben. Nach dem Booten scannt der esp_wifi_repeater _am_scan_time_ Sekunden lang nach verfügbaren Uplink-APs. Wird keiner gefunden, geht er für _am_sleep_time_ Sekunden in den Tiefschlaf und versucht es nach einem Neustart erneut (Standard ist 0 = deaktiviert für beide Parameter).
# Überwachung
Von der Konsole aus kann ein Überwachungsdienst gestartet werden ("monitor on [portno]"). Dieser Dienst spiegelt den Datenverkehr des internen Netzwerks im pcap-Format in einen TCP-Stream. Z.B. mit "netcat [external_ip_of_the_repeater] [portno] | sudo wireshark -k -S -i -" von einem Computer im externen Netzwerk aus können Sie nun den Datenverkehr im internen Netzwerk in Echtzeit beobachten. Nutzen Sie dies z.B., um zu beobachten, mit welchen Internetseiten Ihre internen Clients kommunizieren. Beachten Sie, dass dies die Last auf dem ESP und dem WiFi-Netzwerk mindestens verdoppelt. Bei hoher Last kann dies dazu führen, dass einige Pakete abgeschnitten oder sogar in der Überwachungssitzung verworfen werden. VORSICHT: Das Offenlassen dieses Ports stellt ein potenzielles Sicherheitsproblem dar. Jeder aus den lokalen Netzwerken kann sich verbinden und Ihren Datenverkehr beobachten.
# Firewall
Der ESP-Router verfügt über eine integrierte grundlegende Firewall. ACLs (Access Control Lists) können auf die SoftAP-Schnittstelle angewendet werden. Dies ist ein Eckpfeiler der IoT-Sicherheit, wenn der Router verwendet wird, um andere IoT-Geräte ins Internet zu bringen. Es kann verwendet werden, um z.B. zu verhindern, dass IoT-Geräte von Drittanbietern "nach Hause telefonieren", als Malware-Bots missbraucht werden, und um Ihr Heimnetzwerk mit PCs, Tablets und Telefonen davor zu schützen, für Hausautomationsgeräte sichtbar zu sein.
Die vier ACL-Listen heißen "from_sta", "to_sta", "from_ap" und "to_ap" für eingehende und ausgehende Pakete auf beiden Schnittstellen ("sta" bedeutet die Schnittstellen zu den verbundenen Clients, "ap" die Schnittstelle zum Uplink-AP). ACLs werden im "CISCO IOS-Stil" definiert.
Das folgende Beispiel ist für ein Gast-Subnetz nützlich. Es erlaubt den Zugriff auf das Internet, aber nicht auf andere lokale Adressen (verwenden Sie Ihren lokalen Netzwerkbereich für die xx.xx.xx.xx-Adresse). Dieses Regelset erlaubt ausgehende lokale Broadcasts (für DHCP) und UDP 53 (DNS), jedes andere Paket an das Subnetz des Upstream-Routers wird blockiert, alle anderen Pakete können zum Internet durchgelassen werden:```
acl from_sta clear
acl from_sta IP any 255.255.255.255 allow
acl from_sta UDP any any any 53 allow
acl from_sta IP any xx.xx.xx.xx/24 deny
acl from_sta IP any any allow
Das nächste Beispiel ist restriktiver und ist nützlich, wenn Sie ein IoT-Subnetz mit sehr eingeschränktem Zugriff am AP des ESP planen. Es erlaubt auch ausgehende lokale Broadcasts (für DHCP), UDP 53 (DNS) und TCP 1883 (MQTT) zu einem lokalen Broker, aber alle anderen Pakete werden blockiert, einschließlich beliebiger Internetzugriff (Sie können die vierte Anweisung nach Ihren Bedürfnissen anpassen, um andere Hosts zu aktivieren):``` acl from_sta clear acl from_sta IP any 255.255.255.255 allow acl from_sta UDP any any any 53 allow acl from_sta TCP any any 192.168.0.0/16 1883 allow acl from_sta IP any any deny
ACLs für die Richtung „to_sta“ können ebenfalls definiert werden, dies ist jedoch normalerweise nicht erforderlich, da die umgekehrte Richtung durch die NAT-Übersetzung recht gut gegen unerwünschten Datenverkehr geschützt ist.
ACLs bestehen aus Filterregeln, die für jedes Paket verarbeitet werden. Jede Regel besteht aus einem Protokoll (IP, TCP oder UDP), Quelladresse/-port, Zieladresse/-port sowie einer Aktion „allow“ oder „deny“. Bei reinem IP werden keine Ports, sondern nur Adressen angegeben. IP-Regeln umfassen sowohl TCP- als auch UDP-Pakete. Adressen können als Subnetzadressen in der „/“-Notation angegeben werden, z.B. 192.168.178.0/24. Auch „any“ kann als Platzhalter verwendet werden und passt auf jede Adresse oder Portnummer. Eine Regel wird mit dem Befehl „acl“ definiert:
- acl [from_sta|to_sta|from_ap|to_ap] [TCP|UDP|IP] _src-ip_ [_src_port_] _desr-ip_ [_dest_port_] [allow|deny|allow_monitor|deny_monitor]
Die Regeln werden in der Reihenfolge ihres Erscheinens in der Liste von oben nach unten verarbeitet. Die erste Regel, die auf ein Paket zutrifft, wird angewendet und bestimmt, ob ein Paket erlaubt (und weitergeleitet) oder verweigert (und verworfen) wird. Das bedeutet: Spezialfälle zuerst, allgemeine Regeln am Ende. Wenn es Regeln in einer ACL gibt, werden alle Pakete, die auf keine Regel passen, standardmäßig verweigert. Daher ist die letzte Regel „from_sta IP any any deny“ im obigen Beispiel nicht wirklich erforderlich, da sie ohnehin der Standard ist. Wenn eine ACL leer ist, werden alle Pakete erlaubt.
Die Definition von ACL-Regeln erfolgt ebenfalls von oben nach unten: Eine neue Regel wird immer am Ende einer Liste hinzugefügt. Um eine ACL zu ändern, müssen Sie sie zunächst vollständig löschen (acl from_sta clear) und dann neu aufbauen. ACLs werden mit der Konfiguration gespeichert. „show acl“ gibt die ACLs sowie Statistiken über die Anzahl der Treffer für jede Regel und die Gesamtzahl der erlaubten und verweigerten Pakete aus.
Mit dem Befehl „set acl_debug 1“ wird eine Zusammenfassung aller verweigerten Pakete auf der Konsole ausgegeben. Außerdem kann ein MQTT-Thema diese Zusammenfassung veröffentlichen. Dies kann für die Firewall-Konfiguration verwendet werden, um zu ermitteln, welche Regeln erforderlich sind, damit die angeschlossenen Geräte funktionieren. Es gibt auch einen Hinweis, wenn unerwarteter Datenverkehr auftritt (und verweigert wird).
Für eine tiefergehende Analyse kann der Überwachungsdienst verwendet werden (auch verweigerte Pakete werden an den Monitor gemeldet, bevor sie verworfen werden). Wenn der Monitor mit dem Befehl „monitor acl _port_“ gestartet wird, können ACLs als Online-Filter verwendet werden. Alle Regeln, die als „allow_monitor“ anstelle von „allow“ und „deny_monitor“ anstelle von „deny“ definiert sind, werden wie gewohnt verarbeitet, was zur Erlaubnis der Weiterleitung eines Pakets führt, aber sie senden das Paket auch an den Monitor. Daher ist eine Liste von Regeln, die im Grunde alle Pakete „allow“ oder „allow_monitor“ machen, immer noch sinnvoll, da sie verwendet werden kann, um bereits zum Zeitpunkt der Erfassung auszuwählen, welches Paket aufgezeichnet werden soll. Z.B. eine Liste:```
acl from_sta clear
acl from_sta IP 192.168.0.0/16 any allow_monitor
acl from_sta IP any any allow
acl to_sta clear
acl to_sta IP any 192.168.0.0/16 allow_monitor
cl to_sta IP any any allow
erlaubt alle Pakete und wählt auch alle Pakete zur Überwachung aus, die von einer Station zum 192.168.0.0/16 (lokalen) Subnetz und vom 192.168.0.0/16 zu einer Station gehen. Natürlich kann ein solcher Filter auch nach dem Mitschneiden auf eine vollständige Überwachungsspur angewendet werden, aber wenn Sie bereits wissen, wonach Sie suchen, helfen diese Online-Filter, den Überwachungsaufwand drastisch zu reduzieren. Es kann auch verwendet werden, um alle Deny-Firewall-Regeln zu debuggen, indem Sie einfach "deny_monitor" anstelle von deny verwenden.
Standardmäßig wird das AP-Interface genatet, sodass jeder mit dem AP verbundene Knoten über das STA-Interface des ESP transparent auf die Außenwelt zugreifen kann. Es ist also keine weitere Aktion erforderlich, wenn Sie kein echter Netzwerk-Nerd sind.
Für diejenigen von Ihnen, die wirklich an weiterer Netzwerkkonfiguration interessiert sind: Der lwip IPv4-Stack des ESP wurde für dieses Projekt um Unterstützung für statische Routen erweitert: "show route" zeigt die Routingtabelle mit allen bekannten Routen an, einschließlich der Links zu den verbundenen Netzwerkschnittstellen (dem AP- und dem STA-Interface). Das Routing zwischen diesen beiden Schnittstellen funktioniert ohne weitere Konfiguration. Zusätzliche Routen zu anderen Netzwerken können über den Befehl "route add network gateway" gesetzt werden, der von Linux-Rechnern oder Routern bekannt ist. Ein Befehl "save" schreibt den aktuellen Zustand der Routingtabelle in die Flash-Konfiguration.
Hier ist ein einfaches Beispiel, was mit statischen Routen gemacht werden kann. Angenommen das folgende Netzwerk-Setup mit zwei ESPs, die über die STA-Schnittstellen mit einem zentralen Heimrouter verbunden sind:``` | 10.0.1.1 AP-ESP1-STA 192.168.1.10 | <-> |Home Router| <-> | 192.168.1.20 STA-ESP2-AP 10.0.2.1|
Jeder ESP hat ein zweites Netzwerk hinter seinem AP mit unterschiedlichen Netzadressen: 10.0.1.0/24 und 10.0.2.0/24. ESP1 kann ESP2 unter 192.168.1.20 anpingen, aber nicht unter 10.0.2.1, da es nicht weiß, dass es ihn über 192.168.1.20 erreichen kann. Dies ändert sich, wenn Sie zwei statische Routen hinzufügen. Auf ESP1:```
route add 10.0.2.0/24 192.168.1.20
und auf ESP2:``` route add 10.0.1.0/24 192.168.1.10
Nun wird ein "ping 10.0.2.1" auf ESP1 erfolgreich sein. Es wird an 192.168.1.20 gesendet und dann von ESP2 beantwortet.
Nun verbindet sich in jedem Netzwerk ein zusätzlicher Client (mit den Adressen 10.0.1.2 und 10.0.2.2):```
| STA1 10.0.1.2 | <-> | 10.0.1.1 ESP1 192.168.1.10 | <-> |Home Router| <-> | 192.168.1.20 ESP2 10.0.2.1| <-> | STA2 10.0.2.2 |
Jetzt kann sogar der Client STA1 mit der lokalen Adresse 10.0.1.2 STA2 unter 10.0.2.2 anpingen, da er seine Anfrage zuerst an seinen Standard-Router ESP1 sendet und dieser weiß, dass alle Pakete an eine 10.0.2.0/24-Adresse an 192.168.1.20 weitergeleitet werden müssen. Dort weiß ESP2, wie er sie an STA2 senden kann. Das Gleiche gilt für die Antwort in die andere Richtung.
Dies ermöglicht Ihnen die Konfiguration einer Multi-Star-Topologie von ESPs, bei der jeder ESP und seine STA-Clients einander direkt erreichen können (ohne Notwendigkeit von Portzuordnungen). Die Konfiguration der erforderlichen Routen mag etwas mühsam sein – aber eine schöne Übung in Netzwerktechnik. Der nächste Schritt wäre die Portierung eines dynamischen Routing-Protokolls wie RIP auf den ESP…
Durch Setzen von upstream_kbps und downstream_kbps auf einen anderen Wert als 0 (0 ist der Standard) können Sie die maximale Bitrate des ESP-APs begrenzen. Dieser Wert ist eine Begrenzung, die auf den Datenverkehr aller verbundenen Clients angewendet wird. Pakete, die die definierte Bitrate überschreiten würden, werden verworfen. Der Traffic-Shaper verwendet den „Token-Bucket“-Algorithmus mit einer Bucket-Größe von derzeit dem Vierfachen der Bitrate pro Sekunde, was Ausbrüche erlaubt, wenn zuvor kein Datenverkehr vorhanden war.
Seit Version 1.3 verfügt der Router über einen integrierten MQTT-Client (Dank an Tuan PM für seine Bibliothek https://github.com/tuanpmt/esp_mqtt). Dies kann helfen, den Router/Repeater in das IoT zu integrieren. Ein Hausautomationssystem kann z. B. Entscheidungen auf der Grundlage von Informationen über die aktuell assoziierten Stationen treffen, die Repeater ein- und ausschalten (z. B. basierend auf einem Zeitplan) oder einfach zur Überwachung der Last verwendet werden. Der Router kann entweder mit einem lokalen MQTT-Broker oder einem öffentlich zugänglichen Broker in der Cloud verbunden werden. Allerdings unterstützt er derzeit keine TLS-Verschlüsselung.
Standardmäßig ist der MQTT-Client deaktiviert. Er kann aktiviert werden, indem der Konfigurationsparameter mqtt_host auf einen anderen Hostnamen als „none“ gesetzt wird. Um MQTT zu konfigurieren, können Sie die folgenden Parameter setzen:
Die MQTT-Parameter können mit dem Befehl show mqtt angezeigt werden.
Der Router kann in regelmäßigen Abständen (alle mqtt_interval) die folgenden Statusthemen veröffentlichen:
Darüber hinaus kann der Repeater ereignisbasiert veröffentlichen:
scan-Befehls (eine Nachricht pro gefundenem AP) (Maske: 0x0004)Als LWT und Statusmeldung veröffentlicht der Repeater:
Der Router kann mit den folgenden Themen konfiguriert werden:
Wenn Sie nun möchten, dass der Router z. B. nur Vdd, seine IP und die Befehlszeilenausgabe veröffentlicht, setzen Sie mqtt_mask auf 0x0001 | 0x0002 | 0x0040 (= set mqtt_mask 0043).
Der esp_wifi_repeater enthält jetzt Unterstützung für eine ENC28J60-Ethernet-NIC, die über SPI angeschlossen wird (Dank an Andrew Kroll https://github.com/xxxajk für seine großartige Arbeit, es richtig zum Laufen zu bringen), wenn Sie die HAVE_ENC28J60-Kompilierungsoption in user_config.h aktivieren. Die Ethernet-Schnittstelle unterstützt etwa 1 Mbps, wenn der ESP mit 160 MHz läuft. Das Einschalten der AP-Schnittstelle und die Verwendung von Ethernet als Uplink verwandelt den esp_wifi_repeater in einen günstigen AP für WiFi-Geräte (z. B. andere ESPs).
Die Verbindung über SPI muss``` NodeMCU/Wemos ESP8266 ENC28J60
D6 GPIO12 <---> MISO
D7 GPIO13 <---> MOSI
D5 GPIO14 <---> SCLK
D8 GPIO15 <---> CS
D1 GPIO5 <---> INT
D2 GPIO4 <---> RESET
Q3/V33 <---> 3.3V
GND <---> GND
Kurze und verlötete Kabel funktionieren am besten. Zusätzlich benötigen Sie einen Transistor zur Entkopplung von GPIO15, da Ihr ESP sonst nicht mehr bootet, siehe: https://esp8266hints.wordpress.com/category/ethernet/ . Außerdem ist eine gute Stromversorgung wichtig: Der ENC28j60 benötigt etwa 160mA, wenn er aktiv ist. Bei mir funktioniert es nicht, wenn ich versuche, die 3.3V vom ESP-Board zu verwenden.
Jetzt können Sie die neue Ethernet-Schnittstelle konfigurieren:
- set eth_enable [0|1]: aktiviert/deaktiviert eine ENC28J60 Ethernet-NIC auf dem SPI-Bus (Standard: 0 - deaktiviert)
- set eth_ip _ip-addr_: setzt eine statische IP-Adresse für die ETH-Schnittstelle
- set eth_netmask _netmask_: setzt eine statische Netzmaske für die ETH-Schnittstelle
- set eth_gw _gw-addr_: setzt eine statische Gateway-Adresse für die ETH-Schnittstelle
- set eth_dhcpd [0|1]: startet einen DHCP-Server für dynamische IP-Adressen auf der ETH-Schnittstelle (Standard: 0 - deaktiviert)
# Power Management
Der Repeater überwacht seine aktuelle Versorgungsspannung (angezeigt im Befehl "show stats"). Dies funktioniert nur, wenn das 107. Byte in der Datei esp_init_data_default.bin, genannt vdd33_const, auf 255(0xFF) gesetzt ist. Der einfachste Weg, dies zu erreichen, ist, esp_init_data_default_v08_vdd33.bin in den Flash zu schreiben (siehe unten).
Wenn _vmin_ (in mV, Standard 0) auf einen Wert > 0 gesetzt ist und die Versorgungsspannung unter diesen Wert fällt, schaltet das Gerät für _vmin_sleep_ Sekunden in den Tiefschlafmodus. Wenn Sie GPIO16 mit RST verbunden haben (was bei einem ESP-01 schwer zu löten ist), wird es nach diesem Intervall neu starten, versuchen, sich wieder zu verbinden, und seine Messungen fortsetzen. Wenn _vmin_ mit der Konfiguration gespeichert wird, schläft es immer wieder ein, bis die Versorgungsspannung über den Schwellenwert steigt. Diese Einstellungen sind besonders (nur?) nützlich, wenn Sie den ESP mit einem (Lithium-)Akku ohne Tiefentladeschutz betreiben. Dann ist ein Wert von 2900mV-3000mV wahrscheinlich hilfreich, da er den Stromverbrauch des ESP auf ein Minimum reduziert und Sie viel mehr Zeit haben, den Akku nachzuladen oder auszutauschen, bevor ein Schaden entsteht. Dies ist nur sinnvoll, wenn Sie den ESP direkt an den Akku angeschlossen haben. Wenn zusätzliche Logik vorhanden ist, wird diese weiterhin Strom aus dem Akku ziehen.
Sie können den ESP einmal manuell in den Schlaf versetzen, indem Sie den Befehl "sleep" verwenden.
Vorsicht: Wenn Sie einen _vmin_-Wert speichern, der höher als die maximale Versorgungsspannung ist, wird der Repeater nach jedem Neustart sofort herunterfahren. Dann müssen Sie die gesamte Konfiguration löschen, indem Sie blank.bin (oder eine andere Datei) auf 0x0c000 schreiben.
# WiFi Repeater - L2 Bridge
Das Projekt bietet nun zwei verschiedene Betriebsmodi: **NAT Router** und **Layer 2 Bridge** (auch als "Repeater-Modus" bezeichnet). Obwohl beide Modi die Netzabdeckung erweitern, unterscheiden sie sich grundlegend in der Art und Weise, wie sie Datenverkehr und Geräteidentität behandeln.
### NAT Router Mode (Standard)
In diesem Modus, wie oben beschrieben, fungiert das Gerät als Standard-Gateway. Es erstellt ein neues Subnetz und führt Network Address Translation (NAT) für alle Geräte durch, die mit seinem Access Point (AP) verbunden sind.
* **Subnetz-Isolierung**: Verbundene Clients befinden sich in einem privaten Subnetz (z.B. 192.168.4.x) und sind vom primären Netzwerk abgeschirmt.
* **Datenverkehrsidentität**: Der gesamte Datenverkehr von Clients erscheint dem Hauptrouter so, als ob er von der eigenen IP/MAC-Adresse des ESP8266 stammt.
* **Einfachheit**: Erfordert keine besondere Konfiguration auf dem vorgelagerten Router und ist mit praktisch allen Standard-WLAN-Netzwerken kompatibel.
* **Einschränkung**: Geräte im primären Netzwerk können nicht einfach Verbindungen zu Geräten hinter dem Repeater initiieren, aufgrund der NAT-Barriere, es sei denn, Sie verwenden Portweiterleitung.
### Layer 2 Bridge Mode ("Repeater" Variant)
Dieser Modus implementiert eine transparente Layer 2 (Data Link Layer) Brücke. Der ESP8266 erweitert das bestehende primäre Netzwerk, anstatt ein sekundäres Subnetz zu erstellen.
* **Transparentes Bridging**: Der ESP8266 brückt den Datenverkehr auf Ethernet-Frame-Ebene. Verbundene Clients erhalten IP-Adressen direkt vom DHCP-Server des primären Netzwerks (über DHCP-Snooping/Relay).
* **Einheitliches Netzwerk**: Alle Geräte (sowohl am Repeater als auch am Hauptrouter) befinden sich in derselben L2-Broadcast-Domäne.
* **Gerätesichtbarkeit**: Geräte hinter dem Repeater behalten ihre ursprünglichen MAC- und IP-Identitäten im Hauptnetzwerk. Dies ermöglicht lokale Erkennungsprotokolle (wie mDNS/Bonjour, UPnP oder Netzwerkerkennung) nahtlos im gesamten Netzwerk.
* **Komplexität**: Erfordert fortgeschrittene Handhabung, wie Proxy ARP und DHCP-Snooping, um sicherzustellen, dass das vorgelagerte Netzwerk den Datenverkehr korrekt zurück zu den "versteckten" Clients leitet, die über den Repeater verbunden sind.
* **Anwendungsfall**: Ideal, wenn Geräteerkennung (z.B. Steuerung eines Druckers oder Smart-Home-Geräts über eine Telefon-App) im gesamten Netzwerk erforderlich ist.
Der Repeater-Modus hat weniger Funktionen: Routing, Portweiterleitung und DHCP werden nicht benötigt, ACLs und Automesh sind ebenfalls nicht sinnvoll, ebenso wie Netzwerküberwachung via pcap. Daher sind alle diese Funktionen im Repeater-Modus nicht verfügbar. Auch MQTT wurde entfernt. Die verbleibenden Funktionen sind weiterhin über die Konsole oder die Remote-Konsole verfügbar.
Sie finden die vorkompilierten Binärdateien im Ordner "firmware-repeater".
Die Ersteinrichtung der Repeater-Modus-Version ist im Grunde so einfach wie beim NAT-Router. Über die serielle Konsole einfach ssid, password, ap_ssid und ap_password setzen, dann speichern und zurücksetzen. Wenn Sie es über die Weboberfläche machen möchten, ist es ebenfalls einfach, aber Sie müssen die richtige Reihenfolge einhalten:
- Verbinden Sie sich mit Ihrem Client mit dem "MyAP" WLAN
- Rufen Sie im Browser "http://192.168.4.1" auf
- Geben Sie **zuerst** die AP-Einstellungen ssid und password ein, setzen Sie und starten Sie neu
- Verbinden Sie sich dann mit Ihrer neu definierten AP-ssid, rufen Sie den Browser erneut mit "http://192.168.4.1" auf
- Geben Sie nun die STA-Einstellungen ssid und password ein und verbinden Sie sich
Sobald die STA-ssid definiert ist, führt der Repeater keinen eigenen DHCP-Server mehr aus, sondern erhält seine IP vom vorgelagerten DHCP (kein 192.168.4.1 mehr). Um auf seine Webseite oder die Remote-Konsole zuzugreifen, können Sie den Namen "esp-wifi-repeater.local" verwenden, wenn Ihr Client mDNS unterstützt, oder Sie müssen die zugewiesene Adresse in Ihrem vorgelagerten Router nachschlagen (oder über die serielle Konsole mit "show stats"). Sie können den ESP jederzeit über die Konsole mit "reset factory" zurücksetzen.
### Key Contrast Summary
| Funktion | NAT Router | Layer 2 Bridge |
| :--- | :--- | :--- |
| **Netzwerkarchitektur** | Erstellt neues, isoliertes Subnetz | Erweitert bestehende Broadcast-Domäne |
| **IP-Adressierung** | Clients verwenden sekundären Pool | Clients verwenden vorgelagerten DHCP-Server |
| **Erkennung (mDNS/UPnP)** | Oft blockiert/schwierig | Vollständig unterstützt (Transparent) |
| **Sichtbarkeit im vorgelagerten Netzwerk** | Client-Identität verborgen (NAT) | Client-Identität erhalten |
| **Implementierung** | Standard-Netzwerk | Erweitertes Proxying (Proxy ARP/Snooping) |
# Building and Flashing
Zum direkten Flashen der vorkompilierten Binärdateien auf das Gerät verwenden Sie den [Web-Installer](https://martin-ger.github.io/esp_wifi_repeater/).
Wenn Docker installiert ist, besteht der einfachste Weg, Zugriff auf die vollständige Build-Umgebung zu erhalten, darin, Ihren ESP8266 an /dev/ttyUSB0 anzuschließen und das Image mit folgenden Befehl auszuführen:```
git clone https://github.com/martin-ger/esp_wifi_repeater.git
docker run -it --rm --device=/dev/ttyUSB0 -v $(pwd)/esp_wifi_repeater:/home/esp/esp_wifi_repeater martinfger/iot_devel:1.0
cd esp_wifi_repeater
make
make flash
Um die L2 WiFi Repeater Version zu erstellen, verwenden Sie einfach die Option VARIANT=bridge für den Befehl make:``` git clone https://github.com/martin-ger/esp_wifi_repeater.git docker run -it --rm --device=/dev/ttyUSB0 -v $(pwd)/esp_wifi_repeater:/home/esp/esp_wifi_repeater martinfger/iot_devel:1.0 cd esp_wifi_repeater make VARIANT=bridge make flash
Um die Build-Umgebung von Grund auf einzurichten und diese Binärdatei zu erstellen, laden Sie das esp-open-sdk herunter und installieren Sie es (ich empfehle diese Version mit dem Basis-NONOS-SDK 2.2: https://github.com/xxxajk/esp-open-sdk). Stellen Sie sicher, dass Sie das enthaltene „blinky“-Beispiel kompilieren und herunterladen können.
Laden Sie dann diesen Quellbaum in einem separaten Verzeichnis herunter und passen Sie die Variable BUILD_AREA in der Makefile und gewünschte Optionen in user/user_config.h an. Änderungen an der Standardkonfiguration können in user/config_flash.c vorgenommen werden. Erstellen Sie die esp_wifi_repeater-Firmware mit „make“. Mit „make flash“ wird sie auf einen ESP8266 geflasht.
Der Quellbaum enthält eine Binärversion von liblwip_open sowie die erforderlichen zusätzlichen Includes aus meinem Fork von esp-open-lwip und eine Binärdatei des rboot-Tools. *Dafür ist keine zusätzliche Installationsaktion erforderlich.* Nur wenn Sie die vorkompilierte Bibliothek nicht verwenden möchten, checkouten Sie die Quellen von https://github.com/martin-ger/esp-open-lwip . Ersetzen Sie damit das Verzeichnis „esp-open-lwip“ im esp-open-sdk-Baum. Führen Sie „make clean“ im Verzeichnis esp_open_lwip und erneut ein „make“ im oberen Verzeichnis esp_open_sdk aus. Dadurch wird eine liblwip_open.a kompiliert, die die NAT-Funktionen enthält. Ersetzen Sie liblwip_open_napt.a mit dieser Binärdatei. Außerdem können Sie die Binärdatei „rboot.bin“ von https://github.com/raburton/rboot erstellen und im Stammverzeichnis des Projekts ersetzen.
*Update*: Falls Sie irgendwo im Internet Installationsanweisungen mit „0x10000.bin“ gelesen haben – aufgrund von OTA wurde dies nun auf „0x02000.bin“ geändert.
Wenn Sie die vollständigen vorkompilierten Firmware-Binärdateien verwenden möchten, können Sie sie mit „esptool.py --port /dev/ttyUSB0 write_flash -fs 4MB -ff 80m -fm dio 0x00000 firmware/0x00000.bin 0x02000 firmware/0x02000.bin“ flashen (verwenden Sie -fs 1MB für einen ESP-01). Für den ESP8285 müssen Sie -fs 1MB und -fm dout verwenden.
Unter Windows können Sie es mit dem "ESP8266 Download Tool" flashen, das unter https://espressif.com/en/support/download/other-tools verfügbar ist. Laden Sie die beiden Dateien 0x00000.bin und 0x02000.bin aus dem Firmware-Verzeichnis herunter. Für einen generischen ESP12, einen NodeMCU oder einen Wemos D1 verwenden Sie die folgenden Einstellungen (für einen ESP-01 ändern Sie FLASH SIZE auf "8Mbit"):
<img src="https://raw.githubusercontent.com/martin-ger/esp_wifi_repeater/master/FlashRepeaterWindows.jpg">
Wenn der "QIO"-Modus auf Ihrem Gerät fehlschlägt, versuchen Sie stattdessen "DIO". Werfen Sie auch einen Blick auf die "Detected Info", um Größe und Modus des Flash-Chips zu überprüfen. Wenn Ihre heruntergeladene Firmware immer noch nicht richtig startet, überprüfen Sie bitte anhand der beigefügten Prüfsummen, ob die Binärdateien möglicherweise beschädigt sind. Wenn Sie Zweifel haben, ob die Firmware-Binärdateien beschädigt sind, laden Sie das gesamte Repo als ZIP herunter und extrahieren Sie die Binärdateien daraus – dies vermeidet HTTP-Download-Probleme (z.B. CR-LF-Konvertierungen).
# OTA (Über-die-Luft) Update-Unterstützung
Basierend auf der Verwendung der rboot-Bibliothek: https://github.com/raburton/rboot und dank des Beitrags von christianchristensen.
Der Build-Prozess erstellt zwei Kopien der esp_wifi_repeater-Binärdatei im firmware-Verzeichnis: 0x02000.bin und 0x82000.bin. Für eine Erstinstallation reicht es aus, nur 0x00000.bin (den rboot-Bootloader) und 0x02000.bin (eine Kopie des Programms) zu flashen. Der esp_wifi_repeater wird dann funktionieren.
Wenn Sie mindestens 1 MB Flash haben, können Sie ein OTA-Update (Über-die-Luft) mit einer anderen Version durchführen. D.h. Sie können interaktiv eine neue Binärdatei von der CLI laden und zu ihr wechseln. Die andere Binärdatei wird an den derzeit inaktiven Speicherort (entweder 0x02000 (rom0) oder 0x82000 (rom1)) geladen und bei Erfolg gestartet. Sie können auch interaktiv zwischen zwei installierten Binärdateien umschalten. Die aktuelle Konfiguration wird für beide Binärdateien verwendet (solange sich ihr Format nicht geändert hat).
Sie können die OTA-Funktionen mit den folgenden Befehlen steuern:
- show ota: zeigt die aktuell aktive Binärdatei und die URL des nächsten Updates an
- set ota_host _hostname_: setzt den Hostnamen oder die IP-Adresse des OTA-Servers (Standard: „none“)
- set ota_port _portno_: setzt die Portnummer des OTA-Servers (Standard: 80)
- ota update: versucht, eine neue Binärdatei (0x02000.bin oder 0x82000.bin) per HTTP von ota_host:ota_port herunterzuladen und zu starten
- ota switch: wechselt zur anderen Binärdatei (falls installiert)
Um die OTA-Funktion zu testen, konfigurieren Sie Ihren ESP (als STA oder AP), um mit dem Netzwerk verbunden zu sein, in dem sich der Update-Server befindet. Starten Sie dort einen einfachen Webserver im Firmware-Verzeichnis, z.B.;```
cd firmware
python -m SimpleHTTPServer 8080
Setzen Sie den Parameter hostname auf den Hostnamen oder die IP Ihres Computers, setzen Sie portno auf 8080, und "save". Geben Sie dann in der CLI ein:``` ota update
Bei korrekter Konfiguration wird das Update gestartet und der ESP mit der neuen Binärdatei neu gestartet.
# Bekannte Probleme
- Aufgrund der Einschränkungen der SoftAP-Implementierung des ESPs können maximal 8 Stationen gleichzeitig verbunden sein.
- Der ESP8266 benötigt eine gute Stromversorgung, da er während des Sendens Stromspitzen von bis zu 170 mA erzeugt (typischer Durchschnittsverbrauch liegt bei etwa 70 mA, wenn WiFi eingeschaltet ist). Überprüfen Sie zuerst die Stromversorgung, wenn Ihr ESP instabil läuft und gelegentlich neu startet. Ein großer Kondensator zwischen Vdd und Gnd kann helfen, wenn Sie hier Probleme haben.
# Lizenzen
Die Software ist Open Source. Quelldateien von Drittanbietern haben ihren eigenen Lizenzheader. Für alle anderen Dateien gilt die MIT-Lizenz.