WiFi Extender (NAT-Router) mit ESP8266 und ESP32 - AZ-Delivery

WiFi Extender mit ESP8266 und ESP32

Sie stehen draußen im Vorgarten, bauen etwas, brauchen dringend ein Tutorial, weil sie nicht weiter wissen und wollen dieses im Internet suchen. Einfach mal schnell eine Info mit der Suchmaschine Ihres Vertrauens finden. Genau an diesem Ort sind natürlich die mobile Datenverbindung auf niedrigstem Niveau und das heimische WLAN außer Reichweite. Sie kennen das. Mir sind dann die ESPs in den Sinn gekommen, die man als Accesspoint einsetzen kann. Das Problem und auch die Lösung sind nicht unbedingt neu. Ich möchte an dieser Stelle meine Erfahrungen mit Ihnen teilen. Los geht’s.

Was wir benötigen

1

ESP32 oder ESP8266 Entwicklungsboard aus dem AZ-Shop

1

PC mit Internetverbindung

1

USB-Verbindungskabel

 

Moritz Spranger hatte in seinem Beitrag „ESP8266 WLAN-Mesh über 4 Nodes“ vor einigen Jahren bereits von solch einem ähnlichen Projekt berichtet. Für diese Lösung wird der ESP mit einer Firmware über ein externes Tool geflasht. Ich zeige den Ablauf später noch etwas genauer.

Ich gehe an dieser Stelle davon aus, dass Sie die Arduino IDE, sowie die Quellen für ESP8266 und ESP32 installiert haben. Wenn nicht, schauen Sie in den AZ-Blog. Dort wird es beschrieben. Ich empfehle an dieser Stelle, die Bibliotheken auf den neuesten Stand zu updaten.

ESP8266

Ich hatte zuerst begonnen, die Beispiel-Sketches in der Arduino IDE zu durchforsten (es muss dafür in der Arduino IDE unter Werkzeuge das verwendete Board eingestellt sein). Auf der Suche nach Accesspoints und Hotspots findet man unter ESP8266WiFi das Programm RangeExtender-NAPT. Dort müssen Sie nur die Zugangsdaten zu Ihrem WLAN-Netzwerk eintragen:

 #define STASSID "mynetwork"
 #define STAPSK "mynetworkpassword"
Laden Sie anschließend den Sketch auf den Mikrocontroller. In der Übersicht Ihrer WLAN-Netzwerke müsste nun der ESP auftauchen mit der Bezeichnung ihres Heimnetzwerkes und hinten angestelltem „extender“

[IHRWLANNAME]extender

Um sich damit zu verbinden, müssen Sie den gleichen WLAN-Key eingeben, wie für Ihr eigenes Netzwerk. Ich musste im Browser dann einige Versuche durchführen, bis die Internetverbindung funktionierte. Aber das tat es dann. Eigentlich ganz einfach.

Verbindung über ein Captive Portal

Es ist etwas umständlich, wenn man die Zugangsdaten in den Quellcode eintragen muss. Das ist mir persönlich zu unflexibel. Also hatte ich überlegt, einen Webserver aufzusetzen, der im Internetbrowser ein Eingabeformular anzeigt. Darüber möchte ich die Zugangsdaten eingeben. Da es im Internet nichts gibt, dass es nicht schon gibt, habe ich diese Lösung hier gefunden. Diese finde ich sehr komfortabel. Es sei darauf hingewiesen, dass im Seriellen Monitor die Zugangsdaten inklusive Passwort angezeigt werden. Diesen Sketch kann man direkt auf den ESP8266 laden, ohne etwas am Quellcode zu verändern. Anschließend sehen Sie in der Übersicht Ihrer WLAN-Netzwerke ein Gerät namens ESP gefolgt von einer Zeichenkette. Verbinden Sie sich damit (ohne Passwort) und rufen im Browser die IP 192.168.4.1 auf (diese Daten sehen sie auch im Seriellen Monitor der Arduino IDE). Es wird Ihnen dann ein Eingabeformular angezeigt, in das Sie die Zugangsdaten zu Ihrem WLAN-Netzwerk eintragen können. Außerdem können Sie den Namen des ESP-Netzwerks ändern und ein Passwort einstellen (was dringend empfohlen ist). Ich nutze hier auch das gleiche Passwort wie für mein Heimnetzwerk. Sind die Daten eingetragen, verbinden Sie sich mit dem ESP (falls Sie den Namen und das Passwort neu eingerichtet haben) und schon sollten Sie eine Verbindung zum Internet haben.

Es geht noch etwas komfortabler

