Bauen Sie Ihre
eigene Drohne!
Ferngesteuerte
Autos mit Pi-Power
Minecraft mit
Handgesten zocken
Der Raspberry Pi als
Synthesizer
Erweitern Sie den Pi
...
Der kompakte Mini-PC in der Praxis Virtuelle Realität im Eigenbau
Ferngesteuerte Autos mit Pi-Power
Über
60 Projekte
Minecraft mit Handgesten zocken
Der Raspberry Pi als Synthesizer
PCGH GUIDE 15/17
€ 12,99 Österreich € 14,50 Schweiz CHF 22,Benelux € 15,-
Lernen Sie den kleinsten PC der Welt kennen! Bauen Sie Ihre eigene Drohne!
GADGETS IM EIGENBAU MEHR POWER FÜR DEN PI SOFTWARE PROGRAMMIEREN
Erweitern Sie den Pi mit Zusatzhardware
Willkommen bei
Raspberry Pi Projekte
Der kostengünstige Mini-Rechner Raspberry Pi wurde konzipiert, um allen möglichen Anwendern leichten Zugang zu einem Computer zu verschaffen – vom durchschnittlichen Heimanwender bis hin zum Bildungssektor. Der Erfolg war überwältigend: Schulen, Hacker, Bastler und Firmen nahmen den Raspberry Pi mit offenen Armen und großer Begeisterung auf. Fast 15 Millionen Exemplare sind mittlerweile verkauft worden. Mit dem Raspberry Pi macht das Programmieren, Experimentieren und Tüfteln richtig Spaß. Für alle Altersklassen und Erfahrungsstufen gibt es passende Pi-Projekte: von hardwarebasierten Projekten wie dem Bau eines Pi-gesteuerten Modellautos über Softwareprojekte wie die Programmierung eines digitalen Assistenten bis hin zu elektronischen Projekten, bei denen Sie den Pi in ein Oszilloskop oder eine Drohne verwandeln. Mit diesem Bookazine möchten wir Ihre Phantasie anregen und Ihre Kreativität entfesseln.
Inhalt 8
10 praktische Raspberry-Pi-Projekte Von Klangexperiment bis Stop-Motion-Animation
Hardware 32
Der Pi als Router
Die Grundlagen von OpenWRT
36 Projekt: PolaPi Zero
Eine digitale Polaroid-Kamera
38 R aspberry-Pi-gesteuertes Modellauto bauen
Mit RC-Bedienung per Smartphone
44 Roboterarm selbst gebaut
Natürliche Bewegungssteuerung
46 Der Raspberry Pi 2 als Media-Center
Leistungsstarker Wohnzimmer-PC
48 Tweetender drahtloser Wassermelder-Sensor
Machen Sie den Keller überflutungssicher
Software
72
Performance-Tipps
76 Digitaler Assistent, Teil 1
Spracherkennung
80 Digitaler Assistent, Teil 3
Mit dem D/A-Wandler von Pimoroni
56 Digitaler Bilderrahmen
Mit Raspberry Pi, HDMIPi und Screenly
Der Pi im Internet der Dinge
90 Projekt: Scripto
Textverarbeitung ohne Ablenkungen
92 Kabellos drucken mit dem Raspberry Pi
Hauchen Sie alten Druckern neues Leben ein
60 Bauen Sie eine MinecraftRaspberry-Pi-Konsole
94 Raspberry Pi fernbedienen
66 Visualisieren Sie Ihre Musik in Minecraft mit Piano HAT
96 Mit Python direkt in Minecraft coden
Spielen und programmieren
Minecraft und Piano HAT kombinieren
Rechner via Webinterface steuern
Blöcke setzen per Programm
98 Der Pi als Synthesizer
4
Nutzen Sie ein digitales Oszilloskop
86 CPU-Temperatur mit Dizmo überwachen
54 Der Pi Zero als vernetztes Hi-Fi-Gerät
Die gegebenen Kommandos ausführen
82 Wissenschaftliche Experimente mit ExpEYES
Umgebungen erschaffen und bearbeiten
Sagen Sie Ihrem Rechner, was er tun soll
78 Digitaler Assistent, Teil 2
50 Virtual Reality mit dem Pi
Mehr Power für Ihren Raspberry Pi
Einen einfachen Synthi programmieren
Elektronik
106 Raspberry Pi Auto-
Computer
Ein Touchscreen-Navigationssystem
114 Projekt: SmartPlantPi Das perfekte Indoor-Gartensystem 116 Erstellen Sie ein EchtzeitLuftfeuchtigkeitsdisplay Live-Messungen mit dem SenseHAT 118 Farbige LEDs für den Raspberry Pi Die Zusatzplatine Blinkt! von Pimoroni
130 Eine Matrix bauen
120 Verwandeln Sie den Pi in ein Mikro-Oszilloskop
134 Raspberry Pi mit Gestensteuerung
Mit dem BitScope Micro
Programmieren Sie LED-Displays
Die eindrucksvolle Zusatzplatine Hover
124 Selbst gemacht: Pi Glove 2
138 Selbst gebaut: Joytone Ein Keyboard aus Joysticks
126 Ein Power-Handschuh für Minecraft
140 Selbst gemacht: Spielroboter
Neues Helferlein für daheim
Mehr Spielspaß mit diesem coolen Hack
Vier gewinnt gegen den Raspberry Pi
142 Quadrocopter mit Raspberry Pi
Auf in den Himmel mit diesem Gadget
148 20 Hacking-Projekte
Hardware-Hacks mit dem Raspberry Pi
5
DIE AKTUELLEN PREMIUM-BOOKAZINES IM ÜBERBLICK
NEU
Bequem online bestellen: shop.computec.de/edition
NEU
Oder einfach digital lesen: epaper.computec.de
NEU
Raspberry Pi E
T K E J O R P
Ein Unternehmen der MARQUARD MEDIA INTERNATIONAL AG Verleger Jürg Marquard Verlag Computec Media GmbH Dr.-Mack-Straße 83, 90762 Fürth Telefon: +49 911 2872-100 Telefax: +49 911 2872-200 E-Mail: [email protected] www.computec.de
Geschäftsführer Hans Ippisch (Vorsitzender), Rainer Rosenbusch Redaktionsleiter (V.i.S.d.P.) Mitarbeiter dieser Ausgabe Lektorat Layoutkoordination
Lars Craemer, verantwortlich für den redaktionellen Inhalt, Adresse siehe Verlagsanschrift MDV Textdienste, Andreas Spies, Marc Brehme, Frank Neupert-Paries, Andrea Reiss, Hansgeorg Hafner Claudia Brose (Ltg.), Birgit Bauer, Karline Folkendt Albert Kraus
Vertrieb, Abonnement Werner Spachmüller Marketing Jeanette Haag Produktion Martin Closmann (Ltg.) Head of Online Christian Müller Entwicklung Markus Wollny (Ltg.), Aykut Arik, Ruben Engelmann, René Giering, Tobias Hartlehnert, Christian Zamora SEO/Produktmanagement Stefan Wölfel Webdesign Tony von Biedenfeld, Daniel Popa Anzeigen CMS Media Services GmbH, Dr.-Mack-Straße 83, 90762 Fürth Verantwortlich für den Anzeigenteil Annett Heinze, Adresse siehe Verlagsanschrift Anzeigenberatung Print Bernhard Nusser: Tel.: 0911-2872-254; [email protected] Judith Gratias-Klamt: Tel.: 0911-2872-252; [email protected] Alto Mair: Tel.: 0911-2872-144; [email protected] Head of Digital Sales Jens-Ole Quiel: Tel.: +49 (0) 911-2872-253; [email protected] Head of B2B-Sales Peter Elstner: Tel.: +49 (0) 911-2872-152; [email protected] Anzeigenberatung Online Weischer Online GmbH Elbberg 7, 22767 Hamburg Tel.: +49 40 809058-2239 Fax: +49 40 809058-3239 www.weischeronline.de [email protected] Anzeigendisposition: [email protected] Datenübertragung: via E-Mail: [email protected] Es gelten die Mediadaten Nr. 30, gültig ab 01/2017. Abonnement Die Abwicklung (Rechnungsstellung, Zahlungsabwicklung und Versand) erfolgt durch DPV Deutscher Pressevertrieb GmbH als leistender Unternehmer: Post-Adresse: Leserservice Computec, 20080 Hamburg, Deutschland Ansprechpartner für Reklamationen ist Ihr Computec-Team unter: Deutschland: E-Mail: [email protected], Tel.: 0911-99399098, Fax: 01805-8618002* Support: Montag 07:00–20:00 Uhr, Dienstag–Freitag 07:30–20:00 Uhr, Samstag 09:00–14:00 Uhr * (14 Cent/Min. aus dem dt. Festnetz, max. 42 Cent/Min. aus dem dt. Mobilfunk) Österreich, Schweiz und weitere Länder: E-Mail: [email protected], Tel: +49-911-99399098, Fax: +49-1805-8618002 Support: Montag 07:00–20:00 Uhr, Dienstag–Freitag 07:30–20:00 Uhr, Samstag 09:00–14:00 Uhr Vertrieb und Einzelverkauf: DPV Deutscher Pressevertrieb GmbH, Am Sandtorkai 74, 20457 Hamburg, Internet: www.dpv.de Druck: LSC Communications Europe, ul. Obroncow Modlina 11, 30-733 Krakau, Polen COMPUTEC MEDIA ist nicht verantwortlich für die inhaltliche Richtigkeit der Anzeigen und übernimmt keinerlei Verantwortung für in Anzeigen dargestellte Produkte und Dienstleistungen. Die Veröffentlichung von Anzeigen setzt nicht die Billigung der angebotenen Produkte und Service-Leistungen durch COMPUTEC MEDIA voraus. Sollten Sie Beschwerden zu einem unserer Anzeigenkunden, seinen Produkten oder Dienstleistungen haben, möchten wir Sie bitten, uns dies schriftlich mitzuteilen. Schreiben Sie unter Angabe des Magazins, in dem die Anzeige erschienen ist, inkl. der Ausgabe und der Seitennummer an: CMS MEDIA SERVICES GmbH, Annett Heinze, Anschrift siehe oben. Einsendungen, Manuskripte und Programme: Mit der Einsendung von Manuskripten jeder Art gibt der Verfasser die Zustimmung zur Veröffentlichung in den von der Verlagsgruppe herausgegebenen Publikationen. Urheberrecht: Alle veröffentlichten Beiträge bzw. Datenträger sind urheberrechtlich geschützt. Jegliche Reproduktion oder Nutzung bedarf der vorherigen, ausdrücklichen und schriftlichen Genehmigung des Verlags.
MARQUARD MEDIA INTERNATIONAL AG Deutschsprachige Titel: PC GAMES, PC GAMES HARDWARE, PC GAMES MMORE, PLAY 4, N-ZONE, GAMES AKTUELL, XBG GAMES, SFT, LINUX-MAGAZIN, LINUXUSER, EASY LINUX, RASPBERRY PI GEEK, WIDESCREEN, MAKING GAMES Internationale Zeitschriften: Polen: COSMOPOLITAN, HARPER'S BAZAAR, JOY, HOT MODA, SHAPE, ESQUIRE, PLAYBOY, CKM, JAMI; Ungarn: JOY, ÉVA, INSTYLE, SHAPE, MENS HEALTH, RUNNERS WORLD, PLAYBOY, APA
5. Auflage p143
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE
10
praktische
Raspberry-PiProJekte Sie haben immer noch nichts mit Ihrem Raspberry Pi gemacht? Lesen Sie unsere Experten-Beratung und bringen Sie Ihr eigenes erstaunliches Raspberry-Pi-Projekt auf den Weg!
8
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE
Stop-MotionAnimationen machen
Einen RasPi-WebServer bauen
Erstellen Sie einen Sprachsynthesizer
Seitdem wir diesen unglaublichen, scheckkartengroßen Computer mit unseren Publikationen begleiten, hat sich herausgestellt, dass es nur zwei Gruppen von Raspberry-Pi-Besitzern gibt: diejenigen, die ihren benutzen, und die, die das nicht tun. Ob es die Angst vor dem Unbekannten ist oder zu wenig Zeit oder Inspiration, wenn wir Leute fragen, was Sie mit ihrem Pi anstellen, hören wir häufig, dass er immer noch in der Packung liegt. Trifft das auch auf Sie zu, dann sind Sie hier richtig. In diesem Artikel zeigen wir zehn handgemachte Raspberry-Pi-Projekte, die praktisch jeder nachbauen kann. Es handelt sich hierbei keinesfalls um eine zufällige Auswahl. Vielmehr sollen diese praktischen Ideen helfen, größere und bessere Projekte anzustoßen. Erfahrungen aus diesen Projekten können helfen, etwas vollkommen Neues zu erschaffen. Zum Beispiel können Sie unser Twitter- und das Dreifarbige-Lampe-Tutorial kombinieren, um eine Schreibtischlampe zu bauen, die die Farbe ändert, wenn Ihr Tweet re tweeted wird. Oder Sie könnten Pong in Minecraft-Pi spielen oder mit einem Knopf, der an Scratch angebracht ist, Fotos mit dem Kameramodul Ihres Raspberry Pis machen. Und so weiter und so fort. Alle diese Projekte sind Open Source, Sie sind also aufgefordert, zu optimieren und daraus etwas gänzlich Neues zu entwickeln. Wenn Sie Ihre Tweaks und Änderungen mit der Community teilen, dann leben Sie den Gedanken von Open Source und alle profitieren davon … Eigenen TwitterBot coden
9
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE
Musik mit dem Raspberry Pi machen Programmieren Sie eigene Melodien mit Sonic Pi und erstellen Sie Töne und Roboterklänge. Was Sie brauchen: n Portable Lautsprecher n Sonic Pi
n Mit dem Sonic Pi lassen sich die Grund lagen des Coding prima lernen und Spaß haben.
10
Mit Scratch kann man die Grundlagen des Codens auch leicht an Kinder und Personen ohne Computerkenntnisse vermitteln. Gerade für Kinder ist das Pro gramm geeignet, weil es das Erstellen von Videospielen spielerisch mit Lernen ver bindet. So bringt es Menschen das Pro grammieren mittels Musik bei. Mit einer simplen Sprache, die grundlegende Lo gikschritte (fortgeschrittener als Scratch) nutzt, kann es entweder der nächste Schritt für begeisterte Programmierer werden oder Sie machen damit Musik für einen Roboter oder das Internet der Dinge.
01
Sonic Pi erhalten
Wenn Sie die aktuelle Version von Raspbian installiert haben, ist Sonic Pi schon darin enthalten. Nutzen Sie eine ältere Version, müssen Sie es noch über die Repos installieren:
$ sudo apt-get install sonic-pi
MUSIK MIT DEM RASPBERRY PI MACHEN
Indem wir mehr die Funktionen des Sonic Pi nutzen, können wir komplexere Melodien erschaffen.
02
Erste Schritte mit Sonic Pi
Sonic Pi befindet sich in den Menüs in der Kategorie „Education“. Öffnen Sie es und Sie sehen etwas, das wie eine IDE aussieht. Im Bereich auf der linken Seite können Sie den Code für Ihr Projekt mit dem richtigen Syntax-Highlighting für einen eigenen Sprachstil eingeben. Im Betrieb zeigt ein Infobereich an, was gerade über Sonic Pi gespielt wird. Eventuelle Fehlermeldungen werden als Referenz in einem eigenen Bereich angezeigt.
04
Den Beat festlegen
Bei jedem Musikstück werden Sie die Geschwindigkeit festlegen wollen. Zunächst schreiben wir:
with_tempo 200 …an den Beginn unseres Codes. Wir können es testen, indem wir einige Midi-Noten mittels play_pattern erstellen:
play_pattern [40,25,45,25,25,50,50] Das spielt pretty_bell-Noten dieser Töne in dem von uns festgelegten Tempo ab. Sie können längere und kürzere Zeichenketten erstellen und auch die Art des Abspielens ändern.
03
Ihre erste Note
Als Erstes versuchen wir, auf dem Sonic Pi ganz einfach nur eine Note abzuspielen. Sonic Pi verfügt über einige voreingestellte Standardwerte, sodass wir wie folgt beginnen:
play 50 Drücken Sie den Play-Button und das Ausgabefenster zeigt an, was gespielt wird. Der pretty_bell-Sound ist der Standardausgabeton des Sonic Pi; 50 bestimmt Tonhöhe und Klang des Sounds.
Der komplette Code with_tempo 200 play_pattern [40,25,45,25,25,50,50] 2.times do with_synth “beep” play_pattern [40,25,45,25,25,50,50] play_pattern [40,25,45,25,25,50,50].reverse end
Sie lernen ...
05
Melodie erweitern
Indem wir mehr der Funktionen des Sonic Pi nutzen, können wir komplexere Melodien erstellen. Den Notentyp ändern Sie mit with_synth, invertieren Bitmuster und erstellen mit der x.times-Function eine endliche Schleife; do und end kennzeichnen deren Start und Ende. Vor dem Wiederholen wird alles nacheinander abgespielt, ähnlich einem „if or while loop“ bei normalem Code.
play_pad “saws”, 3 in_thread do with_synth “fm” 6.times do if rand < 0.5 play 30 else play 50 end sleep 2 end end 2.times do play_synth “pretty_bell” play_pattern [40,25,45,25,25,50,50] play_pattern [40,25,45,25,25,50,50].reverse end
1. Coden
Der Coding-Stil des Sonic Pi nutzt Konzepte aus Standard-Programmiersprachen – if-Anweisungen, Schleifen, Threads etc. Während Scratch die Logic vermittelt, lehrt Sonic Pi deren Struktur.
2. RoboterKlänge
Lassen Sie den Sonic Pi kontextsensitive Klänge wie Zirpen und Piepsen und damit eine vertraute Stimmung zu erzeugen, wenn er vor sich hin dudelt.
06
Ein Konzert spielen
Mittels der in_thread-Funktion lässt sich ein weiterer Thread für die Sonic-Pi-Instanz erstellen und mehrere Zeilen Musikcode gleichzeitig statt hintereinander abspielen. In unseren Beispiel wird eine Reihe Noten in zufälliger Reihenfolge gespielt, die von Noten begleitet werden, die durch die Position und Geschwindigkeit der Maus mittels der play_pad-Funktion erzeugt werden.
3. MIDI
Das Musical Instrument Digital Interface ist ein Standard für digitale Musik. Die Töne , die im Sonic Pi erzeugen werden, machen davon Gebrauch.
11
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE
n Mit eSpeak ist es einfacher als Sie denken, Ihrem Raspberry Pi das Sprechen beizubringen.
Raspberry Pi Sprachsynthesizer
Mit der vielseitigen Python-Bibliothek eSpeak statten Sie Ihre Raspberry-Pi-Projekte mit der Macht der Sprache aus.
Was Sie brauchen: n Portable USB-Lautsprecher n Python-eSpeak-Modul n eSpeak n Raspbian (aktuellstes Image)
12
Mit dem Raspberry Pi können Sie einen Roboter steuern oder sogar eine ganze Palette von netzwerkfähigen Geräten in Ihrem Haushalt oder Büro – „Internet der Dinge“ ist hier das Stichwort. Aus diesen und weiteren Gründen könnten Sie den Raspberry Pi auch für „text-to-voice“-Kommandos nutzen wollen. Da Raspbian auf Debian basiert, steht auch die leistungsstarke eSpeak-Bibliothek jedermann leicht zur Verfügung. Es gibt auch ein Modul, um eSpeak in Python zu nutzen. Dieses ist leistungsfähiger als die Standard-Befehlszeile und ist damit für Automatisierungsaufgaben geeignet.
01
Alles, was Sie brauchen
Wir installieren alles, was wir für dieses Tutorial benötigen, auf einmal – inklusive der eSpeak-Bibliothek und benötigten Python-Module. Geben Sie im Terminal ein:
Durch verschiedene Optionen können Sie die Art und Weise, wie eSpeak Text liest, verändern.
02
Die ersten Worte des Pi
Die Nutzung der eSpeak-Bibliothek ist sehr einfach – tippen Sie das, was gesagt werden soll, einfach wie folgt ins Terminal:
$ espeak “[message]” Es werden die Standardwerte der Bibliothek verwendet, um den eingegebenen Text vorzulesen.
03
Sagen Sie etwas mehr
Sie können die Art, wie eSpeak den Text lesen wird, mit einer Reihe an Optionen ändern. Dazu gehören etwa Geschlecht, Lesegeschwindigkeit und sogar die Art, wie Silben betont werden. Das Kommando beispielsweise so zu schreiben:
$ espeak -ven+f3 -k5 -s150 “[message]” …nutzt eine weibliche Stimme, betont Großbuchstaben und verlangsamt das Lesen.
06
Ein Sprachsynthesiser
Das Code-Listing erstellt ein einfaches Interface mit Tkinter. Es kommt mit vorgegebenen Voice-Tasten und benutzerdefinierter Eingabemethode. Wir zeigen, wie sich die Ausgabe des eSpeak-Moduls manipulieren lässt. Das kann zum Lesen von Tweets oder automatisierten Nachrichten genutzt werden. Viel Spaß!
Der komplette Code Importieren Sie die notwendigen eSspeak- und GUIModule sowie das Modul, um die Zeit herauszufinden. Definieren Sie die unterschiedlichen Funktionen des Interfaces, inkl. einer einfachen festen Nachricht mit der Zeit und einer benutzerdefinierten Meldung. Erstellen Sie das Grundfenster mit Tkinter für Ihr Interface und auch die Variable für die Texteingabe.
04
Kommandos mit Python geben
Die einfachste Möglichkeit, eSpeak in Python zu verwenden, ist subprocess, um eine Kommandozeilen-Funktion direkt aufzurufen. Importieren Sie subprocess in ein Python-Script:
subprocess.call([“espeak”, “[options 1]”, “[option 2]”,...”[option n]”, “[message]”) Die Nachricht kann von einer Variable genommen werden.
05
Die Muttersprache
Das Python eSpeak-Module ist sehr einfach zu benutzen, um Text in Sprache zu konvertieren. Versuchen Sie:
from espeak import espeak espeak.synth(“[message]”) Sie können das dann für Automatisierung in Python übernehmen, wie Sie es mit anderen Modulen auch tun würden.
Die Texteingabe hängt von der erstellten Variable ab und jeder Button ruft eine spezielle Funktion auf, die wir weiter oben im Code definiert haben.
Lernen Sie zu programmieren, während Sie eines der größten Spiele aller Zeiten spielen! Was Sie brauchen: n Raspbian (aktuelle Version) n Minecraft-Pi Tarball n Tastatur & Maus n Internetverbindung
n Im Gegensatz zu allen anderen Versionen von Minecraft fordert Sie die Pi-Version zum Hacken auf.
14
Minecraft ist wahrscheinlich gerade das größte Spiel der Welt. Es ist für fast jedes erdenkliche Format erhältlich, von PCs über Spielekonsolen bis hin zu Mobiltelefonen. So überrascht es kaum, dass es für Raspberry Pi verfügbar ist. Obwohl es auf den ersten Blick wie eine vereinfachte Version der Pocket Edition (für Tablets und Smartphones entwickelt) anmutet, ist die Raspberry-Pi-Edition etwas ganz Besonderes. Das ist die einzige Version von Minecraft, die Usern Zugriff auf seine API (Application Programming Interface) gestattet. In diesem Projekt erfahren Sie, wie Sie Minecraft-Pi einrichten und so konfigurieren, dass Sie mit Minecraft in einer Weise wie noch nie zuvor interagieren können. Und das ist nur die Spitze des Eisbergs …
01
Voraussetzungen
Minecraft-Pi setzt ein laufendes Raspbian auf Ihrem Raspberry Pi voraus. Wenn das bei Ihnen noch nicht der Fall ist, laden Sie es auf raspberrypi.org runter und richten Sie es ein. Ebenso wird X Window benötigt. Von der Eingabeaufforderung aus müssen Sie eigentlich nur startx tippen, um zum Desktop zu kommen.
MINECRAFT-PI PROGRAMMIEREN
02
Installation
Stellen Sie sicher, dass Sie in Ihrem Home-Ordner sind und laden Sie das Minecraft-Pi-Paket mit den folgenden Kommandos in einem Terminal-Fenster herunter:
cd ~ wget https://s3.amazonaws.com/ assets.minecraft.net/ pi/minecraft-pi-0.1.1.tar.gz Um es zu nutzen, müssen wir es zunächst entpacken. Geben Sie Folgendes ein:
tar -zxvf minecraft-pi-0.1.1.tar.gz Wechseln Sie nun in das neu entpackte Minecraft-Pi-Verzeichnis und versuchen Sie, es zum ersten Mal zu starten:
cd mcpi ./minecraft-pi Minecraft-Pi spielen
03
Schauen Sie sich im Spiel um. In Minecraft bewegen Sie sich mit der Maus und den WASD-Tasten. Die Zahlen 1-8 wählen Items in der Quickbar, mit der Leertaste springen Sie und mit Shift laufen Sie langsam (damit Sie nicht von Kanten fallen). „E“ öffnet das Inventar und ein Doppelklick mit der Leertaste wechselt zur Fähigkeit „Fliegen“.
04
Python API konfigurieren
Um Minecraft mit der Python-API kontrollieren zu können, müssen Sie den Python-API-Ordner aus dem /mcpi-Ordner an einen neuen Ort kopieren. Geben Sie im Terminal Folgendes ein:
cp -r ~/mcpi/api/python/mcpi ~/ minecraft In diesem Ordner wollen wir nun ein „boilerplate“-Python-Dokument erstellen, das die API mit dem Spiel verbindet. Schreiben Sie Folgendes ins Terminal:
cd ~/minecraft nano minecraft.py Kopieren Sie Folgendes ins offene Nano, speichern Sie, verlassen Sie mit Ctrl+X, drücken Sie Y (für Ja) und kehren Sie mit Enter zur Eingabeaufforderung zurück:
from mcpi.minecraft import Minecraft from mcpi import block from mcpi.vec3 import Vec3 mc = Minecraft.create() mc.postToChat(“Minecraft API Connected”)
05
Python Script testen
Das eben erstellte kurze Script enthält alles, was Sie brauchen, um Minecraft-Pi in die Python-Programmiersprache zu hacken. Damit es funktioniert, muss das Spiel bereits laufen (und gespielt werden). Mittels Tab bekommen Sie
Der komplette Code # !/usr/bin/env python from mcpi.minecraft import Minecraft from mcpi import block from mcpi.vec3 import Vec3 from time import sleep, time import random, math mc = Minecraft.create() # make a connection to the game playerPos = mc.player.getPos() # function to round players float position to integer position def roundVec3(vec3): return Vec3(int(vec3.x), int(vec3.y), int(vec3.z)) # Funktion zum schnellen berechnen von Entfernungen zwischen Punkten def distanceBetweenPoints(point1, point2): xd = point2.x - point1.x yd = point2.y - point1.y zd = point2.z - point1.z return math.sqrt((xd*xd) + (yd*yd) + (zd*zd))
Sie lernen ... Funktionelles Coding Unser Code ist unkompliziert gehalten. Wir haben einige einfache Funktionen erstellt (Beginn mit def) und if, else und while benutzt, um die Abfragen zu erstellen.
def random_block(): # create a block in a random position randomBlockPos = roundVec3(playerPos) randomBlockPos.x = random.randrange(randomBlockPos.x - 50, randomBlockPos.x + 50) randomBlockPos.y = random.randrange(randomBlockPos.y - 5, randomBlockPos.y + 5) randomBlockPos.z = random.randrange(randomBlockPos.z - 50, randomBlockPos.z + 50) return randomBlockPos def main(): # the main loop of hide & seek global lastPlayerPos, playerPos seeking = True lastPlayerPos = playerPos
randomBlockPos = random_block() mc.setBlock(randomBlockPos, block.DIAMOND_BLOCK) mc.postToChat(“A diamond has been hidden somewhere nearby!”) lastDistanceFromBlock = distanceBetweenPoints(randomBlockPos, lastPlayerPos) timeStarted = time() while seeking: # Position des Spielers erhalten playerPos = mc.player.getPos() # Hat sich der Spieler bewegt? if lastPlayerPos != playerPos: distanceFromBlock = distanceBetweenPoints(randomBlockPos, playerPos) if distanceFromBlock < 2: #found it! seeking = False else: if distanceFromBlock < lastDistanceFromBlock: mc.postToChat(“Warmer “ + str(int(distanceFromBlock)) + “ blocks away”) if distanceFromBlock > lastDistanceFromBlock: mc.postToChat(“Colder “ + str(int(distanceFromBlock)) + “ blocks away”) lastDistanceFromBlock = distanceFromBlock sleep(2) timeTaken = time() - timeStarted mc.postToChat(“Well done - “ + str(int(timeTaken)) + “ seconds to find the diamond”)
if __name__ == “__main__”: main() im Spiel Kontrolle über die Maus. Öffnen Sie ein neues Terminal-Fenster, lokalisieren Sie Ihren minecraft-Ordner und starten Sie das Script mit den Kommandos:
cd ~/minecraft python minecraft.py Es erscheint die Meldung, dass die API korrekt verbunden wurde. Nun können wir beginnen zu coden!
06
Hide & Seek
Wie Sie am Code oben sehen können, haben wir ein Hide&Seek-Spiel erstellt; eine Adaption von Martin O’Hanlons ursprünglichem Spiel (zu finden auf stuffaboutcode.com). Wenn Sie das Script starten, müssen Sie in so kurzer Zeit wie möglich einen versteckten Diamanten finden. Wir haben dieses Script benutzt, um Ihnen einige der zugänglichen Methoden, die die API bietet, anschaulich zu demonstrieren. Aber natürlich kann sie noch viel mehr als das, was wir mit diesem Spiel zeigen.
15
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE
n Mit ein paar kleinen Veränderungen können Sie Scratch für „Internet der Dinge“-Projekte nutzen.
Erste interaktive Schritte mit Scratch
Experimentieren Sie mit der visuellen Programmiersprache Scratch und steuern Sie Buttons und Lichter an Ihrem Pi Was Sie brauchen: n Steckplatine n LEDs n Buttons n Widerstände n Steckdrähte n ScratchGPIO3
16
Scratch ist eine einfache visuelle Programmiersprache, die oft verwendet wird, allen Altersklassen grundlegendes Programmieren beizubringen. In diesem Projekt erklären wir, wie Sie eine LED aufleuchten lassen, wenn in Scratch ein Button gedrückt wird, und die Farben eines Buchstaben auf einen physischen Knopfdruck hin zu ändern. Mit Scratch kann man alle möglichen Dinge anstellen – von musikalischen Keyboards bis hin zu Controllern für Ihre Scratch-Spiele und -Animationen.
01
Benötigte Software installieren
Loggen Sie sich mit dem Benutzernamen Pi und dem Passwort raspberry ins Raspbian ein. Starten Sie die LXDEDesktop-Umgebung mittels startx. Öffnen Sie dann LXTerminal und geben Sie die folgenden Kommandos ein:
wget http://liamfraser.co.uk/lud/install_scratchgpio3.sh chmod +x install_scratchgpio3.sh sudo bash install_scratchgpio3.sh Das erstellt die spezielle Scratch-Variante ScratchGPIO3 auf Ihrem Desktop. Das ist eine normale Version von Scratch mit einem Python-Script für die Kommunikation zwischen Scratch und dem GPIO. ScratchGPIO wurde von simplesi programmiert. (cymplecy.wordpress.com).
ERSTE INTERAKTIVE SCHRITTE MIT SCRATCH für eine Sekunde und geht dann aus. ScratchGPIO3 nutzt Pin-Nummern anstelle von GPIO-Nummern, um Pins zu identifizieren. Der Pin oben rechts (3.3V) ist Pin Nummer 1, der Pin darunter ist Pin 2 usw.
Sie lernen ... 1. Einfache Schaltkreise
02
Steckplatine verbinden
Schalten Sie Ihren Pi aus und entfernen Sie das Netzkabel. Wenden Sie sich der Steckplatine zu und halten Sie eine LED, einen 330-Ohm-Widerstand und zwei GPIO-Kabel bereit. Verbinden Sie den 3.3V-Pin (Pin rechts oben, am nächsten an der SD-Karte) mit dem einen Ende des 330-Ohm-Widerstands und verbinden Sie dann den Pluspol der LED (das längere Bein ist positiv) mit dem anderen Ende. Der Widerstand beschränkt die Strommenge für die LED. Dann verbinden wir den negativen Anschluss der LED in die negative Schiene des Steckbretts. Verbinden Sie nun einen der Erdungspins (Ground) (z. B. den dritten Pin von rechts in der untersten Pin-Reihe) mit der negativen Schiene. Schließen Sie jetzt den Pi wieder an den Strom an. Die LED sollte jetzt leuchten. Wenn nicht, könnte es sein, dass Sie es falsch herum verbunden haben. Also Strom aus, Beine vertauschen und erneut versuchen.
03
LED ein- und ausschalten
Jetzt ist die LED an einen Pin mit konstanten Pin3.3V angeschlossen. Das ist nicht sinnvoll, da wir sie ein- und ausschalten wollen. Wir verbinden sie daher mit GPIO 17, der sich an- und abschalten lässt. GPIO 17 ist der 6. Pin von rechts in der oberen Pin-Reihe. Schalten Sie den Pi wieder ein. Wir können die LED einschalten, indem wir den GPIO-Pin ansteuern, ihn als Output-Pin definieren und dann seinen Wert auf 1 setzen. Ein Wert von 0 schaltet die LED wieder aus:
echo echo echo echo
Selbst mit diesen sehr einfachen Schaltkreisen bekommen Sie schnell ein Gefühl davon, wie sich der Raspberry Pi bedienen lässt. Wenn Sie Kleinteile kaufen müssen, ist das hier eine gute Anlaufstelle: shop.pimoroni.com
Schalten Sie den Pi wieder aus. Diese Schaltung ist ein wenig komplizierter als die LED, die wir zuvor erstellt haben. Zunächst müssen wir die 3.3V (den Pin oben rechts, mit dem wir unsere LED getestet haben) mit der Positiv-Schiene des Steckbretts verbinden. Dann müssen wir einen 10K-Ohm-Widerstand mit der Positiv-Schiene verbinden und das andere Ende mit einer leeren Spur auf dem Steckbrett. Fügen Sie dann in der gleichen Spur ein Kabel hinzu, dessen eines Ende mit dem GPIO 4 verbunden ist. Das ist zwei Pins rechts neben GPIO 17. Dann verbinden Sie – wiederrum in der gleichen Spur – einen Pin des Druck-Buttons. Schließlich verbinden Sie noch den anderen Pin dieses Buttons mit Masse (Ground), indem Sie ein Kabel mit der gleichen negativen Schiene des Klemmbretts verbinden, an dem Masse (Ground) anliegt. Wenn der Button nicht gedrückt ist, erhält GPIO 4 dann 3.3V. Wird der Button gedrückt, schließt sich der Kreis zur Masse und GPIO 4 erhält 0V (und hat einen Wert von 0), denn es gibt viel weniger Widerstand auf dem Weg zur Masse. Indem wir den Wert des Pins betrachten, können wir das in Aktion sehen und dann durch Drücken des Buttons verändern:
Starten Sie die LXDE-Desktop-Umgebung und öffnen Sie ScratchGPIO3. Erstellen Sie im Steuerungsabschnitt ein einfaches Script, das pin11on sendet, wenn Sprite1 geklickt wird. Klicken Sie dann auf das Sprite. Die LED sollte aufleuchten. Fügen Sie dann dem Script die Anweisung hinzu, eine Sekunde zu warten und dann pin11off zu senden. Klicken Sie erneut das Sprite, leuchtet die LED
Taster verdrahten
2. CodingPrinzipien
Wenn Sie ein Newbie im Programmieren sind, ist Scratch der perfekte Weg, um die von allen Programmiersprachen verwendeten Prinzipien des Codens zu lernen.
3. Reale Auswirkungen
Es gibt nichts Magischeres, als wenn Code von Ihrem Computerbildschirm einen Effekt in der realen Welt verursacht. Ihr erstes Projekt kann vielleicht nur ein Licht an- und ausschalten, aber wenn Sie die Grundlagen beherrschen, gibt es fast keine Grenzen.
Es werde Licht!
Starten Sie den Pi und ScratchGPIO3 wie vorhin. Tragen Sie im Steuerungsabschnitt when green flag clicked sowie eine forever-(Endlos-)Schleife ein, in die Sie eine if else-Anweisung schreiben. Im „operators“-Abschnitt fügen Sie einen if [] = []-Operator zur Anweisung hinzu. Wählen Sie dann den „sensing“-Abschnitt, fügen Sie einen Sensor-Wert zur linken Seite der Gleichung hinzu und setzen Sie diesen auf pin7. Auf der rechten Seite der Gleichung geben Sie 0 ein. Senden Sie pin11on, wenn der Sensor-Wert 0 beträgt, und senden Sie anderweitig pin11off. Klicken Sie die grüne Flagge. Drücken Sie den Button, dann leuchtet die LED auf!
17
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE Xxxxxxxxx
n Google Coder is a brilliant way to introduce yourself to web development
Mit Raspberry Pi einen Webserver bauen Verwandeln Sie Ihren Raspberry Pi mittels Google Coder in einen kleinen, stromsparenden Webserver. Was Sie brauchen: n Internetverbindung n Webbrowser n Google Coder
Wir zeigen viele Arten, den Raspberry Pi zu programmieren, also ist es nur konsequent, sich auch dem Web zuwenden. Es gibt eine neue Möglichkeit, das Internet auf dem Raspberry Pi zu nutzen: Internet-Giant Google veröffentlichte kürzlich Coder – speziell für den Mini-Computer. Dieses auf Raspbian basierende Image macht aus Ihrem Pi einen Webserver und ein Web Development Kit. Einfach verfügbar über ein lokales Netzwerk und mit Support für jQuery ist das ein einfacher Weg, Ihre Fähigkeiten in Sachen Web Development zu verbessern.
01
Google Coder herunterladen
Laden Sie von der Webseite von Google Coder die komprimierte Version des Images herunter. Entpacken Sie es und installieren Sie es mittels dd, wie jedes andere Raspberry Pi Image:
$ dd if=[path to]/raspi.img of=/dev/[path to SD card] bs=1M
MIT RASPBERRY PI EINEN WEBSERVER BAUEN
Der komplette Code HTML
02
Pi mit Kabelnetzwerk verbinden
Für dieses Tutorial müssen Sie Ihren Pi mit einem Netzwerkkabel verbinden. Stecken Sie Ihre neu geschriebene SD-Karte ein, schalten Sie den Pi an und warten Sie einen Moment. Mit einem angeschlossenen Display sehen Sie die Raspbian-StartupSequenz, gefolgt von dem Kommandozeilen Login-Screen.
03
Coder einrichten
Öffnen Sie den Browser auf Ihrem Hauptsystem und rufen Sie http://coder.local auf. Sie müssen die Lizenz manuell akzeptieren. Auf Nachfrage richten Sie dann Ihr Passwort ein und dann können Sie schon mit dem Coden loslegen.
04
Die Sprache des Web
Jetzt ist es Zeit, Ihre eigene App oder Webseite zu erstellen. Klicken Sie auf die „+“-Box neben den Beispielen, benennen Sie Ihre App und klicken Sie „create“. Nun landen Sie im HTML-Bereich der App. Ändern Sie die Hello-World-Zeilen in:
Einfacher HTMLCode, der auf einige wichtige Websites verweisen kann. Der h2-Tag wird benutzt, um mittels Java die Zeit anzuzeigen.
Java Wir beziehen mittels jQuery im JS-Tab die aktuelle Zeit, sodass wir sie auf der Webseite anzeigen können. Wir werden die Zeit als 12-StundenUhr in der ersten if-Abfrage anzeigen und AM und PM nutzen, um zu differenzieren. Die Minuten machen wir durch Hinzufügen einer 0 lesbar, wenn sie kleiner als 10 sind, dann verketten wir alle Variablen und weisen Sie dem Tag h2 zu.
var d = new Date; var hours = d.getHours(); var mins = d.getMinutes(); if (hours > 12) { var hour = (hours - 12); var ampm = “PM”; } else { var hour = hours; var ampm = “AM”; } if (hours == 12) { var ampm = “PM”; } if (mins > 9){ var min = mins; } else { var min = “0” + mins; } var time = “The time is “ + hour + “:” + min + “ “ + ampm; $(“h2”).html(time);
This is a HTML header
This is a new block of default text
05
Beeindruckender Stil
Im CSS-Tab ändern Sie das Aussehen und den Style der Website, ohne dass Sie jedes Mal den Haupt-Code der einzelnen Seiten ändern müssen. Hintergrundfarbe und Schriftart ändern Sie mit:
body { background-color: #000000; color: #ffffff; }
06
Java abfragen
Der dritte Tab erlaubt es Ihnen, die jQuery zu bearbeiten und Ihre Website damit interaktiver zu machen. Wir können eine Meldung erstellen, die bei Mausklick erscheint:
$(document).click(function() { alert(‘You clicked the website!’); } ); 19
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE
Eigenen Twitter-Bot programmieren Erstellen Sie Ihren eigenen Twitter-Bot, der die weisen Sprüche der Linux-User und -Entwickler retweeten kann. Was Sie brauchen: n Internetverbindung n Raspbian (aktuelle Version)
www.raspberrypi.org/ downloads
n Schonen Sie Ihre Maustaste durch einen automatischen Retweeter.
20
Twitter ist ein nützlicher Weg, Informationen mit der ganzen Welt zu teilen und unsere bevorzugte Methode uns schnell und bequem zu informieren. Viele Millionen Menschen nutzen die Microblogging-Plattform auf ihren Computern, Mobilgeräten und teils sogar auf Ihren Fernsehern. Und Sie müssen nicht einmal mehr selbst auf den Retweet-Button drücken. Mit einer Prise Python erledigt das Ihr Raspberry Pi für Sie. So erstellen Sie sich einen eigenen Twitter-Bot …
01
Benötigte Software installieren
02
Bei Twitter registrieren
Loggen Sie sich mit dem Benutzernamen Pi und dem Passwort raspberry in Ihr Raspbian-System ein. Schauen Sie mit dem Kommando sudo apt-get update nach Updates. Installieren Sie dann den Python Package installer mit sudo apt-get install python-pip. Starten Sie danach that sudo pip install twython, um die Twitter-Bibliothek zu installieren, die wir nutzen.
Wir müssen uns bei Twitter mit OAuth authentifizieren. Vorher loggen Sie sich auf https://dev.twitter.com/apps mit dem Account ein, mit dem Ihr Pi tweeten soll. Klicken Sie „Create a new application“. Wir nannten unsere Applikation „LUD Pi Bot“,
EIGENEN TWITTER-BOT PROGRAMMIEREN
gaben ihm die gleiche Beschreibung und als Webseiten-URL http://www.linuxuser.co.uk/. Die Callback-URL ist nicht erforderlich. Akzeptieren Sie nun noch die Entwickler-Bedingungen und klicken Sie dann auf den Create-Button.
03
Zugriffstoken generieren
Ändern Sie im Einstellungsmenü den „Access type“ von „Read only“ auf „Read and Write“ und klicken Sie dann „Update this Twitter application’s settings“. Als Nächstes erstellen Sie ein Zugriffstoken. Klicken Sie dazu auf „Create my access token“. Nach dem Reload der Seite sollten Sie Folgendes sehen: „consumer key“, „consumer secret“ und das Zugriffstoken sowie ein „access token secret“. Das ist alles, was wir brauchen, um uns bei Twitter zu authentifizieren.
04
Ist die Zeit des Tweets neuer als die Zeit des letzten Funktionsaufrufs, retweeten wir ihn.
Bei Twitter authentifizieren
Wir werden unseren Bot als eine Klasse anlegen, bei der wir uns bei Twitter im Constructor authentifizieren. Wir nehmen die Token aus dem vorherigen Schritt als Parameter und erstellen mit ihnen eine Instanz der Twython-API. Außerdem haben wir eine Variable, last_ran, die auf die aktuelle Zeit gesetzt ist. Damit prüfen wir später, ob neue Tweets vorliegen.
05
Einen Benutzer retweeten
06
Der Hauptteil
Zunächst erstellen wir eine Liste der neuesten Tweets eines Users. Dann checken wir jeden Tweet und lesen die Zeit seiner Erstellung aus, die wir dann in ein datetime-Object konvertieren. Nun prüfen wir, ob die Zeit des Tweets neuer ist als die Zeit des letzten Funktionsaufrufs – und wenn ja, retweeten wir den Tweet.
Der Hauptteil ist unkompliziert. Mittels unseres Tokens erstellen wir eine Instanz der bot-Klasse und rufen dann eine unendliche Schleife auf. Darin prüfen wir Benutzer, die wir überwachen, auf neue Retweets (wir könnten den retweet -Tsk mit verschiedenen Usern laufen lassen), updaten dann die Zeit seit dem letzten Aufruf und pausieren für fünf Minuten.
Der komplette Code #!/usr/bin/env python2 # Ein Twitter Bot für den Raspberry Pi, der jeglichen Content von # @LinuxUserMag retweetet. Geschrieben von Liam Fraser für einen Linux User & Developer Article. import sys import time from datetime import datetime from twython import Twython class bot: def __init__(self, c_key, c_secret, a_token, a_token_ secret): # Create a Twython API instance self.api = Twython(c_key, c_secret, a_token, a_token_secret) # Make sure we are authenticated correctly try: self.api.verify_credentials() except: sys.exit(“Authentication Failed”) self.last_ran = datetime.now() @staticmethod def timestr_to_datetime(timestr): # Konvertiert einen String wie Sat Nov 09 09:29:55 +0000 # 2013 in ein datetime-Object. Weg mit der Zeitzone # und aus dem Jahr das aktuelle machen timestr = “{0} {1}”.format(timestr[:19], datetime. now().year)
%S %Y’)
# Jetzt haben wir Sat Nov 09 09:29:55 2013 return datetime.strptime(timestr, ‘%a %b %d %H:%M:
def retweet_task(self, screen_name): # Retweetet alle Tweets, die noch nicht gesehen wurden
# von einem User print “Checking for new tweets from format(screen_name)
@{0}”.
# Liste der letzten Tweets abrufen timeline = self.api.get_user_timeline (screen_name = screen_name) # Alle Tweets darauf prüfen, was seit unserem # letzten Aufruf alles gepostet wurde for t in timeline: tweet_time = bot.timestr_to_datetime (t[‘created_at’]) if tweet_time > self.last_ran: print “Retweeting {0}”.format(t[‘id’]) self.api.retweet(id = t[‘id’]) if __name__ == “__main__”: # Die consumer keys finden Sie auf unserer App# Details-Seite unter https://dev.twitter.com/ # apps (unter “OAuth settings”) c_key=”” c_secret=”” # Die access tokens finden Sie auf unserer App# Details-Seite unter https://dev.twitter.com/apps # (unter “Your access token”) a_token=”” a_token_secret=”” # Eine Instanz der Bot-Klasse erstellen twitter = bot(c_key, c_secret, a_token, a_token_secret) # Alles Neue von @LinuxUserMag alle 5 Minutes retweeten while True: # Zeit nach jedem retweet_task aktualisieren, # so dass wir nur neues Zeug retweeten twitter.retweet_task(“LinuxUserMag”) twitter.last_ran = datetime.now() time.sleep(5 * 60)
21
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE n Der Arduino kann besser mit Dingen wie Servos und analogen Eingängen umgehen.
Arduino mit Raspberry Pi programmieren Genießen Sie in Ihren Raspberry-Pi-Projekten alle Vorteile und Funktionen des Arduino-Microcontrollers. Was Sie brauchen: n Arduino Uno n Internetverbindung n Nanpy
https://github.com/nanpy
22
Fragen Sie sich, warum Sie einen Arduino an Ihren Raspberry Pi stecken sollten? Der wohl überzeugendste Grund besteht sicherlich aus den zusätzlichen sechs PWM-Ausgabepins und weiteren sechs Analog-Pins, die ein Arduino-Uno bietet. Sie sehen also, dass der Raspberry Pi zwar einen exzellenten Mix aus Pins und Fähigkeiten bietet, aber er kann nicht analog arbeiten und von sich aus beherrscht er auch keine Echtzeitverarbeitung. Mit einem Arduino sind Zusatzbauteile wie Servos, Potenziometer und zahlreiche analoge Sensoren viel einfacher auszulösen und zu steuern. Und das Beste: Sie müssen nicht einmal in Arduinos „Quasi-C++“-Sprache programmieren. Alles, was Sie brauchen, ist eine Standard-USB-Verbindung zwischen Ihrem Raspberry Pi und Arduino sowie ein kleines Python-Tool namens Nanpy. Und so geht’s …
01
Arduino anschaffen
02
Voraussetzungen
Bevor Sie etwas machen können, benötigen Sie natürlich einen Arduino. Wir empfehlen den Uno, weil dieser das beste Verhältnis aus Features, Komfort und Preis bietet. Damit Sie sofort loslegen können, empfehlen wir ebenso den Kauf eines Starter-Kits mit LEDs, Servos und anderen nützlichen Zubehörteilen.
Wir nehmen an, dass Sie Raspbian (empfohlen) benutzen. Öffnen Sie Ihr Terminal, wir müssen mittels setuptools
ARDUINO MIT RASPBERRY PI PROGRAMMIEREN
Das Beste ist, dass Sie nicht einmal in Arduinos „Quasi-C++“- Sprache programmieren müssen. Nanpy installieren. Geben Sie im Terminal Folgendes ein:
wget https://bitbucket.org/pypa/setuptools/raw/ bootstrap/ez_setup.py python ez_setup.py user Danach können Sie mit dem easy_install-Kommando pyserial installieren …
03
Letzte Vorbereitungen
Da die Kommunikation zwischen dem Arduino und dem Raspberry Pi über eine serielle USB-Verbindung funktioniert, brauchen wir die Python-serial-Bibliothek. Tippen Sie im Terminal ein:
easy_install pyserial Außerdem müssen wir die Arduino-Software installieren, damit der Pi weiß, wie er ihn ansprechen soll, wenn er angesteckt wird:
sudo apt-get update sudo apt-get install arduino
04
Nanpy installieren
Es verbleiben noch zwei Konfigurationsschritte. Laden Sie zunächst das Nanpy-Package herunter und installieren Sie es auf dem Pi. Vorzugsweise klonen Sie es mit Git. Öffnen Sie Ihren Home-Ordner im Terminal (cd ~) und arbeiten Sie nacheinander folgende Befehle darin ab:
Warum haben wir das originale Git-Repository geklont? Nanpy benötigt ein Update der Arduino-Firmware, um korrekt zu funktionieren. Also müssen Sie vom nanpy-Projektordner aus auf den firmware-Ordner zugreifen können. Stecken Sie Ihren Arduino Uno in einen freien Port Ihres Raspberry Pi, bevor Sie folgende Befehle im Terminal eingeben. Der folgende Vorgang dauert etwas!
cd nanpy/firmware export BOARD=uno make make upload
06
Arduino mit Ihrem Pi testen
Nach der Installation können wir das Setup testen, um sicherzugehen, dass alles einwandfrei funktioniert. Bevor wir eine „Hello World“-Applikation im Code-Segement rechts schreiben, prüfen wir zunächst, ob Nanpy korrekt installiert ist und die Verbindung zwischen Pi und Arduino funktioniert. Vom Home-Ordner (cd ~) tippen Sie Folgendes ins Terminal:
nano nanpy_test.py Im nano-Editor schreiben Sie:
from nanpy imort Arduino Drücken Sie Ctrl+X, Y, dann Enter, um die neue Datei zu speichern. Abschließend geben Sie im Terminal ein:
Python nanpy_test.py Wenn Sie keine Fehlermeldung sehen, sollte alles korrekt funktionieren. Nun können Sie sich dem nebenstehenden Code zuwenden und sich intensiver mit Nanpy beschäftigen.
Der komplette Code # Wie alle hardware-basierenden ‘Hello, World’-Apps, beginnen wir # damit, das Licht des Arduino-Bords an und aus gehen zu lassen. from nanpy import Arduino from time import sleep Arduino.pinMode(13, Arduino.OUTPUT) for i in range(10): Arduino.digitalWrite(13, Arduino.HIGH) sleep(2) Arduino.digitalWrite(13, Arduino.LOW) sleep(2) # Damit steuern wir das Licht des Arduino über Pin 13, dass dann # zehnmal alle zwei Sekunden an und aus geht. # Sie können Pins Namen zuweisen, um den Code besser lesbar zu machen. light = 13 Arduino.pinMode(light, Arduino.OUTPUT) # Sie können mehrere Pins gleichzeitig zuweisen: red_pin = 3 green_pin = 5 blue_pin = 9 for pins in (red_pin, green_pin, blue_pin): Arduino.pinMode(pins, Arduino.OUTPUT) # Wenn Sie einen LED-Bildschirm für Ihren RasPi haben, werden Sie # wahrscheinlich feststellen, dass er sofort mit Nanpy funktioniert. # Stellen Sie sicher, die richtigen Pin-Nummern dafür zu verwenden: from nanpy import (Arduino, Lcd) screen = Lcd([7, 8, 9, 10, 11, 12], [16, 2]) screen.printString(“Hello, World!”) # Nutzen Sie Potentiometer, Buttons oder analoge Sensoren, # müssen Sie diese als Eingänge zuweisen knob = 0 Arduino.pinMode(knob, Arduino.INPUT) value = Arduino.analogRead(knob) for i in range(10): print “The value of the knob is:”, knob sleep(1)
Sie lernen ...
# Manchmal möchten Sie verzögern, was der Arduino tut. # Das kann Ihnen zu konsistenten Messwerte verhelfen:
1. Stärken erkennen
def get_value(): value = Arduino.analogRead(knob) Arduino.delay(100) return value for i in range(100): print “The value is:”, get_value()
Der RasPi ist zwar leistungsstärker als Arduino, aber Letzterer gewinnt die Oberhand, was Schnittstellen zur realen Welt angeht. Nutzen Sie die Stärken von beiden für bessere Projekte.
23
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE
Drei-Farben-Lampe mit Raspberry Pi
Nutzen Sie die Power des Arduino, um Projekte zu realisieren, die mit dem Raspberry Pi allein nicht möglich wären.
Was Sie brauchen: n Arduino Uno n Steckbrett n Kabel n RGB-LED (Kathode) n 3x Potenziometer n 3x 330 Ohm Widerstände
Im vorherigen Projekt haben wir Ihnen gezeigt, wie man den Raspberry Pi mittels eines Arduino-Microcontrollers mit neuen Fähigkeiten ausstattet und damit auch kompliziertere Projekte realisieren kann. Mithilfe der zusätzlichen 12 Pins, die PWM-fähig sind und analoge Eingaben bearbeiten können, schließen Sie leicht mehrere Servos, analoge Sensoren und sogar Eingabegeräte wie Joysticks an. In diesem Projekt demonstrieren wir das, indem wir eine Drei-Farben-Lampe bauen, bei der jede der drei Farben in einem RGB-Licht von drei Potenziometern (Drehknopf) gesteuert wird. Damit können Sie die meisten Regenbogenfarben darstellen. Wie Sie sich vorstellen können, wäre das mit nur einem Raspberry Pi allein sehr viel schwieriger.
n Das ist ein toller Prototyp für eine RGB-Lampe – ein tolles Nacht- oder Stimmungslicht.
24
01
Mit Arduino prgrammieren
Sie müssen die Schritte des vorherigen Projektes genau erledigt haben, um Raspberry Pi und Arduino Uno korrekt konfiguriert zu haben. Zudem müssen alle Teile der Liste links vorliegen. Die Widerstände haben idealerweise 330 Ohm, notfalls geht aber auch ein höherer Widerstand, wenn Sie nichts anderes haben. Arduinos können als Teil von “Starter Packs” gekauft werden, die exakt diese Komponenten enthalten oder Sie decken sich online etwa unter www.cpc.co.uk ein.
DREI-FARBEN-LAMPE MIT RASPBERRY PI und die Farben sollten sich ändern. Ändern die Pots die falschen Farben, tauschen Sie sie einfach. Mit einem Tischtennisball oder Plastikbecher erzeugen Sie diffuses Licht für tolle Effekte.
04
Pins einrichten
Wir haben im vergangenen Projekt demonstriert, wie einfach es ist, die Arduino-Pins mit Nanpy zu benennen und einzurichten – in unserem Code haben wir zwei einfache for-Schleifen dafür benutzt. Der debug-Wert darunter schreibt die Werte jedes Pots ins Terminal – sehr nützlich zum Beispiel für Debugging.
02
Steckbrett befüllen
03
Arduino und Raspberry Pi verbinden
Die Schaltung für dieses Projekt mag auf den ersten Blick etwas kompliziert aussehen, ist es aber nicht wirklich. Wie zu erwarten, möchten wir das LED-Light mit den PWM-fähigen Pins steuern (um eine feine Einstellung der Helligkeit zu haben) und die Potenziometer (Pts) werden von den analogen Pins ausgelesen.
Wenn Sie den Code nicht abtippen wollen, können Sie ihn auch von der Website laden. Packen Sie ihn dann in Ihren Home-Ordner. Starten Sie den Code, wenn Sie den Arduino via USB-Kabel mit dem Raspberry Pi verbunden haben, einfach mit folgendem Befehl:
python RGB_Mixer.py Regeln Sie mit den Pots für die entsprechenden Farben der LED
Der komplette Code
05
Die Hauptfunktionen
Es gibt nur drei Hauptfunktionen mit selbsterklärenden Namen. Erstens: get_pots() liest den Wert des analogen Pins jedes Pots aus und liefert ein Tupel des Wertes für Rot, Grün und Blau zurück. Dieses wird von der Funnktion colour_mixing() benutzt, um Werte für die zugeordneten PWM-Pins zuzuordnen, um die Farbe der LED zu ändern.
06
Dauerlauf und Abbruch
Unterhalb der main()-Funktion ist die Arbeitsweise der anderen Funktionen angesiedelt. Innerhalb der Funktion weisen wir Python mit unserem Code an, auf unendliche Zeit die Farben zu mischen (und die Werte auszugeben, wenn debug auf „True“ gesetzt ist), bis wir Ctrl+C drücken und die Tastatur es abbricht. Mit dem Befehl close_pins() werden die mit der LED verbundenen Pins ausgeschaltet.
Sie lernen ... 1. AnalogEingänge
Es ist möglich, mittels eines Analog-zu-digitalKonverter-Chips (ADC) wie dem MPC3008 auch beim Raspberry Pi analoge Signale zu verwenden; einfacher ist es jedoch, einen Arduino mit Nanpy einzusetzen.
2. Code kommentieren!
Gewöhnen Sie sich an, Ihren Code mit Kommentaren zu versehen. Sinnvoll sind ‘#’Kommentare vor Zuweisungen und Funktionen.
#!/usr/bin/env python from nanpy import Arduino from time import sleep # LED Pin-Nummern setzen - diese gehen zu den # digitalen Pins Ihres Arduino redPin = 3 greenPin = 6 bluePin = 9 # Pot-Pin-Nummern setzen - diese gehen zu den # (A)nalogen Pins Ihres Arduino pot_r_Pin = 0 pot_g_Pin = 3 pot_b_Pin = 5 #drei farbige Pins als Ausgänge setzen for pins in (redPin, greenPin, bluePin): Arduino.pinMode(pins, Arduino.OUTPUT) # Pot Pins als Eingänge setzen for pins in (pot_r_Pin, pot_g_Pin, pot_b_Pin): Arduino.pinMode(pins, Arduino.INPUT) # prints values to the terminal when True debug = False def get_pots(): """ Grab a reading from each of the pot pins and send it to a tuple to be read by the colour mixer """ r = Arduino.analogRead(pot_r_Pin) / 4 Arduino.delay(1) g = Arduino.analogRead(pot_g_Pin) / 4 Arduino.delay(1) b = Arduino.analogRead(pot_b_Pin) / 4 Arduino.delay(1) return r, g, b
def colour_mixing(): """ Call get_pots() and set the colour pins accordingly """ r, g, b = get_pots() Arduino.analogWrite(redPin, r) Arduino.analogWrite(greenPin, g) Arduino.analogWrite(bluePin, b) Arduino.delay(1) def close_pins(): """ Close pins to quit cleanly (doesn't work with a 'for loop' despite the pins happily initialising that way!) """ Arduino.digitalWrite(redPin,Arduino.LOW) Arduino.digitalWrite(greenPin,Arduino.LOW) Arduino.digitalWrite(bluePin,Arduino.LOW) def main(): """ Mix the colours using three pots. Ctrl+C cleans up the pins and exits. """ try: print "Adjust the pots to change the colours" while True: colour_mixing() sleep(0.2) if debug: print "Red: {:d} | Green: {:d} | Blue: {:d}".format(r, g, b) except KeyboardInterrupt: close_pins() print "\nPins closed" if __name__ == '__main__': main()
25
10 PRAKTISCHE RASPBERRY-PI-PROJEKTE
Ein Spiel mit Python programmieren
Wir nutzen eine neue Bibliothek namens SimpleGUITk, um ein aktuelles Retro-Pong für die Linux-Generation zu schaffen.
Was Sie brauchen: n Raspbian (aktuelle Version)
www.raspberrypi.org/downloads
n Pillow
https://github.com/python-imaging/ Pillow
n SimpleGUITk
https://github.com/dholm/ simpleguitk/
n Rob legte zu Beginn des Spiels gut los, aber ab dann ging es abwärts …
26
Der Raspberry Pi ist eine tolle Möglichkeit, programmieren zu lernen. Durch ein interaktiveres Ergebnis und das größere Gefühl der Erfüllung ist die Spieleprogrammierung ein lohnenswerter Bereich für Amateurprogrammierer. Sie kann auch Improvisation und höhere Mathematikfähigkeiten vermitteln. Wir nutzen das fantastische SimpleGUITk-Module in Python, mit dem sich auf einfache Art und Weise grafische Oberflächen basierend auf Tkinter erstellen lassen.
01
Python-Modul vorbereiten
Rufen Sie die Webseiten aus dem Kasten „Was Sie brauchen“ auf und laden Sie ein zip mit den Source-Files von den GitHub-Seiten herunter. Updaten Sie Ihr Raspbian-Paket:
Öffnen Sie das Terminal und wechseln Sie mit cd in den extrahierten Pillow-Ordner. Dort geben Sie Folgendes ein:
$ sudo python setup.py install Danach wechseln Sie in den Ordner simpleguitk und stoßen dort ebenfalls mit dem gleichen Kommando die Installation an.
EIN SPIEL MIT PYTHON PROGRAMMIEREN
03
Schreiben Sie Ihren Code
04
Das Spiel einrichten
Starten Sie besser IDLE 2 als IDLE 3 und öffnen Sie ein neues Fenster. Erstellen Sie mit unserem Code unten unser Spiel „Tux for Two“. Gehen Sie beim Umgang mit dem Programmcode sorgfältig vor. Wenn Sie das möchten und sich gut auskennen, können Sie auch eigene Änderungen beim Gameplay einarbeiten.
Der Code ist recht simpel: Die Position von Tux und den Schlägern wird ebenso festgelegt wie die Anfangsgeschwindigkeit und Richtung von Tux. Diese Werte gelten auch nach einem Punktgewinn, wenn das Spielfeld zurückgesetzt wird. Richtung und Geschwindigkeit werden bei jedem Spawn zufällig festgesetzt.
05
Der SimpleGUI-Code
06
Funktionen in SimpleGUI einrichten
Die wichtigen Teile in der Funktion draw sind draw_line, draw_image und draw_text. Das sind besondere Funktionen von SimpleGUI, die Ihnen erlauben, Objekte mit Position, Größe und Farbe einfach auf dem Bildschirm zu legen. Sie müssen an ein Objekt gebunden werden – in diesem Fall ist das canvas.
Die letzten Teile sind nur für das Interface. Wir sagen dem Code, was zu tun ist, wenn eine Taste gedrückt und wieder losgelassen wird, und definieren einen Frame dafür. Dieser legt dann fest, welche Funktionen die Grafiken, Tastaturfunktionen etc. verarbeiten. Am Ende nutzen wir frame.start(), um das Ganze zu starten.
Stop-Motion-Animation mit dem Raspberry Pi Haben Sie das Zeug zun nächsten Nick Park? Richten Sie sich dieses DIY-Stop-Motion-Studio ein und legen Sie los! Was Sie brauchen: n Raspbian (aktuelle Version)
www.raspberrypi.org/downloads
n picamera Python-Modul
picamera.readthedocs.org
n RasPi Kameramodul n Pygame
www.pygame.org
n Pi-Mation ist verfügbar für GitHub auf
https://github.com/russb78/pi-mation
28
Das Kameramodul des Raspberry Pi ist der Wegbereiter für Ihre Pi-Projekte in Sachen Fotografie und Filmproduktion. Wir kombinieren beides, um die vollständige Stop-Motion-Animations-Applikation Pi-Mation zu programmieren, die es unglaublich einfach macht, eindrucksvolle HD-Animations zu erstellen. Für dieses Python-Projekt müssen Sie zwei Bibliotheken installieren. Picamera (picamera.readthedocs.org) ist eine reine Python-Schnittstelle für das Kameramodul des Rasp berry Pi und ein Muss für jeden Besitzer des Kameramoduls. Pygame (www.pygame.org) stellt sicher, dass unsere Bilder auf Abruf angezeigt werden.
01
Kameramodul einrichten
Eins nach dem anderen. Stellen Sie sicher, dass Ihr Raspberry Pi aktuell ist. Geben Sie im Terminal ein:
sudo apt-get update && sudo apt-get upgrade Jetzt updaten wir die Firmware des Pi und vergewissern uns, dass das Kameramodul aktiviert ist. Das könnte etwas dauern.
sudo rpi-update sudo raspi-config
02
Andere Abhängigkeiten installieren Sicherstellen, dass Pygame und picamera installiert sind:
Wir installieren Pi-Mation mit Git, also muss das auch installiert sein:
sudo apt-get install git Rufen Sie im Terminal Ihr HomeVerzeichnis auf (mit cd ~) und tippen Sie:
git clone https://github.com/ russb78/pi-mation.git Bei versehentlich geändertem Code können Sie das Original wiederherstellen mit:
git checkout pi-mation.py
04
Pi‑Mation starten und testen
Gehen Sie in Ihren pi-mationOrdner und starten Sie die Application mit:
python pi-mation.py Das Drücken der Leertaste ruft take_pic() aus der main()-Schleife auf, die ein Bild speichert und eine Vorschau erzeugt, die von update_display() geladen wird. Der Tab-Button ist programmiert, zwischen zwei Zuständen zu wechseln, indem er zwei Variablen die Werte wechseln lässt.
05
Animationen aufzeichnen
Die main()-Schleife checkt vor dem Updaten des Bildschirms etwa 30 Mal pro Sekunde nach Tastatureingaben. Da die Live-Vorschau der kameraunabhängig von dieser Schleife arbeitet, muss sich update_display() nur um das Updaten des Preview-Bildes kümmern (prev_pic). Da take_pic() zu pics_taken hinzugefügt wird, wird immer nur das letzte Bild angezeigt. Die Funktion animate() ist im Wesentlichen ein Mikrokosmos von update_display(). Beim Drücken von P wird die Live-Vorschau unterdrückt und stattdessen eine Animation aller bisher gemachten Bilder (pics_taken) im Hauptfenster angezeigt.
print "\nQuitting Pi-Mation to transcode your video." os.system("avconv -r " + str(fps) + " -i " + str((os. path. join('pics', 'image_%d.jpg'))) + " -vcodec libx264 video.mp4") sys.exit(0) def change_alpha(): global current_alpha, next_alpha camera.stop_preview() current_alpha, next_alpha = next_alpha, current_alpha return next_alpha def quit_app(): camera.close() pygame.quit() print "You've taken", pics_taken, " pictures. Don't forget to back them up!" sys.exit(0) def intro_screen(): intro = True while intro: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: quit_app() elif event.key == pygame.K_F1: camera.start_preview() intro = False screen.blit(start_pic_fix, (0, 0)) pygame.display.update() def main(): intro_screen() while True: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: quit_app() elif event.key == pygame.K_SPACE: take_pic() elif event.key == pygame.K_BACKSPACE: delete_pic() elif event.key == pygame.K_RETURN: make_movie() elif event.key == pygame.K_TAB: camera.preview_alpha = change_alpha() camera.start_preview() elif event.key == pygame.K_F1: camera.stop_preview() intro_screen() elif event.key == pygame.K_p: if pics_taken > 1: animate() update_display() if __name__ == '__main__': main()
29
„Ein Raspberry Pi ist alles, was Sie brauchen, um verrückte Gadgets zu bauen.“
38
Modellauto per Smartphone steuern
Hardware 32
Der Pi als Router
36
Projekt: PolaPi Zero
38
Raspberry-Pi-gesteuertes Modellauto bauen
Die Grundlagen von OpenWRT
Eine digitale Polaroid-Kamera
Mit RC-Bedienung per Smartphone
44
Roboterarm selbst gebaut
46
Der Raspberry Pi 2 als Media-Center
Natürliche Bewegungssteuerung
Leistungsstarker Wohnzimmer-PC
48
Tweetender drahtloser Wassermelder-Sensor
Machen Sie den Keller überflutungssicher
30
60
Pi-Minecraft-Konsole
54
Vernetztes Hi-Fi
50
Virtual Reality
56
Digitaler Bilderrahmen
44
50
Virtual Reality mit dem Pi
54
Der Pi Zero als vernetztes Hi-Fi-Gerät
Roboterarm selbst gebaut
Umgebungen erschaffen und bearbeiten
Mit dem D/A-Wandler von Pimoroni
56
Digitaler Bilderrahmen
60
Bauen Sie eine MinecraftRaspberry-Pi-Konsole
Mit Raspberry Pi, HDMIPi und Screenl
Spielen und programmieren
66
Visualisieren Sie Ihre Musik in Minecraft mit Piano HAT Minecraft und Piano HAT kombinieren
31
HARDWARE
Der Pi als Router Lernen Sie mit Ihrem Pi-Router die Grundlagen von OpenWRT. Die Schnittstellen zwischen den Geräten sind neuralgische Punkte für die Sicherheit eines Systems. Leider sind die meisten Router-Betriebssysteme nicht quelloffen, wodurch es nahezu unmöglich ist, Sicherheitslücken in ihnen aufzuspüren. Für normale Anwender ist es auch keine Option, Open-Source-Betriebssysteme auf ihren Router aufzuspielen, da diese oft leistungsfähige und entsprechend teure Hardware voraussetzen. OpenWRT ist eine günstige und effiziente Alternative. Es ist etwas weniger komplex als traditionelle Router-Betriebssysteme und benötigt deswegen weniger Ressourcen. Die Commu-
nity hat das System bereits auf verschiedene Router portiert; man muss nicht viel mehr als 100 Euro für ein kompatibles Gerät ausgeben. Mit wenigen Stunden Zeitaufwand wird daraus ein schlanker und agiler Server, Torrent-Client oder – sofern konfigurierbar – ein Steuerzentrum für Hardware, verbunden über serielle Schnittstellen. Wir stellen Ihnen also hier die Grundlagen von OpenWRT beim Einsatz auf Einplatinenrechnern vor. Dieses Wissen kann natürlich auch für leistungsfähigere Hardware adaptiert werden.
OpenWRT ist eine günstige und effiziente Alternative.
Was Sie brauchen n Raspberry Pi (V2B empfohlen, V1B möglich) n Micro-USB-Netzteil n Kartenleser + microSD-Karte n Kompatibler USB-Ethernet-Adapter (i-teceurope.eu/?t=3&v=296) n Optional, aber empfohlen: Ethernet-Switch (kein Router!)
32
DER PI ALS ROUTER
01
Einrichtung
Für die Installation eines Betriebssystems brauchen Sie die passende Image-Datei. Aufgrund unterschiedlicher Hardware gibt es für Pi 1 und Pi 2 jeweils eigene Dateien, die unter bit.ly/1T7t4UC zu finden sind. Die folgenden Schritte wurden auf einem Pi 2 mit Chaos Calmer 15.05.1 ausgeführt. Schreiben Sie die Image-Datei openwrt-15.05.1-brcm2708bcm2709-sdcard-vfat-ext4.img mittels beliebiger Hilfsmittel auf die SD-Karte: Der Ubuntu Image Writer ist hier beispielhaft dargestellt. Legen Sie die SD-Karte ein, verbinden Sie den Ethernet-Port des Pi mit Ihrem PC und starten Sie das Gerät. Wenn Sie einen Bildschirm an den HDMI-Ausgang des Pi anschließen, können Sie den Startvorgang „live“ nachvollziehen.
02
Verbindung
OpenWRT auf dem Raspberry Pi 2 zu starten, dauert etwa eine halbe Minute. Danach werden die hier abgebildete Benachrichtigungen angezeigt. Der Ethernet-Port des Raspberry Pi 2 hat nun die IP-Adresse 192.168.1.1 und wartet auf
Verbindungsanfragen. Öffnen Sie die Netzwerkverbindungskonfiguration des Host-Rechners und legen Sie, wie im Bild gezeigt, eine statische IP-Adresse fest. Die Adresse 192.168.1.1 ist eine beliebte Router-IP; wenn Ihr WLAN-Router sie nutzt, muss für die folgenden Schritte Ihre Netzwerkverbindung deaktiviert werden.
03
Telnet oder SSH?
Chaos Calmer 15.05.1 startet in seiner Basiskonfiguration immer den Telnet-Dienst. Der erste Arbeitsschritt sollte sein, zum Telnet-Client zu verbinden. Mit dem Befehl passwd setzen Sie ein neues Passwort. Ein zu schwaches Passwort wird bemängelt, passwd kann Sie aber nicht daran hindern, es dennoch zu setzen. Machen Sie es Hackern nicht zu leicht! Sobald das neue Root-Passwort bestimmt ist, schaltet der Telnet-Server sich ab, und ein Zugriff auf die OpenWRT-Sitzung ist nur noch per ssh möglich.
tamhan@tamhan-thinkpad:~$ telnet 192.168.1.1 Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is ‘^]’. . . . root@OpenWrt:/# passwd Changing password for root New password: Bad password: too short Retype password: Password for root changed by root - - tamhan@tamhan-thinkpad:~$ ssh [email protected] The authenticity of host ‘192.168.1.1 (192.168.1.1)’ can’t be established. RSA key fingerprint is 11:80:4b:14:cc:b8:9a:a6:42:6a: bf:8d:96:2a:1b:fa. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘192.168.1.1’ (RSA) to the list of known hosts.
04
Raspberry Pi 3: Eingeschränkte Unterstützung Auf dem Papier ist der Pi 3 mit seinem eingebauten WLAN-Modul der perfekte Access Point. Das trifft aber aus zwei Gründen in der Realität nicht zu. Erstens ist die Funk-Reichweite des Moduls laut Labortests sehr gering. Zweitens hat Broadcom den Treiber-Code nicht veröffentlicht; mit OpenWRT kann das Modul bisher nicht verwendet werden.
Gutes Zusammenspiel
Im weiteren Verlauf gehen wir davon aus, dass Ihr Router einem anderen Router nachgeschaltet ist. Da die Einrichtung der USB-Unterstützung einige Paketdownloads erfordert, muss zunächst das Zusammenspiel von OpenWRT mit dem restlichen Netzwerk definiert werden. Standardmäßig enthält das Betriebssystem nur vi, öffnen Sie daher von einem Rechner Ihrer Wahl aus das Web-Interface LuCI, indem Sie auf http:// zugreifen. Wählen Sie Network > Interfaces und klicken Sie Edit, direkt neben brlan. Wählen Sie als Protokoll den DHCP-Client und aktivieren Sie die Schaltfläche „Switch Protocol“. Speichern Sie per „Save & Apply“, schließen Sie die Webseite und trennen Sie den Pi von Ihrem Rechner. Verbinden Sie dann Rechner und Pi mit Ihrem Router und starten Sie als Root-User nmap, um die neu zugewiesene IP-Adresse anzuzeigen. Die hier dargestellte Eingabe ist etwas vertrackt, da sie nmap anleitet, alle 255 Adressen im Subnetz zu scannen – passen Sie sie daher für Ihr lokales Netz an. Zudem müssen die IP-Einstellungen des PCs in ihren Ausgangszustand versetzt werden; ein Neustart ist danach empfehlenswert.
HARDWARE Guter Test, schlechter Router Obwohl der Raspberry Pi ein tolles Demo- und Evaluierungssystem ist, würde er bei praktischer Anwendung kaum mit vernünftigen Übertragungsraten glänzen, was an der einzigartigen Bus-Architektur liegt: Beide Ethernet-Ports teilen sich die USB-Bandbreite auf. Der Pi 2 gleicht das durch seinen stärkeren Prozessor aus. Bei größeren Netzwerken erzielt ein auf X86 basiertes System bessere Ergebnisse. Einplatinencomputer wie der Banana Pi sind Alternativen, neigen aber zu Abstürzen bei der Verarbeitung mancher Ethernet-Pakete.
Starting Nmap 6.40 ( http://nmap.org ) at 2016-0503 21:14 CEST . . . Nmap scan report for 192.168.1.104 Host is up (-0.099s latency). MAC Address: B8:27:EB:53:4E:D9 (Raspberry Pi Foundation)
05
USB-Treiber
Die OpenWRT-Sitzung ist jetzt mit dem Internet verbunden, also kann opkg auf die Pakete zugreifen – verbinden Sie per SSH und IP-Adresse (in Schritt 04 von nmap bestimmt) und laden Sie die im Code angegebenen Pakete herunter. Sind alle Module installiert, zeigt die Eingabe dmesg, dass das ASIX-Ethernet-Interface erkannt und als eth1 konfiguriert wurde, wie im Bild sichtbar.
Auf dem ASIX-AX88772B-Chipset basierende Geräte sind sehr häufig, doch auch wenn Ihres nicht dazu gehört, muss das Experiment nicht gleich scheitern. Verbinden Sie den USB-LAN-Adapter mit einem Pi, auf dem Raspbian läuft, und führen Sie lsmod aus. So bekommen Sie Informationen zu den verwendeten Treibern, die Sie dann mit OpenWRT ausfindig machen können. Eine Google-Suche nach openwrt oder openwrt kann ebenfalls helfen.
07
Web-Interface
08
Es wird geroutet
09
Neuordnung der Interfaces
Ist die Einrichtung des Kernels abgeschlossen, kann das neue Interface verwendet und konfiguriert werden. Da das OpenWRT-Image für Raspberry Pi nur vi mitbringt (nano lässt sich nicht installieren), sollte die Konfiguration per Web-Interface erfolgen, das wie bereits zuvor erwähnt per Browser über die Router-IP angesteuert wird. Das Einloggen erfolgt per Root-Passwort in der Eingabeaufforderung.
An Ihrem neu eingerichteten USB-Ethernet-Port können jetzt Geräte angeschlossen werden. Ein einfacher Switch oder ein einzelnes Gerät sind möglich; in beiden Fällen wird ein DHCPServer gebraucht, der IP-Adressen bereitstellt. Klicken Sie auf „Add new interface“ und benennen Sie das neue Interface („Clients“ in unserem Beispiel). Wählen Sie als Protokoll „Static address“ und selektieren Sie eth1. Klicken Sie am unteren Seitenende „Setup DHCP Server“, um alles fertig auszufüllen. Damit werden die Einstellungen für die IPv4-Adresse und Broadcast angepasst. Speichern Sie mit „Save & Apply“. Öffnen Sie erneut die Netzwerkeinstellungen und stellen Sie die Firewall auf die Zone LAN.
Standardmäßig ist eine Netzwerkbrücke für das LAN-Interface definiert; sie ist unnötig. Öffnen Sie die Eigenschaften, klicken Sie den Reiter „Physical Settings“ und deselektieren Sie „Bridge interfaces“. Im Reiter „Firewall settings“ stellen Sie dann auf die WAN-Zone um. Speichern Sie erneut per „Save & Apply“, damit OpenWRT die Konfiguration so übernimmt, wie sie im nebenstehenden Bild zu sehen ist.
34
10
Firewall ahoi
Von nun an werden alle Versuche, von außerhalb des Netzwerks auf die LuCI-Oberfläche zuzugreifen, mit einem Verbindungsfehler quittiert – der Remote-Zugriff ist standardmäßig deaktiviert, um OpenWRT gegen Hacker zu schützen. Die Lösung ist, Ihren Rechner vom „äußeren“ Router zu trennen und stattdessen am USB-LAN-Interface Ihres Pi anzuschließen. Führen Sie dann ifconfig aus und verbinden Sie zum Standard-Gateway, um wieder auf das LuCIInterface zugreifen zu können. Ist dem Rechner keine IP-Adresse zugewiesen, starten Sie ihn neu und verbinden Sie das Ethernet-Kabel neu.
Solange alle anderen Netzwerkverbindungen deaktiviert sind, kann der PC nur über den Raspberry Pi zum Internet verbinden. Geben Sie „mtr www.google.com“ im Terminal ein, um eine Baumstruktur, wie sie im Bild zu sehen ist, zu generieren – die Übertragungsverzögerung von OpenWRT ist bei niedriger Belastung recht gering.
12
Netzwerkstatus analysieren
Es können auch Live-Diagramme mit weiteren Informationen zum Status des Routers generiert werden. Öffnen Sie LuCI, dann Status > Realtime graph, um schematische Darstellungen zur CPU- und Netzwerkauslastung aufzurufen.
kmod-scsi-core Zusätzlich ist ein Paket namens kmod-fs-* notwendig, das die Dateisystemtreiber enthält. Wer FAT-Dateisysteme verwenden will, sei gewarnt: Das passende Paket heißt „kmod-fs-msdos“.
14
Mehr zu OpenWRT
15
Unterstützte Hardware
16
Hardcore-Debugging
OpenWRT bietet noch viele weitere Anwendungsmöglichkeiten, die in diesem Artikel keinen Platz finden. Das OpenWRT-Team stellt dafür sehr hilfreiche Schritt-für-Schritt-Anleitungen (wiki.openwrt.org/doc/howto/start) zur Verfügung. Bevor Sie etwas selbst programmieren, lohnt es sich, dort nachzuschauen – vielleicht hat das sogar schon jemand für Sie erledigt.
Der hier verwendete Testaufbau – einfach nur ein Raspberry Pi und einiges Zubehör – ist als solcher sehr nützlich, für praktische Anwendung im Alltag ist das System allerdings nicht unbedingt geeignet. Wenn Sie das Experiment mit einem echten Router wiederholen möchten, bietet die Liste der kompatiblen Geräte (wiki.openwrt.org/toh/start) einen guten Ausgangspunkt. Leider ändern manche Hersteller ihre Hardware sehr häufig; in Extremfällen sind bis zu zwölf Revisionen des gleichen Geräts mit jeweils völlig unterschiedlichem Innenleben bekannt.
13
Deploy file system support
Wenn Ihr Router einen USB-Port besitzt, kann er theoretisch auch USB-Sticks lesen. Die nötigen Pakete sind nicht vorinstalliert. Daher installieren Sie folgende Pakete per opkg:
Sperren Sie sich einmal versehentlich aus Ihrem OpenWRT-Router aus, ist nicht alles verloren: Sofern der Speicher des Geräts nicht auf die Platine gelötet ist, können Sie ihn mit einem Kartenleser auslesen. Die meisten Linux-Distributionen können das Dateisystem anzeigen, wenngleich manche Dateien nur mit Root-Zugriff geöffnet werden können (sudo nautilus).
35
HARDWARE
Unterwegs drucken
Eines der größten Probleme bei diesem Projekt war die ursprüngliche Druckgeschwindigkeit. Dank einiger Softwareoptimierungen war es jedoch möglich, aufgenommene Fotos innerhalb von Sekunden vollständig zu drucken.
Gehäuse mit Drucker ausstatten
Dank dem individuellen Gehäuse konnte Pierre einen einfachen und günstigen Thermodrucker oben in das Gehäuse einbauen. Er ist mit winzigen Schrauben am Gehäuse befestigt.
Gehäuse aus dem 3D-Drucker
Pierre hat sich die Mühe gemacht, das gesamte Gehäuse des PolaPi Zero in Autodesk zu entwerfen. Er entschied sich dafür, ein relativ einfaches Kunststoffgehäuse in drei Teilen zu drucken.
Was Sie brauchen An Kameraeinstellungen spielen Um die Möglich-
keiten der verwendeten Kamera bestmöglich auszunutzen, nutzte Pierre die mitgelieferte Python-Bibliothek. Darin spielte er mit den Einstellungen und fand heraus, wie sie am besten mit dem Drucker zusammenarbeitet.
Rechts Der Drucker druckt die Fotos auf einfachem Thermopapier aus, sodass die Qualität nicht allzu prickelnd ist. Links Der LCDSchirm auf der Rückseite dient sowohl dazu, eine Vorschau der Fotos anzuzeigen, als auch den Druck zu steuern.
36
n n n n n n n
Rasperry Pi Zero Thermo-Belegdrucker Sharp Memory LCD Das offizielle Pi-Kameramodul 3D-gedrucktes Gehäuse 3A-Spannungsregler 7,2-Volt-Batterie
PROJEKT: POLAPI ZERO
Projekt: PolaPi Zero
Das Kameraprojekt von Pierre Muth ist ein kreativer Mix aus Polaroid und digitalen Möglichkeiten. Wie sind Sie auf die Idee gekommen, den PolaPi und den PolaPi Zero zu entwerfen? Andere Kameraprojekte wie etwa PrintSnap und Polatherm haben mich inspiriert und auf ein paar Ideen gebracht, als ich das ursprüngliche PolaPi-Modell entwickelt habe. Mir gefällt die Idee eines Polaroids, bei dem man Freunden nicht nur eine Vorschau des Fotos zeigen, sondern es direkt ausdrucken kann. Nach dem Bau der ursprünglichen Version habe ich zusammen mit Vit Hasek die Möglichkeiten durchdiskutiert, wie man das Gerät kleiner und effizienter machen könnte. Das war der Moment, an dem die Entwicklung des PolaPi Zero begonnen hat. Er hatte eine tolle Idee, die ich aus zeitlichen Gründen nicht mehr in die erste Version einbauen konnte. Ist es ein Mix aus einer klassischen Polaroid-Kamera und neueren Digitalkameras? Das würde ich sagen, allerdings mit Kompromissen in beiden Bereichen. Im Vergleich zu Polaroid-Kameras ist die Bildqualität deutlich schlechter, und die Bilddatei ist weniger groß als bei einem herkömmlichen Smartphone. Doch abgesehen von dem Spaß, den es macht, etwas selber zu bauen, statt etwas Fertiges zu benutzen, sind die Fotodrucke viel günstiger. Das öffnet die Tür für Kreativität und ermöglicht vielen Leuten, es nachzumachen. War es durch die komplizierten Details schwierig, ein fertiges Produkt zu entwickeln? Beide Modelle bereiteten mir vor allem durch die Hardwareauswahl und ein paar Wissenslücken Probleme. Hauptproblem war der interne Zwischenspeicher des Druckers. Die Druckgeschwindigkeit ändert sich mit der Helligkeit des Bildes. Ist es hell, müssen weniger Pixel verarbeitet werden, der Papiervorlauf ist schneller und umgekehrt. Auch der Bildschirm bereitete mir Kopfzerbrechen. Ich stand
kurz davor, einen Standardweg zu nutzen, so wie den PiTFT der ersten Version. Diese Sharp-Bildschirme sind aber so toll, dass ich damit weitergemacht habe. Man kann auf Ihnen genauso gut im Sonnenlicht etwas erkennen und sie sind, genau wie der Drucker, monochrom. Ich begann damit, die Bilddaten zu erzeugen, die von dem SPI-Port übertragen werden sollen. Doch es gab Probleme, wenn ich die 12-KB-Bilder in einem Block sandte. Glücklicherweise habe ich die wrobell-Bibliothek (github.com/wrobell/ smemlcd) für diesen LCD-Bildschirm gefunden. Ich habe einige Zeit damit
erhältlich ist. Er wird eingeschoben, mit Schrauben befestigt und nutzt ein sehr günstiges Thermopapier. Es wird viel über die Verschwendung von solchem Thermopapier gesprochen, da die Bons in der Regel weggeworfen werden. Aber hier ist es ja anders: Sie werden nie so viel ausdrucken wie ein Supermarkt, und die Drucke sind dazu gedacht, aufbewahrt zu werden. Wie effektiv ist der Raspberry Pi bei diesem Projekt? Wenn man etwas mit einem Pi machen möchte, muss man sich viel Wissen aneignen, besonders wenn man nicht mit Linux
Die Druckqualität ist nicht gut, aber es ist günstig und macht Spaß. zugebracht, herauszufinden, wie man die Bibliothek mit Autotools kompiliert und mit den Fehlermeldungen umgeht, die ausgespuckt werden. Haben Sie etwas Spezielles benutzt, um das fantastische Gehäuse zu entwerfen? Ich habe es von Grund auf mit der freien Designsoftware Autodesk 123D entworfen. Wenn man mit CAD Software vertraut ist, wirkt es anfangs etwas begrenzt. Doch kann man innerhalb einer Stunde viel erreichen, Lernzeit inklusive. Ich habe versucht, die Zahl der gedruckten Teile zu reduzieren. Für Drucktaster ist es ein kleiner Streifen mit einem Quadrat, um den Knopf an der Stelle zu halten. Vorder- und Rückseite sind mit vier Schrauben befestigt. Alle Gewinde sind auf einen Schlag in das Plastikgehäuse gemacht und es kann leicht geöffnet werden. Was für einen Drucker haben Sie für das Projekt benutzt? War es einfach, ihn in das schmale Gehäuse einzubauen? Ich habe wohl einen der preiswertesten Thermoprinter genutzt, die es gibt. Es ist der Cashino CSN-A3, der bei Adafruit
vertraut ist. Ich habe vom ersten Modell an damit rumgespielt und tue es aufgrund der großen Community noch immer. Der Installationsprozess von Raspbian ist mittlerweile sehr einfach, und die Entwicklung der Bibliotheken ist sehr hilfreich. Wenn man ein Problem hat, ist die Chance groß, dass vor einem schon jemand anderes das gleiche Problem hatte und eine Lösung fand. Der Raspberry Pi Zero ist „geschlossener“ als die B-Modelle, da er nur einen USB-Port hat. Ich mag die Einrichtung, die die WLAN-Installationsdatei von der FAT32-Partition beim Booten an die richtige Stelle kopiert. Ich konnte mich dann über einen USB-WLAN- Dongle verbinden, ohne Maus, Tastatur oder Bildschirm.
Pierre Muth
Er ist schon lange ein Paspberry-Pi-Bastler und liebt es auszutesten, wie man den Pi am besten in alltäglichen Gegenständen nutzen kann.
WWW
Es gibt viele Raspberry-Pi-Kameraprojekte, und einige davon sind sehr empfehlenswert. Eines der besten ist Polatherm (dkia. at/en/node/125), das zu den ersten thermodruckbasierten Projekten gehörte.
Mehr Infos
Pierre Muth, hat alles, was Sie möglicherweise zu diesem Projekt wissen möchten, online gestellt (hackaday. io/project/19731). Er bietet eine Art Tutorial an, mit dem Sie Ihren eigenen PolaPi Zero nachbauen können.
Wie sehen die Fotos aus? Erwarten Sie keine gute Qualität. Die Bilder haben derzeit nur eine niedrige Auflösung (384 x 640 Pixel) und sind schwarzweiß. Die Grauwerte sind das Ergebnis eines Fehlerdiffussionalgorithmus, also bitte nicht genauer hinschauen. Aber es sind einzigartige Drucke und es macht viel Spaß. Ich werde versuchen, die Qualität zu verbessern.
37
HARDWARE
Raspberry-Pigesteuertes Modellauto bauen
Machen Sie sich topaktuelle Webtechnologie zunutze, um ein Modellauto per Smartphone oder Tablet fernzusteuern.
38
RASPBERRY-PI-GESTEUERTES MODELLAUTO BAUEN
Webtechnologien sind auf dem Vormarsch, die sogenannte Cloud bringt Computerfunktionalität zu jedermann, egal wo er sich gerade befindet, Hardware und Wireless-Systeme werden immer besser und gleichzeitig erschwinglicher. Wir befinden uns in einer Zeit, in der wirklich jeder mit einer Idee diese in ein funktionierendes Produkt umsetzen kann – und das in nur wenigen Tagen mit nur geringem Kostenaufwand. Genau wie dieses Projekt hier: Es macht Spaß, ist leicht und schnell umzusetzen und ganz nebenbei eine tolle Möglichkeit, etwas dazuzulernen. Wir werden uns ein altes ferngesteuertes Modellauto schnappen, seinen Funkempfänger entfernen und mit einem Raspberry Pi ersetzen, es in ein Netzwerk hängen, einen High-End-Webserver aufsetzen und dann dafür sorgen, dass Sie das Gefährt durch Neigung Ihres Mobilgerätes steuern können. Am Ende werden Sie nicht nur ein spaßiges Spielzeug in Händen halten, Sie haben auch Grundlegendes über die Technologien gelernt, die die Welt in Zukunft antreiben werden.
39
HARDWARE
So bauen Sie Ihr Raspberry-Pi-Modellauto Was Sie brauchen: n Spielzeug-RC-Auto mit zwei Kanälen (Gas u. Lenken) n Adafruit PWM I2C (Servoantrieb) n Jumper-Kabel (weiblichauf-weiblich) n 5V-Batterie-Power-Bank
Kostet ca: € 80 Die Komponenten stammen von www.modmypi.com
Bevor Sie Ihr Modellauto mit einem Smartphone oder Tablet steuern können, müssen Sie wichtige Änderungen am Gehäuse vornehmen. Um Ihr Modellauto zum Leben zu erwecken, benötigen Sie die modernste Webtechnologie und unseren Computer im Kreditkartenformat. Wir müssen einige wichtige Eingriffe vornehmen, damit das Ganze funktioniert. Glücklicherweise müssen Sie die komplexesten Dinge nicht selber bauen, sondern bestellen sie einfach fix und fertig. Dazu gehören ein Servoantrieb für Lenkung und Gas sowie eine 5V-Batterie, um Ihren Raspberry Pi mit Strom zu versorgen.
01
Alten Empfänger identifizieren und entfernen
In diesem Projekt geht es in erster Linie darum, den eingebauten Sender und Empfänger des Modellautos zu entfernen. Achten Sie auf die drei Sockel auf dem ursprünglichen Receiver: Einer geht zum Motor-Controller und einer zum Servoantrieb. Einige ferngesteuerte Autos verfügen außerdem über eine separate Batterie für die Elektronik (das gilt besonders für Systeme mit elektronischem Geschwindigkeits-Controller mit BEC), diese bekommen ihren 5V-Strom direkt vom Geschwindigkeits-Controller, da so an Komponenten gespart wird. Haben Sie keinen Speedcontroller mit 5V BEC, müssen Sie sich einen kaufen. Zum Beispiel unter www.modmypi.com für unter 30Euro.
Servoantrieb Wir nutzen
den Servoantrieb Adafruit PWM I2C von www.modmypi.com .
Pi-Power Der Pi sitzt vorne
mittig, um einen möglichst sicheren Platz zu haben.
Power-up Mit dieser
5V-Batterie läuft der Raspberry Pi für mehrere Stunden.
Freie Auswahl Für dieses Projekt können Sie praktisch jedes Modellauto nehmen.
40
RASPBERRY-PI-GESTEUERTES MODELLAUTO BAUEN
Wir verwenden den I2C-Bus des Raspberry Pis, um die ServoSchnittstellenkarte zu steuern.
02
Servokabel an neuen Controller anschließen
Wir haben unseren 16-Kanal-I2CServoantrieb von www.modmypi.com nach Anweisung verlötet und einfach Wannenstecker für Kanal 0 (Lenkung) und Kanal 2 (Motor) aufgesteckt. Insgesamt gibt es sechs Kabel: Die unteren zwei sind für die Erdung, die mittleren zwei für die Stromversorgung und die oberen zwei sind die PWMSignale (Pulse-Width Modulation). Weitere Komponenten könnte man z. B. mit Klettverschluss befestigen.
03
I2C-Bus an den Raspberry Pi anschließen
Wir verwenden den I2C-Bus des Raspberry Pi, um die ServoSchnittstellenkarte anzusteuern. Dafür sind nur vier Kabel vonnöten, die alle zwischen Raspberry Pi und der ServoSteuerung verlaufen (siehe Bild). Von oben angefangen bis unten müssen wir Folgendes tun: 1. GND, 2. SCL, 3. SDA und 4. VCC mappen alle auf dieselben Ports auf dem Raspberry Pi. Im Grunde handelt es sich um Stromversorgung, Erdung und zwei Kommunikationskanäle – alles recht unkompliziert.
04
Aufbau und Anschluss an den Raspberry Pi
Auf einem Rev-1-Raspberry-Pi sehen alle Kabel gleich aus. Obwohl die Rev-Boards anders gekennzeichnet sind, sitzen die Pins alle an der gleichen Stelle. Links unten (in der Nähe des RasPi-Stromanschlusses) sitzt die 3,3V-Stromversor-
Schritt 02
gung, daneben der SDA-Wannenstecker, der den Datenkanal bildet. Daneben unten rechts befindet sich der SCL-Kanal, der die Taktung der I2C-Geräte kontrolliert. Oben rechts: die Erdung.
05
Überblick über alle Komponenten
Sie sollten jetzt das Servo-Board in der Mitte haben, mit der Servo-Steuerung und dem Speed-Controller auf der einen Seite und dem Raspberry Pi auf der anderen. Der Motor ist am anderen Ende des Speed-Controllers angeschlossen (dieses Ende sollte dickere Drähte haben). Die zwei dicken Drähte des Speed-Controllers gehen in die eigentliche Batterie des Autos. In diesem Fall eine 7.2V NiCad. Wir haben jetzt zwei separate Energiesysteme: die leistungshungrigen Motoren sowie die genügsame Elektronik.
06
Schritt 03
Für alles ein Zuhause
Jetzt wird es Zeit, ein Zuhause für unsere neuen Komponenten zu finden. Verwenden Sie reichlich selbstklebendes Klettband, Kabelbinder oder elastische Bänder um alles abzusichern. Suchen Sie außerdem im Auto nach Stellen, wo Sie Kabel verstecken können. Es ist möglich, den Pi direkt auf das Auto zu schrauben oder zu kleben, wir empfehlen aber dafür nur die untere Hälfte des Gehäuses zu verwenden, da Sie so leichteren Zugang behalten. Fügen Sie nun SD-Karte, Netzwerkkabel oder Wi-Fi-Dongle und Stromversorgung hinzu. Jetzt wird es Zeit für ein paar Software-Hacks.
Schritt 05
Schritt 06
41
HARDWARE
Das Raspberry-Pi-Modellauto steuern
Steuern Sie ein Spielzeugauto mit Ihrem Handy und der neuesten Web-Technologie. Jetzt haben wir unseren fantastischen Raspberry-Pi-Boliden verdrahtet und aufgeladen. Jetzt geht’s auf die Piste! Wir verwenden die besten Web-Technologien, die die JavaScript-Programmiersprache bietet, um die natürliche Bewegung der Hand zu nutzen. Jede kleine Bewegung löst eine Aktion aus, bei der berechnet wird, was das Auto tun soll. Das Ergebnis wird über eine Sockelverbindung bis zu 20 Mal pro Sekunde gesendet.
01
Software herunterladen und installieren
Um die I2C-Konnektivität zum Laufen zu bringen, können Sie die Schritte von den Seiten 90-91 ausführen. Als Nächstes werden wir ein neues Heim für unseren neuen Projekt-Code suchen – wie wäre es mit /var/www/picar? Tippen Sie sudo mkdir /var/www/picar in den Terminal, um ein Verzeichnis anzulegen, und ändern Sie es dann in dieses Verzeichnis: cd /var/www/picar. Laden Sie das Projekt jetzt mit Git herunter, tippen Sie
sudo git clone http://github.com/ shaunuk/picar. Haben Sie Git nicht, installieren Sie es mit sudo apt-get install git. Das lädt die Autosteuerungs-Software herunter. Einen Server brauchen wir aber immer noch.
02
Node.js herunterladen und installieren
Wir benötigen jetzt das tolle Node.js und sein Packwerkzeug, den Node package manager (npm). Tippen Sie sudo wget
http://nodejs.org/dist/v0.10.21/nodev0.10.21-linux-arm-pi.tar.gz. Damit laden Sie eine aktuelle Version von Node. js herunter. Die Version, die Raspbian an Bord hat, ist viel zu alt und wird nicht Schritt 07
Schritt 05
Was Sie brauchen: n Ein fertiges RasPi-Auto n Eine Internetverbindung n Ein modernes Smartphone oder ein Tablet n Pi-Auto-Sicherheits-Code github.com/shaunuk/picar
mit den Technologien funktionieren, die wir hier benutzen. Entpacken Sie das Node-Paket mit sudo tar -xvzf nodev0.10.21-linux-arm-pi.tar.gz.
03
Node.js konfigurieren
Damit sie es leicht von überall aus starten können, werden wir Links für Node und die npm-Binärdateien anlegen. Innerhalb des Terminals tippen Sie sudo
ln -s /var/www/node-v0.10.21-linuxarm-pi/bin/node /bin/node and then sudo ln -s /var/www/node-v0.10.21linux-arm-pi/bin/npm /bin/npm. Um die Zusatzmodule zu kriegen, tippen Sie,
Jetzt haben wir alles, Sie sollten drei Files sehen: den Server (app.js), den Client (socket.html) und die jQueryJavaScript-Bibliothek für den Client. Der Server treibt nicht nur die Servos an, sondern dient auch als Webserver und sendet die socket.html-Datei und die jQuery zum Browser falls nötig. Ein wirklich einfaches, prima Setup, das genau unsere Zwecke erfüllt.
Unten Um Ihr Projekt zu beenden, müssen Sie nur noch die Verbindung zu einem Handy herstellen.
Oben Sie müssen einige Variablen anpassen, damit Sie Ihr ferngesteuertes Auto auch bedienen können.
05
Testen Sie die Servos
06
Konfigurieren
07
Auf Spritztour gehen
Unser praktisches kleines Programm (app.js) hat einen speziellen Modus nur zum Testen. Wir benutzen hierfür zwei Stichworte: Beta für Servo 0 (Lenkung) und Gamma für Servo 1 (Motorsteuerung). Tippen Sie node app.js beta=300. Sie sollten sehen, wie sich die Vorderräder drehen. Jetzt müssen Sie ein bisschen mit den Zahlen experimentieren. In unserem Beispiel ist 340 links, 400 Mitte und 470 rechts. Machen Sie dasselbe für den Motor. Tippen Sie node app.js gamma=400.
Jetzt, da Sie wissen, was Ihr Auto alles kann, können wir die Standardwerte in app.js und socket.html setzen. Rufen Sie die Edit-Option von app.js auf und suchen Sie die Sektion „function emergency Stop“. Stellen Sie die beiden Zahlen als Ruhewerte (Rest values) ein. Öffnen Sie socket. html und justieren Sie die Werte („Define variables here“).
Wir sind fast so weit, eine Testfahrt zu wagen, zuvor brauchen wir aber noch die IP-Adresse Ihres Pi-Autos. Tippen Sie ipconfig in den Terminal. Starten Sie die App, indem Sie node app.js. tippen. Jetzt schnappen Sie sich das nächste Tablet oder Smartphone, das im selben Netz wie Ihr Pi hängt. Öffnen Sie den Webbrowser und gehen Sie zu http://[your IP address]:8080/ socket.html. Sie sollten eine Warnmeldung mit „ready“ bekommen. Drücken Sie OK und ab geht’s!
42
RASPBERRY-PI-GESTEUERTES MODELLAUTO BAUEN
Wir nutzen die natürlichen Bewegungen Ihrer Hand, um das Auto kabellos zu steuern. Vollständiger Programm-Code socket.html