Ursprüngliches Thema: ESP32 als Access Point mit SPIFFS
ESP32 als Access Point: Das Beispiel WiFiAccessPoint aus der ESP32-Erweiterung der Arduino-IDE funktioniert.
ESP32 am Router mit SPIFFS: Von der Seite Esp32 Webserver Arduino Tab funktionieren „Esp32 WebServer Tab“, „Esp32 Connect Tab“, „Esp32 Spiffs Datei Manager“, „Esp32 Admin Webinterface“, „Esp32 BME280 Tab“ und „Esp32 OnBoardLed Tab“ auf Anhieb (Großes Lob an den Autor, ich war wirklich beeindruckt!).
Da ich einen ESP32 für ein ortsungebundenes Projekt nicht mit dem heimischen Router verbinden möchte, betreibe ich ihn als Access Point mit dem HTML-Text in einer Variablen. Leider ist dann Speicher von SPIFFS ungenutzt, wo sich doch prima HTML-, INO- und CSS-Dateien unterbringen ließen. Von Apache-Servern bin ich das auch so gewohnt. Das Verkleinern von SPIFFS wäre daher für mich nur die zweitbeste Möglichkeit.
Frage 1: Da ich nicht so richtig was zum Thema finde, suche ich falsch oder ist der Weg sinnlos?
Würde ich den „Esp32 Spiffs Datei Manager“ umstricken wollen, so wären alle Methoden von server problematisch:
void spiffs() { // Funktionsaufruf "spiffs();" muss im Setup eingebunden werden
SPIFFS.begin(true);
...
server.onNotFound([]() {
if (!handleFile(server.urlDecode(server.uri())))
server.send(404, "text/plain", "FileNotFound");
});
}
bool handleFile(String&& path) {
...
return SPIFFS.exists(path) ? ({File f = SPIFFS.open(path, "r"); server.streamFile(f, contentType(path)); f.close(); true;}) : false;
}
Frage 2: Welchen Ersatz gibt es für diese Methoden von WebServer oder kann ich diese Methoden auch zusammen mit einem Access Point verwenden?
PS.: Ab gestern Nachmittag konnte ich mich nicht mehr anmelden. Wenn das heute auch so sein sollte, könnte es Reaktionen von mir erst wieder morgen geben.
Die ganzen Tabs, die ich in #0 erwähnt habe, sind doch von Fips, die funktionieren ja auch, nur brauchen die einen Router. Außerhalb des Empfangbereis eines Routers nützt mir das aber nichts. Darum möchte ich den ESP32 ja als Access Point verwenden.
combie:
Der Webserver läuft ja offenbar, oder?
Ja, wenn er sich mit einem Router verbinden kann, dann läuft er. Aber ohne Router nützt mir das nichts.
combie:
Dann frage ich mich was SPIFFS mit dem AP Mode zu tun hat....
Wenn ich mit SPIFFS.open eine HTML-Datei öffne, wird sie, wenn ich es richtig verstehe, mittels server.streamFile an den Browser geschickt. Wie mache ich das, wenn der ESP32 ein Access Point ist?
Sollte ich einen Denkfehler haben, dann weise mich bitte deutlich darauf hin!
agmue:
Wie mache ich das, wenn der ESP32 ein Access Point ist?
Indem Du Dein WLAN-Gerät (Smartphone/Tablett/Laptop) in dem AP einlogst und dann darauf im Browser 192.168.4.1 aufrufst. Also den Webserver auf dem AP.
Danach ist alles genau so, wie über den Router. Du kannst nur nicht mit dem Browser vom PC drauf.
Zum Entwickeln würde ich den Stationmodus benutzen und erst wenn es fertig ist, auf AP umschwenken.
Gruß Tommy
Edit: Oder Du n utzt einen Laptop zum Entwickeln. OTA geht auch über AP.
Tommy56:
Indem Du Dein WLAN-Gerät (Smartphone/Tablett/Laptop) in dem AP einlogst und dann darauf im Browser 192.168.4.1 aufrufst. Also den Webserver auf dem AP.
Genau das mache ich, funktioniert!
Tommy56:
Edit: Oder Du nutzt einen Laptop zum Entwickeln.
Mache ich, funktioniert!
Tommy56:
OTA geht auch über AP.
Mache ich, funktioniert!
Den HTML-Text, den ich in einer Variablen sammle und an den Browser schicke, möchte ich aber lieber im SPIFFS als HTML-Datei ablegen. Ebenso wie die CSS- und INO-Datei.
Wie schicke ich also die HTML-, CSS- und INO-Datei im SPIFFS an den Browser?
Bei der Klasse WebServer geht das offensichtlich mittels der Methode streamFile, die ich bei der Klasse WiFi vermisse.
agmue: ESP32 am Router mit SPIFFS: Von der Seite Esp32 Webserver Arduino Tab funktionieren „Esp32 WebServer Tab“, „Esp32 Connect Tab“, „Esp32 Spiffs Datei Manager“, „Esp32 Admin Webinterface“, „Esp32 BME280 Tab“ und „Esp32 OnBoardLed Tab“ auf Anhieb (Großes Lob an den Autor, ich war wirklich beeindruckt!).
Puh, da hab ich aber Glück gehabt.
Hatte an den letzten beiden Tagen das Debug im Webservertab geändert und dann nach und nach die einzelnen Tab's aktualisiert.
agmue:
Ich habe mich mit dem Beispiel WiFiAccessPoint auf eine falsche Fährte locken lassen.
Das ist auf den ersten Blick auch wirklich verwirrend.
Derfips:
Hatte an den letzten beiden Tagen das Debug im Webservertab geändert und dann nach und nach die einzelnen Tab's aktualisiert.
Dann habe ich vermutlich den alten Stand, denn ich bin da schon länger dran am Fummeln. Ich schaue und vergleiche mal.
Derfips:
Schön das es jetzt klappt.
Ja, das finde ich auch.
Wäre es für Dich eine Anregung, den ESP32 als Access Point optional aufzunehmen? Es sind nur ein paar Kleinigkeiten (Warten auf erfolgreiche Anmeldung, IP-Nummer), aber es wäre für Einsteiger recht hilfreich.
Im Esp32 Access Point Tab steht WiFi.mode(WIFI_AP); für Access Point, das ist klar. Nun fand ich bei der ESP32 Admin Page aber eine fehlerhafte Anzeige (Bild linke Seite). Das als freundlichen Hinweis an Fips. Auf der Suche nach einer möglichen Fehlerquelle stolperte ich dann in Esp32 Admin Webinterface über WiFi.mode(WIFI_STA);, was mir als Widerspruch erscheint. Ein "AP" an dieser Stelle führt dann aber zu einer leeren Anzeige (Bild rechte Seite), also keine Verbesserung.
Nach meiner Vorstellung der Zusammenhänge dürfte nur entweder "STA" oder "AP" gültig sein. Da in meinem Fall das Programm den Zugang zum Router nicht kennt und WLAN ausgeschaltet ist, dürfte STA nicht funktionieren. Da es doch irgendwie funktioniert, bin ich nun irritiert. Ich bitte freundlich um Aufklärung meines wohl vorhandenen Gedankenfehlers.
Erstmal frohe Festtage und hoffentlich war der Osterhase großzügig! Die Nachbarskinder wurden gestern pünktlich versorgt, so daß sie bei strahlendem Sonnenschein auf die Suche gehen konnten. Ich wurde erst heute beliefert, brauchte aber dafür nicht zu suchen. Ich suche eher nach etwas Erleuchtung
Meine Vorstellung:
WIFI_STA:
Der ESP32 meldet sich beim Router ("station") im WLAN an und hat damit Zugriff auf das Internet. Der Browser im Laptop kann sich über die IP im LAN mit dem ESP32 als Webserver verbinden. /td]
WIFI_AP:
Der ESP32 ist Access Point und der Browser im Laptop kann sich über die IP des ESP mit dem ESP32 als Webserver verbinden.
WIFI_AP_STA:
Der ESP32 meldet sich beim Router im WLAN an und ist gleichzeitig Access Point.
ich wollte auch mit dem SPIFFS arbeiten und dazu das zugehörige PlugIn installieren. Dazu muß man selbiges ja runterladen und in den Arduino\tools-Pfad entpacken. Bei einer steinalten Arduino-Version, die ich testweise mal installiert hatte, funktioniert das auch.
Ich habe auf Rechner hier aber Win10. Da krieg ich die neueste Arduino-Verion nur über den Microsoft-Store. Der installiert mir das gleich, ich kann nicht die Installationsdatei downladen und dann von der Festplatte aus installieren.
Was zu Folge hat, dass ich den richtigen tools-Pfad nicht finden kann.
Wäre da jemand in der glückliche Lage, mir einen Tipp zum suchen zu geben?