Arduino Tutorial Lesemodus schließen

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:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

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).

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

Lassen wir erstmal eine LED blinken um zu sehen, ob das soweit 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.

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.

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

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!