Raspberry Pi programmeren met C (Extract)

Page 1



Raspberry Pi programmeren met C

• Dirk Ghysels

an Elektor Publication

LEARN

DESIGN

SHARE


1e druk: oktober 2019 Š 2019 Elektor International Media BV website: www.elektor.nl ISBN: 978-90-5381-302-7 NUR 950 Niets uit deze uitgave mag worden verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand, of openbaar gemaakt, in enige vorm of op enige wijze, hetzij elektronisch, mechanisch, door middel van druk, fotokopie, microfilm of op welke andere wijze dan ook, zonder voorafgaande schriftelijke toestemming van de uitgever. Alle rechten voorbehouden. Ondanks alle aan de samenstelling van dit boek bestede zorg kunnen noch de auteur, noch de redactie, noch de uitgever aansprakelijkheid aanvaarden voor eventuele schade die zou kunnen voortvloeien uit enige fout die in deze uitgave zou kunnen voorkomen. Voor zover het maken van reprografische verveelvoudiging uit deze uitgave is toegestaan op grond van artikel 16h Auteurswet 1912 dient men de daarvoor wettelijk verschuldigde vergoedingen te voldoen aan de Stichting Reprorecht (Postbus 3051, 2130 KB Hoofddorp, www.reprorecht.nl). Voor het overnemen van gedeelte(n) uit deze uitgave in bloemlezingen, readers en andere compilatiewerken (artikel 16 Auteurswet 1912) kan men zich wenden tot de Stichting PRO (Stichting Publicatie- en Reproductierechten Organisatie, Postbus 3060, 2130 KB Hoofddorp, www.stichting-pro.nl). No part of this book may be reproduced, stored in a database or retrieval system, or published in any form or any way, electronically, mechanically, by print, photoprint, microfilm or any other means without prior permission from the Publisher. All rights reserved. Tekstredactie: Eric Bogers Grafische vormgeving en productie: Technisch Vertaalbureau Bogers, Tiel (Nederland) Druk: Wilco, Amersfoort


Inhoud

Inhoud 1 • Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 • Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Soorten Raspberries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Aansluitingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3 • Het besturingssysteem . . . . . . . . . . . . . . . . . . . . . . . Installatie van Raspbian . . . . . . . . . . . . . . . . . . . . . . Het gebruik van Raspbian . . . . . . . . . . . . . . . . . . . . . . . Het bureaublad . . . . . . . . . . . . . . . . . . . . . . . . . . . . De verkenner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De startknop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LXTerminal: werken met de opdrachtregel . . . . . . . . . . . . Enkele SHELL-opdrachten . . . . . . . . . . . . . . . . . . . . . Opstarten van programma’s . . . . . . . . . . . . . . . . . . . sudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Software installeren en verwijderen . . . . . . . . . . . . . . . . VNC: Raspberry Pi op afstand beheren . . . . . . . . . . . . . . Installatie van de VNC-server . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17 17 18 19 20 20 21 21 21 22 23 23 24

4 • Experimenteren met de Raspberry Pi . . . . . . . . . . . . . . . . . . . . . .

25

5 • De compiler gcc en de programmeeromgeving Geany . . . . . . . . . .

29

6 • De programmeertaal C . . . . . . . . . . . . . . . . . . . . . . . De structuur van een C-programma . . . . . . . . . . . . . . . . Commentaar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #define naam waarde . . . . . . . . . . . . . . . . . . . . . . . . . De instructie #include "bestand" . . . . . . . . . . . . . . . . . . Naamgeving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De functie printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31 31 33 33 34 34 34

7 • Variabelen in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Waarden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variabelen en constanten . . . . . . . . . . . . . . . . . . . . . . . Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . . . . . . . . . . . . . . . . .

37 37 37 38

8 • Rekenen met variabelen en constanten . . . . . . . . . . . . . . . . . . . . 41 Rekenen met getallen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Rekenkundige operatoren: +, –, *, /, % . . . . . . . . . . . . . . . . . . . . . 41 ●3


Raspberry Pi programmeren met C

Toewijzingsoperator: = . . . . Samengestelde opdrachten . Logische bewerkingen . . . . . . . Vergelijkingsoperatoren . . . Logische operatoren . . . . . . Rekenen met bits . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

9 • Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41 41 41 42 42 43 45

10 • Arrays en structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

47 47 47 48 49 49 50

11 • Tekstvariabelen: string en char . . . . . . . . . . . . . . . . char-variabelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De functie sprintf(): strings opbouwen . . . . . . . . . . . Library <string.h> . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enkele stringfuncties . . . . . . . . . . . . . . . . . . . . . . . . sscanf(): van string naar getal . . . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51 51 52 53 54 54 55

12 • Programmastructuren . . . . . . . . . . . . . . . . . . . . . . . Voorwaardelijke instructies . . . . . . . . . . . . . . . . . . . . . . if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vergelijkingsoperatoren en logische uitdrukkingen . . . . Conditionele operatoren . . . . . . . . . . . . . . . . . . . . . . switch...case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lussen (loops) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . do...while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De for-loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . break en continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59 59 59 60 62 63 65 65 66 67 68

