
Um den ESP8266 in das WLAN-Netz einzubinden ist zunächst mal die Bibliothek ESP8266WiFi.h zuständig, die bereits im ESP-Paket enthalten ist. Für die Arbeit als Webserver benötigt man zusätzlich die Bibliothek ESP8266WebServer.h (ebenfalls im ESP-Paket). Ich bevorzuge für die Einbindung des ESP ins Netz feste IP-Adressen, da man ihn damit leichter wiederfindet. Außerdem kann man alle im Haus werkelnden ESPs mit aufeinanderfolgenden Adressen in einem IP-Bereich ansiedeln, der für die dynamische DNS-Vergabe gesperrt ist.
Wie das Ganze konkret funktionieren kann, illustriert das folgende Listing (hier auch zum Download):
#include <ESP8266WiFi.h>
//#include <WiFiClient.h>
#include <ESP8266mDNS.h>
#include <ESP8266WebServer.h>
//**** Diese Daten müssen angepasst werden ***************
#define WIFI_AP "myWiFi" // Bez. des Access-Points
#define WIFI_PASSWORD "myPassword" // Access-Key
// Ich bevorzuge feste IPs, weil sich der WSP dann schneller wiederfinden lässt
int subNetIP = 1; //IP des Subnets
int myIP = 23; // gewünschte IP-Nummer
String myHostname = "ESP8266";
//**********************************************************
WiFiClient wifiClient;
ESP8266WebServer server(80); //Server an port 80
void setup()
{
Serial.begin(115200);
InitWiFi();
server.on("/", handleRoot); // Routine für die root-Page
server.on("/other", doOtherThings); // Routine für eine andere Seite
server.begin();
Serial.println("Webpage hört auf 192.168." + String(subNetIP) + "." + String(myIP));
}
void loop() {
server.handleClient();
}
void connectToWiFi() {
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
String niceStr(int i) { //Zahlen ggf. mit führender Null
String out = "";
if (i < 10) out += "0";
out += String(i);
return out;
}
String uptime() {
String out = "";
unsigned long up = millis();
up = up / 1000;
int d = up / 86400L; // days
out = niceStr(d) + " d ";
up = up % 86400;
d = up / 3600L; // hours
out += niceStr(d) + " h ";
up = up % 3600;
d = up / 60L; // minutes
out += niceStr(d) + " m ";
d = up % 60;
out += niceStr(d) + " s";
return out;
}
String macAdresse() {
String out = "";
byte mac[6];
WiFi.macAddress(mac);
for (int i = 5; i > 0; i--) {
out += hex(mac[i]) + ":";
}
out += hex(mac[0]);
return out;
}
String hex(byte b) {
String out = String(b, HEX);
if (out.length() == 1) out = "0" + out;
return out;
}
void InitWiFi()
{
Serial.println("Verbinde mit AccessPoint ...");
// Versuch, mit dem WiFi-Netz zu verbinden
IPAddress ip(192, 168, subNetIP , myIP);
IPAddress gateway(192, 168, subNetIP, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, subNetIP, 1);
WiFi.config(ip, dns, gateway, subnet); // auf feste IP einstellen
WiFi.hostname(myHostname); //Hostnamen setzen
WiFi.persistent(false);
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
connectToWiFi();
Serial.println(" verbunden!");
}
void doOtherThings() {
String msg = "<html><head><title>Another Page</title></head><body>";
msg += "<center><br><br><br><br><br><H1>Dies ist noch eine Webpage</H1>";
msg += "<a href = \"/\"> zurück zur Hauptseite</a></center></body></html>";
server.send(200, "text/html", msg);
}
void handleRoot() {
String msg = "<meta http-equiv=\"refresh\" content=\"60\"> ";
msg += "<center><H1><u>" + String(myHostname) + "</u></H1> </p>";
msg += "<br />Diese Seite aktualisiert im Minutentakt die Uptime-Zeit!<br /><br />";
msg += "<b>Online seit:</b> " + uptime() + "<br />";
msg += "<b>IP-Adresse:</b> 192.168." + String(subNetIP) + "." + String(myIP) + "<br />";
msg += "<b>MAC-Adresse:</b> " + macAdresse() + "<br />";
msg += "===================================================<br />";
msg += "<a href = \"other\">Hier gehts zu einer anderen Webpage ...</a><br />\n";
server.send(200, "text/html", msg);
}