Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Download    Reaktionen    Spiele    Gadgets    Kontakt   




<<< Physical computing         Einführung >>>

Internet der Dinge (Internet Of Things, IOT)

Das Video


Fernbedienung

In dem vorherigen Kapitel zu Physical computing haben wir gelernt, wie Peripheriegeräte über GPIOs angesteuert werden können. Dieses Kapitel ist eine Schritt für Schritt Anleitung, wie diese Peripheriegeräte über einen Browser angesteuert werden können. dazu wird lediglich ein zweites Gerät mit Internetanbindung benötigt.
Die verwendeten Programmiersprachen sind Perl, C und HTML (HyperText Markup Language).

Peripherie

Vier unterschiedliche "Peripheriegeräte" werden in diesem Kapitel verwendet: LEDs, Servos, eine H-Brücke und zwei Schalter als einfachste Form eines Sensors.

Raspberry Pi GPIO numbers
Abbildung 1:
GPIO Nummern bei Verwendung der WiringPi Software, erhältlich auf drogon.net. GPIO 7, 8, 9, 10, 11 und 16 werden beim Bootvorgang auf HIGH-Pegel gesetzt!
Der interne Pullup-Widerstand an GPIO 8 und 9 kann nicht per Software deaktiviert werden.
Connecting LEDs to a Raspberry Pi
Abbildung 2:
Die LEDs sind über 2kΩ Reihenwiderstände zwischen GPIO und Masse angeschlossen.
R1 - R 4 = 2kΩ
Connecting Servos to a Raspberry Pi
Abbildung 3:
Die Steuerleitungen der Servos (üblicherweise Orange oder Weiß) sind direkt mit den GPIOs verbunden. Masse der Servos (üblicherweise Braun oder Schwarz) und des Raspberry Pi sind ebenfalls direkt verbunden. Plus der Servos (üblicherweise Rot) sind mit einer 6V Batterie verbunden. Minus dieser Batterie ist ebenfalls mit Masse der Servos und des Raspberry Pi verbunden.

Connecting LEDs to a Raspberry Pi
Abbildung 4:
Eine H-Brücke wird verwendet, um einen Elektromotor mit wechselnder Polung ansteuern zu können.
T1, T3 = IRF9Z34N
T2, T4 = IRLZ24N
T5, T6 = 2N7000
R1, R2 = 100kΩ
R3, R4 = 1kΩ
R5, R6 = 16kΩ
Beachtet, dass diese einfache H-Brücke nur für kleine Lasten geeignet ist (<200mA)!
Im Kapitel zu H-Brücken findet ihr Schaltkreise für höhere Lasten.
Connecting LEDs to a Raspberry Pi
Abbildung 5:
Die Schalter sind über 16kΩ-Widerstände mit den GPIOs verbunden (R2 und R4). Ist ein Pin irrtümlich auf Ausgang geschaltet während der Schalter geschlossen ist, so wird euer Raspberry Pi nicht gleich zerstört. Fehlerfreie Software gibt es nicht! Bei dem zweiten 16kΩ-Widerstand (R1 und R3) handelt es sich um Pullup-Widerstände, deren zweites Ende mit dem +3.3V-Pin des Raspberry Pi verbunden ist.
Beachtet, dass die internen Pullup-Widerstände an GPIO 8 und 9 nicht per Software deaktiviert werden können, womit diese Schaltung an P1-3 und P1-5 nicht funktioniert! Der interne Pullup-Widerstand an diesen Pins beträgt etwa 1.5kΩ, weshalb auch dann ein HIGH-Signal an diesen beiden Pins erkannt wird, wenn der Schalter geschlossen ist!
Raspberry Pi camera module
Abbildung 6:
Ein Kameramodul kann hilfreich sein, um aus der Ferne nachzusehen, ob alles wie gewünscht von eurem ITO-Computer umgesetzt wurde.
Ihr könnt auch eine USB-KAmera verwenden. Um diese zu aktivieren müsst ihr im Scri "IOT-Raspberry.pl" das # am Anfang der folgenden Zeile entfernen:
#system("avconv -f video4linux2...
Das Raspberry Kameramodule muss deaktiviert werden, Fügt dazu ein # am Anfang der folgenden Zeile ein:
system("raspistill -w 320...

Warnung!

Die in diesem Kapitel vorgestellte Software ermöglicht euch, eigene Experimente zum "Internet der Dinge" mit einem Raspberry Pi zu starten. Die Software ist nicht für produktiven Einsatz konzipiert, da sämtliche Befehle über meinen Internetserver laufen! Lest dieses Kapitel sorgfältig, um zu lernen, wie ihr euren eigenen IOT-Server einrichten könnt.

Raspberry Pi vorbereiten

Wie Raspbian auf einer SD-Karte installiert werden kann, ist auf der Homepage der Foundation ausführlich beschrieben.
Anschließend gibt es zwei Arten, die "Internet der Dinge" (Engl. Internet Of Things, kurz IOT) Software zu installieren:

Nur 3 Befehle: Der einfache Weg...

Starte den Raspberry Pi in den Kommandozeilen-Modus und tippe:

wget -N http://www.homofaciens.de/download/IOT/InternetOfThings.sh
chmod u+x InternetOfThings.sh
./InternetOfThings.sh

Solltest du am Ende der Installation den manuellen Start des Scripts gewählt haben, musst du zum Start der Software die folgenden Befehl eingeben:

cd DirectoryToSript; sudo ./IOT-Raspberry.pl

Hast du dich entschieden, das Script mit dem Namen "IOT-Raspberry.pl" automatisch zu starten, must du deinen Raspberry Pi lediglich neu starten, einen Browser auf einem zweiten Computer öffnen und zur folgenden Adresse leiten:
http://robospatium.de/IOT/IOT-Status.pl
Mit dem automatischen Start beim Bootvorgang können Tastatur, Maus und Bildschirm vom Raspberry Pi getrennt werden, womit ihr einen sehr kompakten Internet Of Things-Computer erhaltet. Den Raspberry Pi könnt ihr über den Browser herunterfahren bevor ihr das Netzteil entfernt.

...und was dabei passiert

Zusätzliche Softwarepakete werden für den Beispielcode aus diesem Kapitel benötigt. Stellt sicher, dass euer Raspberry Pi mit dem Internet verbunden ist, öffnet ein Terminalfenster (Menu -> Accessoires -> Terminal) und gebt ein:

cd /home/pi
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

GPIOs mit C schalten

Der Kompiler "gcc" übersetzt den Quellcode in eine ausführbare Datei im Binärformat. Die beiden Beispiele in diesem Kapitel können als Ausgangspunkt für eure eigenen Experimente zur GPIO-Programmierung dienen. Zeilen die mit einem doppelten Querstrich"//" beginnen, sind Kommentarzeilen und gehören nicht zum ausführbaren Code. Kopiert den Quellcode des ersten Beispiels in den Texteditor "Leafpad" (Menu -> Accessoires -> Leafpad) und speichert die Datei als "/home/pi/GPIO-pwm.c".


Öffnet ein Terminalfenster (Menu -> Accessoires -> Terminal) und gebt ein:

cd /home/pi
gcc GPIO-pwm.c -lwiringPi -o GPIO-pwm

Sollte die Kompilierung ohne Fehler beendet werden, so könnt ihr die neu erstellte binäre Datei in dem Terminalfenster starten:

sudo ./GPIO-pwm&

Jetzt läuft das Programm im Hintergrund und ihr könnt die GPIOs mit Pulsweitensignalen ansteuern. Der dazu nötige Befehl startet mit einem ">" gefolgt von einem Leerzeichen und dem Ordnernamen "/dev/GPIO-pwm/" und erzeugt eine Datei mit dem Muster "GPIO_Nummer-PWM_Wert". Der erste Teil des Dateinamens gibt die GPIO-Nummer an (zwischen 0 und 17) und der zweite Teil repräsentiert den Wert des Pulsweitensignals (von 0 bis 200), beide getrennt durch ein "-". Dieses Beispiel schaltet die Grüne LED voll an:

> /dev/GPIO-pwm/12-200

Das zweite Beispiel schaltet die Gelbe LED auf halbe Intensität:

> /dev/GPIO-pwm/13-100

Versucht die Rote (GPIO 14) und Weiße (GPIO 0) LED auf die selbe Art anzusteuern.
Ähnlich wie die LEDs werden auch Servos über ein Pulsweitensignal angesteuert. Beachtet, dass der Tastgrad dabei zwischen 5 und 10% liegen muss, womit der Wert für PWM zwischen 10 und 20 (einschließlich) liegt! Dieses Beispiel bringt Servo 1 in Mittelstellung:

> /dev/GPIO-pwm/4-15

Mit Hilfe der H-Brücke kann die Polung an einem Elektromotor verändert werden. Zusätzlich kann die abgegebene Leistung über ein Pulsweitensignal geregelt werden. Beachtet, dass das Signal für die Polung entweder voll an (PWM=200) oder voll aus (PWM=0) sein muss! Das Beispiel schaltet den Motor mit Drehrichtung "200" auf ein Pulsweitensignal von 70:

> /dev/GPIO-pwm/3-200;> /dev/GPIO-pwm/2-70

Um den Zustand der beiden Schalter abfragen zu können, wird ein zweites Programm benötigt:

Kopiert den Quellcode in "Leafpad" und speichert die Datei als "/home/pi/GPIO-status.c". Startet die Kompillierung mit:

cd /home/pi
gcc GPIO-status.c -lwiringPi -o GPIO-status

Um den Status von Schalter 1 (der mit GPIO 15 verbunden ist) abzufragen, müsst ihr folgenden Befehl eingeben:

sudo ./GPIO-status 15
Switch at GPIO 15 is CLOSED

Gleiches gilt für Schalter 2, der an GPIO 16 angeschlossen ist:

sudo ./GPIO-status 16
Switch at GPIO 16 is OPEN

Schalten der GPIOs mit Pi-blaster

Wenn ihr das obige C-Programm verwendet, um die GPIOs mit Pulsweitensignalen anzusteuern, dürfte euch auffallen, dass die Pulse nicht allzu stabil ausfallen, weshalb die Servos immer leicht um den Sollwert zittern oder die LEDs etwas flackern. Ein gutes Programm, das diese Probleme beseitigt, ist Pi-Blaster, das ebenfalls in C geschrieben wurde und dessen Quellcode frei erhältlich ist. Pi-blaster verwendet DMA-Kanäle, um stabile Pulsweitensignale zu erzeugen, wodurch der grafische Modus (Desktop) des Raspberry Pi gestört wird, weswegen Anfänger gut überlegen sollten, ob sie diese Software installieren! Ich verwende für die weiteren Schritte in diesem Tutorial daher pi-blaster nicht, womit ihr diesen Abschnitt auch überspringen könnt. Die Installation erfolgt im Terminal wie folgt:

cd /home/pi
sudo apt-get update
sudo apt-get install autoconf
wget http://www.homofaciens.de/download/pi-blaster-master.zip
unzip pi-blaster-master.zip
cd pi-blaster-master
./autogen.sh
./configure
make
sudo make install

Ihr habe unter Umständen bemerkt, dass der Download nicht von der Originalquelle auf github (wget https://github.com/sarfata/pi-blaster/archive/master.zip) erfolgt. Die einzige Änderung die ich im Quellcode (pi-blaster.c) vorgenommen habe ist das Ersetzen von
#define CYCLE_TIME_US 10000
durch
#define CYCLE_TIME_US 20000
um ein Pulsweitensignal mit einer Grundfrequenz von 50Hz zu erhalten, womit Servos angesteuert werden können.
Mit pi-blaster können die GPIOs über die Kommandozeile (Terminalfenster) angesteuert werden. Der Tastgrad kann zwischen 0 und 1 variiert werden. Servo 1 wird mit folgendem Befehl in Mittelstellung gebracht:

echo "23=0.075" > /dev/pi-blaster

Servo 2 auf Maximal mit:

echo "24=0.05" > /dev/pi-blaster

Die Weiße LED kann auf eine Intensität von 15% geregelt werden mit:

echo "17=0.15" > /dev/pi-blaster

Die Weiße LED kann ausgeschaltet werden mit:

echo "17=0" > /dev/pi-blaster

Nach der Installation von pi-blaster, startet euer Raspberry Pi eventuell nicht mehr in den Desktop-Modus! Die Deinstallation erfolgt mit den Befehlen:

cd /home/pi/pi-blaster
sudo make uninstall

Schalten der GPIOs mit einem Browser unter der Verwendung von Perl

Perl ist eine interpretierte Programmiersprache, womit der Quellcode vor Ausführung nicht kompiliert werden muss. Viele Internetserver verwenden Perl, um dynamische Inhalte zu erzeugen. Für die hier verwendeten Scripts wird ein zusätzliches Softwarepaket benötigt. Gebt in einem Terminalfenster die folgenden Befehle ein:

sudo apt-get update
sudo apt-get install libwww-perl

Drei Perl-Scripts - eines auf dem Raspberry Pi und zwei auf einem Internetserver - werden benötigt, um die GPIOs über einen Browser schalten zu können. Dieses Script läuft auf dem Raspberry Pi:

Kopiert den Quellcode in "leafpad" und ändert das Standard-Passwort in der folgenden Zeile:
my $password = "TypeYourPassWordHere";
Tippt euer neues Password zwischen den Anführungszeichen z. B.:
my $password = "ThisIsMyPersonalPassword";
Beachtet, dass nur alphanumerische Zeichen ohne Leerzeichen für euer Passwort gestattet sind. Das Passwort muss geändert werden, um Konflikte mit anderen Raspberry Pis zu verhindern, die ebenfalls über meinen Server verbunden sind, da das Passwort gleichzeitig zur Identifikation eures Raspberry Pis verwendet wird!
Speichert die Datei dann unter dem Namen "/home/pi/IOT-Rasperry.pl".
Um die Datei ausführbar zu machen, müsst ihr in einem Terminal die folgenden Befehle eingeben:

cd /home/pi
chmod u+x IOT-Raspberry.pl

Startet das Script mit:

sudo ./IOT-Raspberry.pl

Beachtet, dass das Script auf eurem Raspberry Pi mit Root-Rechten ("sudo") gestartet werden muss, da die GPIOs über Systemaufrufe der zuvor behandelten C-Programme angesteuert werden!
Ist euer Raspberry Pi mit dem Internet verbunden, so gibt das Script die von dem auf dem Internetserver laufenden Script "IOT-Command.pl" empfangenen Befehle mit einem abschließenden "_OK" aus:

sudo ./IOT-Raspberry.pl
Switch 1 is CLOSED
Switch 2 is CLOSED
Script answer="_OK" at Thu Jan 22 16:26:59 2015
Script answer="_OK" at Thu Jan 22 16:27:09 2015
Script answer="_OK" at Thu Jan 22 16:27:19 2015

Browser interface for the Internet Of Things
Abbildung 7:
Jetzt könnt ihr die Peripherie an eurem Raspberry Pi über einen Browser unter der folgenden Adresse ansteuern:
http://robospatium.de/IOT/IOT-Status.pl
Gebt das Passwort ein, das ihr in dem Script "IOT-Raspberry.pl" vergeben habt und klickt auf "Send PW". War das Passwort richtig, so könnt ihr die GPIOs durch anklicken der Schaltflächen steuern. Beachtet, dass eine Pause von bis zu 30 Sekunden besteht!
Der Status der beiden Schalter wird alle 15 Sekunden automatisch aktualisiert oder wann immer ihr einen neuen Befehl übermittelt oder die Schaltfläche "Resend instruction set" anklickt.
Bedenkt, dass ihr über meinen Internetserver mit eurem Raspberry Pi verbunden seid! Euer Passwort ist nur mit schwacher Verschlüsselung auf meinem Server gespeichert und ich kenne den Schlüssel, weshalb ich euren Raspberry Pi ebenfalls über einen Browser steuern könnte, so ich es denn wollte (aber ich verspreche es nicht zu machen). Alle anderen Nutzer werden durch das Passwort ausgesperrt. Verwendet also ein Passwort das nicht leicht zu erraten ist, da andernfalls ein anderer Nutzer die Kontrolle über euren IOT-Raspberry Pi übernehmen kann!

Die Bilder von eurem Raspberry Pi werden ebenfalls auf meinem Server gespeichert (zumindest für einige Minuten)! Selbstverständlich könnte ich mir diese ebenfalls ansehen (aber ich verspreche auch das nicht zu machen). Die Schnappschüsse werden von einem "cron job" nach einigen Minuten gelöscht.
Behaltet im Auge, dass es sich hier um einen experimentellen Weg zur Erschaffung eines IOT-Computers handelt. Die verwendete Software soll euch Einblicke geben, was unter einer bunten Benutzeroberfläche so gemacht werden könnte.
Wollt ihr auch mich von eurem "Internet der Dinge" aussperren, so müst ihr zwei Scripts auf eurem eigenen Internetserver speichern. Das Erste ist IOT-Command.pl:

und das Zweite IOT-Status.pl

Speichert diese beiden Scripts in einem Verzeichnis eures Servers und ersetzt "http://robospatium.de/IOT/IOT-Status.pl" mit eurer Internetadresse in der Datei "IOT-Status.pl" (4 Zeilen). Macht die beiden Scripts zu ausführbaren Dateien mit Hilfe des Befehls "chmod u+x *.pl" in einer secure shell (ssh) Verbindung!
Das Script "IOT-Raspberry.pl" muss ebenfalls modifiziert werden, damit dieses auf euren Server zugreift (ersetzt "http://robospatium.de/IOT/IOT-Status.pl" auch hier mit euerer Adresse)!

Deinstallation

Habt ihr während der Installation über das Script den automatischen Start der IOT-Software ausgewählt, so wird "IOT-Raspberry.pl" im Hintergrund ausgeführt. Dieses Script wiederum startet das Programm "GPIO-pwm" ebenfalls im Hintergrund. Beide Prozesse können mit den folgenden Befehlen beendet werden:

sudo killall IOT-Raspberry.pl
sudo killall GPIO-pwm

Soll die IOT-Software beim nächsten Systemstart nicht mehr aufgerufen werden, muss in der Datei "/etc/crontab" die Zeile:
@reboot     root    cd /home/pi/InternetOfThings;./IOT-Raspberry.pl
entfernt werden. Das könnt ihr manuell mit den Editor eurer Wahl machen oder durch folgenden Befehl:

sudo sed -i '/IOT-Raspberry.pl/d' /etc/crontab

Damit ist die IOT-Software nach dem nächsten Reboot deaktiviert. Wenn ihr auf den Festplattenspeicher angewiesen seid (etwa 1.8MB) könnt ihr das Installationsverzeichnis (üblicherweise "/home/pi/InternetOfThings") und das Script "InternetOfThings.sh" löschen.

Habt Spaß am Programmieren!

Die in diesem Kapitel verwendeten Programme geben euch Fernzugriff auf einige Grundfunktionen der GPIOs. Lernt mehr zum Thema Programmierung in C, Perl oder HTML, um Computerexperten zu werden, anstatt auf der Stufe "Rumklicker auf bunten Schaltflächen" zu bleiben. Solltet ihr Probleme mit der Installation oder Erweiterung der hier gezeigten Programme haben, hinterlasst einen Kommentar oder schreibt mir eine Mail. Da auch mein Tag nur 24 Stunden hat, kann ich nicht die Probleme lösen, die bei anderen Projekten die ihr gestartet habt, auftreten - sorry!


<<< Physical computing         Einführung >>>


Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Archiv    Download    Reaktionen    Spiele    Verweise    Gadgets    Kontakt    Impressum   





Twitter YouTube Hackaday Patreon TPO