Heimautomation mit Arduino, ESP8266 und Raspberry Pi - Das eigene Heim als Smart Home für Heimwerker, Bastler und Maker

Heimautomation mit Arduino, ESP8266 und Raspberry Pi - Das eigene Heim als Smart Home für Heimwerker, Bastler und Maker

von: Thomas Brühlmann

mitp Verlags GmbH & Co. KG, 2021

ISBN: 9783958456730 , 368 Seiten

Format: ePUB

Kopierschutz: Wasserzeichen

Mac OSX,Windows PC für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Apple iPod touch, iPhone und Android Smartphones

Preis: 29,99 EUR

eBook anfordern eBook anfordern

Mehr zum Inhalt

Heimautomation mit Arduino, ESP8266 und Raspberry Pi - Das eigene Heim als Smart Home für Heimwerker, Bastler und Maker


 

Kapitel 2:
Internet-Connectivity


Das Internet ist heute ein Werkzeug für Millionen von Menschen. Im Alltag, im Job und im Hobby kann man auf diese Datenquelle nicht mehr verzichten.

Auch im Umfeld von Microcontrollern und Minicomputern, wie Arduino und Raspberry Pi, kommt man ohne das Internet nicht mehr aus. Die Community ist online vernetzt. Viele Bastler und Entwickler publizieren ihre Projekte und Programme online und stellen die Daten der ganzen Welt zur Verfügung.

Internet-Connectivity, also die Verbindung zum Internet, ist natürlich im IoT-Bereich ein nötiges Tool. Der Buchstabe »I« steht ja stellvertretend für den Begriff Internet.

Beim Raspberry Pi aus dem vorherigen Kapitel haben Sie bereits gesehen, dass das Board Schnittstellen zum kabelgebundenen Ethernet und mit WiFi-Dongle eine drahtlose Kommunikation zur Verfügung stellt.

Im Arduino-Umfeld muss für das Standard-Arduino-Board, den Arduino Uno, ein zusätzliches Shield eingesetzt werden, um eine Netzverbindung zum hausinternen Netzwerk oder zum Internet aufzubauen. Dieses Shield wird im nachfolgenden Abschnitt beschrieben.

Drahtlose Verbindung und die Verbindung zu einem WLAN-Router erfordert keine Kabelverbindung und in vielen Haushalten, Büros oder Bastler-Räumen steht meist ein WLAN inklusive Zugang zum Internet zur Verfügung.

In Kapitel 3 werden ausführlich die ESP8266-Module von Espressif beschrieben, die bereits ein WiFi-Modul onboard beinhalten. Mit relativ wenig Aufwand können mit den ESP-Modulen Sensor-Anwendungen über die Arduino-Entwicklungsumgebung realisiert werden.

2.1  Ethernet-Shield


Mit dem Ethernet-Shield können Sie Ihren Arduino Uno über eine kabelgebundene Ethernet-Verbindung mit dem Internet verbinden.