13 • In- en uitvoer van gegevens . . . . . . . . . . . . . . . . . . De functie printf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . De functie scanf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De functie fgets() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . . . . . . . . . . . . . . . . .

71 71 72 73

Arrays . . . . . . . . . . . . . . . . . . . Arrays en pointers . . . . . . . . . . . Meerdimensionale arrays . . . . . . . Data structures . . . . . . . . . . . . . Declaratie van een structure. . Pointer naar een structure . . .

●4

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .


Inhoud

14 • Functies en libraries . . . . . . . . . . . . . . . . . . . . . . . . Functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bereik van variabelen . . . . . . . . . . . . . . . . . . . . . . . Parameteroverdracht: opmerking . . . . . . . . . . . . . . . Structures als functieargument . . . . . . . . . . . . . . . . . Ingebouwde functies . . . . . . . . . . . . . . . . . . . . . . . . Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enkele standaard-libraries . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75 75 76 76 77 79 79 80

15 • Hardware-interfacing . . . . . . . . . . . . . . . . . . . . . . . Digitale in- en uitgangspinnen van de Raspberry Pi . . . . . De library wiringPi . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installatie van wiringPi . . . . . . . . . . . . . . . . . . . . . . . wiringPi en de commandoregel: het programma gpio . . wiringPi en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enkele instructies . . . . . . . . . . . . . . . . . . . . . . . . . . Analoge uitgangssignalen . . . . . . . . . . . . . . . . . . . . . . . Seriële bussen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De seriële poort . . . . . . . . . . . . . . . . . . . . . . . . . . . . De 1-Wire bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De I2C-bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De SPI-bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De CAN-bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

83 83 84 85 86 87 88 90 91 91 91 91 91 92

16 • De I2C-bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

93

17 • Tijdfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De library time.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De functie time . . . . . . . . . . . . . . . . . . . . . . . . . . . . struct tm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Het project ‘klok’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De tijdfuncties van wiringPi . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

97 97 97 97 98 99

18 • Kleine displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . LC-tekstdisplays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LCD met I2C-interface . . . . . . . . . . . . . . . . . . . . . . . . . . OLED-displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grafische LCD-displays . . . . . . . . . . . . . . . . . . . . . . . . . Installatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

101 101 104 105 108 108

●5


Raspberry Pi programmeren met C

19 • Experimenten met de GPIO-poorten . . . . . . . . . . . . . De uitgangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bescherming van de GPIO-poorten . . . . . . . . . . . . . . . . . Uitlezen van schakelaars . . . . . . . . . . . . . . . . . . . . . . . . Meer schakelaars . . . . . . . . . . . . . . . . . . . . . . . . . . . LED’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Meerkleuren-LED’s . . . . . . . . . . . . . . . . . . . . . . . . . . Meer LED’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-segment-display . . . . . . . . . . . . . . . . . . . . . . . . . . Charlieplexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . Geluid maken met een buzzer . . . . . . . . . . . . . . . . . . . . Grotere belastingen schakelen met een FET . . . . . . . . . . . Zwaardere belastingen schakelen met een relais . . . . . . . Motoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Motoren aan-en uitschakelen . . . . . . . . . . . . . . . . . . De draairichting aansturen . . . . . . . . . . . . . . . . . . . . De snelheid regelen . . . . . . . . . . . . . . . . . . . . . . . . . Aanwezigheidsdetectie met een PIR-sensor . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

111 111 111 112 112 113 113 115 116 117 118 120 121 123 123 123 124 125

20 • Sensoren en de Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . Analoge ingang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De temperatuursensoren LM35, LM36 en LM37 . . . . . . . . . . . . . . . . . LM35 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De temperatuur- en luchtvochtigheidssensoren DHT11 en DHT22 . . . . De temperatuursensor DS18B20 . . . . . . . . . . . . . . . . . . . . . . . . . . . Aansluiting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De DS18B20 en Raspbian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DS18B20 en wiringPi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De temperatuur- en luchtdruksensor BMP180 . . . . . . . . . . . . . . . . . .

129 129 131 132 133 136 137 138 139 140

21 • Netwerken: een inleiding . . . . . . . . . . . . . . . . . . . . . Netwerk-standaarden . . . . . . . . . . . . . . . . . . . . . . . . . . Ethernet – WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . IP: Internet Protocol . . . . . . . . . . . . . . . . . . . . . . . . TCP en UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Toepassingsprotocollen . . . . . . . . . . . . . . . . . . . . . . . Protocollen en de Raspberry Pi . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

143 143 143 143 144 145 145

22 • Een webserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . De webserver Apache . . . . . . . . . . . . . . . . . . . . . . . . . . Installatie van Apache . . . . . . . . . . . . . . . . . . . . . . . . . . HTML in een notedop . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . . . . . . . . . . . . . .

147 147 147 148

●6

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .


Inhoud

