Raspberry Pi programmieren mit C/C++ und Bash - Mehr als 50 Programme rund um Foto, Video & Audio. Inkl. Einsatz von WiringPi, ALSA & OpenCV

Raspberry Pi programmieren mit C/C++ und Bash - Mehr als 50 Programme rund um Foto, Video & Audio. Inkl. Einsatz von WiringPi, ALSA & OpenCV

von: Harald Schmidt

Carl Hanser Fachbuchverlag, 2018

ISBN: 9783446453494

Sprache: Deutsch

850 Seiten, Download: 70262 KB

 
Format:  EPUB, PDF, auch als Online-Lesen

geeignet für: geeignet für alle DRM-fähigen eReader geeignet für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Apple iPod touch, iPhone und Android Smartphones Online-Lesen PC, MAC, Laptop


 

eBook anfordern

Mehr zum Inhalt

Raspberry Pi programmieren mit C/C++ und Bash - Mehr als 50 Programme rund um Foto, Video & Audio. Inkl. Einsatz von WiringPi, ALSA & OpenCV



  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  

Kategorien

Service

Info/Kontakt