ESP8266

Einleitung

In diesem Projekt soll anhand von Versuchen mit dem Entwickler-Board „[NodeMCU] [ESP8266]“ exemplarisch gezeigt werden, wie Wifi zur Kommunikation in Elektronik-Projekten ganz im Sinne von „Internet of things“ genutzt werden kann. Eine zunehmende Nachfrage nach drahtloser Vernetzung sowie Ausstattung verschiedenster Objekte mit Sensoren und Aktoren macht einen Mikrocontroller wie den ESP8266 zu einem nicht wegzudenkenden Teil im IoT - Universum.

Ausstattung

Der ESP8266 selbst ist ein 32-Bit Mikrocontroller, welcher sich durch einen geringen Preis und Leistungsbedarf auszeichnet.

Das hier verwendete Board ist, ähnlich wie der Arduino, zur Entwicklung konzipiert. Hierfür wurden Features wie Steckpins an den digitalen und analogen Ein- und Ausgängen und den Stromversorgungs - und Erdungspins angebracht sowie eine USB - Schnittstelle für das unkomplizierte Hochladen von Code integriert. Das folgende Bild illustriert die Pinbelegung des Boards:

Abb.Nr.1: Pinbelegung des ESP8266 - Boards / Quelle: https://www.mikrocontroller-elektronik.de/nodemcu-esp8266-tutorial-wlan-board-arduino-ide/

Die Bestückung erinnert dabei an den Arduino Uno, jedoch bietet der ESP8266 die erwähnte Wifi - Schnittstelle.

Einrichtung

Zur Programmierung des ESP wird in diesem Versuch die Arduino IDE verwendet, welche Bibliotheken und passende Boardverwalter liefert und die Einrichtung sehr einfach gestaltet. Um den erforderlichen Boardverwalter zu beziehen, muss die IDE angewiesen werden bei einer zusätzliche URL nach solchen zu suchen. Hierfür begibt man sich zu Datei->Voreinstellungen und gibt im unten gezeigten Fenster an der markierten Stelle folgende URL ein : „http://arduino.esp8266.com/stable/package_esp8266com_index.json“.

Abb.Nr.2: Zusätzliche Boardverwalter

Nach der Wahl des COM-Ports, welchen der ESP anspricht, kann mit der Entwicklung und dem Hochladen von Sketches begonnen werden.

Versuch: Photoresistor per Wifi auslesen

Folgende Komponenten werden für diesen Versuch benötigt:

  • NodeMCU ESP8266 Board
  • 10k Ohm Widerstand
  • Photoresistor

Die Komponenten müssen folgendermaßen verschaltet werden:

Abb.Nr.3: Steckplan

Um mit dem [ESP8266]_static per Wifi kommunizieren zu können ist es erforderlich, diesen mit dem Wifi zu verbinden sowie entweder als Host oder Server agieren zu lassen. In diesem Versuch soll der analoge Wert, den die Schaltung mit dem Photoresistor erzeugt, mittels Webseite im aufrufenden Browser angezeigt werden. Hierzu bietet es sich an, den ESP als Server zu behandeln.

1
2
#include <ESP8266WiFi.h>
WiFiServer server(80);

Noch vor der setup - Funktion wird die benötigte Bibliothek für die Einwahl in das Wifi - Netzwerk eingebunden sowie ein Server - Objekt erzeugt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
String readPhotoresistorAndmakeHtml()
{
String page;
page.reserve(1024);
page = F("HTTP/1.1 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Connection: close\r\n"
    "Refresh: 3\r\n"
    "\r\n"
    "<!DOCTYPE HTML>"
    "<html>"
    "Analog input: ");
page += analogRead(A0);
page += F("</html>"
        "\r\n");
return page;
}

Diese Funktion erstellt ein HTML - Dokument, welches bei Aufruf dem Client übergeben wird. Dieses beinhaltet den vom photoresistor ausgelesenen Wert am Analog - Pin A0 des ESP. Mittels der auf „Refresh“ folgenden Zahl kann man die Anzahl der Sekunden einstellen, die bis zur nächsten Aktualisierung der Website im aufrufenden Brwoser vergehen soll.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
void setup()
{
  Serial.begin(9600);
  Serial.println();

  WiFi.begin("[SSID des Access - Points]", "[Passwort des Wifi]");

  Serial.print("Versuch, Wifi-Verbindung aufzubauen");
  while (WiFi.status() != WL_CONNECTED)
  {
      delay(500);
      Serial.print(".");
  }
  Serial.println();

  Serial.print("Verbindung erfolgreich! Zugeteilte IP - Adresse: ");
  Serial.println(WiFi.localIP());

  server.begin();
  Serial.println("Bitte obige IP - Adresse im Browser eingeben.\n");
}

In der setup - Funktion wird der ESP mit dem Wifi verbunden. Um überwachen zu können was passiert, werden über den serielle Monitor immer wieder Statusmeldungen ausgegeben. Mit WiFi.begin() wird der Verbindungsaufbau eingeleitet. Hierzu müssen natürlich SSID des Access - Points sowie das Passwort des Wifi übergeben werden. Solange der Status „nicht verbunden“ ist, wird gewartet. Vergeht hier zu viel Zeit, so sind die übergebenen Zugangsdaten wahrscheinlich fehlerhaft. Wenn die Verbindung erfolgreich hergestellt wurde, wird am Monitor die dem ESP zugeteilte IP - Adresse ausgegeben, mit welcher man in obiger Funktion erstellte Webseite erreichen kann. Abschließend wird noch ein server - Objekt erzeugt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void loop()
{
  WiFiClient client = server.available();                                                                                                                                 der Client verbunden ist, wird nach Prüfung

  if(client)
  {
    Serial.println("\n[Client verbunden]");
    while (client.connected())
    {
      if (client.available())
      {
        String line = client.readStringUntil('\r');
        Serial.println(line);
        if (line.length() == 1 && line[0] == '\n')
        {
          client.println(readPhotoresistorAndmakeHtml());
          break;
        }
      }
    }
    while (client.available())
    {
      client.read();
    }
    client.stop();
    Serial.println("[Verbindung zum Client beendet.]");
  }
}

Zu Beginn der loop - Funktion wird ein client - Objekt erzeugt. Falls dieses Objekt nicht NULL referenziert, wird eine while - Schleife eingeleitet, welche für die Dauer der Verbindung zum Client bei Verfügbarkeit dessen Informationen über dessen Anfrage sowie dem Client selbst liefert. Diese Informationen werden dann Stück für Stück auf dem seriellen Monitor ausgegeben. Wird das Ende des Headers, was durch die „if (line.length() == 1 && line[0] == ‚n‘)“ - Bedingung geprüft wird erreicht, wird dem Client das oben erstellte HTML - Dokument ünergeben, welches dann in dessen Browser in Form einer Webseite angezeigt wird. Nach Verlassen der Schleife wird eine neue while - Schleife, welche für die Dauer der Verfügbarkeit des Clients weiterhin auf eventuelle Anfragen horcht, durchlaufen. Wenn der Client nicht mehr verfügbar ist, wird die Verbindung unterbrochen und die loop - Funktion beginnt erneut. Durch das im HTML - Dokument oben festgelegte Refresh - Intervall wird nach dieser Zeit eine erneute Anfrage an den Server gesendet.

Fazit

Für den ersten eigenen kleinen Webserver eignet sich das NodeMCU mit ESP8266 hervorragend. Im Internet kann man viele Anleitungen zur Einrichtung des Mikrocontrollers finden und so erste Erfahrungen mit HTML CSS und dem erstellen von einem Server haben.

Literaturangaben

[ESP8266]Wikiseite des Mikrocontrollers (besucht am 21.12.21) https://www.mikrocontroller.net/articles/ESP8266
[NodeMCU]Wikiseite zum NodeMCU (besucht am 21.12.21) https://de.wikipedia.org/wiki/NodeMCU