NodeMCU ESP8266 Einführungstutorial


10.01.2017  |  Tutorial, ESP8266 Projekte

Vor ein paar Wochen habe ich mir einen NodeMCU ESP8266 bestellt, der nun endlich angekommen ist. Da sich dieses Entwicklungsboard aufgrund seines WLAN-Chips bestens für IoT- und Smarthome-Projekte eignet und es deswegen zukünftig öfter bei Projekten auf smarthome-blogger.de verwende wird, möchte ich dir im heutigen Artikel eine kurze Einführung zur Programmierung des ESP8266 mit der Arduino IDE geben. Du kannst den ESP 8266 auch mit der Programmiersprache LUA programmieren - wir beschränken uns jedoch auf C++. In diesem NodeMCU ESP8266 Tutorial erwartet dich folgendes: Zuerst wird eine LED in einer Endlosschleife eingeschaltet, nach einer Sekunde wieder ausgeschaltet und eine Sekunde gewartet. Im zweiten Skript wird die LED über ein Webinterface geschaltet.

Benötigte Komponenten für das Tutorial

NodeMCU ESP8266 Einführung als Video

Schaltung des NodeMCU ESP8266

Bevor mit der Programmierung des NodeMCU ESP8266 begonnen wird, muss zuerst noch die Testschaltung aufgebaut werden. Dabei wird der Pin "D7" mit der Anode der LED verbunden (das längere Bein) und der Pin "GND" wird mit der Kathode - also dem kürzeren Bein - der LED verbunden. Je nach der verwendeten LED solltest du eventuell noch einen Widerstand zwischen den Pin "D7" und die Anode der LED schalten, um Schäden an der LED zu vermeiden. Um den ESP8266 mit Software zu beschreiben, verbindest du ihn mit einem microUSB-Kabel mit deinem PC. Ein aktiver USB-Hub kann hier eine große Hilfe sein, falls die Stromversorgung allein über den USB-Port deines Computers nicht genug ist.

So sieht die erste Schaltung aus.

Arduino IDE

Um den NodeMCU zu programmieren, wird eine Entwicklungsumgebung benötigt. Dazu kannst du dir die Arduino IDE von arduino.cc herunterladen. Nach dem Download wird die Arduino IDE noch installiert.

Jetzt wird die Arduino IDE installiert.
Wenn die Arduino IDE fertig installiert ist, kannst du sie starten. Als erstes muss der ESP8266 als Gerät hinzugefügt werden. Dazu klickst du links oben auf "Datei" und dort auf "Voreinstellungen". Im Feld "Zusätzliche Bordverwalter-URLs" trägst du nun "http://arduino.esp8266.com/stable/package_esp8266com_index.json" ein und klickst auf "OK".
Hier wird die URL eingefügt.
Um den NodeMCU ESP8266 nun endgültig hinzuzufügen, klickst du unter "Werkzeuge" -> "Board" auf Bordverwalter und suchst dort nach "ESP8266". Klicke bei "ESP8266" auf installieren.
Zuletzt wird der NodeMCU installiert.
Als letzten Schritt gibst du noch das Gerät an, auf das das Programm später geschrieben werden soll. Dazu klickst du auf "Werkzeuge" und wählst beim Punkt "Board" deinen ESP8266 aus. In meinem Fall war das "NodeMCU 0.9 (ESP-12 Module)". Die Version steht meistens irgendwo auf dem Board selbst. CPU-Frequenz und Flash-Größe habe ich nicht verändert, die Upload-Geschwindigkeit habe ich jedoch von 9600 auf 115200 erhöht.
Die Konfiguration der Arduino IDE für den ESP8266.
Jetzt, da die Einrichtung der IDE erledigt ist, kann mit der Programmierung begonnen werden.

Das erste Skript: Blinken in Dauerschleife

Jetzt kannst du den NodeMCU ESP8266 programmieren. Ein Arduino Programm besteht grundsätzlich aus den zwei Methoden setup() und loop(). Die setup-Methode wird beim Programmstart einmal aufgerufen und die loop-Methode wie der Name schon sagt, in einer Dauerschleife abgelaufen. In diesem ersten Skript wird in der setup-Methode der Modus des Pins gesetzt und in der loop-Methode damit eine LED eingeschaltet, nach einer Sekunde ausgeschaltet und eine Sekunde gewartet. Die Zeit die gewartet werden soll kannst du ganz einfach variieren, indem du in Zeile 9 und/oder Zeile 11 die Zahl 1000 änderst. Die Zahl gibt an, wie viele Millisekunden gewartet werden soll, bis die nächste Zeile ausgeführt wird. Trage diesen Code in den Editor der Arduino IDE ein.

void setup() {
	pinMode(13, OUTPUT);
}

void loop() {
	digitalWrite(13, HIGH);
	delay(1000);
	digitalWrite(13, LOW);
	delay(1000);
}

Um den Code nun auf den NodeMCU ESP8266 zu schreiben, klickst du in der Leiste oben bei "Sketch" auf "Hochladen". Nun wird der Code kompiliert und anschließend auf das Board geschrieben, soweit esbei der Kompilierung keine Fehler gab. Während des Uploads wird der Fortschritt im Arduino IDE-Fenster rot angezeigt und die blaue LED auf deinem ESP8266 sollte schnell blinken.

Der Upload ist nun abgeschlossen.
Du kannst dein Board nun von deinem PC trennen und mit einem microUSB-Netzteil verbinden. Die angeschlossene LED sollte kurz darauf im Sekundentakt blinken.

Fortgeschrittenes Skript: LED per Internet schalten

Das forgeschrittene Skript besitzt die zwei Konstanten "SSID" und "PSK", wobei "SSID" der Name des Netzwerks ist, mit dem sich der ESP8266 verbinden soll und "PSK" das Passwort des jeweiligen Netzwerks. In der setup-Methode wird lediglich der Modus des Pins 13 auf "Output" gesetzt und die Methode "initWiFi()" aufgerufen. Diese Methode verbindet sich mit dem angegebenen Netzwerk und startet den Server zur Schaltung der LED, sobald die Verbindung besteht. In der loop-Methode wird zuerst geprüft, ob sich jemand mit dem Server verbunden hat. Ist das nicht der Fall, so wird dieser Methodendurchlauf abgebrochen. Anschließend wird geprüft, ob die Netzverbindung immernoch besteht und gegebenenfalls erneut die Methode "initWiFi()" aufgerufen. Wenn die Verbindung hergestellt ist und jemand auf den Server zugreift, wird der HTTP-Request gelesen und der Durchlauf abgebrochen, falls er leer ist. Andernfalls wird geprüft, ob er ein Schlüsselwort zum Ein- bzw. Ausschalten der LED enthält und die LED entsprechend ein- bzw. ausgeschaltet. Anschließend wird ein HTML-Dokument erstellt und ausgegeben. Dieses HTML-Dokument besteht aus dem Text "LED schalten" und 2 Buttons, die bei einem Klick den HTTP-Request an den Server senden, der die LED ein- bzw. ausschaltet.

#include <ESP8266WiFi.h>

const char* SSID = "NETZWERKNAME";
const char* PSK = "PASSWORT";

WiFiServer server(80);

void setup() {
	pinMode(13, OUTPUT);
	initWiFi();
}

void loop() {
	WiFiClient client = server.available();
	if(!client){
		return;
	}
	
	if(WiFi.status() != WL_CONNECTED){
		initWiFi(); 
	}
	
	String request = client.readStringUntil('\r');
	client.flush();
	if(request==""){
		client.stop();
		return;
	}

	//GPIOS schalten
	if(request.indexOf("mode=1")>=0){
		digitalWrite(13, 1);
	}
	
	else if(request.indexOf("mode=0")>=0){
		digitalWrite(13, 0);
	}

	//Ausgabe erzeugen
	String output;
	output += "<h1>LED schalten</h1>";
	output += "<form action=\"\" method=\"GET\">";
	output += "<button name=\"mode\" value=\"1\">AN</button>";
	output += "<br><br>";
	output += "<button name=\"mode\" value=\"0\">AUS</button>";
	output += "</form>";
	client.print(output);
	client.stop();
}

void initWiFi(){
	WiFi.begin(SSID, PSK);
	
	while(WiFi.status() != WL_CONNECTED){
		delay(500);
	}
	
	server.begin();
}

Dieses Programm flasht du genau so wie das erste auf den ESP8266. Wenn es vollständig hochgeladen ist, rufst du mit einem Browser die IP-Adresse des NodeMCU auf und solltest anschließend die folgende Ausgabe erhalten:

Der ESP8266 sollte diese Ausgabe anzeigen.
Wenn nun einer dieser Buttons geklickt wird, wird die LED auf den entsprechenden Zustand geschaltet. Mit dem ESP8266 lassen sich aufgrund des günstigen Preises und der geringen Maße einige Projekt im "Internet of Things"-Bereich umsetzen. Auch hier auf smarthome-blogger.de wird der ESP8266 zukünftig für einige "Internet of Things"-Projekte, wie beispielsweise selbstgebaute Sensoren, Schalter oder ähnliches genutzt. Die Anleitungen dazu findet du unter der Kategorie "ESP8266".

Weitere Projekte mit dem NodeMCU ESP8266

Der ESP 8266 ermöglicht viele weitere spannende Projekte im Smarthome Bereich. Man kann zum Beispiel einen Temperatur Sensor bauen oder Daten per MQTT an einen Raspberry Pi senden.

Falls du Fragen oder Probleme hast, kannst du hier gerne einen Kommentar hinterlassen.

Über den Autor


Sascha Huber

Hallo, ich bin Sascha, der Gründer von Smarthome Blogger.

Mit einer Leidenschaft für Technologie und einem Hintergrund als Software Engineer habe ich 2016 Smarthome Blogger gegründet. Mein Ziel war es schon immer, innovative Lösungen zu entdecken, die unser Leben einfacher und intelligenter gestalten können. In meinem beruflichen Leben arbeite ich täglich mit Software und Technik, aber auch in meiner Freizeit bin ich stets auf der Suche nach neuen technischen Spielereien und Möglichkeiten, mein Zuhause zu automatisieren und zu verbessern.

Auf Smarthome Blogger teile ich mein Wissen, meine Erfahrungen und meine Begeisterung für alles rund um das Thema Smarthome.



Dieser Beitrag hat dir gefallen?

Dann abonniere doch unseren Newsletter!