65316-9 Titelei 26.10.15 15:02 Seite 3

TURN ON YOUR CREATIVITY

INTERNET OF THINGS

INHALT Bevor es losgehtt ..................................................................................................................... 6 Das Pretzel Board ....................................................................................................................7 Technische Daten ................................................................................................................... 8 Bauteile im Lernpaket............................................................................................................ t 9 1

Das Modul kennenlernen ..................................................................................................... 10 1.1 Grundlegende AT-Befehle....................................................................................... 10 1.2 Automatische Konfiguration ..................................................................................17 1.3 Erkennung eines Netzwerks .................................................................................. 23

2 UDP und IP .............................................................................................................................26 2.1 Daten zwischen Board und PC mit UDP austauschen ...................................... 28 2.2 Daten senden und empfangen mit UDP ...............................................................31 2.3 Eine LED mit UDP schalten .................................................................................... 33 2.4 Netzwerkschalterr..................................................................................................... 35 2.5 Analoger Sensor....................................................................................................... r 38 2.6 Netzwerk-Pager .......................................................................................................41 3 TCP-Clientt .............................................................................................................................. 44 3.1 Ein Browser ..............................................................................................................44 3.2 Eine Internetuhrr ....................................................................................................... 46 3.3 Temperaturanzeige .................................................................................................49 3.4 Mediacenter-Steuerung .......................................................................................... 52 4 TCP-Serverr ............................................................................................................................. 58 4.1 TCP-Webserverr ......................................................................................................... 58 4.2 Autonomer Webserver.............................................................................................60 4.3 Webseite mit Buttons ..............................................................................................62 4.4 Einschub: HTML-Crashkurs ....................................................................................64 4.5 RGB-LED über TCP steuern .................................................................................... 67 4.6 Lichtsensor .............................................................................................................. 70 4.7 GPIO Control.............................................................................................................. 72 4.8 Text to Display .......................................................................................................... 76 4.9 Einschub: Vom Internet aus auf das Board zugreifen ....................................... 78 5 ThingSpeak ............................................................................................................................ 82 5.1 ThingSpeak ............................................................................................................... 82 5.2 Twitch-Anzeige ........................................................................................................86 5.3 Twitter-Alarmanlage ...............................................................................................88 5.4 TalkBack ....................................................................................................................90 5.5 Cheerlights................................................................................................................92 5.6 Twitter-Feuermelder mit Talkback-Funktion ......................................................94 6 Anhang .................................................................................................................................100 6.1 At-Kommandos ......................................................................................................100

65316-9 Lernpaket IoT_04.indd 5

16.10.2015 12:29:27

6

BEVOR ES LOSGEHT Beim ersten Anschließen des Boards kann es vorkommen, dass der Computer den erforderlichen Treiber für den USB-to-Serial-Wandler nicht automatisch findet. Ist dies der Fall, sollten Sie den Treiber von der Seite www.iot.fkainka.de/driver herunterladen und manuell installieren. In der Arduino-Software können Sie dann den Port und als Board Arduino Nano (Prozessor: Atmega328) auswählen. Danach sollte der Controller voll einsatzbereit sein.

Die richtigen Einstellungen in der Arduino-Umgebung

Ich habe mit den Arduino-IDE-Versionen 1.6.4 — 1.6.5 gearbeitet. Ältere Versionen können Probleme verursachen. Die aktuelle Arduino-IDE-Version finden Sie auf der Internetseite www.arduino.cc Für manche Linux-Versionen existiert derzeit allerdings nur eine alte Version. Tipps, wie Sie dieses und andere Probleme lösen können, finden Sie auf der Internetseite www.iot.fkainka.de

65316-9 Lernpaket IoT_04.indd 6

16.10.2015 12:29:39

7

Dort finden Sie auch alle hier vorgestellten Beispiele und einiges Nützliches mehr. In dem Lernpaket befinden sich zwei Steckboards, die Sie, wie unten zu sehen, ineinander stecken können. Am besten ist es, wenn Sie das Pretzel Board und das Display wie im Bild auf die Steckboards stecken. Dadurch bleibt der meiste Platz für Experimente, während das WLAN-Modul hinten über das Steckboard hinausragt und das Display auf dem unteren Steckboard genug Platz hat. Das Micro-USB-Kabel hängt dann zwischen den Kontaktseiten und stört nur minimal. Detailliertere Aufbaubilder finden Sie im jeweiligen Kapitel.