Das Ethernet-Shield (Abbildung 2.1) ist das dienstälteste Shield für Ethernet-Kommunikation. Die aktuelle Version ist das Ethernet-Shield 2 (https://store.arduino.cc/arduino-ethernet-shield-2), das neben dem Ethernet-Anschluss in Form eines RJ45-Steckers noch einen Adapter für eine SD-Karte enthält.

Abb. 2.1: Arduino-Ethernet-Shield (Bild: arduino.cc)

Mit dem Ethernet-Shield können 10/100-MB-Netzwerkverbindungen aufgebaut werden. Der Onboard-Ethernet-Controller wird über den SPI-Port angesteuert (Serial Peripheral Interface).

Die Software für die Ethernet-Kommunikation mit dem Ethernet-Shield erfolgt über die sogenannte Ethernet-Bibliothek:

https://www.arduino.cc/en/Reference/Ethernet

Die Ethernet-Bibliothek ist in der Arduino-Entwicklungsumgebung standardmäßig installiert und kann direkt verwendet werden.

Dank der Standard-Arduino-Bauform des Ethernet-Shields können Sie weiterhin Sensoren und externe Bauteile und Module anschließen.

Das Ethernet-Shield ist bei vielen Elektronik-Lieferanten oder direkt im Arduino-Shop verfügbar. Neben dem Original-Board von Arduino sind auch etliche Ethernet-Shields von anderen Herstellern auf dem Markt.

Bei der Shield-Auswahl ist jeweils zu beachten, dass das Ethernet-Shield mit einem Ethernet-Controller vom Typ Wiz5100 ausgerüstet ist. Die Shields mit diesem Controller-Typ können mit der oben genannten Ethernet-Bibliothek angesteuert werden.

2.2  WiFi-Verbindung


Für die Realisierung einer drahtlosen Netzverbindung kommt man an den ESP8266-Modulen nicht vorbei. Diese kleinen und kostengünstigen Microcontroller-Module sind zum heutigen Zeitpunkt quasi die erste Wahl.

Die zentrale Hardware von Microcontroller-Modulen mit WiFi-Schnittstelle sind die ESP-Module mit integrierter Antenne. In Abbildung 2.2 ist ein Typ ESP8266-12 abgebildet, der direkt auf eine Leiterplatte gelötet werden kann.

Abb. 2.2: ESP8266-12

Für komplexere Anwendungen mit Netzzugang kann natürlich auch immer ein Raspberry Pi eingesetzt werden.

Boards mit den ESP8266-Modulen sind aber meist in kompakteren Bauformen verfügbar und eignen sich ideal als Sensor- oder Aktormodul. Sensormodule fühlen mit angeschlossenen Sensoren die Umwelt. Aktormodule sind Ausgangsmodule, die einen Relais- oder Motorausgang anbieten und für Schaltzwecke geeignet sind.

2.3  Arduino als Webclient


Ein Arduino Uno mit Ethernet-Shield wird in einer Anwendung als Webclient bezeichnet, wenn das Board Anfragen (Requests) an einen Webserver sendet.

Am Arduino ist in diesem Fall beispielsweise ein Licht- oder Temperatursensor angeschlossen. Der vom Arduino eingelesene Sensorwert wird dann an eine Webanwendung übermittelt.

Die Datenübermittlung erfolgt in Form eines URL-Requests mit Parametern an eine externe Webanwendung. Die übermittelten Parameter sind dabei die Sensorwerte vom Arduino-Board. Die externe Webanwendung selbst verarbeitet nach Aufruf des Webrequests durch den Webclient (das Arduino-Board) die gesendeten Daten. Die Daten können beispielsweise in einer Datenbank gespeichert werden.

Ein solcher Webrequest mit Parametern kann so aussehen:

http://meinwebserver.com/sensor.php?sensorid=55&light=456;

Der Parameter sensorid identifiziert das Sensormodul oder den Sensor und der Parameter light ist der gemessene Wert.

Die Datenverarbeitung auf dem externen Server erfolgt in diesem Beispiel in der PHP-Datei sensor.php. Der Webclient selbst kann diese Verarbeitung nicht beeinflussen und hat auch keinen Einblick in diesen Programmcode. Falls die Webanwendung nach der Verarbeitung eine Rückmeldung sendet, weiß der Webclient, ob die Datenübertragung erfolgreich war.

Stückliste (Webclient)
  • 1 Arduino Uno

  • 1 Ethernet-Shield

  • 1 Ethernet-Kabel

  • Drahtbrücken

Für den ersten Test des Webclients wird der Arduino mit Ethernet-Shield am Netzwerk angeschlossen. Als Testprogramm kann der Beispielcode Webclient aus der Ethernet-Bibliothek geladen und ausgeführt werden.

Im Beispielcode wird eine Suchanfrage mit dem Suchbegriff »arduino« bei Google (www.google.com) ausgeführt und die Antwort im seriellen Monitor dargestellt.

Die Suchanfrage hat folgende URL:

http://www.google.com/search?q=arduino

Netzwerktechnisch arbeitet der Webclient mit einer dynamischen Vergabe einer IP-Adresse durch den internen Router. Falls DHCP fehlschlägt, wird die IP-Adresse, die im Sketch eingetragen ist, verwendet.

Meine Konfiguration sieht wie folgt aus:

IPAddress ip(10, 0, 1, 222); IPAddress myDns(10, 0, 1, 1);

Im seriellen Monitor kann nun der Webrequest an die Google-Website betrachtet werden (Abbildung 2.3).

Im Beispiel ist zu sehen, dass der Router dem Webclient die IP-Adresse 10.0.1.56 zugewiesen hat.

Abb. 2.3: Ethernet-Webclient – Webrequest im seriellen Monitor

Nach Aufruf des Google-Webservers sendet dieser die Antwort:

HTTP/1.1 200 OK

Der Error-Code 200 sagt aus, dass die Anfrage korrekt angekommen und ausgeführt wurde.

Der einfache Webclient mit dem Ethernet-Shield war also erfolgreich.

Im Code des Webclients sind die Daten für den Zielserver in einzelnen Zeilen abgelegt. Für den Server selbst wird die Serveradresse in der Variablen char server[] gespeichert (smarthome_kap2_webclient.ino).

char server[] = "www.google.com"; // name address for Google (using DNS)

Den Suchstring

/search?q=arduino

finden Sie nach der Initialisierung:

// if you get a connection, report back via serial: if (client.connect(server, 80)) { Serial.print("connected to "); Serial.println(client.remoteIP()); // Make a HTTP request: client.println("GET /search?q=arduino HTTP/1.1"); client.println("Host: www.google.com"); client.println("Connection: close"); client.println(); } ...

Für eigene Anwendungen kann dieser Teil des Webclient-Programms individuell angepasst werden. Dazu können Sie den Aufruf auch etwas aufteilen und in einzelnen Zeilen darstellen.

Für den Serveraufruf mit Parametern

http://meinwebserver.com/sensor.php?sensorid=55&light=456;

sieht der Programmteil dann so aus:

// if you get a connection, report back via serial: if (client.connect(server, 80)) { Serial.print("connected to "); Serial.println(client.remoteIP()); // Make a HTTP request: client.print("GET /sensor.php?sensorid=55&"); client.print("light=456"); client.println(" HTTP/1.1"); client.println("Host: www.meinserver.com"); client.println("Connection: close"); client.println(); } ...

2.4  Arduino als Webserver


Ein Aufruf einer Webadresse, wie beispielsweise die Buchwebsite unter https://555circuitslab.com löst eine Antwort auf einem Webserver aus. Die Antwort ist eine Seite im HTML-Format, wird an den Anfrager zurückgesendet und kann im...