De structuur van een HTML-pagina . . . . . HTML-head . . . . . . . . . . . . . . . . . . . . . . HTML-body: headings, paragraphs, break . HTML-body: lijsten . . . . . . . . . . . . . . . . . HTML-body: tabellen . . . . . . . . . . . . . . . HTML-body: formulieren . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

148 150 151 151 152 153

23 • PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wat is PHP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hoe werkt het? . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installatie van PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . De structuur van PHP-bestand . . . . . . . . . . . . . . . . . . . . Commentaar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Echo() en strings . . . . . . . . . . . . . . . . . . . . . . . . . . . Variabelen in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gegevenstypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rekenen met variabelen en constanten . . . . . . . . . . . . . . PHP en Linux-commando’s . . . . . . . . . . . . . . . . . . . . . . . shell_exec() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Strings afdrukken met de functie print_r() . . . . . . . . . Genummerde lijst . . . . . . . . . . . . . . . . . . . . . . . . . . Associatieve arrays . . . . . . . . . . . . . . . . . . . . . . . . . De instructie foreach() . . . . . . . . . . . . . . . . . . . . . . . Voorwaardelijke instructies . . . . . . . . . . . . . . . . . . . . . . Lussen (loops) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PHP functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verwerken van HTML-formulieren . . . . . . . . . . . . . . . . . . Datum en tijd in PHP . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....

157 157 157 158 159 160 160 160 161 162 162 162 163 163 163 164 165 167 169 170 172 173

24 • GPIO’s gebruiken via een webserver . . . . . . . . . . . . Uitgangen schakelen via een webpagina . . . . . . . . . . . . . Ingangen uitlezen met een webpagina . . . . . . . . . . . . . . Uitlezen van sensoren . . . . . . . . . . . . . . . . . . . . . . . . . . Temperatuurmeting via de webbrowser . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . . . . . . . . . . . . . . . . .

177 177 179 180 180

25 • Werken met bestanden in C . . . . . . . . . . . . . . . . . . . De filepointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Een eerste voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . Declareren en openen van bestanden . . . . . . . . . . . . . . . Schrijven naar een bestand . . . . . . . . . . . . . . . . . . . . . . De functie fputc() . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

183 183 184 185 186 186 ●7


Raspberry Pi programmeren met C

De functie fprintf() . . . . . . . . . . . . . . Lezen van een bestand . . . . . . . . . . . . . De functie fscanf() . . . . . . . . . . . . . . De functie fgets() . . . . . . . . . . . . . . fseek(): zoek een plaats in een bestand .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

187 188 188 189 190

26 • Bestanden in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . Lezen van een tekstbestand . . . . . . . . . . . . . . . . . . . . . Toepassing: een teller voor je website . . . . . . . . . . . . . . Webformulieren: gegevens bewaren in een bestand . . . . . Een webserver met een DS18B20 . . . . . . . . . . . . . . . . . . Toepassing: een datalogger . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

193 193 195 196 199 200

27 • Bijlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De GPIO-connector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De ASCII-tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LCD-I2C-1.c: aansturing van een LC-display met I2C-interface . Klok-LCD.c: klok met LCD-scherm . . . . . . . . . . . . . . . . . . . . Charlieplex.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Onderdelenlijst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inhoud van de downloadfolder . . . . . . . . . . . . . . . . . . . . . . . Bibliografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

205 205 206 207 212 214 216 217 220

●8

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .


1 • Inleiding

1 • Inleiding De Raspberry Pi is een kleine, goedkope single-board computer met de functionaliteit van een ‘grote’ computer. Het systeem is bedoeld voor het onder de knie krijgen van de grondbeginselen van computertechniek en voor het besturen van simpele en meer complexe zaken. Figuur 1 • Raspberry Pi (foto: www.raspberry.org).

De Rasbberry Pi kan gebruikt worden als een eenvoudige computer. Je sluit hem aan op de TV in de woonkamer of op een computermonitor. Hij heeft alles aan boord voor voor het browsen van websites en voor het draaien van een mailprogramma. Er is een Office-programma aan boord met tekstverwerker, spreadsheet, presentatieprogramma... De hardware heeft een open structuur. De GPIO-bus (General Purpose Input/ Output) maakt het mogelijk randapparaten en zelfgebouwde schakelingen aan te sluiten. De Raspberry Pi wordt dan ook veel gebruikt in allerlei robotica-experimenten. De Raspberry Pi werkt met het besturingssysteem Linux. Er is dan ook een nagenoeg onbegrensde hoeveelheid software beschikbaar voor het systeem. De makers van de Raspberry Pi hebben hem in de eerste plaats bedoeld als een systeem voor de programmeertaal Python, vandaar de naam Raspberry Pi. In dit boek gebruiken we de programmeertaal C: • C is de huistaal voor Linux-systemen. GCC, dé standaard C-compiler, is meegeleverd met elk Linux-systeem en veel gebruikers zijn vertrouwd met C of talen die van C zijn afgeleid. Arduino is erg verwant met C, veel Arduino software kan dan ook vrij eenvoudigd geconverteerd worden naar C. ●9


Raspberry Pi programmeren met C

• C is een zeer krachtige taal maar toch eenvoudig in het gebruik. C heeft een dertigtal sleutelwoorden maar er zijn ongelooflijk veel libraries (software-bibliotheken) met bijkomde functies die je kunt gebruiken in jouw programma’s. Enkele belangrijke bibliotheken worden standaard meegeleverd met C, de meeste andere kunnen gratis worden gedownload. In dit boek wordt alleen open source-software gebruikt. Deze software is vrij te gebruiken en te verspreiden. De voorbeeldprogramma’s van de auteur zijn ook vrij. Hopelijk zijn ze bruikbaar of tenminste interessant voor de lezer.

Opmerking: inmiddels is van de Raspberry Pi het model 4 verschenen, dat in maar liefst drie uitvoeringen verkrijgbaar is: met 1 GB RAM, met 2 GB RAM en met 4 GB RAM. Voor nadere informatie verwijzen we naar de review op de Elektor-website: https://www.elektormagazine. nl/news/review-raspberry-pi-4-nieuw-maar-ook-goed

● 10


2 • Raspberry Pi

2 • Raspberry Pi Raspberry Pi is de naam van een reeks single-board computers1 gebaseerd op een ARM-processor die tegen een minimale prijs worden vervaardigd en verkocht. De Raspberry Pi werd ontwikkeld aan de Universiteit van Cambridge en is bedoeld voor educatieve doeleinden. Een Raspberry Pi heeft USB-connectoren voor onder andere toetsenbord en muis. Hij heeft een HDMI-connector om een TV aan te sluiten. Met een adapter kan ook een computermonitor met DVI-ingang worden aangesloten. Elke Raspberry Pi heeft een GPIO-connector (General Purpose Input-Output). Hierop kan je sensoren, randapparaten of uitbreidingskaarten aansluiten. Een uitbreidingskaart voor de GPIO-connector wordt een HAT genoemd. De meeste Raspberries hebben een DSI-bus voor het aansluiten van een LC-display en een CSI-bus voor een camera, een Ethernet-connector voor aansluiting op het netwerk en een SD-slot voor massa-opslag. Soorten Raspberries

De eerste Raspberries, model A en model B, verschenen in 2012 op de markt. Model A heeft 256 MB werkgeheugen en geen netwerkaansluiting. Met uitbreidingen op de USB-poort werd netwerktoegang mogelijk. Model B heeft 512 MB RAM en een 10/100 Mb/s Ethernetpoort. Latere modellen, Raspberry Pi A+ en B+, Pi2 A en B en Pi 3 model B, hebben meer geheugen, een snellere processor, ‘native’ netwerkmogelijkheden en meer aansluitingen. Op Pi-dag2 2018 verscheen model 3B+ met een quadcore-processor, Bluetooth en WiFi. Begin 2019 verscheen een vereenvoudigde, goedkopere versie, model

Figuur 2 • Model 3B+ (links) en 3A+ (rechts). 1 • Computers op één enkel printje. 2 • In Engelstalige landen wordt 14 maart genoteerd als 3/14. Vanwege de gelijkenis met getal pi (p = 3,14159…) wordt deze dag Pi-dag genoemd door wiskundigen en Raspberry Pi fanaten.

● 11


Raspberry Pi programmeren met C

3A+, met minder geheugen en minder aansluitingen. Heb je één van de oudere modellen, dan kan die nog perfect gebruikt worden voor veel toepassingen. Koop je een Raspberry Pi, dan kun je beter één van de nieuwe modellen kiezen. Hieronder zie je de voornaamste kenmerken van deze twee bordjes: RPi model 3B+

RPi model 3A+

CPU

ARM, 64 bit, 1,4 GHz, quadcore

ARM, 64 bit, 1,4 GHz, quadcore

Geheugen

1 GB

512 MB

Ethernet

Gigabit

neen

WiFi

802.11 b/g/n/ac

802.11 b/g/n/ac

Bluetooth

4.2/BLE

4.2/BLE

HDMI-poort

full-size

full-size

USB

4 x, USB 2.0

1 x, USB 2.0

afmetingen

85 x 56 mm

65 x 56 mm

De Raspberry Pi Zero is een kleine, goedkope variant. Dit model heeft een zuinige processor en 512 MB geheugen, maar geen netwerktoegang. Dit model heeft minder aansluitingen die bovendien afwijkende (kleinere) connectoren hebben. Eén micro-USB-aansluiting is de voedingsaansluiting, aan de andere worden randapparaten zoals muis en toetsenbord aangesloten met behulp van een geschikte converter. De Raspberry Pi Zero W is gelijk aan model Zero, maar dan uitgebreid met WiFi en Bluetooth (zie de tabel op de volgende bladzijde).

Figuur 3 • Model Zero W.

● 12


2 • Raspberry Pi

RPi model zero

RPi model zero W

CPU

ARM, 1 GHz, singlecore

ARM, 1 GHz, singlecore

Geheugen

512 MB

512 MB

Ethernet

