Inhaltsverzeichnis | 6 |
Vorwort | 18 |
1 Die Welt des Raspberry Pi | 22 |
1.1 Die Modelle des Raspberry Pi | 22 |
1.1.1 Energieversorgung | 26 |
1.1.2 Der Raspberry Pi Zero W | 27 |
1.1.3 Raspberry Pi 2 und Pi 3 | 31 |
1.2 SD-Karten und microSD-Karten | 34 |
1.3 Von Wheezy zu Stretch – Downloads für Raspbian | 35 |
1.3.1 Die Release Notes als Chronik | 36 |
1.4 Über NOOBS zur Raspbian SD-Karte | 37 |
1.4.1 NOOBS aus dem Internet holen und entpacken | 38 |
1.4.2 NOOBS auf die leere (micro)SD-Karte kopieren | 40 |
1.5 NOOBS auf dem Raspberry Pi | 41 |
1.5.1 Wohin mit dem Bild? | 41 |
1.5.2 Energie für NOOBS | 42 |
1.6 Der NOOBS Recovery-Modus | 48 |
2 Der Raspberry Pi und Linux | 52 |
2.1 Das Abbild von Raspbian für die SD-Karte | 53 |
2.1.1 Die Abbilddatei mit einem Linux-PC übertragen | 57 |
2.1.2 Der Win32 Disk Imager | 57 |
2.2 Die Grundkonfiguration des Raspbian Desktops | 59 |
2.2.1 Tastaturlayout und Spracheinstellung | 60 |
2.2.2 Konfiguration von Autologin, Hostname und Bootmodus | 68 |
2.2.3 Passwortänderung | 69 |
2.2.4 Freigabe für SSH und Abfrage der IP-Adresse | 70 |
2.3 Der Raspberry Pi Desktop als Bedienoberfläche | 71 |
2.3.1 Die Lage der Panelleiste ändern | 72 |
2.3.2 Der Aufbau der Panelleiste | 72 |
2.3.3 Programmstart über Tastaturkürzel | 73 |
2.3.4 Eine symbolische Desktop-Verknüpfung hinzufügen | 74 |
2.3.5 Eine neue Desktop-Datei erzeugen | 75 |
2.3.6 Ein Programm der Anwendungsstartleiste hinzufügen | 77 |
2.3.7 Miniprogramme im Panel | 78 |
2.3.8 Das Konsolenkommando lxpanelctl | 80 |
2.4 Der Main Menu Editor Alacarte | 80 |
2.5 Das Erscheinungsbild anpassen mit LxAppearance | 81 |
2.6 Der Raspbian Desktop auf dem PC oder Mac | 83 |
2.7 Nützliche Programme ohne und mit grafischer Oberfläche | 85 |
2.8 Autostart mit und ohne GUI | 92 |
2.8.1 Die versteckte Datei .bashrc | 93 |
2.8.2 Die Datei rc.local | 95 |
2.9 Die Verwendung von LXTerminal in Desktop-Dateien | 97 |
2.10 Pakete – Installation und Verwaltung | 99 |
2.10.1 Der vorinstallierte Paketmanager pi-packages | 100 |
2.10.2 Der Paketmanager Synaptic | 101 |
2.10.3 Paketverwaltung über Konsolenkommandos | 102 |
2.11 Die Bildschirmauflösung mit und ohne den RPi-Desktop einstellen | 110 |
2.11.1 Über HDMI zum Fernseher | 114 |
2.11.2 Über den HDMI/VGA-Adapter zum Monitor | 115 |
2.11.3 Einstellung der Auflösung mit raspi-config | 117 |
2.12 Audioumschaltung und Bluetooth-Lautsprecher | 119 |
2.13 Systembackup im laufenden Betrieb | 122 |
3 Betriebssysteme, Partitionen, Backup und Restore | 124 |
3.1 SD-Karte, USB-Stick, Festplatte – was erkennt der Raspberry Pi? | 126 |
3.2 SD-Karten mit Betriebssystem | 129 |
3.2.1 Hinein in die Box | 129 |
3.2.2 Der passende Aufkleber | 130 |
3.2.3 Binäre Einheiten und die Kapazität von SD-Karten | 130 |
3.3 SD-Karten identifizieren mit sd-label.sh | 131 |
3.4 Hinweise zu Backup und Restore | 134 |
3.5 Formatierung von SD-Karten | 136 |
3.6 Das USB Image Tool | 138 |
3.7 Direktkopie der SD-Karte mit piclone | 140 |
3.8 Der Partitionsmanager GParted | 142 |
3.9 Eine bootfähige SD-Karte mit sd-restore.sh erzeugen | 145 |
3.10 Backup von SD-Karten mit sd-back.sh | 150 |
3.10.1 Nullen vor dem Backup | 154 |
3.11 Ein Blick in das Abbild der SD-Karte | 156 |
3.12 Festplatten am Raspberry Pi | 158 |
3.12.1 Der Einhängepunkt und die Systemkonsole | 162 |
3.12.2 Einhängen der Partition über /etc/fstab | 163 |
4 Programmieren mit dem Pi | 164 |
4.1 Dateien und Programme zum Buch | 165 |
4.2 Paketinstallation über die Skriptdateien zum Buch | 167 |
4.3 Die Skriptdateien zum Buch – was ist wo? | 169 |
4.4 Die Shell als Kommandointerpreter | 171 |
4.4.1 Umgebungsvariablen | 174 |
4.4.2 vcgencmd | 175 |
4.5 Strings in Bash, C und C++ | 177 |
4.6 Programmieren mit Bash | 178 |
4.6.1 Eingabe, Ausgabe und if else | 178 |
4.6.2 Feldtrenner und float-Werte | 181 |
4.6.3 Formatierte Ausgabe mit printfcalc.sh | 183 |
4.6.4 Ausgabekommandos für ASCII-Dateien | 183 |
4.6.5 Bash-Arrays mit numerischem Index | 184 |
4.6.6 Assoziative Bash-Arrays mit Wortindex | 186 |
4.6.7 Funktionen, Parameter und Exit-Codes | 187 |
4.6.8 Ausgabeumleitung und Rückgabewerte | 188 |
4.6.9 Ein Bash-Skript mit Funktionen und Indexsuche | 191 |
4.6.10 Indexelemente sortieren und finden mit assosort.sh | 194 |
4.6.11 Ausgabespalten neu anordnen mit dosdir.sh | 195 |
4.6.12 Die Ausgabe Einlesen und die IFS-Trennzeichen | 197 |
4.6.13 Filtern mit cut und grep | 200 |
4.6.14 Farben in der Konsolenausgabe | 207 |
4.6.15 Zeichen entfernen mit trim.sh | 209 |
4.6.16 Dateinamen oder Pfade extrahieren | 210 |
4.6.17 Die Position einer Zeichengruppe oder eines Strings finden | 210 |
4.6.18 Ein Blick in raspi-config | 212 |
4.7 Bash in Beispielen | 214 |
4.7.1 Wie copydesk.sh funktioniert | 214 |
4.7.2 Farbige Listings mit colordir.sh | 215 |
4.7.3 Analyse von Partitionsgrößen mit sd-info.sh | 217 |
4.7.4 Feldinhalte aus Audiodateien kompakt anzeigen | 220 |
4.7.5 EXIF-Daten anzeigen mit jhead.sh | 222 |
4.7.6 Metadaten ermitteln mit mediainfo.sh | 225 |
4.7.7 Diagnose der Bildschirmauflösung mit scrreso.sh | 229 |
4.7.8 Eine Bildschirmecke zur Videowiedergabe nutzen (OMXPlayer) | 231 |
4.7.9 Prozesse anzeigen mit pgrep_htop.sh | 233 |
4.8 Skriptdateien mit ASCII-GUI (whiptail/dialog) | 238 |
4.8.1 Vom Skript zum Kommando | 242 |
4.8.2 Eine allgemeingültige Dateiauswahl im Skript verwenden | 244 |
4.8.3 Programmauswahl über Checkboxes | 246 |
4.8.4 Bilder als ASCII-Art anzeigen | 249 |
4.8.5 Programmstart mit fotomenu.sh | 255 |
4.8.6 Programmstart über Desktop-Dateien und ASCII-Dialoge | 258 |
4.8.7 Dateiauswahl bei sd-mount.sh | 261 |
4.8.8 Der Programmstarter opencvgui.sh als ASCII-GUI | 264 |
4.9 C-Programme mit Raspbian nutzen (hello_pi/GPU) | 266 |
4.9.1 Videoprojektion auf eine rotierende Teekanne (hello_teapot.c) | 268 |
4.9.2 Mathematische Kunst mit hello_triangle2.c | 269 |
4.9.3 Das Skript helloGPU.sh auf einem „großen“ Linux-PC starten | 270 |
4.9.4 Mit make zum eigenen C-Programm | 271 |
4.9.5 Das Skript helloGPU2.sh für weitere GPU-Programme | 274 |
4.9.6 Programme starten mit system und popen | 275 |
4.9.7 Zeit ist relativ | 278 |
4.9.8 Mausklicks, Bewegungen und Scrollevents auswerten | 280 |
4.9.9 Von der Mausbewegung zur Audioausgabe | 285 |
4.10 Der Qt Creator als Entwicklungsumgebung | 289 |
4.11 Die Entwicklungsumgebung Code::Blocks | 294 |
4.12 GTK+ Programmierung | 297 |
4.13 Die Geany-Entwicklungsumgebung | 300 |
4.14 Python und IDLE als Entwicklungsumgebung | 303 |
4.15 Zenity-Dialoge | 307 |
4.16 GitHub und Raspbian | 308 |
5 Elektronik und Programme für den GPIO-Port | 310 |
5.1 Schaltungen aufbauen | 313 |
5.1.1 Drähte oder Drahtbrücken | 316 |
5.1.2 SMD-Adapter und ICs | 318 |
5.1.3 Widerstände, Widerstandsnetzwerke und Kondensatoren | 319 |
5.1.4 Der LED-Test | 321 |
5.2 Eine LED per Software schalten (Ein/Aus) | 322 |
5.3 Eine LED per Software dimmen (Pulsweitenmodulation) | 325 |
5.4 Eine LED am Optokoppler | 327 |
5.5 GPIO-Pins im Read-Modus (Bash) | 328 |
5.5.1 GPIO-Pins zyklisch abfragen (Polling) | 329 |
5.5.2 GPIO-Pins im Interrupt-Modus (Flankenerkennung) | 330 |
5.5.3 Flankenerkennung bei mehreren Schaltern | 333 |
5.6 WiringPi-Beispiele mit C-Quelltext | 336 |
5.6.1 WiringPi im Interrupt-Modus | 337 |
5.7 Experimente zur Impulswahl | 338 |
5.7.1 Audiodateien durch Impulswahl abspielen | 342 |
5.7.2 Impulsdiagramme mit GnuPlot | 343 |
5.8 Von der Helligkeit zur Frequenz | 346 |
5.8.1 Frequenzen messen mit dem Oszilloskop und mit r2f.cpp | 347 |
5.9 Stufenschalter, Tastenfelder, Encoder und Codierschalter | 352 |
5.10 Analog/Digital-Wandler für die SPI-Schnittstelle | 354 |
5.10.1 Analoge Messwerte mit spiloop.c erfassen | 357 |
5.11 Die I2C-Schnittstelle | 359 |
5.12 Analog/Digital-Wandler für I2C | 360 |
5.13 Ein LCD-Display am I2C-Bus | 365 |
5.13.1 Ausgaben mit sysinfo.sh | 370 |
5.13.2 PIDs auf dem LCD-Display mit pgrep_menuctrl.sh | 372 |
5.14 Die C-Library bcm2835 für den GPIO-Port | 374 |
5.15 Mehr Ampere mit externen Spannungsquellen | 376 |
5.16 Vom Schaltplan zum Layout | 378 |
5.16.1 EAGLE Light | 379 |
6 Sensoren und Software für Infrarot und Ultraschall | 384 |
6.1 LIRC als Empfänger | 385 |
6.1.1 Kommandos per IR-Fernbedienung auslösen | 391 |
6.1.2 Ein Auswahlmenü auf dem LCD-Display | 394 |
6.2 Entfernungsmessung per Ultraschall | 397 |
6.3 Ein Abstandswarner mit ultraloop.c im Qt Creator | 402 |
6.4 Entfernungsmessung mit Infrarotlicht | 407 |
6.4.1 Distanzmessung über den MCP3426 als A/D-Wandler | 409 |
7 Netzwerke und der Fernzugriff auf den Raspberry Pi | 410 |
7.1 Die automatische Vergabe von IP-Adressen | 413 |
7.2 Netzwerkkabel, Übertragungsraten und ethtool | 422 |
7.3 Eine Direktverbindung zum Raspberry Pi | 423 |
7.3.1 Die Link-Local-IP | 427 |
7.4 Netzwerkkameras | 428 |
7.4.1 Eine Direktverbindung für Netzwerkkameras | 430 |
7.5 Der SSH-Server und ein Linux-PC als Client | 431 |
7.5.1 SSH und die Weiterleitung des X11-Fensters | 436 |
7.5.2 Fingerabdrücke auf (micro)SD-Karten | 438 |
7.6 Zwei Schlüssel zum Vergleich – SSH ohne Passwort | 439 |
7.7 PuTTY als Windows-Client | 441 |
7.8 Remote-Zugriff mit WinSCP und Krusader als Client | 445 |
7.9 Der SSH-Fernzugriff per ASCII-GUI | 449 |
7.9.1 Ein Desktop-Icon auf dem Client-PC | 449 |
7.10 Ein Remote-Desktop mit TightVNC | 450 |
7.11 Energie sparen mit TMux | 453 |
7.12 Die ASCII-GUI pgrep_gui.sh | 458 |
7.13 TMux und die ASCII-GUI pgrep_gui.sh | 462 |
7.13.1 TMux-Skripting | 464 |
7.14 WLAN-Verbindungen und WLAN-Sticks | 466 |
7.14.1 WLAN-Verbindungen und wpa_gui | 470 |
7.15 Die Netzwerk-Tools arp-scan und nmap | 472 |
7.16 Netcat – vom Chatprogramm zum Videoempfänger | 474 |
7.17 Fünf Wege zum Raspberry Pi | 475 |
7.18 Über Android zum Raspberry Pi | 477 |
7.18.1 Über F-Droid zu ConnectBot | 478 |
7.19 Über USB OTG zum Raspberry Pi Zero | 481 |
8 Audio und Composite Video am Pi | 484 |
8.1 Buchsen, Kabel, Signale | 484 |
8.2 Audiowiedergabe | 488 |
8.3 Der AlsaMixer | 495 |
8.4 Audioaufzeichnung und ALSA-Tools | 497 |
8.4.1 SoX mit der Webcam als Audioquelle | 500 |
8.4.2 SoX passt auf – Reaktion auf Geräusche | 506 |
8.4.3 Informationen zur Audiodatei mit soxi | 509 |
8.4.4 Audioaufzeichnung im Remote-Modus | 510 |
8.4.5 Lautsprecherdurchsagen aus sicherem Abstand (remote) | 513 |
8.4.6 Externe USB-Soundkarten und das Programm speaker-test | 514 |
8.5 Sprachsynthese auf dem Linux-PC | 518 |
8.5.1 Sprachausgabe mit eSpeak | 519 |
8.5.2 Sprachausgabe über tts.sh mit eSpeak, SVOX-Pico und Festival | 520 |
9 Videodaten – Aufzeichnung und Wiedergabe | 524 |
9.1 Der OMXPlayer | 525 |
9.1.1 Kommandos für den OMXPlayer (DBUS-Interface) | 527 |
9.2 Videodateien aus dem Internet holen | 529 |
9.3 Archivierte Videos abspielen mit guiPlay.sh | 533 |
9.4 Videoplayer und multiplay.sh | 541 |
9.5 Wiedergabe mit videoselect.sh und avplay | 545 |
9.6 Wo ist das Videogerät? | 546 |
9.7 Daten zum Videogerät mit dem V4L-Treiber | 549 |
9.8 MPEG-Spezifikationen, Codecs und Containerdateien | 552 |
9.9 Fotografieren und Filmen mit guvcview | 553 |
9.10 Fotografieren mit fswebcam | 557 |
9.11 Die libav-tools und avconv (bzw. ffmpeg) | 563 |
9.11.1 Der Webcam-Zugriff mit avconv | 564 |
9.11.2 Vertonung mit avconv | 566 |
9.11.3 Bildschirmvideos mit dem Raspberry Pi | 567 |
9.11.4 Videos konvertieren mit WinFF | 569 |
9.12 Motion auf dem Pi | 571 |
9.12.1 Der Programmstarter motiongui.sh | 574 |
9.12.2 Der Blick auf die Uhr | 579 |
9.12.3 Motion-Parameter geeignet festlegen | 581 |
9.12.4 Namen für Bilder und Videodateien | 587 |
9.12.5 Einblendung von Zeitstempeln und Texten | 588 |
9.12.6 Markierte Bewegungen | 589 |
9.12.7 Bewegungsalarm auf Teilbereichen des Bildes | 590 |
9.12.8 Automatische E-Mails bei Ereignissen | 593 |
9.12.9 Den Videostream anzeigen und weiterleiten | 594 |
9.12.10 Parameteränderung per ASCII-GUI und setvalue.sh | 597 |
10 Kameramodule zum Raspberry Pi | 598 |
10.1 Das 8-Megapixel-Kameramodul mit Sony-IMX219-Sensor | 602 |
10.2 Fotos mit raspistill | 604 |
10.2.1 EXIF-Daten ermitteln | 609 |
10.2.2 Fotografieren mit fotomenu.sh | 610 |
10.2.3 Der manuelle Belichtungsmodus | 612 |
10.2.4 Fotografieren mit Zeit-/ISO-Automatik | 614 |
10.2.5 Farben und Spezialeffekte | 617 |
10.2.6 Fotos bei sehr wenig Licht und im Signalmodus | 621 |
10.3 Konverter für Einzelbilder | 625 |
10.4 Bilder und das FBI | 626 |
10.5 Videos aufzeichnen mit raspivid | 629 |
10.6 Videodateien mit MP4Box und avconv verarbeiten | 632 |
10.7 Der UV4L-Treiber zum Kameramodul des Raspberry Pi | 634 |
10.7.1 Fotografieren mit multicam.sh | 638 |
10.7.2 Filmen mit dd | 642 |
10.8 Binning bei raspistill und raspivid | 643 |
10.9 Motion und das Kameramodul | 646 |
11 Automatischer Datentransfer | 652 |
11.1 SFTP-Kommandos per Skript ausführen | 653 |
11.2 Eine RAM-Disk als Zwischenpuffer | 657 |
11.2.1 Bilder auf der RAM-Disk | 658 |
11.2.2 Die RAM-Disk überwachen | 660 |
11.3 Datentransfer mit FileZilla | 662 |
12 Audiosignale analysieren | 664 |
12.1 Audacity | 666 |
12.2 Die Verwendung von libsndfile | 668 |
12.2.1 Die Abtastwerte einer Audiodatei in Textform | 670 |
12.2.2 Ein Blick auf die Dokumentation | 671 |
12.2.3 Ausgabeumleitung für Audiodaten mit sndout.cpp | 672 |
12.3 Pausenerkennung und Segmentierung | 676 |
12.3.1 Audiosegmentierung und Sprachausgabe mit audiosegm.cpp | 677 |
12.4 Die Library tinyalsa | 682 |
12.4.1 Abtastraten mit tinypcminfo.c ermitteln | 684 |
12.4.2 Audioaufnahmen mit capaudio.sh und tinycap.c | 685 |
12.5 Der Pi als Papagei | 689 |
12.6 Spektrogramme mit sndfile-tools und Audacity | 691 |
12.7 Vokaltraining mit voxvokal.sh | 700 |
12.8 Das Audioquiz | 704 |
13 OpenCV und der Pi | 708 |
13.1 Die Konfiguration von OpenCV | 709 |
13.2 Mit dem Compiler zur ausführbaren Datei | 712 |
13.3 OpenCV – Dokumentation und Beispielprogramme | 716 |
13.4 OpenCV, CMakeGUI und Code::Blocks | 719 |
13.5 Die Qt-Projektdateien zu den Beispielprogrammen | 721 |
13.6 Das Programm fpsec.cpp auf dem Pi benutzen | 724 |
13.6.1 Fenster und Tastaturcodes von fpsec.cpp | 725 |
13.6.2 Konturbilder vom Webcambild | 726 |
13.6.3 Konturbilder vom Videobild | 727 |
13.6.4 FloodFill auf dem Videobild | 728 |
13.7 Programmierung mit OpenCV | 729 |
13.7.1 Grundlegende Datentypen und OpenCV-Klassen | 729 |
13.7.2 Fenster, Steuerelemente und cv::waitKey | 731 |
13.7.3 Optimierung von Farb- und Grauwertbildern per Tastendruck | 732 |
13.7.4 Binarisierung von Bildern mit cv::threshold | 735 |
13.7.5 Regionen und Beschriftungen | 737 |
13.8 Konfiguration für die WITH_QT-Oberfläche | 738 |
14 Objektsegmentierung mit OpenCV | 740 |
14.1 Segmentierung von Textzeilen | 740 |
14.2 Symbolerkennung mit iconreader.cpp | 743 |
14.3 Symbolerkennung auf Webcambildern | 746 |
14.3.1 Einsatzzweck, Bedienung und Tastaturcodes | 748 |
14.3.2 Vom Graustufenbild zum Erkennungsresultat | 753 |
14.3.3 Der Alarm und die Statistik | 759 |
14.4 Die sprechende Lichtschranke | 761 |
15 Experimente | 762 |
15.1 Booten mit Sprachausgabe | 762 |
15.2 Ein Eingabemodul mit IR-Detektor und LCD-Display | 765 |
15.2.1 Den Schaltungsaufbau planen | 768 |
15.2.2 Lötarbeiten für die Elektronik zum DOGM204 LCD-Display | 770 |
15.2.3 Das LCD-Display testen | 771 |
15.2.4 Das Eingabemodul eichen | 773 |
15.2.5 Die Drehung des Codierschalters auswerten | 776 |
15.3 Ein Client/Server-Konzept für das Eingabemodul | 777 |
15.3.1 Nur mit Maus und Display? | 783 |
15.4 Ein Client/Server-Konzept mit menuctrl.sh | 786 |
15.4.1 Fotos mit MenuCtrl | 791 |
15.5 Über MenuCtrl fswebcam starten/beenden | 794 |
15.6 Die hello_pi GPU-Programme mit MenuCtrl starten/beenden | 795 |
15.7 MenuCtrl im Infrarotlicht | 797 |
15.8 MenuCtrl schon beim Booten starten | 802 |
16 Schlusswort | 804 |
17 Übersicht der Programme und Skriptdateien zum Buch | 806 |
Stichwortverzeichnis | 812 |