Das Pretzel Board auf dem Steckboard mit Display

Das Pretzel Board Das Hauptelement dieses Lernpakets ist das Pretzel Board (Interner Name des Pretzel Boards ist NanoESP). Wie man an der Platine recht gut erkennen kann, besteht das Board aus zwei Komponenten. Bei der linken Hälfte handelt es sich um ein Arduino-kompatibles Mikrocontrollersystem, das mit dem Arduino Nano verglichen werden kann. Der rechte Teil ist das WLAN-Modul mit der Bezeichnung ESP8266. Diese beiden Komponenten kommunizieren über eine per Software generierte serielle Schnittstelle miteinander.

65316-9 Lernpaket IoT_04.indd 7

16.10.2015 12:29:39

10

1

DAS MODUL KENNENLERNEN In diesem ersten Kapitel geht es um die grundsätzlichen Funktionen des WLAN-Moduls. Das Modul wird über sogenannte AT-Kommandos gesteuert. Wie im Einleitungsteil erwähnt, finden Sie alle hier verwendeten Beispielprogramme auf der Webseite www.buch.cd mit Eingabe des Codes 65316-9. Am einfachsten ist es, Sie laden sich das komplette Zip-Verzeichnis herunter und kopieren den entpackten Ordner komplett in Ihren Sketchordner. Dann können Sie aus der Arduino-Oberfläche heraus alle Programme nacheinander komfortabel öffnen.

Programmdatei: P01_SoftwareSerial. ino

1.1 | Grundlegende AT-Befehle Einen ersten Eindruck von der Verwendung der AT-Befehle bekommt man am besten, indem man sie einfach ausprobiert. Deswegen werden Sie in diesem Abschnitt einige der grundlegenden Befehle des Moduls kennenlernen. Öffnen Sie hierfür das Programm P01_SoftwareSerial in der Arduino-IDE. Es handelt sich um ein sehr simples Programm, das nichts weiter tut, als alle Daten, die über die serielle Hardwareschnittstelle des Mikrocontrollers empfangen werden, über die selbst definierte Softwareschnittstelle an den ESP-Controller durchzureichen. Das Ganze funktioniert auch in umgekehrter Richtung. Wie man im Quelltext sehen kann, sind die beiden Anschlüsse der Softwareschnittstelle die Pins 11 und 12. Diese sollten in eigenen Projekten nicht als GPIO-Pins verwendet werden. Sie benötigen außerdem die SoftwareSerial-Library. Sie ist bei den meisten Arduino-Versionen schon vorinstalliert — falls nicht, sollten Sie die Library über den Manager herunterladen. Nachdem das Programm hochgeladen wurde, können Sie den seriellen Monitor der Arduino-Oberfläche starten. Bevor es losgehen kann, müs-

65316-9 Lernpaket IoT_04.indd 10

16.10.2015 12:29:41

11

sen Sie noch zwei wichtige Einstellung am Serial Monitor vornehmen, nämlich unten rechts in der Ecke die Baudrate auf 19200 stellen und in der Box links daneben die Einstellung CR und NL vornehmen. Nach dem Einstellen sehen Sie schon eine Meldung, nämlich ein AT und ein paar Zeilen darunter ein OK. Das Kommando AT wurde vom Mikrocontroller an das ESP-Modul gesendet und das Modul hat mit OK geantwortet. Daran können Sie erkennen, dass das WLAN-Modul funktioniert und einsatzbereit ist.

Bild 1.1: TerminalEinstellungen: CR und NL und eine Baudrate von 19200

1.1.1 | Grundlegende Befehle Einige grundlegende Befehle des Moduls können Sie testen, indem Sie einfach das Kommando eintippen und mit [Enter] an das Modul senden. Die Großschreibung des Befehls ist dabei von Bedeutung. Sie können Ihren ersten eigenen Befehl übermitteln, indem Sie AT

in den seriellen Monitor eintippen und [Enter] drücken. Das hochgeladene Programm reicht den Befehl an das ESP-Modul durch, welches wiederum mit AT und danach OK antwortet. Der nächste Befehl, den Sie testen können, lautet: AT+GMR

Mit diesem Befehl wird die aktuelle Firmware und Versionsnummer ausgegeben. Mit dem Befehl AT+RST

65316-9 Lernpaket IoT_04.indd 11

16.10.2015 12:29:41

26

2

UDP UND IP In diesem Kapitel geht es um den grundsätzlichen Datenaustausch zwischen zwei Systemen über ein WLAN-Netzwerk. Dabei werden wir uns mit Themen wie IP, Ports und dem Protokoll UDP beschäftigen. Dazu müssen diese grundlegenden Begriffe zunächst erläutert werden. Was ist eine IP-Adresse? Eine IP-Adresse funktioniert wie eine Postadresse. Über sie kann ein Rechner im Netzwerk eindeutig identifiziert und adressiert werden. Eine IP-Adresse nach dem noch geläufigen IPv4-Standard sieht zum Beispiel folgendermaßen aus:

Es handelt sich um vier Zahlen oder genauer gesagt um vier Bytes. Das heißt, dass der Wert einer Zahl maximal 255 sein kann. Grundsätzlich gibt es lokale IP-Adressen, also IPs, die z. B. an die Rechner und Geräte in Ihrem Heimnetzwerk verteilt werden, und globale IPs. Lokale IPs werden in der Regel von Ihrem Router verteilt. Sie fangen meist mit 192.168 an. Die darauf folgende Zahl ist von Router zu Router unterschiedlich. Wenn das Pretzel Board als Access Point fungiert und sich Rechner in sein Netzwerk einklinken, bekommen die PCs eine Adresse, die mit 192.168.4. beginnt. Damit ist zugleich ein Subnetzwerk aufgespannt. Fritz!Box-Router verteilen in der Regel lokale IP-Adressen nach dem Schema 192.168.178.X. Sie können Ihre IP herausfinden, indem Sie beispielsweise in Windows in der Eingabeaufforderung (unter Start -> Programme -> Zubehör -> Eingabeaufforderung) den Befehl ipconfig eingeben. Es erscheint eine längere Liste, die auch den Punkt IPv4-Adresse mit Ihrer lokalen IP im Netzwerk enthält. Globale IPs werden in der Regel vom Internetprovider vergeben. Sie sind die Adressen, über die Ihr Router im weltweiten Netzwerk zu erreichen ist. Der Router spannt dann das lokale Netzwerk auf und verteilt die Daten an die Clients. Eine Möglichkeit, Ihre globale IP herauszufinden, ist beispielsweise, die Internetseite http://www.meine-aktuelle-ip.de/ aufzurufen. Auf der Seite werden weitere von einem Webserver einsehba-

65316-9 Lernpaket IoT_04.indd 26

16.10.2015 12:29:42

27

re Daten dargestellt. Sie sind also nicht so anonym im Internet, wie Sie eventuell glauben. Was ist ein PORT? In Analogie zur Postadresse könnte ein Port so etwas wie die Haustür in einem Mehrfamilienhaus sein. Ein Rechner mit einer eindeutigen IP kann über verschiedene Ports verschiedene Dienste zur Verfügung stellen. Sie können über die IP den Server erreichen, aber über den Port müssen Sie auch den zu verwendenden Dienst wählen. Dies kann z. B. der Port 20 für die FTP-Datenübertragung sein oder auch der Port 23 für eine Telnet-Verbindung. Sie können den Port in der Regel frei wählen, allerdings gibt es standardisierte Ports, die den Umgang mit Webanwendungen leichter machen. Eine Liste der standardisierten Ports finden Sie unter https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports Was ist UDP? UDP ist die Kurzform von User Datagram Protocol. Es handelt sich um ein minimales, verbindungsloses Netzwerkprotokoll. Das heißt, im Grunde ist es minimalistischer und einfacher als andere Internetprotokolle wie z. B. TCP, mit dem wir uns später beschäftigen werden. Der Vergleich ist zu diesem Zeitpunkt noch nicht besonders einfach, aber Sie können sich Folgendes über die Eigenschaften des Protokolls merken: 쏹 UDP ist Broadcast-fähig. 쏹 Es findet keine Überprüfung der Daten auf Richtigkeit oder Fehlerkorrektur statt. 쏹 Es gibt also auch keine Garantie über das erfolgreiche Übermitteln von Daten. 쏹 Es gibt auch keine Garantie dafür, dass die Daten nicht unterwegs verfälscht oder durch Dritte abgehört werden. 쏹 Es muss nicht erst eine Verbindung aufgebaut werden, sondern es ist ein schneller Datenaustausch möglich. 쏹 Es gibt kaum Übertragungsverzögerungsschwankungen. 쏹 Das Format eignet sich für z. B. VoIP (Voice over IP, also Telefon über das Internet).