-

-

WiFi

-

802.11 b/g/n

Bluetooth

-

4.1/BLE

HDMI-poort

Mini-HDMI

Mini-HDMI

USB

1x, usb on-the-go

1x, usb on-the-go

afmetingen

65x30 mm

65x30 mm

Op de website van Raspberry vind je een lijst van aanbevolen verkopers. Daar vind je ook alle nodige accessoires. Accessoires vind je bij de meeste elektronica-postorderaars maar ook bij Chinese webshops zoals Aliexpress, Miniinthebox, Bangood enzovoort. De kwaliteit van de producten uit China is in orde, de prijzen zijn laag tot zeer laag maar de leveringstijden uit China vallen soms tegen. Aansluitingen

In eerste instantie gebruiken we de Raspberry als een ‘normale’ PC met monitor, toetsenbord en muis. Wat hebben we verder nodig? • Voor de voeding een USB-netadapter (minimaal 1 A) en een kabel met micro-USB stekker (figuur 4). • Een HDMI-kabel als je een TV gebruikt als monitor of een HDMI/ DVI-adapter als je een monitor met DVI-aansluiting gebruikt1 (figuur 5). • Een micro-SD kaartje voor massaopslag, 8 of 16 GB (figuur 6). • Toetsenbord en muis met USB-aansluiting.

Figuur 4.

Figuur 5.

Figuur 6.

1 • HDMI is een aansluiting voor digitale audio- en videosignalen; deze wordt meestal gebruikt om randapparatuur op bijvoorbeeld een TV aan te sluiten. DVI is een aansluiting voor digitale beeldsignalen; deze aansluiting wordt meer en meer vervangen door displayport en HDMI.

● 13


Raspberry Pi programmeren met C

Als je een TV-toestel gebruikt als monitor, dan wordt het geluid met de HDMI-kabel meegestuurd. Gebruik je een DVI-monitor, dan kan het geluid afgetakt worden aan de audio/video-uitgang. Dit is een jack-connector met vier aansluitingen: massa, video, geluid links en geluid rechts. Hiervoor heb je ook een adapter nodig. Gebruik de beeldaansluiting van deze aansluiting niet, de HDMI-uitgang geeft een veel beter beeld. Deze adapters zijn niet gestandaardiseerd, ga na welke cinch-aansluitingen voor het geluid gebruikt worden. Figuur 7 • Adapter voor geluid.

De Raspberry Pi Zero en de Zero W hebben minder aansluitingen terwijl de aanwezige aansluitingen afwijkende (kleinere) connectoren hebben. Voor die boards hebben we enkele extra’s nodig: • De Zero en de Zero W hebben geen GPIO-connector. Die moet je apart kopen en op het board solderen. Gebruik hiervoor een standaard 20-polige, 2-rijige pinheader. • Een micro-USB OTG-kabel voor het aansluiten van apparaten op de micro-USB aansluiting. • Een mini-HDMI naar HDMI adapter. Figuur 8 • Adapters voor RPI Zero (W).

Een Raspberry Pi wordt verkocht als naakte printplaat. Een geschikte behuizing beschermt de kwetsbare onderdelen. Behuizingen zijn in allerlei vormen, kleuren ● 14


2 • Raspberry Pi

en prijzen te koop. Kijk maar eens op de website van een Raspberry Pi-verkoper of ga kijken bij Chinese webshops.

Figuur 9 • Behuizingen voor de Raspberry Pi.

● 15


Raspberry Pi programmeren met C

â—? 16


3 • Het besturingssysteem

3 • Het besturingssysteem Er zijn meerdere besturingssystemen beschikbaar voor de Raspberry Pi. De makers van de Raspberry Pi bevelen Raspbian aan. Het is het meest gebruikte besturingssysteem voor de Raspberry Pi en het wordt ook in dit boek gebruikt. Raspbian is een Linux-versie en het bevat bijna alles wat je nodig hebt om met een computer te werken: LibreOffice (een officeprogramma met onder andere een tekstverwerker, een spreadsheet- en een databaseprogramma), programmeertalen en programmeeromgevingen, een webbrowser, een mailprogramma... Omdat Rasp­bian zo veel gebruikt wordt is er ook heel veel gratis software beschikbaar en bestaat er een uitgebreide ondersteuning voor. Installatie van Raspbian

• Ga naar de downloadfolder van Raspberry Pi (www.raspberrypi.org/ downloads/) en klik op Raspbian. Figuur 10 • Downloadfolder van Raspberry Pi.

• Klik op Raspbian en kies RASPBIAN STRETCH WITH DESKTOP, Download ZIP. • Sla dit bestand op en pak het uit. Het resultaat is een Disk Image, een afbeelding van een systeemschijf voor de Raspberry Pi. • Download en installeer Etcher van de website https://etcher.io of kies de portable versie en voer die uit. Etcher is een programma waarmee een Disk Image naar een schijf of een (micro-)SD-kaart kan worden geschreven. • Start Etcher, kies de juiste Image en zet die op het SD-kaartje. Het wegschrijven naar het kaartje gaat vrij vlot; daarna zal het programma alles controleren en dat gaat heel langzaam. • Steek het kaartje in de Raspberry en sluit monitor, toetsenbord, muis en voeding aan. De Raspberry zal opstarten.

