Wie Du einen ESP-01 mithilfe eines USB-Programmers flashen kannst, habe ich im vorherigen Beitrag bereits beschrieben. Dank des integrierten WLAN-Moduls kann der ESP-01 als WLAN-Client, Access Point oder gleichzeitig als Client und Access Point betrieben werden. In diesem Beitrag zeige ich dir, wie du den kleinsten Ableger der ESP8266-Microcontroller-Familie im Access-Point-Modus einrichten kannst.
Weil man mit einem Stand-alone Access Point allein relativ wenig anfangen kann, soll auf dem ESP-01 auch ein kleiner Webserver laufen, der beim Aufruf im Browser eine statische Webseite präsentiert.
Vorbereitung
Neben dem ESP-01* benötigst du noch einen USB-Programmer*, um das Programm übertragen zu können. Wie du den ESP-01 mit einem USB-Programmer flashen kannst, erfährst du hier.
Der Code
Der Code ist nicht sonderlich komplex, trotzdem gehe ich mal auf die wesentlichen Punkte ein. Die INO-Datei mit dem kompletten Source Code findest du weiter unten zum Download.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
Zuerst werden die benötigten Libraries eingebunden, damit der ESP-01 als WLAN Access Point und als Webserver fungieren kann.
#define APSSID "setmeup"
#define APPSK "123456789"
An dieser Stelle legst du die SSID und den Pre-shared Key fest. Der PSK muss mindestens acht Zeichen lang sein.
const int ap_channel = 6;
const boolean ap_hidden = false;
Je nachdem, was bei dir schon so an WLAN-Geräten funkt, kann es sein, dass du den Kanal anpassen musst. Sinnvolle Werte für den Kanal im 2,4GHz-Band sind 1, 6 oder 11.
Durch das Setzen von ap_hidden auf true, wird der SSID-Broadcast deaktiviert und das ausgestrahlte Netzwerk „versteckt“. Ich rate jedoch eher davon ab, da es sich nur um eine Pseudo-Sicherheit handelt, die nicht mal Script-Kiddies wirksam abhält. Stattdessen erleidet man sogar noch einen Komfortverlust, weil beim ersten Verbinden nicht nur der PSK, sondern auch die SSID per Hand eingegeben werden muss.
IPAddress local_ip(192,168,4,100);
IPAddress gateway(192,168,4,254);
IPAddress netmask(255,255,255,0);
An dieser Stelle wird die IP-Adresse festgelegt, unter welcher der Webserver erreichbar sein soll. Im Access-Point-Modus startet der ESP-01 automatisch auch einen DHCP-Server, der die Clients mit einer IP-Adresse aus dem konfigurierten Netzwerk versorgt. Da keine Anbindung Richtung Internet oder in andere Netze besteht, ist die Angabe des Gateway eigentlich sinnfrei. Ich habe einfach die höchste Adresse im Netzwerk eingetragen.
ESP8266WebServer server(80);
Der Webserver wird auf TCP-Port 80 gestartet.
static const char StartPage[] PROGMEM = R"EOF(
<html>
<body>
<center>
<h1>ESP8266 Web Server</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</center>
</body>
</html>
)EOF";
StartPage hält die vom Server zu präsentierende statische Webseite. Mit dem Aufruf von PROGMEM wird sie, genau wie das Programm, im Flash-Speicher abgelegt und nur bei Bedarf in den RAM geladen.
Der HTML-Code wird als vorformatierter Text von den Ausdrücken R“EOF( und )EOF“ umrahmt. Dies hat den Vorteil, dass z.B. Zeilenumbrüche und Kommentarzeichen nicht maskiert werden müssen.
setup()
WiFi.softAPConfig(local_ip, gateway, netmask);
[...]
WiFi.softAP(ssid, password, ap_channel, ap_hidden);
Im Setup wird die IP-Konfiguration gesetzt und der Access Point gestartet.
server.on("/", handleRoot);
server.onNotFound(handleNotFound);
server.begin();
Für den Webserver gilt: Beim Öffnen des Root-Verzeichnisses (/) wird die Funktion handleRoot() aufgerufen. Beim Versuch eine nicht vorhandene Seite zu öffnen, wird die Funktion handleNotFound() aufgerufen. Nach dem gleichen Muster kannst du natürlich noch weitere Seiten anlegen.
Der Webserver wird gestartet und nimmt jetzt Anfragen entgegen.
loop()
server.handleClient();
Der Loop ist kurz und knapp. Client-Anfragen werden entgegengenommen.
handleRoot()
server.send(200, "text/html", StartPage);
Wenn vom Client das Root-Verzeichnis angefragt wird, gibt der Webserver den HTTP-Statuscode 200 (Ok) zurück und liefert den Inhalt von StartPage aus.
handleNotFound()
server.send(404, "text/plain", "404 Not found");
Wird vom Client eine nicht existierende Seite angefragt, liefert der Webserver den HTTP-Statuscode 404 (Not found) zurück und es wird eine entsprechende Meldung im Browser ausgegeben.
2 thoughts on “ESP-01 als Access Point betreiben”
Top Tutorial. Nur eine kleine Anmerkung, damit der AP funktioniert musste ich zusätzlich den Mode konfigurieren.
WiFi.mode(WIFI_AP);
Verwendete Library:
https://github.com/esp8266/Arduino/releases/download/3.0.2/esp8266-3.0.2.zip
Super Tutorial! Knapp, klar dokumentiert und es funktioniert auf Anhieb.
Nun habe ich als HTTP und HTML Anfänger eine Frage / eine Bitte: Wäre es möglich, dass Du, ebenso klar formuliert, ein Beispiel für eine „StartPage“ veröffentlichst, auf der Werte eingetragen werden können und mit denen dann der Server …was anfangen kann …So einfach wie möglich, ohne jeden Schnick-Schnack, so dass man sich daran orientieren und abarbeiten kann.
Vielen Dank, beste Grüße und bleib gesund!