ESP8266 als Arduino-Plattform
TL;DR:
Ein Arduino (Uno) kostet ca. 20 EUR. Mit dem Arduino Pro Mini für ca. 10 EUR geht es noch etwas billiger. Ein ESP8266 hingegen kostet ca. 2 EUR, als Dev-Board um 4 EUR. Zudem bietet die Alternative noch ein paar mehr Features wie WiFi, I2C an jedem beliebigen Pin oder die höhere PWM-Auflösung. Mit der Arduino IDE lässt sich der ESP8266 dank dieses Projekts verwenden als sei es ein Arduino.
Installation
Bevor der ESP8266 benutzt werden kann, muss es als Board in der Arduino IDE installiert werden. Dazu unter Preferences
bei Additional Board Manager URLs
folgende URL angeben:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Anschließend kann unter Tools
-> Board Manager ...
das neue Board ausgewählt und installiert werden. Das war es auch schon. Nun kann das Board wie gewohnt aus dem Menü ausgewählt werden.
Hello WiFi
Zum Testen schreiben wir einen kleinen Webserver, der auf dem ESP8266b läuft und über zwei URLs eine LED an bzw. wieder aus macht. Die Dokumentation ist hier extrem hilfreich. Auch unerlässlich ist die Pinbelegung des verwendeten Boards/Moduls. Hier das für den Wemos D1 Mini (die türkisen Nummern sind die für uns relevanten)
Für unser Beispiel verwenden wir D8
, an den wir eine LED gegen Ground anschließen. Wir können im Code entweder D8
oder 15
verwenden.
Der Code selbst ist im Grunde recht simpel. Zu Beginn definieren wir zwei Konstanten für die SSID und das Passwort. In der setup()
Funktion wird die WLan-Verbindung aufgebaut und so lange gewartet bis diese steht. Danach wird die vom DHCP-Server zugewiesene IP auf der seriellen Console ausgegeben. Danach wird der Webserver gestartet.
In der loop()
Funktion warten wir auf neue Verbindungen. Kommt ein neuer Request, untersuchen wir die erste Zeile, die bei HTTP die Methode (GET, POST, ...) und die URL enthält. Wir interessieren uns nur für die URL, über die wir entscheiden was wir machen. Ist der Substring /on
enthalten, schalten wir die LED an D8 an, ist /off
enthalten, schalten wir sie aus. Alle anderen URLs ignorieren wir. Zum Schluss senden wir noch eine minimale Response.
#include <ESP8266WiFi.h>
const char* ssid = "ba_nomap";
const char* pass = "sup3rS3cr3t";
WiFiServer server(80);
void setup() {
pinMode(D8, OUTPUT);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.begin(115200);
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (!client) return;
while (!client.available()) delay(1);
String request = client.readStringUntil('\r');
client.flush();
Serial.print(request);
if (request.indexOf("/on") != -1)
digitalWrite(D8, 1);
else if (request.indexOf("/off") != -1)
digitalWrite(D8, 0);
else {
client.stop();
return;
}
client.print("HTTP/1.1 200 OK\r\n");
client.flush();
}
Flashen wir nun das Programm auf den ESP8266 und starten es. Es dauert einen Moment, dann sollte eine IP-Adresse auf der seriellen Console auftauchen. Gibt man diese IP, gefolgt von /on
im Browser ein, leuchtet die LED auf. Mit /off
lässt sich diese wieder ausschalten.
Wie man sieht, alles keine Black Magic, dieses Internet of Things
:)