65316-9 Lernpaket IoT_04.indd 27

16.10.2015 12:29:42

44

3

TCP-CLIENT Im letzten Kapitel ging es um das UDP-Protokoll, mit dem Daten auf einfache Weise gesendet und empfangen werden konnten. Mit dem Protokoll lässt sich bereits eine Vielzahl von Anwendungen realisieren. In diesem Kapitel werden wir uns mit dem TCP-Protokoll (Transmission Control Protocol) beschäftigen. Das Modul wird dabei die Rolle eines TCP-Clients annehmen. Dies ist die Rolle, die Ihr PC zuhause gegenüber einem Webserver einnimmt. Der Unterschied zwischen TCP und UDP lässt sich grob in folgenden Stichworten zusammenfassen: 쏹 Die Verbindung besteht nur zwischen genau zwei Geräten. 쏹 Die gesendeten Pakete werden auf Übertragungsfehler geprüft und gegebenenfalls korrigiert. 쏹 TCP wird vor allem beim Browsen im Internet verwendet. 쏹 Das Protokoll ist etwas langsamer als UDP, aber auch sicherer. Das Protokoll wird also von Ihrem PC und einem Webserver verwendet, von dem Sie eine Webseite laden wollen, um eine Verbindung zwischen den beiden Teilnehmern herzustellen. Die eigentlichen Webseiteninhalte werden anschließend mit dem HTTP-Format (Hypertext Transfer Protocol) übertragen. Wie genau, sehen Sie im folgenden Kapitel.

3.1 | Ein Browser Dieser Versuch verwendet wieder den bestehenden Aufbau mit dem LC-Display. Es geht um das Kennenlernen der Grundstrukturen der TCP-Kommunikation mithilfe des seriellen Monitors.

Progammdatei: P10_TCPBrowser.ino

65316-9 Lernpaket IoT_04.indd 44

Das Programm Das Programm ähnelt in der Funktionsweise dem SoftwareSerial-Programm vom ersten Versuch, stellt allerdings unter anderem die WLAN-Verbindung beim Start selbstständig her. So sparen Sie eine Menge Schreibarbeit und können schneller loslegen. Vergessen Sie nicht, die Daten Ihres Heimnetzwerks in das Programm einzutragen. Tippen Sie

16.10.2015 12:29:46

45

dann im seriellen Monitor die folgende Befehlszeile ein: AT+CIPSTART="TCP","www.example.com",80

Mit diesem Kommando stellen Sie eine TCP-Verbindung zu der Webseite www.example.com her. Der Port 80 ist der Standardport für HTTP-Anfragen. Nach der Bestätigung der Verbindung mit OK können Sie den nächsten Befehl eintippen, den Sie ja bereits kennen: AT+CIPSEND=40

Sie wollen nun nämlich eine Nachricht über die eben hergestellte Verbindung schicken. Wenn Sie mit > dazu aufgefordert werden, einen Text einzugeben, tippen Sie zunächst GET / HTTP/1.1

ein und drücken anschließend [Enter]. Das [Enter] erscheint nicht im Serial Monitor, aber das Modul hat es empfangen. Danach geht die Nachricht weiter mit: Host:www.example.com

gefolgt von zweimal [Enter]. Zurück kommt ein langer Text. Der erste Teil ist die Antwort des Servers und enthält ein paar Informationen für den Browser. Der Text nach ist die Webseite, die Sie auch sehen, wenn Sie die Seite www.example.com direkt aufrufen, hier allerdings in reiner Textform. Ein Browser würde diesen Text interpretieren und in einer uns geläufigen Form darstellen.

Bild 3.1: Auszug aus der Antwort des Webservers

65316-9 Lernpaket IoT_04.indd 45

16.10.2015 12:29:46

58

4

TCP-SERVER Nachdem Sie im vorangegangenen Kapitel etwas über die Verwendung des Moduls als TCP-Client erfahren haben, soll das Modul nun als eigener TCP-Server agieren. Praktischerweise gibt es auch dafür einen einfachen AT-Befehl, mit dem Sie diese komplexe Serveranwendung starten können. Das Modul verhält sich dann wie ein TCP-Server aus dem Internet, nur dass Sie das Senden der Webseite selbst programmieren müssen.

4.1 | TCP-Webserver Die ersten Gehversuche in Sachen TCP-Webserver geschehen ohne zusätzlichen Hardwareaufbau. Zunächst probieren Sie die wichtigsten Befehle einfach über den seriellen Monitor aus.

Programmdatei: P14_TCPServer.ino

Das Programm Ändern Sie wie bisher die WLAN-Daten und laden Sie das Programm auf Ihr Board. Dann starten Sie den Monitor. Es kann ein paar Sekunden dauern, bis die Meldung erscheint, dass das Board verbunden ist. Wenn die Erfolgsmeldung erschienen ist und die IP des Moduls angezeigt wird, können Sie im Serial Monitor mit dem ersten Befehl beginnen: AT+CIPMUX=1

Mit diesem Befehl lassen Sie mehrere Verbindungen zum Modul zu. So können mehrere Rechner auf den Webserver zugreifen. Mit dem nächsten Befehl starten Sie den Webserver: AT+CIPSERVER=1,80

Der Parameter 1 bedeutet, dass der Server gestartet wird. Mit 0 beenden Sie einen Server wieder. Die Zahl 80 steht für den Port, unter dem der Server erreichbar ist. Vom Browser gesendete HTTP-Anfragen werden generell über den Port 80 gesendet. Sie können nun einen Browser Ihrer Wahl öffnen und in die Adressleiste die IP des Moduls eintippen und mit [Enter] bestätigen. Im Browser erscheint zunächst eine Lademeldung, aber im Serial Monitor können Sie

65316-9 Lernpaket IoT_04.indd 58

16.10.2015 12:29:50

59

eine Veränderung beobachten. Sie sehen eine Request-Anfrage ähnlich der, die Sie schon manuell versendet haben.

Der Browser wartet nun auf eine Antwort und zeigt so lange ein Ladezeichen, bis die Verbindung wegen Timeouts getrennt wird. Sie können dem Browser mit einer Variante eines bekannten Befehls eine Nachricht schicken:

Bild 4.1: Die BrowserAnfrage

AT+CIPSEND=0,7

Der Parameter 0 gibt den Client an, an den die Nachricht geschickt werden soll. Das ist nötig, weil mehrere Verbindungen erlaubt sind und deswegen auch mehrere Clients verbunden sein können. Der zweite Parameter, hier 7, gibt erneut die Anzahl zu sendender Zeichen an. Es erscheint > und Sie können ein einfaches Hallo

eintippen und mit [Enter] senden. In Ihrem Browser wird sich zunächst einmal dennoch nichts ändern, denn Sie müssen die Verbindung erst schließen. Verwenden Sie dazu den Befehl: AT+CIPCLOSE=0

Nun können Sie im Browser Hallo sehen. Damit haben Sie eine erste Webserver-Anwendung realisiert. Dieser erste Test zeigt viel über die genauen Vorgänge der Kommunikation im Internet. Die Darstellung des „Hallo“ Im Browser ist dabei noch recht einfach, da ein simpler Text statt einer komplexen HTML-Seite gesendet wurde. Für eine richtige HTML-Seite müssten Sie manuell einen ganzen Header sowohl für den Get-Request als auch für den HTML-Text schreiben. Diese Mühe möchte ich Ihnen im ersten Test allerdings ersparen.

65316-9 Lernpaket IoT_04.indd 59

16.10.2015 12:29:50

82

5