Wie Sie sehen, müssen Sie in das Eingabeformular den Namen Ihres Netzwerkes eingeben. Leider sind diese vom Hersteller meistens etwas lang formuliert. Also möchte ich den Sketch nun so ändern, dass mir die verfügbaren Netzwerke in einer Liste angezeigt werden. Dort möchte ich mein Netzwerk auswählen, statt den Namen einzutippen. Dafür habe ich den oben erwähnten Quellcode angepasst und das HTML-Formular so verändert, dass die WLAN-Netzwerke in der Nähe aufgelistet und mit einer Radiocheckbox versehen werden. So kann man einfach die Auswahl treffen, sein Passwort eingeben und sich verbinden. Hier der Quellcode:

 #if LWIP_FEATURES && !LWIP_IPV6
 
  #define HAVE_NETDUMP 0
 
  #include <ESP8266WiFi.h>
  #include <ESP8266WebServer.h>
  #include <lwip/napt.h>
  #include <lwip/dns.h>
  #include <LwipDhcpServer.h>
 
  #define NAPT 1000
  #define NAPT_PORT 10
 
  #if HAVE_NETDUMP
 
  #include <NetDump.h>
 
  void dump(int netif_idx, const char* data, size_t len, int out, int success) {
  (void)success;
    Serial.print(out ? F("out ") : F(" in "));
    Serial.printf("%d ", netif_idx);
 
    // optional filter example: if (netDump_is_ARP(data))
  {
      netDump(Serial, data, len);
      //netDumpHex(Serial, data, len);
  }
  }
  #endif
 
  // MY FUNCTIONS
  bool testwifi() {
    Serial.printf("\nTesting connection with '%s'\n", WiFi.SSID().c_str());
    int count = 0;
    digitalWrite(2,LOW);
    while (count < 20) {
      if (WiFi.status() == WL_CONNECTED) {
        Serial.printf("\nWiFi Connected! \nSTA: %s (dns: %s / %s)\n\n",
                      WiFi.localIP().toString().c_str(),
                      WiFi.dnsIP(0).toString().c_str(),
                      WiFi.dnsIP(1).toString().c_str());
 
        // give DNS servers to AP side
        dhcpSoftAP.dhcps_set_dns(0, WiFi.dnsIP(0));
        dhcpSoftAP.dhcps_set_dns(1, WiFi.dnsIP(1));
        digitalWrite(2,HIGH);
        return true;
    }
      Serial.print(".");
      delay(1000);
      count++;
  }
    Serial.printf("\nCan't connect to WiFi, connect to AP '%s' and configure...\n\n", WiFi.softAPSSID());
    return false;
  }
 
  // SERVER
  ESP8266WebServer server(80);
  String content;
  String networks[40];
 
  void serverconfig() {
    server.begin();
    int n = WiFi.scanNetworks();
 
    content = "<!DOCTYPE html><html lang='en'><meta name='viewport' content='width=device-width, initial-scale=1.0'>";
    content += "<head><title>ESP8266 Configuration Page</title></head>";
    content += "<body>";  
 
    if (WiFi.status() != WL_CONNECTED) {
      content += "<div>currently not connected</div>";
  }
    else {
      content += "<div>connected to: ";
      content += WiFi.SSID();
      content += " IP: ";
      content += WiFi.localIP().toString();
      content += "</div>";
  }
 
    content += "<div>";
   
    if (n == 0) {
      content += "<h1>No wireless networks found</h1>";
  }
     
    else {
      content += "<h1>Wireless Station Settings</h1>";
      content += "<form method='post'>";
      for (int i = 0; i < n; ++i) {
        networks[i] = WiFi.SSID(i);
        content += "<div>";
        content += "<input type=\"radio\" id=\"";
        content += String(i);
        content += "\" ";
        content += "name=\"SSIDs\" value=\"";
        content += String(i);
        content += "\">";
        content += "<label for=\"";
        content += String(i);
        content += "\"";
        content += ">";
        content += String(i + 1);
        content += ": ";
        content += WiFi.SSID(i);
        content += " (";
        content += String(WiFi.RSSI(i));
        content += ")";
        content += (WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*";
        content += "</label>";
        content += "</div>";
        delay(10);
    }
      content += "<label>Password:</label><br><input type='password' placeholder='********' name='stapsk' minlength=8 maxlength=63><br><small>Must be at least 8 characters or blank!</small><br><br>";
      content += "<button type='submit' formaction='stasettings'>Save Permanently</button><button type='submit' formaction='tempstasettings'>Save Temporarily (Until Reboot)</button>";
      content += "</form>";  
      content += "<h1>Wireless Access Point Settings</h1>";
      content += "<form method='post'>";
      content += "<label>SSID:</label><br><input name='apssid' placeholder='";
      content += WiFi.softAPSSID();
      content += "' length=32><br>";
      content += "<label>Password:</label><br><input type='password' placeholder='";
      content += WiFi.softAPPSK();
      content += "' name='appsk' minlength=8 maxlength=63><br><small>Must be at least 8 characters or blank!</small><br><br>";
      content += "<button type='submit' formaction='apsettings'>Save Permanently</button><button type='submit' formaction='tempapsettings'>Save Temporarily (Until Reboot)</button>";
      content += "</form>";
  }
 
    content += "<h1>Miscellaneous</h1>";
    content += "<form method='get' action='reboot'><input type='submit' value='Reboot'></form>";
    content += "<div>";
    server.on("/", []() {
      server.send(200, "text/html", content);
  });
 
    server.onNotFound([]() {
      server.send(404, "text/plain", "How the heck did you get here?");
  });
 
    server.on("/stasettings", []() {
      String temp = server.arg("SSIDs");
      int number = temp.toInt();
      String stassid = networks[number];
      String stapsk = server.arg("stapsk");
      if (stassid.length() > 0) {
        server.send(200, "text/plain", "Settings Recieved");
        Serial.printf("\n\nAttempting to connect to '%s' using password '%s' \n", stassid.c_str(), stapsk.c_str());
        WiFi.persistent(true);
        WiFi.begin(stassid, stapsk);
        testwifi();
    }
  });
 
    server.on("/tempstasettings", []() {
      String temp = server.arg("SSIDs");
      int number = temp.toInt();
      String stassid = networks[number];
      String stapsk = server.arg("stapsk");
      if (stassid.length() > 0) {
        server.send(200, "text/plain", "Settings Recieved");
        Serial.printf("\n\nAttempting to connect to '%s' using password '%s' \n", stassid.c_str(), stapsk.c_str());
        WiFi.persistent(false);
        WiFi.begin(stassid, stapsk);
        testwifi();
    }
  });
 
    server.on("/apsettings", []() {
      String apssid = server.arg("apssid");
      String appsk = server.arg("appsk");
      if (apssid.length() > 0) {
        server.send(200, "text/plain", "Settings Recieved");
        Serial.printf("\n\nSetting AP Credentials \nSSID: %s \nPassword: %s \n", apssid.c_str(), appsk.c_str());
        WiFi.persistent(true);
        WiFi.softAP(apssid, appsk);
    }
  });
 
    server.on("/tempapsettings", []() {
      String apssid = server.arg("apssid");
      String appsk = server.arg("appsk");
      if (apssid.length() > 0) {
        server.send(200, "text/plain", "Settings Recieved");
        Serial.printf("\n\nSetting Temporary AP Credentials \nSSID: %s \nPassword: %s \n", apssid.c_str(), appsk.c_str());
        WiFi.persistent(false);
        WiFi.softAP(apssid, appsk);
    }
  });
 
    server.on("/reboot", []() {
      server.send(200, "text/plain", "Rebooting now...");
      delay(5000);
      ESP.reset();
  });
  }
 
  void setup() {
    Serial.begin(115200);
    pinMode(2, OUTPUT);
    delay(1000);
    Serial.printf("\n\nNAPT Range extender\n");
    Serial.printf("Heap on start: %d\n", ESP.getFreeHeap());
 
  #if HAVE_NETDUMP
    phy_capture = dump;
  #endif
 
    WiFi.setPhyMode(WIFI_PHY_MODE_11N); // Set radio type to N
    WiFi.mode(WIFI_AP_STA);
    WiFi.persistent(false);
    WiFi.begin(); // Use stored credentials to connect to network
    testwifi();
    WiFi.softAPConfig(  // Set IP Address, Gateway and Subnet
      IPAddress(192, 168, 4, 1),
      IPAddress(192, 168, 4, 1),
      IPAddress(255, 255, 255, 0));
    WiFi.softAP(WiFi.softAPSSID(), WiFi.softAPPSK()); // Use stored credentials to create AP
 
    Serial.printf("Heap before: %d\n", ESP.getFreeHeap());
    err_t ret = ip_napt_init(NAPT, NAPT_PORT);
    Serial.printf("ip_napt_init(%d,%d): ret=%d (OK=%d)\n", NAPT, NAPT_PORT, (int)ret, (int)ERR_OK);
    if (ret == ERR_OK) {
      ret = ip_napt_enable_no(SOFTAP_IF, 1);
      Serial.printf("ip_napt_enable_no(SOFTAP_IF): ret=%d (OK=%d)\n", (int)ret, (int)ERR_OK);
      if (ret == ERR_OK) {
        Serial.printf("\nWiFi Network '%s' with Passowrd '%s' and IP '%s' is now setup\n", WiFi.softAPSSID(), WiFi.softAPPSK().c_str(), WiFi.softAPIP().toString().c_str());
    }
  }
    Serial.printf("Heap after napt init: %d\n", ESP.getFreeHeap());
    if (ret != ERR_OK) {
      Serial.printf("NAPT initialization failed\n");
  }
 
    serverconfig();
  }
 
  #else
 
  void setup() {
    Serial.begin(115200);
    Serial.printf("\n\nNAPT not supported in this configuration\n");
  }
 
  #endif
 
  void loop() {
    server.handleClient();
    if (WiFi.status() != WL_CONNECTED) {
      digitalWrite(2, LOW);
      delay(1000);
      digitalWrite(2, HIGH);
      delay(1000);
  }
    else {
      digitalWrite(2, HIGH);
  }
 }

Zwischenfazit

Dafür, dass ich letztendlich reichlich Zeit bis hierher investiert habe, funktioniert das mehr schlecht als recht. Ich habe die Geschwindigkeit gemessen und kam nur knapp über 1 Mbit/s. Das scheint ein generelles Problem zu sein, da es auch auf Github und im Forum von Espressif besprochen wurde. Eine Lösung dafür gibt es leider nicht.

ESP32 oder wie alles besser funktioniert

Laut meiner Recherchen ist es von Seiten Espressifs (der Hersteller des ESP-Chips) nicht vorgesehen, einen ESP32 als WiFi-Extender (WiFi NAT-Router) zu verwenden. Dementsprechend gibt es keine Portierung des Extender-Beispielsketches für den ESP32. Allerdings gibt es das Projekt von martin-ger auf Github, das bereits häufig verwendet wurde. Auch in unserem Blogbeitrag ESP8266 WLAN-Mesh über 4 Nodes (von Moritz Spranger) wird diese Variante genutzt.

Das Projekt ist auch für den ESP8266 verfügbar. Da ich dafür ebenfalls eine ordentliche Lösung suche, zeige ich hier beide Möglichkeiten.

Github Webseite für ESP8266

Github Webseite für ESP32


Unter Windows:

  • Es wird das ESP Flash Download Tool benötigt. Das können Sie hier herunterladen (in der Tabelle auf der rechten Seite den Downloadbutton betätigen)
  • Klicken Sie auf der Github Webseite (ESP8266 und ESP32) oben rechts auf den grünen Button „Code“ und laden dort alles als ZIP herunter.
  • Starten Sie das Flash Download Tool und wählen den ESP8266 oder ESP32 aus.
  • stellen Sie dann alles so ein wie auf dem folgenden Screenshot.

ESP8266:

ESP Tool

ESP32:

ESP Tool

  • Schließen Sie den ESP per USB an den Rechner an
  • Durch klicken auf den „…“ Button können Sie die BIN-Dateien auswählen. Die benötigten Daten finden Sie in der heruntergeladenen ZIP im Unterverzeichnis „Firmware“ (ESP8266) oder „build“ (ESP32).
  • In das Feld daneben tragen Sie die Speicheradressen ein. In diesem Fall „0x00000“ und „0x02000“ (ESP8266) oder „0x1000“, „0x10000“ und „0x8000“ (ESP32). Es handelt sich dabei um die Startadressen im Speicher des ESPs, an denen das Programm abgelegt wird.
  • Sollte kein COM-Port angezeigt werden, müssen Sie den passenden Treiber installieren (sollten Sie den ESP bereits über die Arduino IDE programmiert haben, sollte er auch hier erkannt werden). Die Nummer des COM-Ports kann für Sie eine andere sein.
  • Für einen ESP-01 verwenden Sie für FLASH SIZE "8Mbit" statt „32Mbit“ (ESP8266)
  • Starten Sie den Flash Vorgang

ESP8266:

ESP Tool

ESP32:

ESP Tool

Hinweis: Wie auch in der Arduino IDE müssen Sie hier den ESP32 in den Flash Modus durch Drücken der BOOT-Taste bringen. Halten Sie sie gedrückt und betätigen Sie dann den Start-Button.

ESP8266:

ESP Tool

ESP32:

ESP Tool

Nach dem erfolgreichen Flashvorgang trennen Sie kurz die USB-Verbindung zum ESP und starten Sie ihn dann neu, indem Sie den Stecker wieder verbinden (Eventuell reicht auch ein einfacher Reset).

Sie sollten dann nach wenigen Augenblicken ein neues WLAN-Netzwerk mit dem Namen „MyAP“ (ESP8266) oder „ESP32_NAT_Router“ (ESP32) sehen.

Verbinden Sie sich mit diesem Netzwerk und rufen dann im Internetbrowser die Adresse http://192.168.4.1/ auf. Sie sollten dann diese Übersicht sehen:

ESP8266:

Router Settings ESP8266

ESP32:

Router Settings ESP32

  • AP-Settings sind immer die Zugangsdaten für den ESP32. Zu Beginn ist hier kein Passwort eingestellt. Das sollten Sie ändern. Ich nutze an dieser Stelle (wie bereits vorher erwähnt) das gleiche Passwort, das auch in meinem Internetrouter eingestellt ist.
  • STA-Settings sind die Zugangsdaten zu Ihrem WLAN-Router.
  • Sollten Sie einen PC verwenden, können Sie mit der rechten Maustaste auf die Eigenschaften des Netzwerks klicken und dort das Passwort per Copy & Paste auf der Webseite eintragen. Man spart sich dann das abtippen langer Passwörter. Das muss man nur einmal machen. Danach läuft der ESP autark. (Das Passwort befindet sich dann im flüchtigen Speicher. Falls das für Sie ein sicherheitsrelevantes Problem ist, sollten Sie das Passwort händisch eintippen.)
  • Stellen Sie für den ESP8266 den Eintrag für Security auf WPA2!
  • Für den ESP32 können Sie zusätzliche eine statische IP-Adresse eintragen.

Es kann nicht schaden, nach dem Eintragen aller Settings den ESP neu zu starten. Für den Fall, dass keine Verbindung aufgebaut wird. Denken Sie daran, dass Sie (wahrscheinlich) für den ESP-Zugangspunkt ein Passwort vergeben haben. Sie müssen sich damit neu verbinden.

Unter Linux

Auf den Github Webseiten von martin-ger wird auch gezeigt, wie Sie die jeweiligen Programme unter Linux auf den ESP flashen:

Sie müssen dafür das esptool.py installieren (ausführlichere Infos erhalten Sie hier).

Starten Sie das Terminal und geben folgenden Befehl ein:

 $ pip install esptool

 

ESP8266

Im Terminal geben Sie diesen Befehl ein:

 $ esptool.py --port /dev/ttyUSB0 write_flash -fs 4MB -ff 80m -fm dio 0x00000 firmware/0x00000.bin 0x02000 firmware/0x02000.bin"

Sollten Sie nicht die gängigen ESP8266 wie NodeMCU oder D1 Mini verwenden, ändern Sie folgende Einträge in der Befehlszeile:

  • ESP-01: -fs 1MB
  • esp8285: -fs 1MB und -fm dout

ESP32

Denken Sie auch hier daran, den ESP32 in den FLASH Modus zu bringen (BOOT-Taste)!

Im Terminal geben Sie diesen Befehl ein:

 $ esptool.py --chip esp32 --port /dev/ttyUSB0 \
 --baud 115200 --before default_reset --after hard_reset write_flash \
 -z --flash_mode dio --flash_freq 40m --flash_size detect \
 0x1000 build/bootloader/bootloader.bin \
 0x10000 build/esp32_nat_router.bin \
 0x8000 build/partitions_example.bin

Sollten die Pfade ungültig sein, wurde das esptool eventuell nicht als PATH-Variable global eingetragen, oder sie befinden sich nicht im Hauptordner der heruntergeladenen Dateien. Sie können die Quellordner auch absolut angeben, indem Sie den kompletten Pfad statt nur „firmware“ bzw. „build“ angeben.

Unter Mac OS

Ich konnte das leider nicht testen. Der Flashvorgang für einen ESP8266 wird u.a. hier beschrieben. Die Einstellungen für das esptool sollten dann die gleichen sein, wie unter Linux

Fazit

Nachdem ich einige Sketches für die Arduino IDE ausprobiert habe, haben dann doch nur die Programme von martin-ger zufriedenstellend funktioniert (danke an dieser Stelle für diese Arbeit). Der Schritt über das ESP Flash Download Tool scheint nur etwas umständlicher, es kostet dann aber nur wenige Minuten mehr, als aus der Arduino IDE heraus. Wenn ich dann die Zeit vergleiche, die ich für das vorherige Programmieren in der Arduino IDE aufgebracht habe, war die letzte Variante auf jeden Fall die schnellere.

Die Internetverbindung des ESP8266 betrug ca. 5Mbit/s, für den ESP32 waren es ca. 16 Mbit/s. Letzterer bootet natürlich auch schneller. Der ESP8266 hatte ab und zu Verbindungsunterbrechungen.

Was die Reichweite angeht, hängt das stark von der Umgebung ab, in der Sie den ESP als NAT-Router einsetzen. In meinem Fall reichte es bis in den Vorgarten, wobei der Internetrouter im hinteren Teil des Hauses aufgestellt ist. Durch dicke Wände, oder über mehrere Etagen verkürzt sich die Reichweite und auch die Übertragungsgeschwindigkeit wird dann eventuell stark sinken. Testen Sie das selbst einmal aus.

Sollten Sie andere Möglichkeiten, oder sogar funktionierende Arduino Sketches zur Verfügung haben, würde ich mich freuen, wenn Sie diese mit uns zu teilen.

Wie Sie den ESP als mobilen Hotspot aus einem Akku mit Strom versorgen, können Sie u.a. aus diesem Blogbeitrag entnehmen. Das nur als abschließender Tipp.

Viel Spaß mit Ihrem (günstigen) WiFi Extender.

Andreas Wolter

für AZ-Delivery Blog

Esp-32Esp-8266Projekte für anfänger

34 Kommentare

Joe

Joe

Ich habe mal einen weiteren D1 R32 programmiert und die RSSI-Werte der beiden Boards verglichen. Das neue Board liefert bedeutend bessere RSSI-Werte. Das erste Board hatte schon nach wenigen Metern Abstand zum Router Verbindungsabrisse. Mit dem neuen Board funktioniert die Verbindung auch durch Wände, über Stockwerke und auch nach draussen ohne Verbindungsabrisse. Und das Ganze mit einer alles andere als idealen Printantenne. Das vermeidet das leidige Problem mit einem Extender zwischen Sensorboard und Heimrouter. Offensichtlich gibt es erhebliche Qualitätsunterschiede bei diesen Modulen.
Ich habe im Übrigen auch verschiedene Tipps, die so im Netz kursieren ausprobiert. Hat aber alles nichts gebracht.
Vielleicht hilft diese Info Anderen weiter, bevor sie verzweifeln.
Schade ist, dass es das D1 R32-Board im Arduino-Format nicht mit einem Anschluß für eine externe Antenne gibt.
Gruß Joe.

Joe

Joe

Ich hab mir die Website von Reichelt auch mal angesehen. Die beschreiben praktisch die gleiche Vorgehensweise, wie Sie hier auf der Seite. Schade, dass das so nicht funktioniert. Ich wollte eigentlich vermeiden, einen kommerziellen WIFI-Extender einzusetzen. Vermutlich bleibt aber keine andere Möglichkeit.
Vielen Dank für die Info.
Gruß Joe

Andreas Wolter

Andreas Wolter

@Joe: das ist ein interessanter Fall. Ich hatte den NAT als Extender verwendet. Also hatte ich mich mit dem NAT verbunden, der seinerseits mit dem Router verbunden war.
Die Kette war also Router → NAT → PC.
Ihre Kette ist PC → Router → NAT → D1 R32

Wenn sich alle Geräte verbinden können, vermute ich, dass ein Forwarder nicht korrekt eingerichtet ist, der die Daten weiterleitet. Es könnte auch an den unterschiedlichen IP-Adressräumen liegen, aber genau das soll der NAT ja überbrücken.
Ich befürchte, dass ich nicht weiterhelfen kann, da es sich um ein geschlossenes System handelt, dass man von Github runterladen kann.
Sie könnten aber mal versuchen, im Router einen Forwarder einzurichten. Normalerweise ist der jedoch dafür gedacht, von außen über das Internet in das Intranet weiterzuleiten.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Joe

Joe

Hallo nochmal.
Ich habe die ESP32 Software von martin-ger und das Flash-Tool von der Expressif website unter Windows verwendet und die Daten entsprechend in die NAT-Config-Maske eingetragen. Es funktioniert alles so, wie auf der Website hier beschrieben, ausser dass ich mit dem PC via Fritzbox und NAT nicht auf das D1 R32 zugreifen kann. Der Zugriff funktioniert nur, wenn ich mich per WLAN direkt am NAT anmelde.
Gruß Joe

Andreas Wolter

Andreas Wolter

@Joe Kilo: welche der oben aufgeführten Varianten haben Sie verwendet?

Grüße,
Andreas Wolter
AZ-Delivery Blog

Joe Kilo

Joe Kilo

Hallo,
Habe den NAT Router nach obiger Anweisung auf einem ESP32 DEV-Kit V1 eingerichtet. Damit versuche ich ein D1 R32-Modul zu erreichen, dass die Globalstrahlung misst und ausserhalb der Reichweite der Fritzbox ist. Der NAT ist an der Fritzbox angemeldet, eingerichtet und auch erreichbar. Der D1 R32 kommuniziert mit der NAT und ich erreiche ihn auch direkt über die Fritzbox, wenn er angemeldet ist. Nur über den NAT ist er nicht zu erreichen.
Es sind meine ersten Versuche mit den ESP32-Modulen und weiß nicht, was da nicht passt. Hat jemand eine Idee?
Vielen Dank, Joe

Mark

Mark

Hi everyone. thank you for share.
I tested the router function through Arduino IDE using martin-ger github repository and it work fine. But… Im trying to connect the same ESP8266 (as router) to SinricPro o conrol one light at same time that NAT routing. Routing work fine but SinricPro client no connect, but oher ESP8266 connected to this ESP (on AP network) connect fine to cloud SinricPro. So… look like some NAT rule to itself (ESP8266 NAT Router) is missing or something like that. Do you know something about it? Im searching everywere but dont find nothing.

Konrad

Konrad

Hallo nochmal,

Bitte mein Kommentar von gestern löschen.. Ich habe das Problem gefunden. Man muss im Flash download tool den ESP32 (und nicht die c2, s2, c3…) Versionen anklicken und den Hinweis auf UART einfach übersehen, da man den USB danach noch eingeben kann.
Trotzdem Danke.

Übrigens hat die Verbindung mit der Garage nun perfekt geklappt mit dem ESP32.
Jetzt stellt sich bei mir nur die Frage wie ich über VPN auf den ESP32 extender komme. Aber das ist hier ja nicht der Punkt.

Grüße

Konrad

Konrad

Konrad

Konrad

Hallo,
Die ESP8266 Version mit Arduino IDE hat geklappt. Leider um 2 Meter zu kurz.
Habe dann versucht mit dem ESP32 und dem Flash download Tool Version 3.9.5 die oben genannten Daten von Github hochzuladen. Ich bekomme die Fehlermeldung:
2-sync fail und ich soll die Daten vom ESP32 mit irgendwelchen strapping pins prüfen. (Habe auch den boot / EN Knopf in unterschiedlichen Varianten gedrückt)
Ich verstehe gerade nur Bahnhof.
Kann mir da jemand helfen, was ich falsch mache?
Der ESP32 ist ein Produkt von AZ (ESP32 Dev Kit C V4)

DAnke schon mal im Voraus.

Konrad

Andreas Wolter

Andreas Wolter

@Richi: ich bezweifle, dass man daran etwas ändern kann. Es handelt sich um externe Projekte, von denen man nur fertige BINs herunterladen und flashen kann. Ich muss daher also auf die verlinkten Github-Seiten verweisen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Richi

Richi

Wie ist die WiFi-Power eingestellt und wie kann man diese ändern?

Andreas Wolter

Andreas Wolter

@Mr. T: Danke für den Hinweis. Das schaue ich mir an und werde es eventuell als Update hier in den Beitrag einfügen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Mr.T

Mr.T

Sehr schöner Beitrag, ich bin während des Auspobierens und der Recherche anscheinend auf ein Folgeprojekt für den ESP32 gestoßen:
https://github.com/dchristl/esp32_nat_router_extended
Das sieht hübscher aus, hat mehr Features und wird auch imho besser gepflegt, zumindest kommen regelmäßig Releases.

Matze

Matze

Also es tut mir wirklich leid. Ich habe alle kombinationen durchprobiert. Einmal mit nen ESP32-S und einmal mit nem ESP32 Wroover-D. Etweder fehlermeldunf 5 mit nem chip error oder fehlermeldung 2 Sync error. Zudem ist in der zip keine “partition_examble.bin” ebensowenig wie eine “esp32_nat_router.bin” vorhanden dafür eine Partition und eine firmware .bin. Ebenso lässt sich bei dem Flasher keine flashzize einstellen. Es tut mir wirklich leid für all die Mühe die ihr euch gemacht habt, aber es funktioniert nicht. Und ja, ich war im Flash mode.

Andreas Wolter

Andreas Wolter

@Ronald: dazu würde ich erst einmal auf diesen Beitrag verweisen:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/esp-als-w-lan-router

Theoretisch sollte es gehen, da man sich über das Captive Portal mit dem jeweiligen Access Point verbindet.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Ronald

Ronald

hallo, die Sache mit dem NAT-Router funktioniert einwandfrei. ist es damit auch möglich mehrere Router hintereinander zu schalten um grössere Entfernung (bei sehr dicken Wänden) zu erreichen ? meiner Vorstellung nach musste dann Router 1 mit der Cam 1 bei Router 2 angemeldet sein und Router 2 an Router 3 an welchen ich dann meinen Monitor für die Cam ( an Router 1 ) sehen kann ?… und auch noch Cam an Router 2.. etc.. ??sind meine Vorstellungen sinnvoll und möglich ?
Eine Cam und ein Router geht jedenfalls sehr gut

Andreas Wolter

Andreas Wolter

@irgendjemand: ich habe versucht, das im Entwicklerrepository zu recherchieren. Ich konnte keine konkrete Lösung finden. Es scheint allerdings generell Probleme mit VOIP in Verbindung mit NAT Routern zu geben: https://www.voip-information.de/nat-und-voip.php

irgendjemand

irgendjemand

Moin,
ich wollte den Verstärker für meine VoIP-ESP Klingel benutzten… geht nur nicht :(. Kann man über einen ESP Verstärker kein VoIP nutzten oder mache ich etwas falsch, weil ohne den Verstärker geht es.

Andreas Wolter

Andreas Wolter

@Tino: mein Kollege hat die Repeater Firmware auf der ESP32 Cam getestet (siehe Kommentar weiter unten). In die Firmware kann man leider nicht so einfach weiteren Code hineinschreiben. Sie ist wirklich nur als Repeater gedacht.

Leider gibt es keine brauchbaren Codes für den Repeater, den man über die Arduino IDE programmiert. Dann könnte man da etwas zusammenfügen.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Tino

Tino

Hi.. ich bin Anfänger..
Ist es möglich das Board gleichzeitig mit dem Kamera Code und gleichzeitig dem WiFi repeater Code (mit Kamera Modul) zu betreiben.. also zwei Fliegen mit einer Klappe.. also die Integration von zwei Scripten. wäre halt effizient.. ???!!

Andreas Wolter

Andreas Wolter

@keinProfi: mein Kollege Gerald Lechner hat das für Sie getestet:

Ich habe die Firmware am ESP32-Cam getestet. Hat problemlos funktioniert. Ein Seed-Test direkt neben dem ESP32 ergab Download 5Mbit/s upload 400kbit/s. In einem anderen Raum etwa 15m entfernt vom ESP32 mit Wänden dazwischen Download 250kbit/s Upload 70kbit/s.

KeinProfi

KeinProfi

Kann das ganze eigentlich auch für das esp 32 ai thinker board funktionieren (esp32 cam)?

Andreas Wolter

Andreas Wolter

@GeSe: da es ein fertiges BIN ist, dass auf den MC geladen wird, kann man das selbst leider nicht auf dem MC anzeigen lassen (also eine Liste mit connected clients).
So bleibt erst einmal nur die Möglichkeit, auf den Geräten selbst die IP anzuzeigen. Auf dem Smartphone müsste das über die WLAN-Einstellungn gehen. Im Betriebssystem geht das entweder in der Taskleiste über das WLAN-Symbol in den Eigenschaften oder in der Commandozeile mit dem Befehl ifconfig (Linux) oder ipconfig (Windows).

GeSe

GeSe

Tolle Anleitung, mein erster repeater ist eingerichtet und alles hat mit wenigen Versuchen funktioniert.
Gibt es eine Möglichkeit herauszufinden, welche IP Adresse die mit dem repeater verbundenen Geräte erhalten haben?
Gruß Gerd

Robert

Robert

@ Andreas Wolter

Danke für die Antwort.
Noch etwas genauer zu meiner Config.
Ich benutze einen ESP32 und hab es nach eurer Anleitung durchgeführt.

Sollte es da also mit %5F funktionieren, bis jetzt hatte ich _ und %5f versucht, leider kein Erfolg. Werde es nun mit %5F demnächst versuchen.

Danke!

Andreas Wolter

Andreas Wolter

@Robert:
Das hängt davon ab, welchen Repeater (Arduino Sketch oder Binary) und auf welchem ESP Sie es verwenden. Sie können versuchen, den HTML Platzhalter zu setzen: “_” (ohne Anführungszeichen). Eine komplette Liste finden Sie hier: https://www.nationalfinder.com/html/char-asc.htm
Ansonsten müsste Ihre Methode mit %b eigentlich %2B sein, denn das ist der Hex Code für ein Plus. Dementsprechend müsste %5F den Unterstrich ersetzen.

Grüße,
Andreas Wolter

Robert

Robert

Eine super Sache der repeater.

Ein Problem hab ich aber, in der SSID ist das underline _ Zeichen vorhanden. Das + muss mit %b ersetz werden, womit das _?
Ich finde leider nichts. Mit %5f wird die SSID nicht erkannt.

HaJo

HaJo

Soeben habe ich einen ESP32 Devkit C V2 geflasht. Hat alles von Anfang an alles, wie erwartet, funktioniert. Sogar das Einbinden in die Fritzbox war ein Kinderspiel. Vielleicht liegen die Probleme (s. u.) in der Architektur des “D1 Mini NodeMcu mit ESP8266-12F WLAN Modul” sowie der Programmierung dieses µP. Das zu prüfen bin ich noch nicht in der Lage (Anfänger, obwohl pensioniert ;-) ). Aber ich habe nun für meinen Garten (2000 m²) einen (oder mehrere) Router, so dass ich mein neues Gewächshaus steuern kann. Übrigens war ich erstaunt über die Wlan-Reichweite des D1 Mini NodeMCU. Auf der Hälfte des Weges streiken unsere ( und die unserer Enkel und Kinder ebenso) Smartphones (WLAN) während der D1 Mini am Ende des Gartens (ca. 60 m) noch mit einer Geschwindigkeit von 2 Mbit per WLAN ohne einen Router sendete.

HaJo

HaJo

Ich muss mich für den Kommentar vom 30.09.2021 entschuldigen. In dem Stress hatte ich vor dem beschriebenen Flashen vergessen, vor dem Flashen den Erase-Button zu drücken. Somit war natürlich beim Flashen der 0×02000-bin und der 0×82000-bin noch die 0×00000-bin vorhanden. Werden nur die beiden ersten Bins nach Erase geflasht, funktioniert die Configuration nicht!
Obwohl ich einmalig meinen ESP8266-Natrouter zum Laufen gebracht habe, war der Vorgang nicht reproduzierbar, da auf der Configurationsseite es mir nicht gelang, erneut die Daten dauerhaft einzutragen. Um die beiden D1 Mini NodeMcu mit ESP8266-12F WLAN Module zu testen, ob sie fehlerhaft sind, habe ich diese mit ESPEasy geflasht. Zunächst hatte ich ebenfalls keinen Erfolg (getestet mit einer Version aus 2019). Nach dem ich die aktuelle Version vom 15.10.2021 geflasht hatte, lief alles wie am Schnürchen. Ich habe zwar jetzt keinen Router :-(( dafür aber einen AP, den meine Fritzbox nach der Configuration sofort erkannte und mit dem ich nun wunderbar nach allen Regeln der Kunst spielen kann. Wer ESPEasy selber ausprobieren möchte, empfehle ich:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/esp-easy
und ff. Die aktuelle Zip-Datei kann unter:
https://github.com/letscontrolit/ESPEasy/releases/tag/mega-20211005
heruntergeladen werden.
Nochmals Entschuldigung für meinem Kommentar vom 30.09.2021. Aber ich war so happy, dass es nun – leider nur einmalig – funktionierte, dass ich es an der notwendigen Sorgfalt fehlen ließ.

HaJo

HaJo

Fast wäre ich verzweifelt – nach dem ich meinen ESP8266Mod-12F (AZ-Delivery D1 Mini) geflasht hatte, konnte ich wie beschrieben das WLAN-Netz MyApp aktivieren, ich konnte die AP-SSID und das Passwort ändern nur die Einbindung ins heimische Netz war nicht möglich (auch erkennbar in der ESP-Konfigurationsseite). Nach der Aufforderung Connect wurde der Inhalt in den Feldern SSID und Passwort des heimischen Netzes gelöscht. In meiner Fritzbox 7590 wurde auch nur unter “Kanälen” das neue WLAN-Netz angezeigt aber mit der korrekten Mac-Adresse. Alle Anstrengungen den ESP in das Netz der Fritzbox einzubinden schlug fehl.
Bei der Internetrecherche fand ich ein Tutorial für den Raspi, das sich mit dem ESP8266 als Repeater befasste. Der Autor hatte ähnliche Probleme. Als Lösung fand er folgenden Weg: Nur die Bindateien 0×02000 und 0×82000 flashen und den SPI-Mode DIO einstellen und siehe da, ich konnte endlich meinen ESP als Gerät in der Fritzbox registrieren: Gerätename ESP-xxxxxx (die letzten 6 Stellen der Mac-Adresse). Nun noch in der Konfigurationsseite die Checkbox “automesh” anklicken und erneut den Connect-Button anklicken (fehlt in der aktualisierten Seite der Haken, Haken erneut setzen und den Connect-Button erneut anklicken). Nun funktioniert auch der Repeater und wird in der Fritz!Box angezeigt. Der Name des neuen Repeaters kann beliebig gewählt werden. Die merkwürdige Darstellung in der Fritz!Box soll man ruhig übersehen, Hauptsache es funktioniert.

Andreas Wolter

Andreas Wolter

@Tester: genau das war das Problem. Es gibt keine .ino für den ESP32. Der Beitrag fasst sämtliche Erfahrungen zusammen, die ich gemacht habe, um die ESP32 bzw. ESP8266 als Extender zu nutzen. Ich hatte dabei massive Probleme und es funktionierte nichts so wie es sollte. Ich wollte versuchen, es nicht mit einem fertigen BIN zu lösen. Aber es ist aktuell die einzige brauchbare Möglichkeit. Der Quellcode ist offen, den finden Sie bei Github (Link im Beitrag).

Andreas Wolter

Andreas Wolter

@Norbert: Danke für den Hinweis. Ich habe das im Beitrag geändert und nun zur Downloadseite, statt zum Download selbst verlinkt.

Norbert

Norbert

Der Link für den ESP Flash Download hat sich geändert (neue Version)
https://www.espressif.com/sites/default/files/tools/flash_download_tool_3.9.0_0.zip

Tester

Tester

Das „einzige brauchbare“ ist das untere Programm, aber wo finde ich die .ino – Datei ? Fertige .bin Dateien helfen beim Testen/Weiterentwickeln nicht. Gute Zusammenfassung, aber das Programm ist seit 2 Jahren im Internet abrufbar.

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft

Empfohlene Blogbeiträge

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery