Einführung & Programmierung des ESP8266 NodeMCU Boards

2. Juli 2017
24 Comments

Der ESP8266 NodeMCU ist ein kleiner Mikrocontroller, welcher GPIOs hat und darüber sich per WLAN mit dem Internet verbinden kann. Dies und der geringe Preis macht ihn gegenüber bspw. Arduinos  sehr interessant. In kommenden Tutorials wollen wir die günstigen ESP8266 Module nutzen, um Daten per Wifi Verbindung an den Raspberry Pi zu senden, welcher als „Herzstück“ agiert.

In diesem Tutorial geht es um die Einführung sowie den generellen Aufbau und ersten Start mit einem ESP8266 NodeMCU.

 

Zubehör

Vom ESP8266 gibt es verschiedene Modelle, wobei der günstigste (ESP-01) lediglich vier GPIO Pins hat. Für minimale Anwendungen sollte dies ausreichen. Falls mehr Hardware-Pins gebraucht werden, so ist der ESP-12 die bessere Wahl. Letzteren gibt es auch als „Development Board“, was Adapter überflüssig macht.

Bevor wir starten, solltest du dir klar machen, welche Version für dich geeignet ist. Dieses und alle kommenden Tutorials werden mit beiden Versionen kompatibel sein.

  • Das NodeMCU ESP-12 Modul hat eben den Vorteil, dass es per MicroUSB Kabel angeschlossen werden kann und einen Reset Knopf hat. Solltest du nur das Modul ohne Development Board (bspw. aus Platzgründen), so kann man dies auch separat erwerben.

Falls du kein integriertes Board hast, brauchst du folgendes:

Falls du das Beispiel am Ende nachbauen möchtest, solltest du außerdem ein paar LEDs da haben.

 

Aufbau & Verkabelung

Zunächst einmal müssen wir den ESP8266 an einen USB Port unseres Computers anschließen. Beim Development Board reicht es ein micro USB Kabel anzuschließen. Ohne solch ein Board müssen wir den USB-TTL Adapter nutzen. Dafür ist es wichtig, dass wir die Pinbelegung unseres ESP Moduls kennen.

Für die beiden ESP-01 und ESP-12 habe ich hier einmal die Pinbelegung eingefügt:

Topansicht des ESP8266 NodeMCU ESP-01 (Quelle)

ESP8266 NodeMCU ESP-12 Pinout

Eine Belegung aller Modelle (ESP-05, ESP-07, usw.) findest du übrigens hier.

 

Nun müssen wir das Modul an den FT232 USB Adapter anschließen. Dieser hat 6 Pins, wovon wir 4 nutzen werden. Die Beschriftung der Pins ist nicht direkt sichtbar, da sie zwischen dem Jumper und den eigentlichen Pins ist.

Mit Jumper Kabeln werden folgende Pins des ESP8266 NodeMCU Moduls zunächst an den USB-TTL Konverter angeschlossen:

ESP8266 FT232 USB-TTL Serial Adapter
VCC  VCC
CH_PD  VCC
TXD Tx
GND GND
RXD Rx
GPIO 0 GND (temporär)

Der Anschluss von GPIO0 an GND ist übrigens nur wichtig, wenn geflasht wird. Nachdem die Firmware erfolgreich geflasht wurde, kannst du die Verbindung dieses Pins zu GND trennen.

 

Firmware flashen

Verbinde den USB Adapter zunächst an deinen PC. Der ESP8266 sollte automatisch erkannt werden und die Treiber unter Windows 7/8/10 automatisch installiert werden.

Anschließend benötigen wir das NodeMCU Flasher Tool. Es gibt hiervon eine 32Bit und 64Bit Version, welche entsprechend dem Betriebssystem heruntergeladen werden muss.

Starte das Programm und wähle den entsprechenden Port aus, an dem der ESP82166 angeschlossen ist. Normalerweise wird dieser automatisch erkannt (solange nicht mehr als ein Modul angeschlossen ist). Nach Prüfung drücke auf Flash(F) und warte, bis der Vorgang vollendet ist. Die Mac-Adresse sollte direkt angezeigt werden:

ESP8266 NodeMCU FlasherDas Development Team ist wohl dabei, das Tool auch für Linux und Mac verfügbar zu machen. Falls du die Firmware eines Tages updaten willst, kannst du hier weitere Informationen dazu finden.

Beispielsweise kannst du von hier eine Custom-Firmware (mit mehr standardmäßig enthaltenen Bibliotheken (wie http, etc.) laden. Diese liegt im „.bin“ Dateiformat vor und kann im „Config“ Tab anstelle der vordefinierten Firmware verwendet werden. Achte gleich beim Verbinden darauf, dass die Baudrate bei diesen Custom-Builds 115200 und nicht 9600 ist (sofern du sie verwendest).

Sobald die Firmware erfolgreich übertragen wurde, kannst du GPIO0 von GND trennen und das Flashing Tool schließen.

 

Verbindung zum ESP8266

Der ESP8266 NodeMCU Mikrocontroller lässt sich mittels der Sprache LUA programmieren (diese kommt übrigens auch in unserem automatischen Telegram-Skript vor). Um den Programmcode auf diesen zu übertragen, müssen wir zunächst eine serielle Verbindung aufbauen. Am einfachsten geht dies mit der Hilfe eines Tools.

Hierfür nutze ich das „ESPlorer“ Tool, welches in Java geschrieben wurde und somit auf allen Betriebssystemen genutzt werden kann. Lade dies zunächst auf der Entwicklerseite herunter und entpacke es.

Unter Windows Betriebssystemen reicht es die zugehörige „ESPlorer.bat“ zu starten.

Im rechten Tab ist wieder die Auswahl des Ports vorhanden. Wähle hier den entsprechenden Port (bei mir ist dies COM5) mit Baudrate 9600 (in früheren Versionen war diese bei 115200). Klicke nun auf den Button Open.

Üblicherweise tut sich erst einmal nicht viel, bis auf diesen Text:

PORT OPEN 9600

Communication with MCU..

Du musst den Mikrocontroller zunächst neustarten. Bei einem Development Board reicht das Drücken des Reset Buttons. Ohne Board muss der RST Pin (Belegung siehe oben) kurz mit GND verbunden werden. Danach erscheint folgende Meldung:

Got answer! Communication with MCU established.
AutoDetect firmware...

Can't autodetect firmware, because proper answer not received (may be unknown firmware). 
Please, reset module or continue.

Self adjust flash size.

NodeMCU 0.9.5 build 20150318  powered by Lua 5.1.4
lua: cannot open init.lua
>

Du hast es nun geschafft! Hier können nun bereits Befehle per LUA eingegeben werden, welche dann einmalig ausgeführt werden. Du kannst bspw. folgendes ganz unten eingeben:

print("Hello World")

Natürlich ist es auch möglich den Programmcode direkt nach dem Starten ausführen lassen. Dazu muss der Code in eine „init.lua“ Datei geschrieben werden, wozu wir aber gleich noch kommen.

Übrigens: Theoretisch ist es ebenfalls möglich sich per Putty oder Arduino IDE bzw. jedem Programm, das eine serielle Verbindung aufbauen kann, zu verbinden. Das ESPlorer Tool ist meiner Meinung nach aber die komfortabelste Möglichkeit.

 

Erster Test – Server

Die NodeMCU Seite hat einige Beispiele (unten), wovon wir zwei gleich einmal ausprobieren wollen.

Beim eerste Beispiel handelt es sich um einen kleinen Webserver, welcher unter der lokalen IP Adresse des ESP8266 läuft. Dazu muss dieser natürlich zunächst mit dem WLAN verbunden werden.

In der linken Seite des ESPlorer kannst du folgenden Code kopieren:

Hierbei müssen natürlich die WLAN Daten (SSID = Name, Passwort) mit denen deines Netzwerks ersetzt werden.

Drücke anschließend auf „Send to ESP“ (ggf. musst du die Datei vorher lokal speichern).

Um nun die IP Adresse herauszufinden, kannst du im in der rechten Ansicht unten folgendes eingeben:

Dies gibt eine Ausgabe wie folgende:

192.168.1.77    255.255.255.0    192.168.1.1

Die erste angegebene IP Adresse, ist jene innerhalb des lokalen Netzwerks. Falls sich dein Rechner ebenfalls in diesem Netzwerk befindet, so kannst du diese IP einfach in deinen Browser eingeben und folgendes sollte erscheinen:

Sobald du dies aufrufst, sollte der Log im rechten Fenster des ESPlorer auch etwas ausgeben.

Falls du die Datei in den Autostart packe willst, so speichere sie unter „init.lua“ und übertrage sie auf den ESP.
Solltest du sie eines Tages löschen wollen, so geht dies wie folgt (Dokumentation):

file.remove("init.lua")

 

ESP8266 NodeMCU GPIO schalten

Zum Schluss wollen wir noch von den GPIOs Gebrauch machen und eine LED leuchten lassen.

Achte darauf, dass die GPIO Nummerierung, wie auch beim Raspberry Pi, nicht mit der Pinbelegung übereinstimmt. So gilt bspw. beim ESP-01 GPIO0 = Pin3 und GPIO2 = Pin4. Im Code geben wir die Pin Nummerierung an. Die Belegung kann hier nachgelesen werden.

IO index ESP8266 pin IO index ESP8266 pin
0 GPIO16 7 GPIO13
1 GPIO5 8 GPIO15
2 GPIO4 9 GPIO3
3 GPIO0 10 GPIO1
4 GPIO2 11 GPIO9
5 GPIO14 12 GPIO10
6 GPIO12

Beim ESP-12 NodeMCU sollte beachtet werden, dass die D-Pins (D0, D1, usw.) nicht die GPIO Nummern darstellen, sondern die IO/Pin Nummerierung:

 

Mit folgendem Skript kannst du eine LED an GPIO2 blinken lassen (langes Ende der LED an den GPIO, kurzes Ende an GND):

Auf der Referenzseite von NodeMCU findest du weitere kleine Beispiele.

 

Welche Projekte (insbesondere im Bezug auf den Raspberry Pi) soll ich als nächstes umsetzen?

24 Kommentare

  1. Hallo und danke für Klärung,,

    Mini oder Micro? Ich bin verwirrt:

    • Das NodeMCU ESP-12 Modul hat eben den Vorteil, dass es per MicroUSB Kabel angeschlossen werden kann und einen Reset Knopf hat. Solltest du nur das Modul ohne Development Board (bspw. aus Platzgründen), so kann man dies auch separat erwerben.
    Falls du kein integriertes Board hast, brauchst du folgendes:
    • ESP-01
    • FT232 USB-TTL Adapter
    • Mini USB Kabel (kein micro)
    • Jumper Kabel
    • Breadboard

    Aufbau & Verkabelung
    Zunächst einmal müssen wir den ESP8266 an einen USB Port unseres Computers anschließen. Beim Development Board reicht es ein micro USB Kabel anzuschließen.

    Antworten
  2. Super Sache,

    ich hab den ESP-12 schon länger rumliegen, habs aber immer wieder verschoben.
    Hast du vllt einen gute Infoquelle zum Thema micropython flashen, oder taugt das nix? kann ja schon nur bedingt mit python umgehen, aber mit lua garnicht.
    Oder sollte ich mir noch lua kenntnisse aneignen?

    MfG Hauschi

    Antworten
    • Lua ist sehr ähnlich zu Python. Ich würde auch deshalb bei Lua bleiben, weil die aller meisten Codebeispiele in Lua sind. Da wirst du dir keinen Gefallen tun, wenn du jedes Mal alles übersetzen musst.

      Antworten
  3. Hallo,

    benötigt man für den ESP-01 zwingend den FT232 USB-TTL Adapter oder kann man das auch
    mit einem NodeMCU ESP-12 Modul machen?

    Gruss Ingo

    Antworten
  4. Moin Felix,
    nur mal so ne kurze Frage…
    beim RPi hat man ja grundsätzlich das stromausfall Problem. Also SD Karte im eimer und so weiter, stimmt es daß der ESP grundsätzlich sozusagen stromausfall resistent ist?
    Das würde ja bei einigen Ideen gewisse vorteile haben, zb. akku betrieb oder kleinere outdoor geschichten wie Temperaturmessung oder was man auch immer für geistesblitze verfolg.
    Ich zum beispiel will nur so zum spaß mal nen 1-Flaschen Bierkühler mit nem Peltierelement und nem ds18b20 bauen. 🙂

    MfG Hauschi

    Antworten
    • Der ESP hat seinen Speicher onBoard und kann daher nicht ausgewechselt werden. Resistent ist Hardware selten. Nach einem Stromausfall rebootet er ganz normal.

      Antworten
  5. Hallo Felix,
    In erster Linie mal vielen Dank für die vielen tollen Tutorials! Wegen dieser Website habe ich mir meinen ersten Raspberry zugelegt und es gewagt mich als teockener Beginner in die Programmierwelt zu stürzen. In meinen Kopf habe ich mir eine komplett heimautomatisierung gesetzt mit mehreren Basis Abteilungen. Dazu sollen sowohl Heizung wie auch 433 Steckdosen und elektrische Rollläden gehören. Hierfür scheinen die NodeNCU Boards perfekt zu sein. Mein Wunsch Tutorial wäre eine wifi Kommunikation zwischen RPi und NodeNCU Boards Inkl. Steuerung vom Smartphone.

    Danke dir und mach weiter so!

    Kevin

    Antworten
    • In den kommenden Tutorials werden fast ausschließlich Custom Builds verwendet, die die entsprechenden Module beinhalten und auf der letzten Firmware aus dem Master Branch basieren 🙂

      Antworten
  6. Ich habe von diesem, vorallem auf Grund der Größe, erwartet dass auch die Programmierung mittels der Arduino IDE gezeigt wird. Naja, darum folge ich mittlerweile lieber kleineren Blogs.

    Vielleicht wird die Programmierung mittels Arduino IDE hier irgendwann mal gezeigt.

    Bin gespannt ob überhaupt mein Kommentar freigegeben wird

    Antworten
    • Hi Ben,
      klar, wieso sollte dein Kommentar denn nicht freigegeben werden? Ich fand den ESPlorer am einstiegsfreundlichen und arbeite auch selbst lieber damit, weshalb ich diesen vorgestellt habe. Falls Zeit ist, werde ich vielleicht auch ein Tutorial zur Nutzung mit der Arduino IDE und dem ESP8266 machen.
      Dennoch danke für deine ehrliche Meinung 🙂
      LG, Felix

      Antworten
  7. Hallo Felix,
    Wenn ich das als Laie richtig verstehe ist dieser ESPxx als Verlängerung der GPIO Pins auf dem Raspi gedacht. Nur dann eben per Wlan! Richtig?
    Ich Würde gerne ein Raspi3 mit 3 Abgesetzten 7 Segment Anzeigen (alle 3 zeigen nur die Uhrzeit XX-XX-XX an)
    laufen lassen und störe mich an den Kabeln.
    Wäre das damit dann möglich?
    Was ich nicht ganz kapiere ist wie korrespondiert den der Raspi mit dem ESP? Oder Läuft der Eigentliche Python bzw. in dem Fall Lua komplett auf dem ESP.

    Antworten
    • Hallo Robert,
      Dazu kann er dienen, aber muss nicht. Du kannst ihn auch als eigenständigen Microcontroller nutzen und z.B: nur Daten austauschen.
      Wie du die beiden kommunizieren lässt steht dir frei (Server-Server, MQTT, usw.), ebenso die Progammiersprache auf dem Pi. Auf dem ESP empfehle ich Lua (würde aber auch im Arduino-C++ gehen).

      Antworten
      • Sorry wenn ich nochmal nachhake,
        Läuft der Python bzw. LUA Code für die Uhr dann auf dem Raspi oder ESP? Oder wie muß ich mir das Vorstellen.

      • Je nachdem wie du es umsetzt. Du kannst etweder den gesamten Code auf dem ESP setzen (Lua) oder aber den Pi als „Steuerung“ nehmen und dem ESP eine Nachricht übermitteln, was zu tun ist. In jedem Fall wirst du den ESP programmieren müssen, die Frage ist ebe, ob der Raspberry Pi auch vor kommt. Wenn du etwas Geduld hast kannst du den Newsletter abonnieren, denn in ca. 2 Wochen kommt ein Tutorial, das genau jene Kommunikation zeigt.

      • Super!
        Danke vielmals. 2 Wochen kann ich warten. Bis dahin Spiele ich damit etwas rum und Versuche einiges. Bringt Erfahrung 🙂

    • um mit 7 Segment-Anzeigen mehrere Zeitanzeigen zu bauen benötigt man den Raspi nicht. Aufwand ist viel zu gross. Das kann ein ESP8266 auch allein und standalone. Einen Script für den ESP8266 schreiben (LUA), am WLAN-Router anmelden, die Uhrzeit aus dem Internet laden und die Zeit anzeigen …. fertig. Ich würde keine 7 Segment-Anzeigen nehmen sondern LCD Character-Displays … das ist ergeblich einfacher und man könnte auch noch das Datum mit Wochentag anzeigen (Es gib 2 zeilige Character Displays , 2 Zeilen a 40 Character für wenig Geld bei e-bay) und die leuchten auch noch schön (grün oder weiss oder gelb oder rot). Billiger als mit einem Raspi ist das mit dem ESP8266 billiger auch noch. Programmieraufwand … vielleicht 1-2 Stunden.

      Antworten
  8. Hallo Felix,

    muss ich den Jumper auf dem FT232 USB-TTL Adapter von 5V auf 3,3V stellen, um den ESP nicht zu grillen, oder ist das nicht nötig?
    Gruß Ingo

    Antworten
  9. Hi,
    vielen Dank für dieses Tutorial. Ich habe nur eine kleine Bemerkung. Beim „flaschen“ RX soll mit TDX und TX mit RDX verbindet werden, nicht ungekehrt wie angegeben.
    MFG
    Alberto

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!