Bert van Dam ist freiberuflicher Autor von Büchern, Kursen und Artikeln über PIC- und ARMMikrocontroller, Arduino, Raspberry Pi, Künstliche Intelligenz und die Programmiersprachen JAL, C, Assembler, Python und Flowcode.
ISBN 978-3-89576-305-2
Elektor-Verlag GmbH 52072 Aachen www.elektor.de
In diesem Buch stellen wir 35 interessante und nützliche Projekte vor, die demonstrieren, wie Sie selbst ein Internetof-Things-System anlegen können. Wir gehen auf die Hardware ein, einer perfekten Symbiose von Raspberry Pi und Arduino, und entwickeln die Software, die eine Steuerung über das Internet verwirklicht. Wir setzen dabei WLAN- und Funkverbindungen ein und vermeiden so einen Kabelsalat im Haus. Wenn Sie die Projekte aufbauen, verfügen Sie über ein vollständiges Internet-of-Things-System, mit dem Sie alles im Haus bedienen, steuern und überwachen können, zum Beispiel ob Post im Briefkasten steckt oder das Auto in der Garage steht. Sie können bequem vom Sofa aus das Licht einschalten oder die Alarmanlage aktivieren/deaktivieren. Durch die ausführlichen Erläuterungen wird es Ihnen ein Leichtes sein, Projekte anzupassen, um zum Beispiel die Kaffeemaschine oder das Fernsehgerät aus der Ferne einund auszuschalten. Über den Index finden Sie leicht kreative Projekte, die Ihnen als Ausgangspunkt für eigene Entwicklungen dienen können, mit denen Sie selber alles, was Sie wollen, mit dem Internet verbinden können. Die Projekt-Software kann kostenlos von der ElektorWebseite heruntergeladen werden.
INTERNET OF THINGS
●
Das Internet of Things (Internet der Dinge) ist eine unumkehrbare Entwicklung. Wir möchten gerne alles im Haus mit unserem Smartphone oder Tablet erledigen – von Facebook bis Fernsehen, Lampen steuern oder die Heizungstemperatur einstellen.
INTERNET OF THINGS
BERT VAN DAM
Bert van Dam
35 PROJEKTE MIT RASPBERRY PI UND ARDUINO
LEARN
INTERNET OF THINGS
DESIGN
35 PROJEKTE MIT RASPBERRY PI UND ARDUINO
Bert van Dam LEARN
DESIGN
SHARE
SHARE
LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SH ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● GN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● S ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ●
●
Aus dem Niederländischen übersetzt von Rolf Gerstendorf.
© 2015: Elektor International Media BV Übersetzung der niederländischen Ausgabe „Internet of Things - 35 Projecten met Raspberry Pi en wireless Arduino“.
●
All Die in diesem Buch veröffentlichten Beiträge, insbesondere alle Aufsätze und Artikel sowie alle
Entwürfe, Pläne, Zeichnungen und Illustrationen sind urheberrechtlich geschützt. Ihre auch auszugsweise Vervielfältigung und Verbreitung ist grundsätzlich nur mit vorheriger schriftlicher Zustimmung des Herausgebers gestattet. Die Informationen im vorliegenden Buch werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Die in diesem Buch erwähnten Soft- und Hardwarebezeichnungen können auch dann eingetragene Warenzeichen sein, wenn darauf nicht besonders hingewiesen wird. Sie gehören dem jeweiligen Warenzeicheninhaber und unterliegen gesetzlichen Bestimmungen. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autor können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgend eine Haftung übernehmen. Für die Mitteilung eventueller Fehler sind Verlag und Autor dankbar.
●
ISBN 978-3-89576-305-2
Satz und Aufmachung: Jack Jamar Graphic Design | Maastricht (NL) Druck: Wilco Printing & Binding | Amersfoort (NL)
Elektor is part of EIM, the world’s leading source of essential technical information and electronics products for pro engineers, electronics designers, and the companies seeking to engage them. Each day, our international team develops and delivers high-quality content - via a variety of media channels (e.g., magazines, video, digital media, and social media) in several languages - relating to electronics design and DIY electronics. www.elektor.com
LEARN
15.107-IoT-05.indd 4
DESIGN
SHARE
18-05-15 11:22
Internet of Things 35 Projekte mit Raspberry Pi und Arduino
â—? Bert van Dam
an Elektor Publication LEARN
15.107-IoT-05.indd 3
DESIGN
SHARE
18-05-15 11:22
Inhalt Inhalt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1 Was Sie benรถtigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.1 Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2 SD-Karte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Raswik-Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.4 ISS-Shield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.5 Gratissoftware-Download . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.6 Internetanschluss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.7 Optional: ein Piccolino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2 Softwareinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.1 Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.1 Tastatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.2 Arduino-IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.3 IP-Adresse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.3.1 Feste IP-Adresse mit static lease . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.3.2 Feste IP-Adresse mit static IP . . . . . . . . . . . . . . . . . . . . . . . . . 19
Kabelverbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 WLAN-Verbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Windows-PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.1 Disk Imager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.2 Putty (SSH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2.3 Xming (Xwindow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.2.4 WinSCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2.5 GIMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2.6 Arduino-IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
15.107-IoT-05.indd 5
18-05-15 11:22
3 Kurzanleitungen für ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.1 Arduino in C++ programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.2 Funkkommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.3 Webdesign mit CSS (Stylesheets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.4 Ein Internetserver auf dem Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.4.1 Reguläre Seiten (HTML und CSS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.4.2 Programme mit CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 3.4.3 Internet und Intranet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4 Funkkommunikation über das Internet ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.1 LED an/aus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 4.2 Magnetschalter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.3 Voltmeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 4.4 Relative Luftfeuchtigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 4.5 Eine Lampe mit 10 Volt und 200 mA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 4.6 Strom detektieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 4.7 Motor mit einstellbarer Drehzahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
5 Alles ins Internet! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 5.1 Sie haben Post! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 5.2 Gebt den Pflanzen eine Stimme! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 5.3 Zeit zum Düngen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 5.4 Fernbedienung einer 230 V-Lampe mit Relais . . . . . . . . . . . . . . . . . . . . . . . . . 196 5.5 Steuerung einer Außenlampe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 5.6 Rauchalarm im Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 5.7 Tür oder Fenster offen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 5.8 Temperaturmessung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 5.9 Licht an im Kinderzimmer? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 5.10 Auto in der Garage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 5.11 Einbrecher im Haus! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 5.12 Funktioniert die Funkverbindung? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 5.13 Eigene Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 5.13.1. Namen und Anschlüsse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 5.13.2. Try/except beim Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 5.13.3. Techniken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 5.13.4. Ein Beispiel: Ist jemand am Kühlschrank gewesen? . . . . . . . . . . . . . . . . . . . 261
15.107-IoT-05.indd 6
18-05-15 11:22
6 Weitere (Internet-) Projekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 6.1 Über Internet ausschaltbare Türklingel mit Musik . . . . . . . . . . . . . . . . . . . . . . . 262 6.2 Arduino drahtlos programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 6.2.1 Vom SRF-Stick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 6.2.2 Vom Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 6.3 Funkverbindung testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 6.4 Drahtloses Codeschloss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 6.5 Funk-LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 6.6 Internet-Text auf dem LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 6.7 Internet-Lichterkette (15 bis 135 LEDs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 6.8 Terrarium-Überwachung im Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 6.9 E-Mail vom Raspberry Pi verschicken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 6.9.1 Von der Befehlszeile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 6.9.2 Von einem Python-Programm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 6.10 Der Browser schlägt Alarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 6.11 Messergebnisse in einer Grafik in HTML und CSS . . . . . . . . . . . . . . . . . . . . . . 319 6.12 Piccolino mit SRF-Shield des Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . 323 6.13 Menschensensor mit Internetmeldung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 6.14 Anti-Einbruch-Zeitschalter mit Lichtmessung . . . . . . . . . . . . . . . . . . . . . . . . 336 6.15 Ein 230 Volt-Relais am Raspberry Pi
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
6.15.1 Wechselstrom-Relais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 6.15.2 Bistabiles Relais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Anhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 1 Einstellbare Spannungsversorgung (1,2...13 Volt) . . . . . . . . . . . . . . . . . . . . . . . . 354 2 Raspberry Pi Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 3 No such file or directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 4 WinOscillo (kostenloses Software-Oszilloskop) . . . . . . . . . . . . . . . . . . . . . . . . . . 358 5 Python und PySerial auf dem PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 6 ASCII-Tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
15.107-IoT-05.indd 7
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
Einleitung Das Internet of Things ist ein Trend, der sich nicht mehr aufhalten lässt. Wir möchten alles im Haus mit unserem Tablet steuern, über Facebook fernsehen, wir wollen die Beleuchtung bedienen und die Heizungs-/Klimaanlage einstellen.
Bild 1. Lichtsteuerung mit dem Tablet.
In diesem Buch stellen wir 35 interessante Projekte vor, mit welchen Sie ein eigenes „Internet der Dinge“ aufbauen können. Wir beschäftigen uns dabei mit der Hardware (vornehmlich Raspberry Pi und Arduino) und der Software, die eine „Fernsteuerung“ über das Internet ermöglicht. Wir entwerfen interessante und praktische Webseiten, die auf Ihre eigenen Wünsche und Anforderungen zugeschnitten werden können, um nachzusehen, ob etwa Post im Briefkasten liegt, die Beleuchtung im Haus ein- oder ausgeschaltet ist oder der Feueralarm aktiviert wurde. In diesem einzigartigen Buch kommen zum ersten Mal Raspberry Pi, Arduino und Webseiten mit HTML und Stylesheets in verständlich beschriebenen und einfach zu realisierenden Projekten zusammen. Dieses besondere Buch darf in keinem Bücherregal fehlen! Bert van Dam
●8
15.107-IoT-05.indd 8
18-05-15 11:22
1 ● Was Sie benötigen
1 Was Sie benötigen Neben einem Tablet (Smartphone, Laptop oder PC) für die Bedienung brauchen Sie natürlich auch eine Hardware-Basis. In diesem Kapitel geht es um die wichtigsten Bausteine. Für die Projekte müssen Sie möglicherweise einige wenige Bauteile anschaffen.
1.1 Raspberry Pi
Selbstverständlich ist ein Raspberry Pi erforderlich, am besten das Modell B. Es hat mehr Speicher als Modell A und kann auch mehr.1 Der Raspberry Pi wird normalerweise „nackt“ ohne Zubehör geliefert. Wir gehen hier davon aus, dass Sie einen voll funktionsfähigen Raspberry Pi mit Netzteil, Maus, Tastatur und Monitor besitzen und wissen, wie man damit umgeht.2
1.2 SD-Karte
Der Raspberry Pi benötigt keine Festplatte, sondern eine SD-Karte für das Betriebssystem. Diese bietet dann auch noch Platz für eigene Dateien. Möchte man auch Elektronik an den Raspberry Pi anschließen, verwendet man am besten die SD-Karte aus dem Buch „Raspberry Pi - 45 Experimente mit Hard- und Software für Elektroniker“. Die Karte ist auch einzeln erhältlich, man kann sie ohne Änderungen für alle Projekte in diesem Buch verwenden. Wenn ein Arduino über den Raspberry Pi programmiert werden soll, muss dort noch die Arduino-IDE installiert werden. Dies wird im Kapitel 2.1.2 beschrieben. Zwingend notwendig ist das aber nicht. Sie können optional auch die SD-Karte aus dem Raswik-Set verwenden (siehe folgendes Kapitel), allerdings nicht für die Projekte 6.1 und 6.15. Diese funktionieren nur mit der Karte aus dem Raspberry-Pi-Buch.
1
Modell A ist preisgünstiger, hat aber keinen Anschluss für ein Internetkabel. Sie können zwar einen USB-WLAN-Adapter anschließen, aber angesichts nur eines einzigen USB-Ports bleibt dann keine Möglichkeit, noch ein weiteres Gerät anzuschließen. Viele USB-WLAN-Adapter arbeiten nicht an einem Hub. Modell A ist nur sinnvoll, wenn man kein Internet verwenden will oder der Raspberry Pi ausschließlich an einem LAN „headless“ ohne Maus und Tastatur arbeiten soll.
2
Ist das nicht der Fall, empfehlen wir das Buch „Raspberry Pi - 45 Experimente...für Elektroniker“, ISBN 978-3-89576-2734, als Referenz.
●9
15.107-IoT-05.indd 9
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
1.3 Raswik-Set
Das Raswik-Set umfasst alles, was nötig ist, um eine Funkverbindung zwischen Raspberry Pi und Arduino aufzubauen. Eigentlich könnte man den Arduino bei allen Projekten in diesem Buch auch über ein USB-Kabel mit dem Raspberry Pi verbinden, aber es ist bestimmt ziemlich umständlich, wenn man allerlei USB-Kabel quer durch das Haus zieht. In der Praxis erweist sich die drahtlose Funkverbindung als beste Lösung. Das Set besteht aus: 1. Slice of Radio - ein Funkmodul für den Raspberry Pi 2. XinoRF - ein Arduino Uno mit eingebautem Funkmodul 3. SD-Karte - Betriebssystem mit diverser Software3 4. einem Satz Zubehör - praktisch für einige Projekte in diesem Buch Optional, aber sinnvoll ist auch die Anschaffung von: - einem SRF-Stick. Damit kann man von einem PC oder Laptop aus drahtlos mit dem Raspberry Pi oder Arduino kommunizieren. Das ist vor allem praktisch, wenn man den Arduino fern-programmieren möchte. (siehe Projekt 6.2). - einem Radio-Shield in Verbindung mit einem normalen Arduino. Dies hat nichts mit einem Radio zu tun, sondern verhält sich dann wie ein XinoRF. Wenn es in diesem Buch um den Arduino geht, ist stets ein XinoRF oder ein Arduino Uno mit SRF-Radio-Shield gemeint. - einem zusätzlichen Slice of Radio. Damit kann man einen Piccolino mit einer Funkverbindung ausstatten (siehe Projekte 6.12 und 6.13). - einem Netzteil für den Arduino. Damit kann der Arduino mit Energie versorgt werden, so dass er nicht über das USB-Kabel mit einem PC oder dem Raspberry Pi verbunden sein muss. Das Netzteil sollte gut stabilisiert sein und eine Gleichspannung von 7...12 V bei einem Strom von mindestens 500 mA liefern (Plus am mittleren Pin). Für die Projekte in diesem Buch haben wir ein Schaltnetzteil (9 V/1 A) der Firma Meanwell für die Arduinos und das variable Netzgerät aus Anhang 1 für die übrigen Geräte verwendet. Arduino kann auch über eine USB-Versorgung (5 V, mindestens 500 mA) versorgt werden.
3
Die spezielle Funksoftware auf der SD-Karte wird in diesem Buch nicht eingesetzt. Auf der Webseite des Herstellers finden Sie diverse Projekte für diese Software. Die Projekte sind „kindgerecht“.
● 10
15.107-IoT-05.indd 10
18-05-15 11:22
1 ● Was Sie benötigen
1.4 ISS-Shield
Der Arduino ist ein flexibles Mikrocontroller-Entwicklungsboard, mit dem man sehr viel anstellen kann. Leider sind seine Ein- und Ausgänge für viele Projekte dieses Buches nicht ausgelegt. Sie liefern zu wenig Strom oder können nicht mit hohen Spannungen umgehen. Deshalb setzen wir das ISS-Shield mit folgenden Eigenschaften ein: 1. ein Eingang für Gleichspannungen bis 15 V 2. ein Eingang mit stufenloser Verstärkung von x1 bis x101 3. ein Eingang mit Kalibrier-Potentiometer 4. sechs Ausgänge für (gemeinsam) 500 mA und sechs - wenn gewünscht, verschiedene - Spannungen von 0 bis 50 V (gegen Null geschaltet)4 5. 21 Schraubverbindungen machen Löten überflüssig, auch bei permanenten Anschlüssen 6. vier Stiftleisten, auf die andere Shields gesteckt werden können 7. breitere Bauform als ein normales Shield, so dass Schraubverbindungen und Trimmpotentiometers immer zugänglich sind, auch wenn bereits andere Shields aufgesteckt wurden Für Anwendungen im Internet of Things ist dieses Shield für jeden verwendeten Arduino unverzichtbar. Das ISS gibt es als fertig bestückte Platine bei Elektor.
Bild 2. Interfacing Screw Shield (ISS). 4
Diese Ausgänge verfügen über ein Darlington-Array, siehe Projekt 4.5, um den maximalen Strom pro Ausgang zu ermöglichen.
● 11
15.107-IoT-05.indd 11
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
1.5 Gratissoftware-Download
Im kostenlosen Downloadpaket zu diesem Buch ist sämtliche erforderliche Software in einer einzigen ZIP-Datei enthalten. Die gesamte Software ist gratis, sie brauchen nichts dafür zu bezahlen. Sie müssen noch nicht einmal dieses Buch besitzen, um das Paket downloaden zu können. Das Paket ist für PCs mit dem Betriebssystem Microsoft Windows (XP oder neuer) bestimmt. Das Paket enthält auch die Quellcodes aller Programme für Raspberry Pi und Arduino, die in diesem Buch besprochen werden. Sie brauchen nichts weiter einzugeben und können sofort ans Werk gehen5. Die Dateien sind nach Kapiteln und Abschnitten geordnet. Installationsanweisung: 1. Gehen Sie auf www.boekinfo.tk (oder die Elektor-Webseite), wählen Sie die gewünschte Sprache, klicken auf den dazu gehörenden Link, um auf die Support-Seite zu gelangen. 2. Laden Sie das Software-Paket auf Ihren PC. 3. Entpacken Sie das Paket in einen Ordner Ihrer Wahl und behalten dabei die Ordnerstruktur bei. Dann brauchen Sie erst einmal nichts mehr zu tun; folgen Sie später den Anweisungen im entsprechenden Projekt. Wenn Sie die Fehlermeldung „No such file or directory“ vom Raspberry Pi erhalten, erfahren Sie in Anhang 3, was zu tun ist.
1.6 Internetanschluss
Für fast alle Projekte ist es erforderlich, den Raspberry Pi mit dem Internet zu verbinden. In diesem Zusammenhang ist der Anschluss an einen Router gemeint. Option 1: mit einem Kabel
Die einfachste Möglichkeit, den Raspberry Pin mit dem Internet zu verbinden, ist ein LANKabel. Stecken Sie das Kabel ein, bevor Sie den Raspberry Pi einschalten. Die Verbindung wird automatisch erkannt und aktiviert.
5
Bei Kapitel 3 müssen Sie die Quelltexte selbst eingeben. Nicht, dass ich zu faul dafür gewesen wäre - Sie lernen einfach besser, wenn Sie die Texte selbst eintippen!
● 12
15.107-IoT-05.indd 12
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
2 Softwareinstallation
2.1 Raspberry Pi
Bevor man mit dem Raspberry Pi loslegt, sollte man ein Backup der SD-Karte auf dem PC anlegen. So kann man problemlos und schnell zurück auf den Anfang, wenn irgendetwas nicht mehr funktioniert. Für das Backup kann man den Disk Imager einsetzen. Wie es gemacht wird, steht in Kapitel 2.2.1. 2.1.1 Tastatur
Auf der vorgefertigten SD-Karte ist eine Tastatur wie in Bild 3 eingestellt. Über der Ziffer 2 befindet sich der Klammeraffe @ und über dem Slash / das Fragezeichen ?.
Bild 3. Standardtastatur „101 keys USA International“.
Da Sie wahrscheinlich eine deutsche Tastatur benutzen, sollten Sie die Software direkt umstellen. Sie starten den Raspberry Pi, doppelklicken auf das LXterminal und geben folgenden Befehl ein: sudo raspi-config
Wählen Sie „Set Keyboard Layout“ und folgen Sie den Anweisungen auf dem Bildschirm, um Ihre Tastatur auszuwählen. Wenn Sie im Zweifel über die Art Ihrer Tastatur sind, vergleichen Sie die Layouts bei Wikipedia (Suchbegriff „Tastaturbelegung“ bzw.. „keyboard lay-out“).
● 14
15.107-IoT-05.indd 14
18-05-15 11:22
2 ● Softwareinstallation
Bild 4. Auswahlmenü von raspi-config.
Haben Sie eine Tastatur gewählt, probieren Sie ein paar Sonderzeichen wie @ / ? # aus, um sicher zu gehen, dass die Wahl richtig war. Klappt es nicht, starten Sie das programm einfach neu und treffen Sie eine andere Wahl in der Konfiguration. 2.1.2 Arduino-IDE
Die Arduino-Entwicklungssoftware befindet sich auf der SD-Karte des Raswik-Sets. Benutzen Sie die SD-Karte die zum Buch „Raspberry Pi - 45 Experimente met Hard- und Software für Elektroniker“ gehört (einzeln erhältlich), muss diese Software nachinstalliert werden, möchte man Programme für den Arduino auf dem Raspberry Pi schreiben. Möchte man dazu nur den (schnelleren) PC einsetzen, können Sie den Rest des Kapitels überschlagen und direkt zu Kapitel 2.1.3 springen. 1. Verbinden Sie den Raspberry Pi mit dem Internet. 2. Updaten Sie die Paketlisten auf dem Raspberry Pi, damit die Installationsprogramme wissen, was sie wo im Internet finden können: sudo apt-get update
Möglicherweise erhalten Sie ein paar Fehlermeldungen, die aber missachtet werden können. Machen Sie ruhig weiter! 3. Installieren Sie die Arduino-IDE mit dem Befehl: sudo apt-get install arduino
Nach kurzer Zeit erscheint eine Frage, antworten Sie mit Y (Yes - Ja).
● 15
15.107-IoT-05.indd 15
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
Wenn Sie fertig sind, kann -falls gewünscht- das Programm getestet werden. 4. Schließen Sie den Arduino mit einem USB-Kabel am Raspberry Pi an. 5. Starten Sie die Arduino-IDE (klicken Sie auf den Vogel im Menübalken um das Menü zu öffnen und wählen Sie dann Elektronics, gefolgt von Arduino IDE). 6. Wenn die Arduino-IDE gestartet ist wählen Sie File - Examples - Basic - Blink, um ein Programm zu laden, das die LED des Arduino blinken lässt. In der Arduino-Welt wird ein Programm Sketch genannt. Wir benutzen in diesem Buch beide Ausdrücke. Übertragen Sie das Programm, indem Sie in den Kreis mit dem Pfeil nach rechts klicken. Nach einiger Zeit meldet die Arduino-IDE, dass sie den COM-Port nicht finden kann und schlägt einen anderen vor.7 Akzeptieren Sie den Vorschlag und nach einer kurzen Zeit beginnt die LED zu blinken.
Bild 5. Die Arduino-IDE befindet sich im Menü Electronics.8 2.1.3 IP-Adresse
7
Die Arduino-IDE probiert zunächst die Kommunikation über den COM-Port 1, der beim Raspberry Pi nicht existiert. Das Programm kontrolliert dann, wo der Arduino angeschlossen ist und findet den Port dev/ttyACM0. Dieser Port wird beim nächsten Programmstart automatisch gewählt. Man kann den Port, so er existiert, auch manuell über Tools - Serial Port einstellen.
8
Diese Abbildung wurde auf einem 64-Bit-PC mit Win7 über eine Verbindung erstellt, wie sie in den Kapiteln 2.2.2 und 2.2.3 besprochen wird.
● 16
15.107-IoT-05.indd 16
18-05-15 11:22
2 ● Softwareinstallation
Für die Projekte aus diesem Buch ist wenigstens ein Raspberry Pi und ein Tablet oder PC erforderlich, die über einen Internet-Router miteinander verbunden sind.
isp
modem
router
Raspberry Pi
PC
Bild 6. Aufbau des Netzwerks.
Modem und Router können in einem Gerät kombiniert sein. Lassen sich mehrere Computer anschließen, so handelt es sich um einen Router oder eine solche Kombination. Ist dagegen nur eine Buchse für einen Computer vorhanden, so handelt es sich wohl nur um ein Modem. In diesem Fall müssen Sie einen separaten Router besorgen und wie gezeigt zwischen Modem und PC anschließen. Wie das geht, steht in der Bedienungsanleitung und ist meist nur eine Frage von Kabel einstecken und einschalten. Um vom PC aus Verbindung mit dem Raspberry Pi aufzunehmen muss man dessen IPAdresse kennen. Jedes Gerät, das mit einem Internet oder einem Intranet verbunden ist, besitzt eine einzigartige IP-Adresse. Ihr Modem beispielsweise erhält seine IP-Adresse vom Internet Service Provider (ISP), dem Unternehmen, bei dem Sie Ihren Internet-Account haben. In ihrem Heimnetzwerk vergibt der Router die Adressen an alle angeschlossenen Geräte. Natürlich sind die Adressen nur in Ihrem Netzwerk gültig, von außen, dem Internet, kann man sie nicht sehen. Das bedeutet auch, dass jedes Routermodell mit gleichen Einstellungen die gleichen lokalen IP-Adressen vergibt. Um dahinter zu kommen, welche IP-Adresse ihr Raspberry Pi nun besitzt, müssen Sie sich nur in Ihren Router einloggen. Wenn Sie nicht wissen, wie das geht, schauen Sie in die Bedienungsanleitung oder fragen Sie Ihren ISP. Wenn Sie eingeloggt sind können Sie eine Übersicht aller am Router angeschlossenen Geräte mit den jeweiligen IPs sehen.
● 17
15.107-IoT-05.indd 17
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
3 Kurzanleitungen für... Wir verwenden in diesem Buch einen Raspberry Pi mit seinem Linux-Betriebssystem und programmieren ihn in Python. Wir gehen davon aus, dass Sie wissen, wie ein Raspberry Pi funktioniert, wie man mit Linux umgeht und wie man Programme in Python lesen und ändern kann. Nicht, weil man das als selbstverständlich bei gebildeten Menschen voraussetzen kann, sondern weil alles im Bestseller „Raspberry Pi – 45 Experimente mit Hard- und Software für Elektroniker“ haarklein beschrieben ist. Und da Sie wahrscheinlich das Buch schon besitzen, wäre es eine Sünde, dieses Buch dafür um etwa 40 Seiten und den Preis um etliche Euro zu erweitern.
3.1 Arduino in C++ programmieren
Die Standard-Programmiersprache für den Arduino ist C++. Ursprünglich war C++ eine Erweiterung der Programmiersprache C, aber beide haben sich getrennt weiterentwickelt und weisen nun erhebliche Unterschiede auf. Wir verwenden in diesem Buch nur den Teil von C++, der vom Arduino auch unterstützt wird. Das Ziel dieses Kapitels ist es ja nicht, Ihnen hier C++ beizubringen, sondern dass Sie die Programmbeispiele lesen und eigenen Vorstellungen anpassen können. Die Programme sind mit Absicht nicht im Download vorhanden, Sie müssen sie selbst abtippen. Sinn und Zweck der Übung ist, dass Sie mit den Haken und Ösen dieser Programmiersprache vertraut werden. Es ist sehr zu empfehlen, dass Sie die Programme auch in der Praxis ausprobieren. Sie benötigen eine Elektronik, wie sie im folgenden Bild zu sehen ist: ein großes Breadboard oder das kleine aus dem Raswik-Paket oder das Entwicklungsshield, wie es im Foto zu sehen ist. Sie können den XinoRF aus dem Raswik-Paket verwenden oder einen normalen Arduino, das macht nichts aus. In der Abbildung ist ein Arduino Uno mit aufgestecktem Entwicklungs-Shield zu sehen. Wenn Sie diese Anordnung zusammenstecken schalten Sie die Spannungsversorgung aus und entfernen das USB-Kabel, damit es nicht zu Kurzschlüssen kommen kann.
10k LIN S
470
10k
LED Pin 2
GND
Pin 3
+5V
Pin A1
XinoRF
Bild 19. Eine mögliche Anordnung mit Arduino Uno, Entwicklungsshield und Breadboard.
● 34
15.107-IoT-05.indd 34
18-05-15 11:22
3 ● Kurzanleitungen für ...
Alle Sketche haben eine feste Grundstruktur, die aus drei Teilen besteht. Im ersten sind die Definitionen eingetragen, anschließend kommen noch zwei Funktionen. Im Definitionsteil werden vor allem die Namen der Variablen definiert. Die erste Funktion heißt setup. In der Funktion stehen alle Befehle, die das Programm nur einmal ausführen muss, nämlich beim Start. Die zweite Funktion heißt loop, das englische Wort für Schleife. Alles, was in der Schleife steht, wird kontinuierlich wiederholt, bis der Arduino ausgeschaltet oder ein anderes Programm gestartet wird. //Definitionen void setup() { } void loop() { }
Beide Funktionen haben die gleiche Struktur. Sie beginnen mit dem Wort void. Es gibt Funktionen, die eine Antwort geben, wenn man sie nutzt (dazu später mehr). In diesem Fall steht dort ein Wort, das auf die Art der Antwort hinweist. Jetzt aber geben die Funktionen keine Antwort und deswegen steht dann dort „nichts“ (im Englischen void). Auf den Namen der Funktionen folgen die zwei Klammern (). Es gibt Funktionen, denen Werte übergeben werden können (auch dazu später mehr). Diese Werte werden in den Klammern angegeben. Da hier keine Werte übergeben werden, steht zwischen den Klammer nichts. Hinter den runden finden sich zwei geschweifte Klammern {}. Dazwischen werden alle Befehle aufgeführt, die die Funktion ausführen soll. Es ist üblich, diese Befehle ein wenig einzurücken, so dass man direkt sieht, was zu welcher Funktion gehört. Da in unserem Fall zwischen den geschweiften Klammern nichts steht, tut die Funktion auch ... nichts. Obwohl der Sketch nichts tut, ist es ein guter Sketch, will sagen, er enthält keine Fehler. Wir tragen den Sketch in die Arduino-IDE ein. Da die IDE es nicht automatisch macht, ist es sehr wichtig, den Sketch zu speichern, bevor man ihn zum Arduino überträgt. Wenn nämlich die IDE abstürzt, ist die bisherige Arbeit verloren. Geben Sie dem Sketch einen passenden Namen, zum Beispiel Tutorial und speichern Sie ihn in irgendeinem Ordner (am besten einen neuen mit einem Namen wie Arduino-Projekt). Die IDE legt beim Speichern diesen Ordner automatisch an. Hier kann man dann alles, was zu diesem Projekt gehört (wie Bilder und Schemas) ablegen. Dann hat man alles direkt greifbar.
● 35
15.107-IoT-05.indd 35
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
Bild 20. Basisstruktur eines Sketches.
Wählen Sie nun das Menü Sketch, dann Verify/Compile (oder drücken auf Strg-R). Der Sketch wird nun überprüft und kompiliert, vom in für Menschen lesbares C++ in Arduinolesbaren HEX-Code verwandelt. Unten steht nun der Text „Done compiling“ (fertig mit kompilieren) und im schwarzen Fenster erscheint das Resultat der Prüfung. In diesem Fall gibt es keine Fehlermeldungen oder Warnungen. Es wird angegeben, wie groß der Sketch geworden ist (466 Byte) und wieviel Platz maximal im Arduino verfügbar ist (32.256 Bytes). Der letzte Wert ist abhängig vom Arduino-Typ. Die erste Zahl kann übrigens auch leicht abweichen, da es verschiedene Compiler-Versionen gibt. Der Sketch ist fehlerfrei, also kann er zum Arduino geschickt werden. Klicken Sie auf den Pfeil nach rechts oder drücken Sie Strg-U. Der Sketch wird nochmals kontrolliert und kompiliert und dann auf den Arduino geschrieben. Wenn die IDE den Arduino nicht finden kann, fragt sie nach dem richtigen COM-Port. Der Sketch macht natürlich nichts. Anschlüsse - digital
Auf dem Arduino gibt es vier Stiftreihen mit Pins, die mit den Ein- und Ausgängen des Mikrocontrollers des Arduinos verbunden sind. Um einen Anschluss zu verwenden, muss erst einmal angegeben werden, ob es ein Ausgang (output) oder ein Eingang (input) sein soll. Als Ausgang kann der Arduino den Anschluss ein- und ausschalten, an einen Eingang kann der Anwender eine Spannung legen (0 oder 5 Volt) und der Arduino kann dies sehen. Angenommen, wir verwenden Pin 2 und wollen eine LED anschließen, so muss der Pin als Ausgang eingestellt werden. Der Befehl dafür lautet „pinMode(Nummer, Ein/Ausgang)“.
● 36
15.107-IoT-05.indd 36
18-05-15 11:22
3 ● Kurzanleitungen für ...
Wir schreiben einen Sketch mit dem Pin als Ausgang und schalten ihn daraufhin an (an ist HIGH, aus ist LOW). Der Befehl dafür lautet „digitalWrite(Nummer, HIGH/LOW)“. //Definitionen void setup() { pinMode(2, OUTPUT); digitalWrite(2, HIGH); } void loop() { }
Wie zu sehen, werden für OUTPUT und HIGH Versalien benutzt. Wenn Sie diesen Sketch starten geht die LED an und bleibt hell. Probieren Sie das ruhig aus, es übt! Es ist vielleicht aufgefallen, dass nach jedem Befehl ein Semikolon steht. Für den C++-Compiler bedeutet dies das gleiche wie für uns ein Punkt: das Ende eines Satzes beziehungsweise in C++ das Ende eines Befehls. Nach der schließenden geschweiften Klammer ist kein Semikolon erforderlich, da dieses Zeichen immer auch das Ende des Befehls bedeutet. Man kann es aber setzen, es erfolgt keine Fehlermeldung. Es ist auch möglich, die LED blinken zu lassen. Dazu setzt man den Pin auf High, wartet ein Weilchen, schaltet den Pin auf Low und wartet wieder ein Weilchen. Damit sich diese Befehle immer wiederholen, setzen wir sie in die loop()-Funktion: // Definitionen void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); }
Der Befehl „delay(Zahl)“ sorgt dafür, dass der Arduino ein wenig wartet. Die Wartezeit ist in Millisekunden angegeben, 1000 bedeutet 1000 ms, also 1 Sekunde. Die LED geht an, leuchtet 1 Sekunde, geht aus und bleibt dies für 1 Sekunde.19
19
Berücksichtigen Sie, dass Python im Sekundentakt denkt. Bei der Angabe 1000 müssten Sie ein wenig länger auf das Blinken warten, beinahe eine halbe Stunde. In diesem Buch verwenden wir Python und C++ durcheinander, also aufgepasst!
● 37
15.107-IoT-05.indd 37
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
4 Funkkommunikation über das Internet In diesem Kapitel geht es um eine Reihe von Projekten, die über eine Webseite bedient werden können. Die Webseite kann auf einem PC, einem Tablet oder einem Smartphone laufen. Wir beginnen wieder einmal mit dem Ein- und Ausschalten einer LED. Wenn Sie ein Projekt dieses Kapitels ausführen wollen, bitte lesen Sie die Hinweise zum ersten Projekt bitte sorgfältig, hier ist alles sehr detailliert erläutert. Diese Grundlagen werden auch in den folgenden Projekten gebraucht, wo alles weniger ausführlich beschrieben ist. Die Struktur der Projekte dieses Kapitels sieht wie folgt aus: 1. Der Anwender geht mit seinem Tablet auf eine Webseite. Diese Webseite befindet sich auf dem Raspberry Pi. Auf der Webseite gibt es verschiedene Knöpfe, die man drücken kann. 2. Wenn ein Knopf gedrückt wird, startet die Webseite ein Programm auf dem Raspberry Pi. Dieses Programm nimmt eine Funkverbindung zum Arduino auf und erteilt diesem einen Befehl. Dann wartet das Programm auf eine Antwort des Arduino. 3. Auf dem Arduino läuft beständig ein Programm, das dem Raspberry Pi „zuhört“ und auf Befehle wartet. Trifft ein Befehl ein, wird dieser ausgeführt. Danach wird eine Bestätigung über die Funkverbindung zum Raspberry Pi geschickt, etwa der Text „Ich habe meinen Auftrag ausgeführt“ oder das Resultat einer Messung oder etwas anderes. 4. Auf dem Raspberry Pi wartet das Programm, das den Befehl gegeben hat, auf die Antwort des Arduino. Wenn diese eintrifft, wird sie an die Webseite, die der Anwender immer noch vor sich sieht, weitergegeben. 5. Der Anwender sieht auf der Webseite die Antwort.
Bild 46. Bedienung über das Tablet.
● 102
15.107-IoT-05.indd 102
18-05-15 11:22
4 ● Funkkommunikation über das Internet
Wenn Sie das Programm am PC erstellt und mit WinSCP zum Raspberry Pi übertragen haben, kann es sein, dass Sie anstelle einer Webseite eine Fehlermeldung auf dem Raspberry Pi erhalten. . 192.168.178.10 - - [15/Dec/2012 09:04:27] “GET /cgi-bin/hello.py HTTP/1.1“ 200 : No such file or directory 192.168.178.10 - - [15/Dec/2012 09:04:32] CGI script exit status 0x7f00
Diese Meldung besagt, dass eine Datei oder ein Verzeichnis nicht existiert und dass es sich dabei um die Datei hello.py dreht. Angenommen, es gibt die Datei dennoch und sie steht auch im richtigen Ordner, muss es sich um etwas anderes handeln. Wichtig ist die erste Zeile von hello.py: #!/usr/bin/env python
Darin steht, wo der CGI-Handler Python finden kann. Das Problem ist aber, dass Windows und Linux unterschiedlich mit Textdateien umgehen. Wenn Sie in Windows eine Zeile schreiben und danach die Eingabetaste drücken, fügt Windows (unsichtbar) zwei Zeichen an, nämlich LF (line feed, Zeilenvorschub), um den Cursor in die folgende Zeile zu schieben und CR (carriage return, Wagenrücklauf), damit der Cursor auch am Anfang dieser Zeile steht. Diese Konvention ist zu DOS-Zeiten entstanden, und da Windows auf DOS basiert, ist sie erhalten geblieben. Linux basiert allerdings auf Unix, und die Konvention geht hier von nur einem Zeichen aus, nämlich LF. Das Zeichen CR von Windows wird von Linux normalerweise ignoriert, man merkt nichts davon, wenn man unter Windows ein Programm erstellt und dieses mit einem FTP-Programm wie WinSCP zu einem Linux-Rechner überträgt und dort verwendet. Linux ist aber sehr empfindlich, wenn es um Dateinamen geht. Dann steht für Linux dort nicht #!/usr/bin/env python
sondern #!/usr/bin/env pythonCR
Und ein Programm pythonCR existiert nicht. Die Lösung ist, das Programm von der DOSin die Linux-Konvention zu konvertierten. Am einfachsten geht das, wenn Sie die Datei auf dem Raspberry Pi mit WinSCP öffnen und irgendwo ein Leerzeichen einfügen (in einer Kommentarzeile, besser nicht im Programmteil) und danach wieder speichern. Schon sind die Zeilenenden korrekt! Wenn Sie schon mal mit WinSCP beschäftigt sind, können Sie auch gleich die Zugriffsrechte richtig einstellen. Klicken Sie rechts auf die Datei (wenn sie sich auf dem Raspberry Pi befindet), wählen Sie Eigenschaften und machen ein Häkchen beim X hinter Besitzer.
● 103
15.107-IoT-05.indd 103
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
4.1 LED an/aus
In diesem Projekt steuern wir die bekannte LED des Arduino über eine Webseite. Durch Klicken/Drücken auf Knöpfe kann die LED ein- und ausgeschaltet werden.
Die Vorlage
Im Download befindet sich eine leere Zeichnung des Interfacing Screw Shield ISS mit einer Anzahl von Knöpfen. Für jedes Projekt erstellen wir eine neue, eigene Grafik. Das heißt, dass wir die richtigen Knöpfe auf den richtigen Platz setzen und aus jedem Knopf einen Hotspot machen. Falls Sie keine Lust haben, mit der Grafik herumzuspielen, können Sie auch die fertigen Grafiken und Webseiten für jedes Projekt im Download verwenden.
Bild 47. Die Grafik (iss-base.bmp) in GIMP, links oben die Knöpfe.
Wir laden zunächst die Grafik in GIMP.59 In diesem Projekt wollen wir die LED ein- und ausschalten, die an Pin 13 des Arduino angeschlossen ist. Sie können an der Farbe des Pins sehen, dass er eine besondere Funktion (nämlich die LED) hat. Wenn wir die LED ein- und ausschalten wollen, benötigen wir die Köpfe ON und OFF. Wir kopieren/verschieben die Knöpfe an den richtigen Platz, löschen die überflüssigen übrigen Knöpfe und speichern die Datei unter „issbvd1.bmp“, schließen aber GIMP noch nicht.
59
Falls Sie GIMP noch nicht installiert haben, lesen Sie darüber erst Abschnitt 2.2.5. Sie können natürlich auch ein Grafikprogramm mit gleicher Funktionalität verwenden.
● 104
15.107-IoT-05.indd 104
18-05-15 11:22
4 ● Funkkommunikation über das Internet
Bild 48. Die beiden Knöpfe sind bei Pin 13 platziert.
Im nächsten Schritt legen wir die Hotspots fest. Ein Hotspot ist ein Teil einer Grafik, der als Verweis (Link) fungiert. Sie können auf den Teil der Grafik klicken und dann passiert etwas. Die Hotspots einer Grafik werden in einer Art Tabelle (MAP) definiert: <MAP NAME=“issbvdmap“> <AREA SHAPE=“rect“ COORDS=“615,199,671,223“ HREF=“13off.py“ TARGET=“myframe“> <AREA SHAPE=“rect“ COORDS=“551,200,610,219“ HREF=“13on.py“ TARGET=”myframe”> </MAP>
Die Eigenschaften haben folgende Bedeutung: NAME Namen der Map, kann frei festgelegt werden60 SHAPE Form des Hotspots (rect: rechtwinklig) COORDS Koordinaten des Hotspots HREF Link, der an den Hotspot gekoppelt ist TARGET der Frame, in den der Link geladen werden soll Im Image-Tag muss diese Map (wir wählen issbvdmap) angegeben werden. So kann man eine Map auch für eine andere Grafik verwenden, wenn die Hotspots an den gleichen Stellen sitzen. <IMG SRC=“issbvd1.bmp“ USEMAP=“#issbvdmap“ ISMAP> 60
Der Name der Map darf keine Leerzeichen, Umlaute und nur die Sonderzeichen _-:. enthalten. Das erste Zeichen muss ein Buchstabe sein.
● 105
15.107-IoT-05.indd 105
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
5 Alles ins Internet! In diesem Kapitel wollen wir ein modulares System zusammenstellen, mit dem man verschiedene Dinge im Haus mit dem Tablet überwachen und/oder steuern kann. Sie können selbst bestimmen, welche Module für Sie in Frage kommen und auch, ob Sie von einem Modul mehrere Ausführungen einsetzen möchten. Vielleicht haben Sie keine Garage zu überwachen, möchten aber wissen, ob verschiedene Zimmerpflanzen Durst haben. Es kann auch sein, dass Sie mehrere Räume gegen Einbrecher sichern möchten. So können Sie das System ganz Ihren eigenen Wünschen und Bedürfnissen anpassen und viel mehr als die zwölf in diesem Kapitel beschriebenen Projekte einsetzen – oder auch weniger. Die hier beschriebenen Projekte sind ein wenig komplizierter als die im letzten Kapitel. Es ist wichtig, dass Sie das erste Projekt erst einmal gründlich (!) lesen, damit Sie verstehen, wie das System funktioniert. Dann können Sie Module hinzufügen oder weglassen. Die Downloads, die zu den einzelnen Abschnitten gehören, umfassen auch alle Module, die bis zu diesem Zeitpunkt besprochen worden sind. Besitzen Sie mehr als einen drahtlosen Arduino, dann ist Projekt 5.7 interessant, da wir von da an einen zweiten Arduino hinzu nehmen.
Bild 86. Alles ins Internet und auf dem Tablet.
● 158
15.107-IoT-05.indd 158
18-05-15 11:22
5 ● Alles ins Internet!
Die Projekte dieses Kapitels sind wie folgt strukturiert: 1. Der Anwender startet mit dem Webbrowser auf seinem Tablet ein Programm auf dem Raspberry Pi. Dieses Programm erstellt an Ort und Stelle eine Webseite und zeigt sie dem Anwender. In der Webseite sind verschiedene Module vereint, die zum Beispiel Angaben zu verdurstenden Pflanzen oder offen stehenden Fenstern machen. Diese Informationen stammen aus Dateien auf dem Raspberry Pi. Immer, wenn der Anwender die Seite aufruft oder aktualisiert werden die Dateien neu gelesen und auch die Informationen auf der Seite erneuert. 2. Auf dem Raspberry Pi läuft weiterhin ein Programm, das dauernd Funkkontakt zum Arduino sucht und den Status der verschiedenen Module abfragt.77 Ein Status kann sein, dass ein Fenster offen steht oder es kann auch das Ergebnis einer Strommessung sein. 3. Auf dem Arduino läuft ein Programm, das permanent nach (Funk-) Befehlen vom Raspberry Pi „horcht“. Es führt die angefragten Befehle aus und schickt die Resultate zurück. 4. Das Programm auf dem Raspberry Pi speichert die empfangenen Informationen in Dateien auf dem Webserver des Raspberry Pi. Damit kehren wir zu Schritt 1 zurück, in dem nach dem Inhalt der Dateien gefragt wird. 5. In einigen Fällen kann der Anwender auch auf ein Modul auf der Webseite drücken, um den Inhalt einer Datei zu verändern, meist um zu bestätigen, dass er eine Information erhalten hat. Sie sehen, es unterscheidet sich grundsätzlich von der Vorgehensweise in Kapitel 4, weil die Projekte jetzt dauernd aktiv sein müssen, auch wenn niemand nach der Webseite schaut. Aus diesem Grund läuft auf dem Raspberry Pi auch ein Programm, das den Arduino ständig via Funkverbindung überwacht. So sind die Informationen in den Dateien auf dem Raspberry Pi stets auf dem neusten Stand.
5.1 Sie haben Post!
Mit diesem Projekt können Sie über eine Webseite erfahren, ob der Briefkasten geöffnet wurde und ob Sie Post haben. Dazu wird ein Mikroschalter am Briefkasten/-schlitz montiert, dessen Zustand vom Arduino gelesen wird. Der Raspberry Pi fungiert als zentraler Internet-Server. Der Postbote öffnet den Briefschlitz nur kurz, so dass dies, wenn es geschieht, sofort in einer Datei gespeichert werden muss. Die Datei kann man dann auf einer schönen Webseite im Internet betrachten. Außerdem kann die Meldung gelöscht werden, wenn der Anwender gesehen hat, dass tatsächlich Post eingetroffen ist. Es ist ein guter Rat, dieses Projekt genau durchzuarbeiten, auch wenn Sie nicht planen, es zu realisieren, da alle Schritte im Detail besprochen werden. Wir bauen in den folgenden Projekten darauf auf und halten dann dort die Beschreibungen etwas kompakter. 77
Auch wenn mehr als ein Arduino in Betrieb ist: Sie werden alle durch das Programm abgefragt.
● 159
15.107-IoT-05.indd 159
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino Briefkasten
Tablet
10 k
pin 9 GND
ISS shield
Arduino
WiFi link
+5 volt
RS232 link
radio link
SRF radio shield
SRF "slice of pi"
RS232 link
Raspberry Pi
Bild 87. Schematischer Aufbau, der WLAN-Link verläuft natürlich über einen Router.
Der Aufbau erscheint kompliziert, aber so es scheint auch nur. Ein Schalter im Briefkasten ist mit dem Arduino über das spezielle ISS (Interfacing Screw Shield) verbunden. Gleichzeitig besitzt der Arduino einen SRF radio shield (in diesem Fall in einem XinoRF schon integriert). Über eine Funkverbindung steht der Arduino in Kontakt mit einem Raspberry Pi, der als Webserver arbeitet. Von einem PC oder Tablet aus kann ein Anwender über WLAN die Webseite auf dem Raspberry Pi aufrufen. Die Struktur des Projekts ist folgende: 1. Der Arduino ist mit dem Schalter im Briefkasten verbunden. 2. Ein Programm auf dem Arduino fragt auf einen Befehl des Raspberry Pi hin den Status des Schalters ab. 3. Ein Programm auf dem Raspberry Pi gibt zweimal pro Sekunde über die Funkverbindung den Befehl zum Arduino, dass dieser den Status des Schalters kontrollieren soll und speichert das Ergebnis in einer Datei. 4. Nimmt der Anwender am PC oder Tablet Kontakt mit der Webseite auf dem Raspberry Pi auf, holt diese Webseite die Daten aus der Datei und zeigt in grafisch ansprechender Form, ob Post eingetroffen ist oder nicht. Die Schritte 1 bis 3 verlaufen kontinuierlich und automatisch. Schritt 4 wird nur vollzogen, wenn die Webseite aufgerufen oder aktualisiert wird. Das ganze System ist modular aufgebaut. Abgesehen von einem Briefkasten können noch viele andere Dinge überwacht oder gesteuert werden. In den folgenden Projekten erfahren Sie, wie das geht.
● 160
15.107-IoT-05.indd 160
18-05-15 11:22
5 ● Alles ins Internet!
Die Vorlage
Im Internet gibt es Vorlagen für Icons zuhauf, doch es ist natürlich viel schöner, Entwürfe aus eigenen Fotos zu erstellen. Als Beispiel erstellen wir hier ein Icon für das Postmodul. Dafür kann das kostenlose Grafikprogramm GIMP verwendet werden. Die Installation wurde in Kapitel 2.2.5 beschrieben. Wenn Sie schon ein Grafikprogramm auf dem Rechner haben, das über die gleichen Möglichkeiten verfügt, können Sie natürlich auch dieses verwenden. Wir beginnen mit einem Foto, das einen kleinen Stapel Post auf dem Boden hinter der Eingangstür zeigt. Im Prinzip könnten wir schon dieses Foto verwenden, schöner ist es jedoch, den Hintergrund transparent zu machen (freizustellen), so dass nur die Post sichtbar ist.
Bild 88. Hinzufügen einer transparenten Ebene.
1. Starten Sie GIMP und laden Sie das Foto (ihrer eigenen Post, Sie können aber auch das Foto im Download verwenden). Wählen Sie „Ebene – Transparenz – Alphakanal hinzufügen“. Die Abbildung besitzt nun eine zweite Ebene unter dem Foto.
● 161
15.107-IoT-05.indd 161
18-05-15 11:22
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
6 Weitere (Internet-) Projekte In diesem Kapitel lernen wir einige unterschiedliche Projekte kennen. Es handelt sich um kleine(re) und unabhängige Projekte, die Sie für eigene Applikationen verwenden können. Viele dieser Projekte sind komplizierter als diejenigen in den Kapiteln 4 und 5. Die Struktur der Projekte ist sehr unterschiedlich, lesen Sie deshalb die Anwendungshinweise, die unter jedem Projekt angegeben sind.
6.1 Via Internet ausschaltbare Türklingel mit Musik
Wir lassen die Türglocke ein Liedchen spielen und sorgen dafür, dass Sie über ein Tablet ausgeschaltet werden kann. Achtung: um dieses Projekt zu realisieren benötigen Sie die SD-Karte aus dem in Kapitel 1.2 beschriebenem Raspberry Pi-Buch. Der Raspberry Pi findet einen günstigen Aufstellort direkt neben dem Router. Oft befinden sich Router und auch das Kabel für den Klingeltaster am/im Zählerkasten. Wir verwenden für dieses Projekt nicht den Arduino, sondern den Raspberry Pi selbst. Wir setzen die Techniken zur Ansteuerung eines Pins ein, die im Raspberry Pi-Buch beschrieben wurden. Da das „Slice of Radio“-Modul keine Anschlussmöglichkeiten auf der Oberseite besitzt, kann nichts darüber platziert werden, außer Sie würden die Kabel direkt am Funkmodul festlöten. Wir wählen aber eine weniger dauerhafte Lösung und erstellen eine kleine Lochraster-Platine, die über ein Flachbandkabel mit dem Raspberry Pi verbunden wird. Auf der anderen Seite der Platine befindet sich eine zweite Steckverbindung für das „Slice of Radio“-Modul.
Bild 151. Die kleine Lochraster-Platine101
Scheinbar könnte man die Steckverbinder auch enger aneinander platzieren. Berücksichtigen Sie aber, dass das
101
Funkmodul dazwischen passen muss, wenn Sie die Verbinder anders anordnen wollen. Bild 154 zeigt die Schaltung.
● 262
15.107-IoT-05.indd 262
18-05-15 11:23
6 ● Weitere (Internet-) Projekte
Das Funkmodul wird in diesem Projekt übrigens nicht eingesetzt, es ist aber notwendig, um dieses Projekt mit anderen aus diesem Buch kombinieren zu können. Wenn Sie eine Funkverbindung nicht benötigen, können Sie natürlich auf Platine und Flachbandkabel verzichten und die Elektronik direkt am Raspberry Pi anschließen. Ein Teil der Anschlüsse des Raspberry Pi ist für den Betrieb des Funkmoduls reserviert wie unten stehende Tabelle zeigt. Diese Verbindungen müssen zwischen den Steckverbindern für Funkmodul und Raspberry Pi durchgeschleift werden. Die Türklingel schließen wir dann zum Beispiel am freien Pin 16 (GPIO 16) an. Raspberry Pi
Anschluss
08 (GPIO 14)
serielle Kommunikation
10 (GPIO 15)
serielle Kommunikation
Pin 1 (3,3V)
3,3 Volt, 19...33 mA
Pin 6 GND
Masse
Pin 15 (GPIO 22)
DTR Tabelle 21. Anschluss des „Slice of Radio“-Moduls.
Ein Pin, der als Eingang konfiguriert ist, darf niemals „schweben“. Das heißt, dass er immer mit einem Potential, positiv oder Masse, verbunden sein muss. Wäre der Raspberry Pi ein Arduino würden wir den Klingeltaster S wie in folgendem Bild anschließen. Dies wird in allen Schaltungen in dieses Buches so gehandhabt. +3.3V
S
10k
RPI pin
GND
GND
Bild 152. So wird normalerweise ein Schalter „nicht-schwebend“ angeschlossen.
Wenn der Taster offen ist liegt der Anschluss des Raspberry Pi über den 10 kΩ-Widerstand auf Masse, der Pin ist also Low. Wenn der Taster geschlossen wird, besteht eine direkte Verbindung mit der +3,3 Volt-Leitung und der Pin ist High. Natürlich fließt dann ein Strom durch den Widerstand, der aber vernachlässigbar klein ist: I = U / R = 3,3 /10000 = 0,33 mA Was passiert aber, wenn der Pin nicht als Ein-, sondern als Ausgang definiert ist und dann Low wird? Bei einem Arduino oder Piccolino dürfte das nicht häufig vorkommen, da der Programmierer im (einzigen) Programm zuerst alle Anschlüsse in einen bestimmten Status
● 263
15.107-IoT-05.indd 263
18-05-15 11:23
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
versetzt. Beim Raspberry Pi ist das allerdings gut möglich, da es sich um ein MultitaskingSystem handelt und er mehrere Programme gleichzeitig ausführen kann, die allesamt Zustand und Status der Anschlüsse beeinflussen können. Es kann passieren, dass ein Programm den Pin als Eingang konfiguriert und ein anderes Programm als Ausgang und diesen auf Null setzt. Ein kleiner Fehler mit gravierenden Folgen! Solange der Taster geöffnet ist, passiert nichts, wenn der Pin low ist, aber wird der Taster gedrückt besteht ein Kurzschluss mit der 3,3 V-Leitung. Ein sudden death für den Raspberry Pi! Um dies zu verhindern, setzen wir einen zusätzlichen 1 kΩ-Widerstand ein:
1k
+3.3V
S
10k
RPI pin
GND
GND
Bild 153. Sicherer Anschluss eines Schalters.
Normalerweise hat der Widerstand wenig Einfluss. Bei offenem Taster passiert nichts, bei geschlossenem Taster entsteht ein Teiler mit der Spannung am Eingangspin: URPi pin = 10/(1+10) * 3,3 = 3,0 Volt. Dies erkennt der Raspberry Pi immer noch als High, also hat auch hier der Widerstand keine negativen Folgen. Die Schaltung arbeitet wie vorgesehen. Der Vorteil wird aber deutlich, wenn der Pin als Ausgang konfiguriert ist: Wird der Anschluss auf High gesetzt macht das nichts, weil der Widerstand nach Null 10 kΩ beträgt. Wird der Ausgang nun Low, war er quasi nach plus „kurzgeschlossen“. Der 1 kΩ-Widerstand aber sorgt dafür, dass der Strom sicher begrenzt wird und kein Schaden entstehen kann: IKurzschluss = U / R = 3,3 /1000 = 3,3 mA Diesen Wert akzeptiert der Raspberry Pi schad- und klaglos. Zwar funktioniert die Schaltung nicht, weil der Pin ja als Ausgang definiert ist, aber der Raspberry Pi bleibt intakt. Wenn man die beiden Widerstände und die Verbindungen zwischen den beiden Steckverbindern kombiniert sieht das aus wie in der Schaltung im folgenden Bild. Der linke Steckverbinder wird über ein Flachbandkabel mit dem Raspberry Pi verbunden, am rechten Stecker wird das Funkmodul angeschlossen. Die fertig gelötete Schaltung haben Sie schon in Bild 151 gesehen.
● 264
15.107-IoT-05.indd 264
18-05-15 11:23
6 ● Weitere (Internet-) Projekte
GND
10k
RPi 2 +3.3V 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
S 1k
radio 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
Bild 154. Die vollständige Schaltung mit Taster S als Türklingelknopf.102
Bild 155. Die vollständige Hardware inklusive Türklingel.
102
Widerstand-Farbcodes: 1 kΩ = braun-schwarz-rot, 10 kΩ = braun-schwarz-orange.
● 265
15.107-IoT-05.indd 265
18-05-15 11:23
Internet of Things ● 35 Projekte mit Raspberry Pi und Arduino
Index --......................................................52 -.......................................................41 !.......................................................45 !=.....................................................41 %......................................................41 %20................................................ 290 %s.................................................. 175 &.......................................................45 (char)................................................60 *.......................................................41 **.....................................................41 *=.....................................................52 /.......................................................41 //......................................................35 /=.....................................................52 /dev/ttyAMA0.....................................67 /etc/network/interfaces........................20 /usr/bin/env..................98, 99, 113, 173, |.......................................................45 ~......................................................45 +......................................................41 ++....................................................52 +++................................................ 271 +=....................................................52 <......................................................41 <<....................................................41 <=....................................................41 =......................................................41 -=.....................................................52 ==....................................................41 >......................................................41 >=....................................................41 >>....................................................41 16f887_bert_piccolino........................ 326 230 Volt........................................... 348 404...................................................95 71427.............................................. 148 A.......................................................86 A window manager........................ 26, 29 aLink.................................................76 Aluminiumfolie.................................. 329 amixer............................................. 266 analogRead...................................... 126
analogWrite...................................... 154 Anschlusse - analog.............................42 Anschlusse - digital..............................36 Arduino IDE.................................. 16, 32 argv................................................ 290 ASCII.................................................50 ascii codes........................................ 283 ATAC............................................... 272 ATBD............................................... 272 ATmega328........................................43 ATRP................................................ 272 ATWR.............................................. 272 audio............................................... 317 Auswahlliste..................................... 294 autoplay........................................... 317 background........................................76 background-color................................89 backup...............................................14 Balkendiagramm............................... 319 Batterie............................................ 274 baudrate............................................46 BC547C............................................ 345 bgcolor..............................................76 Bild...................................................83 blonde.mp3...................................... 266 body.......................................74, 76, 90 border...............................................89 border-radius......................................89 button...............................................83 byte..................................................38 C............................................34, 36, 37 Cascading Style Sheet..........................73 CGI...................................................97 cgi-bin....................................... 97, 110 CGIHTTPServer............................. 94, 99 checkbox............................................92 chmod............... 115, 122, 127, 134, 139, .............................145, 156, 177 color..................................................89 controls............................................ 317 coords............................................. 105 CS20............................................... 152 CSS.................................... 94, 110, 174 Cursor Linie...............................360, 361 Darlington.................................136, 300 date................................................ 192
● 364
15.107-IoT-05.indd 364
18-05-15 11:23
● Index
datetime.......................................... 192 delay()...............................................37 deplace............................................ 360 DHCP........................................... 19, 20 digitalRead....................................... 121 digitalWrite.........................................37 Diode................................ 137, 149, 308 Disk Imager.................................. 14, 22 display...............................................89 inline.................................................89 dropbox........................................... 294 duty cycle......................................... 136 echelle............................................. 360 Edimax..............................................13 EEPROM.............................................44 else...................................................40 E-Mail.............................................. 313 enable............................................. 282 equals................................................59 exor..................................................45 favicon...............................................95 Feuchtigkeitssensor........................... 183 Flash.................................................44 float............................................ 38, 89 font-family.........................................89 font-size.............................................89 form name.........................................92 Freilaufdiode...................... 137, 149, 350 function.............................................22 Funk..................................................59 Funktionen.........................................54 getElementById................................. 288 GIMP.................................. 31, 104, 161 Gmail........................................313, 316 HCH1000......................................... 130 HDMI Konverter................................ 266 head.......................................74, 76, 87 High..................................................37 Hotspot...................... 104, 105, 106, 267 href.................................. 105, 106, 114 HTML........................................... 97, 96 icon........................................... 96, 161 if.......................................................40 iframe.............................................. 111 img...................................................82 import...............................................48
Impulslange...............................154, 242 index.html.................................. 94, 260 indexOf..............................................61 inline........................................... 82, 89 int.....................................................55 IP Adresse......................... 19, 22, 24, 29 isocalendar....................................... 192 ISS shield............................ 11, 117, 203 JavaScript..........................................73 Klasse................................................83 LCD shield........................................ 282 LDR..........................................235, 261 length.......................................... 58, 59 Link...................................................76 Links.................................................87 LiquidCrystal..................................... 283 LM317............................................. 355 loop()................................................37 Low...................................................37 Luftfeuchtigkeit................................. 128 lux.................................................. 233 lxde............................................. 26, 28 Magnetschalter................................. 118 map................................................ 110 margin......................................... 85, 89 math............................................... 229 max-width.................................... 88, 89 MCP1702/3302................................. 324 MCP6232........................... 209, 210, 307 Menschensensor................................ 329 meta.................................................87 minicom.............................................65 mp3................................................ 266 mpg321........................................... 266 name......................................... 21, 250 nicht..................................................35 No such file....................... 117, 181, 357 NTC................................................. 225 oder..................................................45 Only 1 xsession...................................29 OpAmp............................. 209, 210, 307 option.............................................. 295 OSError............................... 99, 115, 177 OTAMP............................................. 271 output...............................................36 password...........................................23
● 365
15.107-IoT-05.indd 365
18-05-15 11:23
Internet of Things â&#x2014;? 35 Projekte mit Raspberry Pi und Arduino
Piccolino.........................27, 73, 263, 323 Piezo............................................... 208 pinMode.............................................36 port 8080...........................................94 port forwarding................................. 101 prescaler.......................................... 151 puls/pause....................................... 148 pulseIn............................................ 244 Putty.................................................23 PuTTY X11 proxy.................................28 PWM.........................................136, 148 PySerial........................................... 361 Radio Shield.......................................10 RAL 5W-K......................................... 349 RAM..................................................44 random............................................ 340 raspi-config................................ 13, 191 Raswik....................................... 10, 225 readline........................................... 193 reboot.......................................... 21, 22 refresh......................................... 31, 87 relais........................................196, 336 Relais shield..................................... 197 RS................................................... 282 Schallgeschwindigkeit........................ 242 Script................................................89 SCT-016........................................... 305 SD Karte............................................. 8 select............................................... 294 SEN0018.......................................... 248 serial.................................................50 Serial Monitor.....................................50 Serial.available....................................47 Serial.begin........................................46 Serial.print.........................................46 Serial.println.......................................46 Serial.read..........................................46 serial_sw_invert................................ 326 serialEvent.........................................46 seriell................................................46 setChar..............................................59 setup()..............................................51 shape.............................................. 105 Shunt.............................................. 142 sleep.................................................67 Slice of Radio......................................10
Snubber-Netzwerk............................. 348 Software Oszilloskop.......................... 358 solid state........................................ 343 Spannungsteiler................................ 142 src....................................................82 SRF stick.............................. 10, 66, 271, SRF05.............................................. 240 SSH...................................................23 ssmtp.............................................. 313 static ip..............................................20 static lease.........................................18 Steckernetzteil.................................. 203 strings...............................................58 stylesheet......................77, 79, 169, 177 submit...............................................90 substring............................................61 sudo apt-get update............................15 sudoset.sh..........................................28 sys.................................................. 290 tabel..................................................78 table..................................................78 tag....................................................79 target.............................................. 114 Tastatur.............................................14 Tastverhaltnis................................... 136 TC4427A.......................................... 350 TCCR2B............................................ 152 td......................................................84 text...................................................80 text-align...........................................89 timeout..............................................71 timer............................................... 242 today............................................... 192 tr......................................................78 Transistor......................................... 345 trim...................................................61 try/except.................................126, 177 ULN2003...................................136, 300 Ultraschall........................................ 240 Unable to access.................................28 und...................................................45 usemap............................................ 105 viewport..................................... 88, 110 vLink.................................................76 void............................................. 35, 55 Voltmeter......................................... 123
â&#x2014;? 366
15.107-IoT-05.indd 366
18-05-15 11:23
● Index
wav................................................. 317 while.................................................51 WinOscillo........................................ 358 WinSCP..............................................29 WLAN................................................13 word..................................................38 Xinerama...........................................26 XinoRF...............................................10 Xming................................................24 Xwindows...........................................24 Zenerdiode....................................... 203 Zufallszahl........................................ 227 Zugriffsrecht............................... 30, 103
● 367
15.107-IoT-05.indd 367
18-05-15 11:23
Bert van Dam ist freiberuflicher Autor von Büchern, Kursen und Artikeln über PIC- und ARMMikrocontroller, Arduino, Raspberry Pi, Künstliche Intelligenz und die Programmiersprachen JAL, C, Assembler, Python und Flowcode.
ISBN 978-3-89576-305-2
Elektor-Verlag GmbH 52072 Aachen www.elektor.de
In diesem Buch stellen wir 35 interessante und nützliche Projekte vor, die demonstrieren, wie Sie selbst ein Internetof-Things-System anlegen können. Wir gehen auf die Hardware ein, einer perfekten Symbiose von Raspberry Pi und Arduino, und entwickeln die Software, die eine Steuerung über das Internet verwirklicht. Wir setzen dabei WLAN- und Funkverbindungen ein und vermeiden so einen Kabelsalat im Haus. Wenn Sie die Projekte aufbauen, verfügen Sie über ein vollständiges Internet-of-Things-System, mit dem Sie alles im Haus bedienen, steuern und überwachen können, zum Beispiel ob Post im Briefkasten steckt oder das Auto in der Garage steht. Sie können bequem vom Sofa aus das Licht einschalten oder die Alarmanlage aktivieren/deaktivieren. Durch die ausführlichen Erläuterungen wird es Ihnen ein Leichtes sein, Projekte anzupassen, um zum Beispiel die Kaffeemaschine oder das Fernsehgerät aus der Ferne einund auszuschalten. Über den Index finden Sie leicht kreative Projekte, die Ihnen als Ausgangspunkt für eigene Entwicklungen dienen können, mit denen Sie selber alles, was Sie wollen, mit dem Internet verbinden können. Die Projekt-Software kann kostenlos von der ElektorWebseite heruntergeladen werden.
INTERNET OF THINGS
●
Das Internet of Things (Internet der Dinge) ist eine unumkehrbare Entwicklung. Wir möchten gerne alles im Haus mit unserem Smartphone oder Tablet erledigen – von Facebook bis Fernsehen, Lampen steuern oder die Heizungstemperatur einstellen.
INTERNET OF THINGS
BERT VAN DAM
Bert van Dam
35 PROJEKTE MIT RASPBERRY PI UND ARDUINO
LEARN
INTERNET OF THINGS
DESIGN
35 PROJEKTE MIT RASPBERRY PI UND ARDUINO
Bert van Dam LEARN
DESIGN
SHARE
SHARE
LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SH ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● GN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● S ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ●