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

Harald Schmidt

Raspberry Pi programmieren mit C/C++ und Bash

Mehr als 50 Programme rund um Foto, Video & Audio. Inkl. Einsatz von WiringPi, ALSA & OpenCV

2018

816 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  29,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446457904

 

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

 

© 2009-2022 ciando GmbH