Der ESP8266 ist ein günstiger Mikrocontroller mit WLAN. Es gibt ihn in verschiedenen Verschiedenen , wobei ich die Version 01 vorliegen habe, welche 4 GPIO Pins besitzt. Alle PINs sind PWM fähig.
Flashen
Zum Flashen benötigt man einen USB Serial Converter bzw. Man kann einen Arduino dafür verwenden.
Ich empfehle dringend eine externe Spannungsquelle zu nutzen, da der ESP relativ hohe Spitzeströme hat.
ESP |
USB Serial Converter |
Tx |
Rx |
CH_PD |
3,3V (extern!) |
RST |
|
3,3V |
3,3V (extern!) |
GND |
GND (extern!) |
GPIO2 |
|
GPIO0 |
GND (extern!) |
Rx |
Tx |
Durch diese Beschaltung ist der ESP nur mit Rx und Tx mit dem USB Serial Converter verbunden. Wer Geräte wie den Arduino zum flashen benutzt muss ggf. Tx and Tx und Rx an Rx anschließen.
Achtung: Der GND Pin des USB Serial Converters muss mit der selben Masse (GND) wie der ESP verbunden sein.
Nun müssen wir die Arduino IDE zum flashen vorbereiten, das geht ganz einfach.
Arduino IDE öffnen>>Datei>>Voreinstellungen>>Zusätzliche Boardverwalter URLs
Dort muss folgende Adresse eingetragen werden:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Die IDE wird alle Dateien downloaden und sollte danach vom Nutzer neugestartet werden.
Jetzt sollte unter Werkzeuge>>Board eine ganze Reihe von ESP Modulen auftauchen.
Davon muss für die vorliegende Version "Generic ESP8266 Module" ausgewählt werden.
Die anderen Einstellungen können beibehalten werden, ihr solltet nur überprüfen ob ein anderer COMPORT als 1 eingestellt ist. 1 ist nämlich der Standard-COMPORT welcher für uns keine Funktion hat. Unser COMPORT kann eine beliebige andere Nummer haben.
Falls nur der COMPORT 1 verfügbar ist habt ihr den Treiber des USB Serial Converters nicht installiert. Holt dies nun nach indem ihr euch den Treiber herunterladet und im Gerätemanager
installiert. Ggf kann nach der ersten Treiberinstallation, ein weiteres unbekanntes Gerät
auftauchen. Hier muss wieder der Treiber installiert werden.
Beides ist ganz einfach da Windows sich die Treiber jeweils direkt aus dem Downloadverzeichnis holen kann.
Nun seid ihr bereit zum flashen.
Vor dem flashen muss der ESP neugestartet werden, dies erreicht ihr dadurch, dass
ihr den 3,3V Pin kurz von der Spannungsquelle trennt.
Das erste Programm
In einem ersten Programm beschäftigen wir uns damit eine LED per WLAN an und auszuschalten.
Die Schnittstelle zm Benutzer bildet dabei ein einfacher Webbrowser und ein bisschchen HTML,
was ansich aber nichtmals zur Steuerung notwendig ist.
Gehen wir zunächst das Programm Schritt für Schritt durch.
Programmcode wird von mir immer in Courier dargestellt.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
Als erstes werden die für den Betrieb notwendigen Bibliotheken eingebunden.
ESP8266WebServer server(80);
An dieser Stelle wird der Port des Webservers angegeben. Der Standardport ist der Port 80.
String led1= "<a href=\"/dieled1.html\">LED An</a>";
String led0= "<a href=\"/dieled0.html\">LED Aus</a>";
Hier bereite ich die Textausgabe für die HTML Dateien vor. Es sind einfache Links.
Wer HTML kennt wird sich jetzt vielleicht über die \ im Code wundern. Diese Zeichen sind notwendig damit der Compiler sie nicht als Teil der Sprache interpretiert sondern zum String zählt.
Weil die " auch den Anfang und das Ende eines Strings bedeuten.
void startseite(){
server.send(200, "text/html", led1);
}
Jede einzelne Seite auf dem Server wird als Funktion aufgerufen. Das 3. Argument in unserem
Funktionsaufruf ist der String den wir oben definiert haben und der einen Link enthält.
void ledan(){
digitalWrite(0, HIGH);
server.send(200, "text/html", led0);
}
void ledaus(){
digitalWrite(0, LOW);
server.send(200, "text/html", led1);
}
Hier sehen wir die beiden Funktionen um die LED umzuschalten. Beim Aufruf der Seit wird
die Funktion ausgeführt. Im Gegensatz zur Startseite enthalten die Funktionen auch noch die Funktionen zum Ansteuern des GPIO Pins.
Beim Aufruf der Seite wird also der Inhalt der Funktion ausgeführt. Die Links in den Funktionen verweisen jeweils aufeinander.
void setup() {
pinMode(0, OUTPUT);
digitalWrite(0, LOW);
In der setup Funtion welche nur einmalig ausgeführt wird definieren wir zuerst den
Pin 0 als Ausgang und stellen den Pegel auch auf 0.
Serial.begin(115200);
Wir eröffnen die serielle Übertragung, so können wir den Status immer am PC überwachen.
Serial.println(""); // Leere Zeile ausgeben
Serial.println("Starte WLAN-Hotspot \"Keksdose\"");
WiFi.mode(WIFI_AP); // access point modus
WiFi.softAP("Keksdose", "12345678"); // Name des Wi-Fi Netzes
delay(500); //Abwarten 0,5s
In dem Teil der Funktion geben wir zuerst etwas Text aus und stellen den Betriebsmodus ein. Dann werden der Name des Netzwerkes (SSID) und das Passwort festgelegt. Passwort und Name sollten keine exotischen Sonderzeichen enthalten und das Passwort muss mindestens 8 Zeichen haben.
Serial.print("IP Adresse "); //Ausgabe aktueller IP des Servers
Serial.println(WiFi.softAPIP());
Hier wird die IP-Adresse des Servers ausgegeben. Sie ist standardmäßig immer 192.168.4.1
server.on("/", startseite);
server.on("/dieled1.html", ledan);
server.on("/dieled0.html", ledaus);
An dieser Stelle definieren wir die Seiten, die man aufrufen kann. Dafür übergeben wir den Pfad an dem die Seite erstellt wird und die Funktion die dafür aufgerufen wird. Der Inhalt der Seiten wird in den aufzurufenden Funktionen definiert. Wichtig ist, dass immer das / vorangestellt wird.
server.begin();
}
Danach wird der Server gestartet und die setup Funktion geschlossen.
void loop() {
server.handleClient();
}
In der Loop Funktion muss nur der Funktionsaufruf für server.handleClient() stehen.
Weitere Code darf natürlich auch hier hinzugefügt werden.
Weitere Hinweise
Diese Version des ESP bietet nominell nur 2 GPIO Pins, jedoch können Rx und Tx ebenfalls ganz normal als GPIO Pins genutzt werden.
PIN |
Nummer |
GPIO0 |
0 |
Tx |
1 |
GPIO2 |
2 |
Rx |
3 |
Wenn ihr den ESP außerhalb des Aufbaus betreiben wollt wie er oben beschrieben ist, sind 3 Verbindungen zwingend notwendig. 3.3V muss an 3,3 Volt angeschlossen werden, GND an Masse
und CH_PD muss auch an 3,3V angeschlossen werden.
Der Flashvorgang kann und wird sicher auch mal fehlschlagen, versucht es erst nochmal bevor ihr lange einen Fehler sucht.