● 17


Raspberry Pi programmeren met C

• Op het eerste welkomstscherm stel je land, taal en tijdzone in. Belgen kunnen kiezen uit talen Vlaams, Frans, Duits, Limburgs en Waals, Nederlanders uit Nederlands, Limburgs, Nedersaksisch en West-Fries. • Op het tweede welkomstscherm kan je een nieuw wachtwoord opgeven voor de standaardgebruiker ‘pi’. Eventueel kan je later andere gebruikers toevoegen. • Het derde scherm zoekt naar netwerkverbindingen. Als je WiFi gebruikt, moet je later, na de installatie van Raspbian, het SSID en wachtwoord van je draadloze netwerk invoeren. Gebruik hiervoor de knop WiFi-instellingen, rechts bovenaan op het bureaublad (zie verderop). • In het laatste scherm worden updates gezocht en geïnstalleerd. • Tijd voor een kop koffie! Dit kan lang duren, ook al heb je Raspbian recent gedownload. • Na installatie van de updates zal het systeem herstarten, daarna is de Raspberry Pi klaar voor gebruik. Het gebruik van Raspbian

Voor een Windowsgebruiker zal Raspbian een vertrouwde indruk maken, de meeste dingen werken min of meer zoals bij een Windows-systeem. Hier en daar is er iets dat net anders blijkt te werken maar na een beetje zoeken en proberen vind je het wel. Ongeveer alles aan het systeem kan worden aangepast aan jouw persoonlijke voorkeuren. Dat is leuk, maar als je niet oplet doe je iets fout

Figuur 11 • Het bureaublad.

● 18


3 • Het besturingssysteem

waardoor het systeem beschadigd wordt. Het klembord werkt zoals het Windows-klembord, met dezelfde sneltoetsen: contr-X voor knippen, contr-C voor kopiëren en contr-V voor plakken. Het bureaublad

Na het opstarten van (en eventueel inloggen op) de Raspberry Pi verschijnt het bureaublad op het scherm (figuur 11). Op dit bureaublad betekenen de icoontjes links bovenaan van links naar rechts: • • • • • •

de startknop (zie verderop); de internetbrowser Chromium; de verkenner (zie verderop); LXTerminal (zie verderop); de wiskundige programmeeromgeving Mathematica; Wolfram, een spelletje.

De icoontjes rechts bovenaan, van rechts naar links, betekenen: • • • • • • •

een knop om externe schijven te ontkoppelen; de klok; de processorbelasting; de volumeknop; WiFi-instellingen' Bluetooth-instellingen; VNC (zie verderop).

Je kunt het bureaublad net als bij een Windows-systeem aanpassen aan je voorkeuren: zet de muis op een lege plaats van het bureaublad, rechtsklik en kies bureaubladvoorkeuren. Er verschijnt een venster om de scherminstellinge aan te passen. In een volgend hoofdstuk presenteren we een klein 3,5-inch-schermpje (7 x 5 cm). De optimale instellingen voor dit scherm kun je ook hier vinden. Figuur 12 • Scherminstellingen aanpassen.

● 19


Raspberry Pi programmeren met C

Met de de PrintScrn-toets van het toetsenbord maak je een schermfoto van het bureaublad. Deze foto komt als jpg-bestand in je gebruikersmap terecht. Veel figuren in dit boek zijn zo gemaakt. De verkenner

De verkenner toont de mappenstructuur van de Raspberry en werkt als de Windows-verkenner. De hoofdmap wordt voorgesteld door een slash (/); dat teken is ook het scheidingsteken tussen de verschillende niveaus. Iedere gebruiker heeft een eigen map. Alle gebruikersmappen staan in de folder /home. In het voorbeeld hierboven is map /home/pi actief, dus de map van gebruiker ‘pi’. Een gebruiker kan in zijn eigen map bestanden aanmaken, wijzigen en verwijderen; andere mappen zijn meer beveiligd.

Figuur 13 • De verkenner. De startknop

Met de startknop, het icoontje met de framboos links bovenaan, start je programma’s op. De programma’s zijn verdeeld in categorieën: • programmeren: enkele programmeertalen; • kantoor: de office-programma’s Calc voor spreadheets, Base voor databanken, Writer voor teksten enzovoort; • internet voor de webbrowser; • spelletjes; ● 20


3 • Het besturingssysteem

• hulpmiddelen: bestandsbeheer en verkenner, rekenmachine, LXTerminal, een PDF-programma enzovoort; • help; • voorkeuren met alle instellingen voor het Raspbian-systeem; • run: een alternatieve manier om programma’s te starten; • shutdown om het systeem af te sluiten of te herstarten. LXTerminal: werken met de opdrachtregel

Vroeger startten alle UNIX-computers op in de shell en dit was de enige manier om opdrachten in te voeren. Tegenwoordige gebruiken we een grafische gebruikersinterface of GUI (Graphical User Interface). De shell werkt daarentegen met een opdrachtregel. In plaats icoontjes aan te klikken, typen we onze opdrachten rechtstreeks in. Op de Raspberry Pi gebruik je LXTerminal om de opdrachtregel te emuleren. Je start de terminal op met het terminalsymbool, bovenaan op het bureaublad. Figuur 14 • LX-terminal.

Enkele SHELL-opdrachten

• mkdir map: maak nieuwe map; • rmdir: verwijder een map; • cd map: ga naar map; cd..: ga naar bovenliggende map; • pwd: toon het pad naar de actieve map; • ls: geef de inhoud van de huidige map; ls -a: toont ook verborgen bestanden; ls –la: toont alles, met bestandskenmerken; • cp: kopieert een bestand; • rm: verwijdert een bestand; • cat bestand: toont de inhoud van een bestand. Opstarten van programma’s

Je start een programma op door de naam in te typen, voorafgegaan door de naam van de map waarin het zich bevindt. De hoofdmap wordt aangegeven ● 21


Raspberry Pi programmeren met C

met een slash (/), de actieve map met een punt en een slash (./); de subfolder ‘map3’ van de actieve map wordt als map3 zonder voorafgaande slash aangegeven. Enkele voorbeelden: • /bin/date Start het programma date in de map /bin op. • Map3/doe-iets Start doe-iets op in de deelmap Map3 van de actieve map. • ./doe-nog-iets Start doe-nog-iets op in de actieve map. Als je geen mapnaam opgeeft, dan zoekt Linux in enkele voorafbepaalde mappen. De lijst van die mappen vind je met instructie echo $PATH. • date Start het programma date op in de map /bin. Deze map behoort tot de standaard-zoekmappen. Linux zoekt niet in de actieve map, tenzij die toevallig ook tot de zoeklijst van $PATH behoort. Vergeet dus niet ./ in te typen. Heb je een map in jouw gebruikersmap met veel eigengemaakte programma’s, dan kun je die map ook in de zoeklijst zetten: • path="/usr/pi/programs:$PATH" Zet /usr/pi/programs in de zoeklijst. sudo

Gewoonlijk werken we op een Linux-systeem als een normale gebruiker. Op een standaardinstallatie van Raspbian heet die ‘pi’, maar we kunnen ook andere gebruikers met andere namen definiëren. Voor normale gebruikers bestaat er een aantal beperkingen: zij mogen geen bestanden buiten hun gebruikersfolder verwijderen of wijzigen, en ze mogen geen opdrachten uitvoeren die het Linux-systeem veranderen. Eén gebruiker kan dat wel, dat is de superuser. Soms is het nodig een programma als superuser op te starten. Dat doe je dan door voor de opdracht sudo te typen. Als jouw systeem beveiligd is met een wachtwoord voor de superuser, dan zal dit worden gevraagd voor het systeem verder gaat. Voorbeeld: Je start het configuratieprogramma op met raspi-config. Als gewone gebruiker lukt dit niet. Typ je daarentegen sudo raspi-config, dan wordt het configuratieprogramma wel opgestart, eventueel na invoeren van het super­ user-wachtwoord. ● 22


3 • Het besturingssysteem

Software installeren en verwijderen

Er is enorm veel software beschikbaar voor ons Raspbian-systeem. Die kan je installeren met het programma Add/Remove Software in het menu Voorkeuren van de startknop. Dit programma is de gratis app-store van Raspbian. De software is gerangschikt in categorieën. Klik links de gewenste categorie aan; het programma zal vervolgens op internet zoeken of er nieuwe programma’s in die categorie beschikbaar zijn. Selecteer dan het gewenste programma en klik op OK, al het andere rest gebeurt automatisch.

Figuur 15 • Toevoegen van software. VNC: Raspberry Pi op afstand beheren

Virtual Network Computing (VNC) is een manier om het bureaublad van een computer te delen. Hiermee kan een andere computer op afstand worden beheerd. De toetsaanslagen en muisbewegingen van de ene computer worden naar een andere machine gestuurd. Het beeld wordt in de andere richting gestuurd, via het netwerk. Een VNC Viewer (een programma om VNC mee te bekijken) op een een Windows-PC kan een VNC-server op een Raspberry Pi benaderen. VNC wordt hier gebruikt om een Raspberry Pi zonder scherm en toetsenbord te beheren vanaf een PC.

● 23


Raspberry Pi programmeren met C

Installatie van de VNC-server:

• Start het programma Add/Remove Software op; • typ in het zoekvenster VNC in; • na een tijdje verschijnt een lijst met programma’s. Selecteer VNC server for GNOME; • klik op OK en wacht tot alles geïnstalleerd is; • start het configuratieprogramma (start  voorkeuren  Raspberry Pi configuratieprogramma); • ga naar Interfaces en start VNC; • je kunt een VNC-client voor je PC gratis downloaden van de website van VNC (www.realvnc.com).

● 24


