Zum Inhalt springen
Arduino Wifi mit dem NodeMCU ESP8266

Arduino Wifi mit dem ESP8266 als Arduino

    Arduino ist super, doch leider fehlt dem Board eine Möglichkeit, mit dem Internet zu kommunizieren. Abhilfe schafft der Chip ESP8266 von Expressif. Er ist nicht nur sehr kostengünstig, sondern ermöglicht es sogar, direkt Arduino-Code auszuführen. In der Variante NodeMCU mit USB-Anschluss kann man ihn als Arduino-Board verwenden: Arduino Wifi mit dem ESP8266 als Arduino. Hier zeige ich dir, wie das geht.

    Als erstes benötigt man ein NodeMCU-Board. Es kostet ca. 7 Euro und im Bundle wird es noch mal günstiger. Das NodeMCU passt auf ein Breadboard und ist bereits Wifi-fähig. Es lässt sich mit der Arduino IDE nutzen.

    Vorbereitung der Arduino IDE

    Öffne die Arduino IDE und öffne das Voreinstellungsmenü: Datei>Voreinstellungen (Mac: Arduino>Einstellungen). Füge im Punkt zusätzliche Boardverwalter URLs die folgende Adresse hinzu:


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    http://arduino.esp8266.com/stable/package_esp8266com_index.json
    Arduino Wifi ESP8266 Einstellungen

    Sollte hier schon etwas stehen, kannst du zwischen den URLs einfach ein Komma setzen. Bestätige mit OK und klicke auf Werkzeuge>Board>Boardverwalter… Suche nach nodemcu und installiere esp8266 by ESP8266 Community in der aktuellen Version.

    Jetzt solltest du im Menü Werkzeuge>Board das NodeMCU 1.0 (ESP-12E Module) auswählen können. Schließe das NodeMCU an und wähle den richtigen Port unter Werkzeuge>Port aus (SLAB_USB_to_UART).

    Arduino Wifi mit dem ESP8266 als Arduino – Board auswählen

    Achtung: Das NodeMCU wird per Micro-USB-Kabel angeschlossen. Viele der Micro-USB-Kabel, die man herumzuliegen hat, sind Power-Only, das heißt, sie können keine Daten übertragen. Das gilt insbesondere für Kabel, die man bei günstigen Powerbanks dazu geliefert bekommt. Damit kann man das NodeMCU nicht programmieren.

    Lassen wir erstmal eine LED blinken um zu sehen, ob das so weit geklappt hat. Lade einfach den folgenden Code aufs NodeMCU.

    int led = D4;
    
    void setup() {
      pinMode(led, OUTPUT);
    }
    
    void loop() {
      digitalWrite(led, HIGH);
      delay(1000);
      digitalWrite(led, LOW);
      delay(1000);           
    }

    Der Upload dauert deutlich länger, als bei einem Arduino. Den Upload-Speed kann man im Menü Werkzeuge>Upload-Speed erhöhen. Das kann aber zu Übertragungsfehlern führen. Im schlimmsten Fall muss man das Programm zweimal hochladen.

    Das NodeMCU hat zwei eingebaute LEDs. Eine am Pin D0 und eine am Pin D4. Es ist nicht ganz so ergonomisch entworfen wie ein Arduino. Dafür ist es sehr günstig und lässt sich per Wifi verbinden. Sehen wir uns aber vorher noch die Pins vom NodeMCU an. Die sind manchmal etwas eigenwillig. Ich hab den Pin-Out mit ein paar Kommentaren versehen, die dir viel Foren-Lesen ersparen können.

    Arduino Wifi mit dem ESP8266 als Arduino Pinout

    Jetzt wollen wir aber endlich das NodeMCU mit dem Wifi verbinden. Kopiere den folgenden Code in einen neuen Arduino-Sketch und passe die Variablen ssid und password an. Trage deinen Wifi-Namen und dein Wifi-Passwort ein.

    Code: Arduino WIFI mit dem NodeMCU

    #include <ESP8266WiFi.h>
     
    const char* ssid = "deinWifiName";
    const char* password = "deinWifiPasswort";
     
    int ledPin = D4;
    WiFiServer server(80);
     
    void setup() {
      Serial.begin(115200);
      delay(10);
      pinMode(ledPin, OUTPUT);
      digitalWrite(ledPin, LOW);
     
      // Mit Wifi verbinden
      Serial.print("Verbinden mit: "); 
      Serial.println(ssid);
      WiFi.begin(ssid, password);
     
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi verbunden");
     
      // Start des Servers
      server.begin();
      Serial.println("Server gestartet");
     
      // Print the IP address
      Serial.print("Diese URL zum Verbinden aufrufen: ");
      Serial.print("http://");
      Serial.print(WiFi.localIP());
      Serial.println("/");
    }
     
    void loop() {
      // Prüfen, ob sich ein Client verbunden hat
      WiFiClient client = server.available();
      if (!client) {
        return;
      }
     
      // Warten auf Daten vom Client
      Serial.println("new client");
      while(!client.available()){
        delay(1);
      }
     
      // Erste Zeile des Requests lesen
      String request = client.readStringUntil('\r');
      Serial.println(request);
      client.flush();
     
      // Match the request
     
      int value = LOW;
      if (request.indexOf("/LED=OFF") != -1)  {
        digitalWrite(ledPin, HIGH);
        value = HIGH;
      }
      if (request.indexOf("/LED=ON") != -1)  {
        digitalWrite(ledPin, LOW);
        value = LOW;
      }
     
      // Anfrage zurücksenden
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println("");
      client.println("<!DOCTYPE HTML>");
      client.println("<html>");
     
      client.print("Die LED ist: ");
     
      if(value == HIGH) {
        client.print("Aus");
      } else {
        client.print("An");
      }
      client.println("<br><br>");
      client.println("<a href=\"/LED=ON\"\"><button>An </button></a>");
      client.println("<a href=\"/LED=OFF\"\"><button>Aus </button></a><br />");  
      client.println("</html>");
     
      delay(1);
      Serial.println("Client trennen");
      Serial.println("");
    }

    **Das Programm ist übrigens eine etwas veränderte Version dieses Codes: Instructables CC-BY-NC-SA

    Öffne jetzt den seriellen Monitor Werkzeuge>Serieller Monitor und kopiere den Link und öffne ihn in deinem Browser.

    Arduino Wifi mit dem ESP8266 als Arduino – IP herausfinden

    Mit den beiden Button kannst du nun eine der Build-In-LEDs steuern.

    Arduino Wifi mit dem ESP8266 als Arduino im Browser

    Ich hoffe, dieser kleine Einstieg hilft dir schon mal weiter. Über das NodeMCU und überhaupt die ganze ESP-Familie lässt sich noch viel schreiben, aber hier lasse ich dich erstmal allein weiter experimentieren. Ich hoffe, das hat dir gefallen. Lass mir gern einen Like da und schreib mir in die Kommentare, was du für ein Projekt damit realisieren willst. Alles Gute bis dahin!


    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    22 Gedanken zu „Arduino Wifi mit dem ESP8266 als Arduino“

    1. Hallo,
      Ich würde gerne mehrere HX711 A/D Wandler an einen Arduino uno anschliessen un das Gewicht von Bienenstöcken zu messen und diese über den ESP8266 zu Thinkspeak senden. Da ich recht neu auf dem Gebiet bin hapert es schon bei der Verdrahtung zw. Arduino und Esp.
      Den Sketch muss ich auch noch “zurecht kopieren”.
      Kannst du mir da evtl. etwas Starthilfe geben.

      Gruß Andreas

    2. Pingback: Digitales (Pool)Thermometer - Poolheld

    3. Einen Fehler habe ich gefunden: die baud Anzahl für den Seriellen Monitor sollte auf 9600 gestellt werden.
      Was ich an diesem Tutorial vermisse, ist ein mögliche Verbindung z.B. zum Nano.

      Grüße aus dem Norden.

      Jan

      1. Hallo Jan,

        die Baud-Anzahl kannst du auch im Seriellen Monitor anpassen. Ich nehme immer die 115200. Bei 9600 bekommt die Verbindung sonst schon mal »Schluckauf«. Ich dachte auch immer, dass es cool wäre, das NodeMCU mit einem Arduino zu verbinden, aber dann war es meistens einfacher, direkt das NodeMCU als Arduino zu verwenden. Bis auf die Anzahl der analogen Eingänge passt das meistens. Wofür würdest du es verwenden?

        Liebe Grüße

        Stefan

    4. Hallo,
      nachdem ich etliche Nanos und STM32 verbaut habe, wollte ich mich mal an ein WIFI-fähiges Projekt geben. Endlich mal eine Anleitung, die ich verstehe, besten Dank dafür.
      Aber wie bringe ich dem Gerät eine statische IP bei? Scheinbar holt sich der Sketch eine per DHCP. Oder kann ich einfach const char *WiFi.localIP = “192.168.x.y” schreiben?
      Gruß
      Sascha

      1. Hi Sascha, ich mache das genau so, wie Jan es beschrieben hat. Ich sage dem Gerät per Fritzbox »Diesem Gerät immer die gleiche IP-Adresse zuweisen« – ob man das im Code machen kann, weiß ich nicht. Im schlimmsten Fall verbindet es sich dann aber nicht mit deinem Netzwerk, falls DHCP die Adresse schon anderweitig vergeben hat. Liebe Grüße Stefan

    5. Das erste Skript hat gut funktioniert.
      Beim zweiten Skript bekomme ich bei der Ausgabe Serieller Monitor nur gespiegelte Fragezeichen. Meine SSID beinhaltet ein Leerzeichen, was sonst auch problemlos funktioniert. Bereitet das hier Probleme?

      1. Hi Enrico, das könnte ein Problem sein. Jedenfalls höre ich das von Zeit zu Zeit. Hast du die Möglichkeit, in deinem Router ein Gastnetzwerk ohne Leerzeichen anzulegen? Dann könntest du das mal versuchen. Dein Smartphone muss dann natürlich auch damit verbunden sein. Liebe Grüße Stefan

    6. Hallo ich habe das ganze Programm auf den Wemos D1 mini gespielt aber leider läuft es nicht richtig. Ich kann einmal die Seite unter der IP aufrufen aber nichts schalten.

      WiFi verbunden
      Server gestartet
      Diese URL zum Verbinden aufrufen: http://192.168.178.46/
      new client
      GET /LED=ON HTTP/1.1
      Client trennen

      new client
      GET /favicon.ico HTTP/1.1
      Client trennen

      Hast Du einen Tipp für mich

    7. Perfekte Erklärung, vielen Dank dafür!
      Ein “Hello World” für den ESP8266. Arbeite seit langem mit dem Raspi, aber für einfache Aufgaben oder auslesen von Sensoren extra einen Raspi abzustellen ist ein bißchen viel, ein ESP8266 oder ien Arduiono ist da besser, und der ESP8266 ist echt günstig :-)
      Oder die Kombi Raspi, Arduiono und ESP8266, die Möglichkeiten sind einfach enorm.
      Ich bin 52 und von so Bauteilen und zu den Preisen hätten wir in den 80 und auch danach nicht mal gewagt zu träumen.
      Dazu perfekte und leichte Anleitungen im Inet. :-)

      Also nochmal Danke und guten Rutsch ins 2021

      1. Hi Marcus, wow! Vielen Dank für den netten Kommentar :-) Super, dass die Anleitung verständlich ist. In den Achtzigern gab es doch so viele coole Entwicklungen. Totales Pionier-Zeitalter. Wenn da jetzt noch Wifi-MCs dabei gewesen wären, was wäre dann noch übrig ;-) Rutsch auch gut rein und alles Gute! Liebe Grüße Stefan

    8. Ich bin Anfänger und 71 Jahre alt .
      Das Programm hat auf Anhieb Funtioniert.
      Ich probiere schon mehrere Tage kam aberzu keinem Ergebnis.Wahrscheinlich fehlte eine Bibliothek bei mir in der Arduino IDE.

    9. Guten Tag,
      Ich mache ein Video auf mein YouTube Kanal für Thema ESP8266
      Und habe eine Frage ob ich ihre Website als Anleitung für benutzen könnte und dann ihre Website in der Video Beschreibung verlinken könnte
      (Als Anleitung). :)

      1. Hallo Vlad,

        vielen Dank für die Frage. Du kannst die Website gern als Anleitung für das Video nutzen, wenn du den Link in die Beschreibung setzt. Das fände ich sogar ziemlich cool. Schick mir bitte auch den Link zum Video, wenn es fertig ist :-)

        Liebe Grüße

        Stefan

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.