THINGSPEAK In diesem letzten Kapitel geht es um ein ganz neues Thema, nämlich um die Plattform ThingSpeak. Diese Seite wurde speziell für das Internet of Things entwickelt und hält verschiedene praktische Funktionen für Sie bereit. Unter anderem können Sie mithilfe dieser Seite auf einfache Weise eine Langzeitüberwachung von Messsensoren protokollieren und in übersichtlicher Form darstellen lassen. Solange Sie mit dem Internet verbunden sind, sparen Sie das Speichern von Werten auf einem externen Speichermedium. Außerdem können Sie verschiedene Ansteuerungen über die Internetseite realisieren. Wie genau diese einzelnen Funktionen aussehen, werden Sie im Laufe des Kapitels erfahren.

5.1 | ThingSpeak Bevor Sie also, wie sonst üblich, den Aufbau und das Programm angehen, müssen Sie sich einen Account auf der Seite www.ThingSpeak.com erstellen. Loggen Sie sich dann mit Ihren Nutzerdaten unter dem Punkt Sign In ein. Sie sehen eine Seite, die Ihre Channels (Kanäle) zeigt. Da Sie noch keine Kanäle haben, wird diese Seite ziemlich leer aussehen. Klicken Sie auf New Channel und vergeben Sie einen Namen, z. B. Light, denn Sie werden in diesem Projekt die Helligkeit messen. Unter dem Punkt Field1 können Sie einen Namen für das Feld vergeben, evtl. Brightness. Alle anderen Felder können vorerst leer bleiben.

65316-9 Lernpaket IoT_04.indd 82

16.10.2015 12:29:56

83

Klicken Sie auf Save Channel um die Einstellungen zu speichern. Sie werden zu der Seite Ihres Channels weitergeleitet, auf der aber nur ein leeres Diagramm zu sehen ist. Klicken Sie in dem darüber liegenden Reiter auf API-Keys. Die Zahlen und Buchstabenfolge, die Sie unter dem Punkt Write API Key finden, werden Sie gleich benötigen.

Bild 5.1: Erstellen eines Kanals auf der ThingSpeak-Seite

Der Aufbau dieses Versuchs besteht aus dem Sensor am analogen Eingang A6 und dem Display. Ein Spannungsteiler mit 10-kΩ-Widerstand und Fototransistor ermöglicht das Messen der aktuellen Helligkeit. Sie können aber auch den Temperatursensor verwenden. Die Schaltung bleibt fast die gleiche, nur dass Sie den Lichttransistor durch den schwarzen NTC ersetzen. Die Polung ist beim NTC beliebig.

65316-9 Lernpaket IoT_04.indd 83

16.10.2015 12:29:56

100

6

ANHANG 6.1 | At-Kommandos

Befehl Grundlegendes Testbefehl Reset Firmware-Infos Echo An/Aus WLAN-Befehle WLAN-Modus (1 = Client, 2 = AP, 3 = Dual) WLAN-Netzwerke suchen WLAN verbinden WLAN trennen WLAN-Access-Point-Einstellungen IP-Adresse ausgeben DHCP aktivieren/deaktivieren Automatisch mit WLAN verbinden MAC-Adresse der Station ändern IP-Adresse einstellen (Station) IP-Adresse einstellen (Access Point) Starte SmartConfig Stoppe SmartConfig Kommunikation Funktion Ping Mehrere Verbindungen zulassen Datenmodus (0=Transparent, 1=Datenmodus) Struktur empfangener Daten Verbindung aufbauen Daten senden Verbindung trennen Server-Befehle Server starten Server beenden Server-Status & verbundene Clients Server-Timeout festlegen Verbundene Clients anzeigen

65316-9 Lernpaket IoT_04.indd 100

Schreibweise AT AT+RST AT+GMR ATE

AT+CWMODE= AT+CWLAP AT+CWJAP=““,““ AT+CWQAP AT+CWSAP=““,““[,,] AT+CIFSR AT+CWDHCP= AT+CWAUTOCONN= AT+CIPSTAMAC= AT+CIPSTA= AT+CIPAP= AT+CWSTARTSMART= AT+CWSTOPSMART

AT+PING= AT+CIPMUX= AT+CIPMODE= +IPD,,: AT+CIPSTART=““,““, AT+CIPSEND=, AT+CIPCLOSE=

AT+CIPSERVER=1, AT+CIPSERVER=0 AT+CIPSTATUS AT+CIPSTO= AT+CWLIF

16.10.2015 12:30:00