Index

Index ! 1-Wire Bus 91 7-segment display 116 #define 33 #include 34, 80 A accolade 32 ADC 129 ADS1115 129 analoge ingang 129 analoog naar digitaal converter 129 analoog uitgangssignaal 90 argumenten 75 ARM-processor 11 array 47 array() 163 ASCII 51 asterisk 45 B bestanden 183 binair bestand 183 binair talstelsel 37 bit 37 blokgolf 90 BMP180 140 breadboard 25, 26 break 68 broncode 29 BS170 120 bufferprint 111 bureaublad 19 buzzers 118 byte 37, 51 C C 9, 31 CAN-bus 92 char 38, 51 Charlieplexing 117 Cobbler 27 commentaar 33 compiler 29 constante 37 continue 68 D datalogger 200 data-structure 49 date() 174 DCF-klok 98

delay() 99 delayMicroseconds() 99 DHT11 133 DHT22 133 Disk Image 17 double 38 do...while 65, 169 driekleuren LED 115 E Echo 160 escape-code 51 escape-tekens 161 Etcher 17 F FALSE 161 fclose() 186, 193 feof() 194 FET 120 fgetc() 194 fgetcsv() 194 fgets() 73, 189, 194 file-pointer 183 float 37, 38 fopen() 185, 193 for 65, 169 foreach 170 for-loop 67 fprintf() 187 fputc() 186 fputcsv() 194 fscanf() 188 fseek() 190 fwrite() 194 G gcc 29 GCC 9 Geany 29 gelijkstroommotoren 123 General Purpose Input-Output 11 gereserveerde woorden 34 global 171 globale variabele 76, 171 gpio 86 GPIO 11 GPIO-bus 9 GPIO-connector 83 grafische gebruikersinterface 21 Graphical User Interface 21 GUI 21

â—? 223


Raspberry Pi programmeren met C H HAT 11 H-brug 123 HDMI/DVI adapter 13 HDMI-kabel 13 hoofdlettergevoelig 32 HTML-formulieren 172 I I2C-bus 91, 93 I2C convertor 104 if 59, 167 if...else 167 if...elsif...else 167 indexnummer 47 installatie van WiringPi 85 instructie 32 int 38 integer 37 internet 20 IRF520 120 IRF9520 124 J jumpwires 27 K klembord 19 klok 98 L LCD 101 LCD met I2C-interface 104 LED 25 LED-matrix 116 library 10, 79, 80 LibreOffice 17 Linux 9 Linuxtijd 97 LM35...LM37 131 log() 79 logical level converter 94 logische operator 42, 60 logische uitdrukking 60 logische variabele 161 logische waarden 41 lokale variabele 76, 171 long 38 long double 38 loop 65 luchtdruk 140 lus 65 LX-terminal 21

â—? 224

M main() 32 master 93 matrix toetsenbord 112 meerkleuren LED 113 members 49 micros() 99 micro-SD kaartje 13 millis() 99 N naamgeving 34 netwerkverbinding 18 O Office-programma 20 opdrachtregel 21 P Philips 93 PIR-sensor 125 plaatshouder 72 pointer 45 pow() 79 printf 34, 71 PrintScrn 20 proefopstelling 25 programmeertaal C 31 pulldown 84 pullup 84 pulsbreedtemodulatie 90 puntkomma 32 PWM 90 Python 9 R Raspberry Pi 9, 11 Raspberry Pi Zero 12 Raspberry Pi Zero W 12 Raspbian 17 raspi-config 22 readfile() 193 rekenkundige bewerkingen 162 relais 121 return 170 S samengestelde opdrachten 41 scanf 72 SCL 93 SDA 93 SEEK_CUR 191 SEEK_END 191 SEEK_SET 191 seriĂŤle poort 91


Index serieweerstand 25 shell 21 shell_exec 162 short 38 sin() 79 slash 20 slave 93 software-bibliotheken 10 software installeren 23 SPI-bus 91 sqrt() 79 SSID 18 standaardgebruiker 18 startknop 20 stdint.h 80 stdio.h 80 stdlib.h 80 string 52, 161 strlen() 171 strpos() 171 str_replace() 171 strrev() 171 struct-statement 49 structure 49 str_word_count() 171 sudo 22 superuser 22 T tekstbestand 183 tekstdisplay 101 temperatuur/luchtvochtigheid 133 temperatuursensor 131 tijdstempel 174

time() 174 time.h 97 timestamp 174 toewijzingsoperator 162 TRUE 161 tweekleuren LED 114 TWI 93 Two Wire Interface 93 type 37 U UART poort 91 UNIX-computer 21 unsigned char 38 unsigned int 38 unsigned long 38 unsigned short 38 USB netstekker-voeding 13 UTC-tijd 97 V variabele 37 variabelesubtitutie 161 vergelijkingsoperatoren 42, 60, 162 verkenner 20 Virtual Network Computing 23 VNC Viewer 23 void 75 voorwaardelijke instructie 59 W waarde 37 while 65, 169 WiFi 18

â—? 225



Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.