Afstandsbewaking en monitoring systeem met Raspberry Pi en

advertisement
Scriptie ingediend tot het behalen van de graad van
PROFESSIONELE BACHELOR IN DE ELEKTRONICA-ICT
Afstandsbewaking- en monitoringsysteem
met Raspberry Pi en Arduino
Artur Kondrashin
Departement Wetenschappen en Techniek
Opleiding Elektronica-ICT
Academiejaar 2014-2015
Interne promotor: Tom Peeters
Externe promotor: Rik Haekens
Versie: 11 juni 2015
Dankwoord
Hierbij wil ik graag alle betrokkenen danken die mij hebben geholpen tijdens mijn stage en bij
het opstellen van deze scriptie.
Eerst en vooral zou ik mijn externe promotor Rik Haekens willen danken voor zijn aanzet tot
deze interessante opdracht en voor zijn hulp tijdens mijn stage. Ik wil eveneens graag mijn dank
uiten aan Tom Peeters voor zijn bijstand als interne promotor en aan Tim Dams voor de snelle
en duidelijke antwoorden op mijn vragen en de algemene informatie rond de bachelorproef. Ook
wil ik Marc Smets danken, daar hij mij voorzien heeft van werkmateriaal dat ik had nodig voor
dit project.
Ik wil ook graag mijn dank betuigen aan alle docenten van de Artesis-Plantijn Hogeschool voor
alle kennis die ze aan ons hebben gegeven gedurende onze opleiding; het was zeker onmisbaar
bij de uitvoer van deze bachelorproef.
Antwerpen, 11 juni 2015
Artur Kondrashin
i
Abstract
Voor mijn bachelorproef moet ik een systeem ontwikkelen voor het agentschap van wegen en
verkeer. Dit systeem moet aan bestaande installaties gekoppeld kunnen worden. Het doel van
dit systeem is op afstand de toestand van elektrische kasten te monitoren en ook hun toegang
te beperken door de identiteitskaart te controleren. Er moet bovendien een voorziening tot
videogesprekken geı̈nstalleerd worden, zodat iemand die aan het werken is aan de kast, hulp kan
krijgen van een operator. Dit project is eigenlijk een onderzoekingsproject dat tot doel heeft een
efficiënt maar tegelijk een prijsgunstig controlesysteem te ontwerpen en te onderzoeken welke
mogelijkheden dit systeem kan aanbieden.
Het systeem bestaat uit 2 delen:
Server gedeelte:
Hier draait een webapplicatie. Met deze webapplicatie kan de gebruiker informatie over
installaties zien, nieuwe nummers in de database toevoegen voor de toegangscontrole en nieuwe
soorten installaties aanmaken.
Hardware gedeelte:
Voor het hardware gedeelte worden raspberry pi, arduino, camera, kaartlezer en display gebruikt.
Doel van het hardware gedeelte is informatie van sensoren verwerken en doorsturen naar de
lokale database en de server, de ingestoken kaart controleren, informatie aan de display tonen
en een videogesprek functie aanbieden.
ii
Inhoudsopgave
Dankwoord
i
Abstract
ii
1 Situering
1.1 Doelstellingen . . . . . . . . . . . . .
1.2 LAMP-server . . . . . . . . . . . . . .
1.2.1 Ubuntu . . . . . . . . . . . . .
1.2.2 Apache-server . . . . . . . . .
1.2.3 MySQL . . . . . . . . . . . . .
1.2.4 PHP . . . . . . . . . . . . . .
1.2.5 PhpMyAdmin . . . . . . . . .
1.2.6 jQuery . . . . . . . . . . . . .
1.3 Raspberry Pi software . . . . . . . . .
1.3.1 Raspbian OS . . . . . . . . . .
1.3.2 Lighttpd-server . . . . . . . . .
1.3.3 Python . . . . . . . . . . . . .
1.3.4 Kaartlezer ondersteuning . . . .
1.3.5 Arduino-ondersteuning . . . . .
1.3.6 Webcamera ondersteuning . . .
1.3.7 LCD 16x2 display-ondersteuning
1.4 Windows software . . . . . . . . . . .
1.4.1 Arduino IDE . . . . . . . . . .
1.4.2 Virtualbox . . . . . . . . . . .
1.4.3 Putty . . . . . . . . . . . . . .
1.4.4 Xming . . . . . . . . . . . . .
1.4.5 WinSCP . . . . . . . . . . . .
1.4.6 Win32DiskImager . . . . . . .
1.5 Hardware . . . . . . . . . . . . . . . .
1.5.1 Raspberry Pi . . . . . . . . . .
iii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
2
3
3
4
4
4
5
5
6
6
7
7
8
8
9
9
9
10
10
11
11
12
12
INHOUDSOPGAVE
1.5.2
1.5.3
1.5.4
1.5.5
Arduino Uno . . .
Webcamera . . .
LCD 16x2 display
Kaartlezer . . . .
iv
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Bespreking
2.1 Bespreking server en webapplicatie . . . . .
2.1.1 Web-applicatie . . . . . . . . . . . .
2.1.2 Login pagina . . . . . . . . . . . . .
2.1.3 Registratiepagina . . . . . . . . . . .
2.1.4 Hoofdpagina . . . . . . . . . . . . .
2.1.5 Lijst met alle NN’s . . . . . . . . . .
2.1.6 Lijst met alle installaties . . . . . . .
2.1.7 Types . . . . . . . . . . . . . . . . .
2.1.8 Connectie met database . . . . . . .
2.2 Bespreking werking van hardware en software
2.2.1 Het masterscript . . . . . . . . . . .
2.2.2 Gebruikte bibliotheken . . . . . . . .
2.2.3 Bespreking van het masterscript . . .
2.2.4 Bespreking gebruikte hardware . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
op de Raspberry
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
3 Resultaten
3.1 Vooropgestelde doelstellingen . . . . . . . . . . . . . . .
3.1.1 Server kant en webapplicatie . . . . . . . . . . . .
3.1.2 Installatiekant (Raspberry Pi en andere hardware)
3.2 Behaalde resultaten . . . . . . . . . . . . . . . . . . . .
3.2.1 Serverkant en webapplicatie . . . . . . . . . . . .
3.2.2 Installatiekant (Raspberry Pi en andere hardware)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
16
17
18
. .
. .
. .
. .
. .
. .
. .
. .
. .
Pi
. .
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
21
22
22
23
24
24
27
28
29
29
30
30
34
.
.
.
.
.
.
37
37
37
37
38
38
38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Besluit
40
A Appendix 1
A.1 Raspberry Pi pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
41
Lijst van figuren
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
1.12
1.13
1.14
1.15
1.16
1.17
1.18
1.19
1.20
1.21
1.22
Overzicht van het project
Lamp-server logo . . . . .
Ubuntu logo . . . . . . .
Apache server logo . . . .
MySQL logo . . . . . . .
PHP logo . . . . . . . . .
PhpMyAdmin logo . . . .
jQuery logo . . . . . . . .
Raspbian logo . . . . . .
Lighttpd-server logo . . .
Python logo . . . . . . .
Arduino IDE logo . . . .
Virtualbox logo . . . . . .
Putty logo . . . . . . . .
Xming logo . . . . . . . .
WinSCP logo . . . . . . .
Win32DiskImager logo . .
Raspberry Pi . . . . . . .
Arduino UNO . . . . . .
PS3-eye motion camera .
LCD 16x2 display . . . .
Kaartlezer . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
2
3
3
4
4
5
5
6
7
9
10
10
10
11
11
12
14
16
17
18
2.1
2.2
2.3
2.4
2.5
2.6
2.7
Bridged adapter .
Vaste IP instellen
Vaste IP instellen
Vaste IP instellen
Vaste IP instellen
Vaste IP instellen
Login pagina . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
20
20
20
21
21
22
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
v
LIJST VAN FIGUREN
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
Registratiepagina . . . . . . . . . .
Hoofdpagina . . . . . . . . . . . .
Lijst met alle NN’s . . . . . . . . .
Lijst met alle installaties . . . . . .
Informatie over gekozen installatie .
Uitgangen van installatie aansturen
Videogesprek . . . . . . . . . . . .
Types . . . . . . . . . . . . . . . .
Nieuwe type aanmaken . . . . . . .
Gebruikte hardware . . . . . . . . .
vi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
24
25
26
26
27
28
28
34
A.1 Raspberry Pi pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
Hoofdstuk
1
Situering
1.1
Doelstellingen
Het doel van dit project omvat het ontwerp van een afstandsbewaking- en monitoringsysteem,
die de toestand van de verschillende soorten installaties kan monitoren en de toegang tot de
installaties kan beperken. Het is ook de bedoeling om het systeem zo prijsgunstig mogelijk
te houden en te kijken welke mogelijkheden dit systeem allemaal kan bieden. Het project kan
nuttig zijn voor verschillende alleenstaande installaties, om de toestand te controleren en om
data van sensoren te kunnen voorstellen op een webpagina.
Figuur 1.1: Overzicht van het project
1
HOOFDSTUK 1. SITUERING
1.2
2
LAMP-server
LAMP staat voor Linux, Apache, MySQL en PHP(of Python/Perl). Deze technologieën worden
vaak samen gebruikt om dynamische sites te laten draaien. Ik heb een LAMP-server gebruikt
want er was me gevraagd om vooral opensource software te gebruiken voor dit project. Andere
voordel en van een LAMP-server zijn dat men gemakkelijk informatie daarover op het internet
kan vinden en dat deze software gratis is.
Figuur 1.2: Lamp-server logo
1.2.1
Ubuntu
Als besturingssysteem voor een LAMP-server heb ik de Ubuntu desktop versie gekozen. Ubuntu
is een Linux-distributie voor desktopcomputers, laptops, servers, tablets en smartphones. Het
kan ook een server versie zijn, maar aangezien ik nog een webapplicatie dien te ontwerpen en te
testen, heb ik voor deze versie gekozen, want er is een grafische user interface aanwezig. Het
testen van software is op deze manier veel gemakkelijker.
Ubuntu heeft volgende voordelen:
• Gebruiksvriendelijkheid
• Veel tutorials staan op het internet
• Omvangrijke community
• Open source
• Gratis
Voor dit project heb ik Ubuntu in een virtualbox geinstalleerd, want ik had mijn Windows laptop
nodig voor speciale software en Ubuntu voor mijn webapplicatie.
Men kan Ubuntu op de volgende site downloaden: http://www.ubuntu.com/
Figuur 1.3: Ubuntu logo
HOOFDSTUK 1. SITUERING
1.2.2
3
Apache-server
Op de Ubuntu wordt een Apache-server gebruikt om aan de eindgebruiker toegang tot de
webapplicatie te geven. Deze open source server wordt vaak gebruikt dankzij zijn veiligheid,
stabiliteit en mogelijkheden.
Om Apache op Ubuntu te installeren moet men volgend commando gebruiken:
• sudo apt-get install apache2
Als de installatie gelukt is, kan men html- en php- pagina’s in /var/www/html/ plaatsen. Om
via de browser tot deze pagina’s te geraken moet men IP-adres van de server ingeven (bv.:
127.0.0.1)
Figuur 1.4: Apache server logo
1.2.3
MySQL
MySQL is een open source management systeem voor databases. Dit systeem wordt veel
gebruikt en men kan ook vrij veel informatie op het internet over MySQL vinden. In mijn
project heb ik een database nodig om verschillende gegevens van de users op te slaan en om
achteraf deze informatie te gebruiken.
Met het volgende commando kan men MySQL-server in Ubuntu installeren:
• sudo apt-get install mysql-server
Figuur 1.5: MySQL logo
HOOFDSTUK 1. SITUERING
1.2.4
4
PHP
PHP is een server-side scripttaal, die wordt gebruikt om dynamische pagina’s op te maken. Bij
dit project wordt PHP gebruikt om informatie uit de database te halen en dan achteraf aan de
gebruiker op de webpagina te tonen. Omdat PHP een server-side taal is, wordt het script eerst
op de webserver uitgevoerd en pas daarna wordt de gegenereerde webpagina naar de gebruiker
verstuurd.
Met het volgende commando kan men PHP -ondersteuning in Ubuntu installeren:
• sudo apt-get install php5
Figuur 1.6: PHP logo
1.2.5
PhpMyAdmin
Het is een heel handige tool om de databases vanuit de browser te kunnen beheren. De tool
geeft het overzicht van alle tabellen in de database en laat de gebruiker gemakkelijk informatie en tabellen aanmaken, aanpassen of verwijderen, evenals SQL-commando’s uitvoeren.
PhpMyAdmin is geschreven in PHP en wordt gedistribueerd onder de voorwaarden van de GPL.
De tool wordt met het volgende commando geı̈nstalleerd:
• sudo apt-get install phpmyadmin
Figuur 1.7: PhpMyAdmin logo
1.2.6
jQuery
Aangezien momenteel het design van de websites heel belangrijk is, heb ik jQuery gebruikt. Het
betreft een javascript bibliotheek die veel mogelijkheden geeft qua design, waarbij de focus op
de samenwerking van javascript en html ligt .
HOOFDSTUK 1. SITUERING
5
Het grote voordeel van jQuery is ook dat er moet bijna niets in de code van de webpagina dient
te veranderen om het design van de webapplicatie aan te passen.
Figuur 1.8: jQuery logo
1.3
Raspberry Pi software
Zoals bij de hoofdserver, heeft Raspberry Pi ook verschillende software nodig. Hier wordt
software besproken die op Raspberry Pi geı̈nstalleerd werd.
1.3.1
Raspbian OS
Het betreft een standaard besturingssysteem (debian wheezy port) dat op Raspberry Pi geinstalleerd werd. Met speciale software (bv.: Win32DiskImager), kan men een image file op
een SD-card zetten.
Raspbian biedt veel mogelijkheden aan en daardoor kan Raspberry Pi als een gewoon Linuxcomputer gebruikt worden.
Bij het invoeren van een SD-card in Raspberry Pi moeten er de eerste keer verschillende opties
geconfigureerd worden.
Om het besturingssysteem te updaten, moet men de volgende commando’s gebruiken:
• sudo apt-get update
• sudo apt-get upgrade
Wanneer een SSH-functie ingeschakeld wordt, kan men gemakkelijk tot aan de command line
geraken en tevens tot aan de grafische interface van Raspberry Pi.
Figuur 1.9: Raspbian logo
HOOFDSTUK 1. SITUERING
1.3.2
6
Lighttpd-server
Het betreft een lichte server die ik op de Raspberry Pi geı̈nstalleerd heb. Het voordeel van
Lighttpd is dat die bijna alle mogelijkheden aanbiedt, zoals een Apache-server, en dat hij
bovendien weinig cpu gebruikt. Het is een opensource software en wordt onder BSD-licentie
gepubliceerd.
Ik heb ook alle nodige modules geı̈nstalleerd, zoals MySQL (is nodig om data van sensoren
op lokale database op te slaan), PHP-ondersteuning en PHPmyadmin , zodat de database
gemakkelijk beheerd kan worden.
Indien men de Lighttpd-server en andere software (MySQL, PHP, PHPmyadmin) wil installeren,
moet men volgende commando’s gebruiken:
• sudo apt-get install lighttpd
• sudo apt-get install mysql-server
• sudo apt-get install php5-common php5-cgi php5
• sudo apt-get install php5-mysql
• sudo apt-get install phpmyadmin
Met een ”top”command kan men zien dat de Lighttpd-server minder dan 1 procent van CPU
gebruikt. Dit betekent een zeer goed resultaat.
Figuur 1.10: Lighttpd-server logo
1.3.3
Python
Hier gaat het over een programmeertaal die als standaard voor Raspberry Pi wordt gezien.
Syntax is vrij gemakkelijk om te begrijpen en er staan veel informatie evenals oplossingen van
verschillende problemen op het internet. Een software omgeving om programma’s te schrijven
is standaard al geı̈nstalleerd op de Raspberry Pi.
HOOFDSTUK 1. SITUERING
7
Als men meer mogelijkheden wil (bv.: met speciale hardware werken of nieuwe klassen
gebruiken), dan moeten extra modules toegevoegd worden.
In dit project gebruik ik python voor volgende doelen:
• Uitlezen van data van lokale database
• Versturen/ontvangen data naar/van arduino
• Uitlezen data van identiteitskaart
• Versturen data van lokaale database naar server
• Display aansturen
Figuur 1.11: Python logo
1.3.4
Kaartlezer ondersteuning
Wanneer men informatie van een Belgische identiteitskaart wil inlezen met een kaartlezer,
moeten er noodzakelijke pakketten op Raspbian geı̈nstalleerd worden. Met onderstaande link
kan men deze software downloaden:
http://sourceforge.net/projects/acsccid/files/acsccid/1.1.0/raspbian/.
Om de software te installeren, moet men het volgende doen:
• Map met software kiezen: cd /home/pi/Desktop/acsccid-1.1.0
• Software installeren: ./configure && make && make install
1.3.5
Arduino-ondersteuning
Arduino omvat een heel belangrijk deel van dit project, daar dit wordt gebruikt om aangesloten
hardware (slot, lampen, ...) te bedienen en ook om data van sensoren naar Raspberry Pi te
sturen.
Het volgende dient te gebeuren, wanneer men arduino ide wil installeren:
• sudo apt-get install arduino
Ook dienen de volgende pakketten voorzien te worden op Raspberry Pi:
• cd ∼
HOOFDSTUK 1. SITUERING
8
• curl -O https://pypi.python.org/packages/source/n/nanpy/nanpy-v0.8.tar.gz
• tar xvf nanpy-v0.8.tar.gz
• rm nanpy-v0.8.tar.gz
Pakketten die nodig zijn voor Python om seriële data te kunnen versturen en ontvangen:
• sudo pip install nanpy
• sudo pip install pyserial
Nu kunnen wij een code voor Arduino op Raspberry Pi laten compileren en uploaden. Ook
kunnen wij data serieel versturen en ontvangen.
1.3.6
Webcamera ondersteuning
Videogedeelte
Voor de videogesprekfunctie er is nood aan een USB-webcamera. Als webcamera heb ik een
PS3 eye camera genomen. Het voordeel van deze camera is dat die een microfoon heeft (zo
bespaar ik 1 USB-poort op Raspberry Pi, die voor de USB-audiokaart nodig zal zijn).
Om de ondersteuning van de camera te voorzien, moeten wij motion software gebruiken. De
installatie gebeurt met het volgende commando:
• sudo apt-get install motion
Audio gedeelte
De camera heeft eveneens een ingebouwde microfoon die voor geluidsopname gebruikt kan
worden.
Het geluid van de camera opnemen kan met standaard geı̈nstalleerde software Alsa.
1.3.7
LCD 16x2 display-ondersteuning
Om de display te kunnen aansturen, moet er een bibliotheek voor Python geı̈nstalleerd worden.
Daarvoor dient men het volgende te doen:
Met deze directe link moet men software pakket downloaden:
https://pypi.python.org/packages/source/R/RPLCD/RPLCD-0.3.0.tar.gz#md5=78ab2cea707bb6b5cff
HOOFDSTUK 1. SITUERING
9
Dan deze file uit ’archive’ nemen: met rechtermuisknop op ’archive file’ klikken en ’extract here
’ kiezen.
Vervolgens in command line:
• cd /home/pi/Desktop/RPLCD-0.3.0
• sudo python setup.py install
1.4
Windows software
Hier worden diverse handige hulpprogramma’s besproken die ik op mijn Windows- laptop heb
gebruikt.
1.4.1
Arduino IDE
Het betreft software omgeving die vereist is om programma’s voor Arduino te kunnen schrijven,
compileren en uploaden. Men kan ook met dit programma de data seriëel naar Arduino versturen
(handig voor het debuggen).
Figuur 1.12: Arduino IDE logo
1.4.2
Virtualbox
Deze applicatie wordt gebruikt om verschillende besturingssystemen op Windows te kunnen
starten. In verband met dit project is deze applicatie heel interessant, omdat ik tegelijkertijd
Windows kan gebruiken voor de speciale software en Ubuntu voor de webapplicatie.
Virtualbox kan met de volgende link gedownload worden:
https://www.virtualbox.org/
HOOFDSTUK 1. SITUERING
10
Figuur 1.13: Virtualbox logo
1.4.3
Putty
Het betreft een heel bekende applicatie die ik gebruik in dit project om via SSH verbinding
te kunnen maken en Raspberry Pi met een Windows-computer aan te sturen. Kan ook voor
andere doeleinden gebruikt worden.
Figuur 1.14: Putty logo
1.4.4
Xming
Deze applicatie leent zich het best om te kunnen werken aan Raspberry Pi, zonder dat men
muis/toetsenbord/scherm dient aan te sluiten. Men heeft enkel een laptop en een ethernet
kabel nodig. Met deze applicatie kan men tot aan de grafische interface van Raspberry Pi
geraken vanuit de laptop.
HOOFDSTUK 1. SITUERING
11
Figuur 1.15: Xming logo
1.4.5
WinSCP
WinSCP (Windows Secure CoPy) is een grafische opensource-FTP-cliënt voor Windows die
gebruik maakt van SSH. Handige tool om files tussen laptop en Raspberry Pi te kunnen
versturen.
Figuur 1.16: WinSCP logo
1.4.6
Win32DiskImager
Tool die de image-file naar de SD-card van Raspberry Pi schrijft en ook een back-up van de
SD-card maakt.
Figuur 1.17: Win32DiskImager logo
HOOFDSTUK 1. SITUERING
1.5
1.5.1
12
Hardware
Raspberry Pi
Figuur 1.18: Raspberry Pi
Het is een kleine Linux-computer met een ARM-processor die vaak gebruikt wordt door
enthousiasten voor verschillende projecten.
Voor dit project gebruik ik Raspberry Pi B+, want die heeft 4 USB- poorten. Dit is belangrijk
voor de aansluiting van de randapparatuur. Model B+ heeft ook meer GPIO-poorten (speciale
pinnen die kunnen gebruikt worden om elektronica aan te sturen en data te verkrijgen) dan de
oude modellen van Raspberry Pi.
Het is zeker de kern van het hardware gedeelte van het project. Raspberry Pi zorgt voor de
verwerking van data die van Arduino, camera en kaartlezer komen. Hier draait de database
voor het opslaan van verschillende gegevens en ook de Lighttpd-server.
Specificaties:
• Chip Broadcom BCM2835 SoC
• Core architecture ARM11
• CPU 700 MHz Low Power ARM1176JZFS Applications Processor
• GPU Dual Core VideoCore IV® Multimedia Co-Processor
• Memory 512MB SDRAM
HOOFDSTUK 1. SITUERING
13
• Besturingssysteem boot vanuit een micro SD-kaart
• Afmetingen: 85 x 56 x 17mm
• Ethernet 10/100 BaseT Ethernet socket
• Video Output HDMI (rev 1.3 en 1.4)
• Audio Output 3.5mm jack, HDMI
• 4 x USB 2.0 poorten
• GPIO aansluiting met 40-pinnen 2.54 mm
• Camera-aansluiting
• Display-aansluiting
Voordelen:
• Grootte: Raspberry Pi is zo klein als een kredietkaart, heel gemakkelijk overal te plaatsen
• Energieverbruik: verbruikt slechts 3,5 Watt
• Prijs: kost ongeveer 30 euro
• Geschikt voor Linux: men kan vrij veel software gebruiken
• Omvangrijke community
• Geschikt voor veel toepassingen
HOOFDSTUK 1. SITUERING
1.5.2
14
Arduino Uno
Figuur 1.19: Arduino UNO
Arduino is een opensource computerplatform dat gebaseerd is op een Atmel ATmega168microcontroller (nieuw R3-model is gebaseerd op ATmega328).
Arduino is bedoeld voor enthousiasten en technici die hun ideeën in realiteit willen uittesten en
een snel prototype wensen te maken. Er kunnen veel verschillende soorten sensoren aangesloten
worden en Arduino kan ook elektronica aansturen met digitale outputs.
Met Arduino kan men gemakkelijk elektronische prototypes ontwerpen die op hun omgeving
kunnen reageren door gebruik te maken van digitale en analoge inputsignalen. Als er signalen
zijn aan de input-poorten van Arduino, dan zullen deze signalen verwerkt worden om het
gewenste signaal aan de output-poorten te bekomen. Een input-signaal kan bijvoorbeeld
ontstaan door een schakelaar, lichtsensor, bewegingssensor, temperatuursensor, of door de
commando’s die komen van het internet, van een radiomodule of via seriële interface. Door de
uitgangen van Arduino kan men verschillende elektronische toestellen aansturen, zoals motoren,
verlichting, relais, displays, etc. Men kan ook Arduino gebruiken om informatie van een andere
Arduino te ontvangen, of terug te verzenden.
Arduino kan voor verschillende toepassingen gebruikt worden, zoals:
• Automatisatie
• Detectie (m.b.t sensoren)
• Aansturing van de elektronica (motoren, verlichting, ...)
• Ontvangen en verzenden van data
HOOFDSTUK 1. SITUERING
Specificaties:
• Microcontroller ATmega328
• Operating Voltage 5V
• Input Voltage (recommended) 7-12V
• Input Voltage (limits) 6-20V
• Digital I/O Pins 14 (of which 6 provide PWM output)
• Analog Input Pins 6
• DC Current per I/O Pin 40 mA
• DC Current for 3.3V Pin 50 mA
• Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader
• SRAM 2 KB (ATmega328)
• EEPROM 1 KB (ATmega328)
• Clock Speed 16 MHz
• Afmetingen: 68.6 x 53.4 x 17mm
Voordelen:
• Gemakkelijk beginnen software schrijven (gebruiksvriendelijk)
• Heeft veel verschillende poorten (analoog input, digitaal input/pwm output)
• Redelijke prijs
• Omvangrijke community
• Geschikt voor veel toepassingen
• Opensource
• Software ontwikkelingsprogramma is gratis ter beschikking
15
HOOFDSTUK 1. SITUERING
1.5.3
16
Webcamera
Figuur 1.20: PS3-eye motion camera
Voor dit project heb ik een PS3-eye motion camera gebruikt. Het voordeel van deze camera is
dat die een ingebouwde microfoon heeft. Normaal gezien moet elke USB- webcamera met een
microfoon goed werken.
Specificaties:
• Interface: USB 2.0
• Resolutie en fps: 640x480 60fps of 320x240 120fps
• Audio input: 4 kanalen - 16 bits/channel, 48 kHz, SNR 90db
Voordelen:
• Redelijke prijs
• Goede beeldkwaliteit
• Ingebouwde microfoon
HOOFDSTUK 1. SITUERING
1.5.4
17
LCD 16x2 display
Figuur 1.21: LCD 16x2 display
Heel bekende display, die vaak in de elektronicawereld gebruikt wordt. Heeft twee rijen en elke
rij bestaat uit 16 karakters. Met deze display kan men gemakkelijk nuttige informatie aan de
gebruiker tonen.
Ik heb deze displayversie gekozen, omdat er al een aansluiting was die speciaal ontworpen is voor
de Raspberry Pi. Er zijn tevens knoppen aanwezig. De knoppen worden gebruikt om informatie
aan de gebruiker te laten zien, maar ze kunnen ook voor andere toepassingen gebruikt worden
(bv.: pin-code ingeven, ...)
Binnen dit project, wordt het scherm gebruikt om diverse informatie aan de gebruiker te tonen,
zoals:
• Informatie die uit database ingelezen kan worden (helpdesk telefoon, ...)
• Meldingen over de ingevoerde kaart (kaart moet ingevoerd worden, geen toegang, ...)
• Verschillende foutmeldingen
Voordelen:
• Compact
• Heeft verlichting
• Veel documentatie op het internet over 16x2 display
HOOFDSTUK 1. SITUERING
18
• Redelijke prijs (tegenover kleurschermen)
• Deze versie is speciaal voor de Raspberry Pi ontworpen (en kan rechtsreeks aan GPIOpoorten van Raspberry Pi aangesloten worden)
• Heeft knoppen (kunnen voor verschillende toepassingen gebruikt worden)
1.5.5
Kaartlezer
Figuur 1.22: Kaartlezer
De kaartlezer wordt gebruikt om informatie vanuit de identiteitskaart in te lezen en toegang tot
de installatie te beperken. Ik heb voor de standaard kaartlezer gekozen die men in de winkel
kan kopen. Er was ook een alternatief, namelijk een kaartlezer die speciaal gefabriceerd wordt
voor buitengebruik, maar de prijs was vrij hoog. Daarom heb ik een gewone kaartlezer gebruikt.
Voordelen:
• Redelijke prijs
• Kan kaarten lezen
Hoofdstuk
2
Bespreking Afstandsbewaking- en
monitoringsysteem
Hier worden alle zaken in verband met server-gedeelte en hardware-gedeelte besproken,
voornamelijk de werking van de webapplicatie op de server en Python script op de Raspberry
Pi.
2.1
Bespreking server en webapplicatie
Wanneer men de server vanuit de buitenwereld wil bereiken (om data van installaties in een
database op te slaan en de webapplicatie aan te spreken), moeten er een aantal zaken gedaan
worden.
Bij dit project heb ik met het lokale netwerk gewerkt (Raspberry Pi is direct aan de laptop
aangesloten met een ethernet kabel). Ubuntu was in de virtualbox geı̈nstalleerd en daardoor
dient er bridged network gebruikt te worden in plaats van NAT. Bij bridged network kan
Raspberry Pi data naar de server versturen en de server kan ook Raspberry Pi bereiken.
In virtualbox: bij netwerk instellingen van Ubuntu, dient men te kiezen voor bridged adapter.
Figuur 2.1: Bridged adapter
19
HOOFDSTUK 2. BESPREKING
20
Op Ubuntu, indien een Apache-server en andere software (PHP, MysSQL, PHPmyadmin) al
geı̈nstalleerd zijn, moet men het volgende commando uitvoeren:
sudo gedit /etc/mysql/my.cnf
En dan in document volgende lijn aanpassen :
bind-address = 127.0.0.1 veranderen naar adres van de server (bind-address = 169.254.0.3)
Vaste IP aan de server geven:
Bovenaan in de menubalk van Ubuntu connecties kiezen, en dan edit connecties:
Figuur 2.2: Vaste IP instellen
Vervolgens op add drukken:
Figuur 2.3: Vaste IP instellen
Connectie type ethernet kiezen en op create drukken:
Figuur 2.4: Vaste IP instellen
Bovenaan ipv4 settings kiezen, method: manual, op add drukken en gewenste IP en netmask
ingeven (bij dit project heb ik 169.254.0.3 en 255.255.255.0 gateway 169.254.0.1 gebruikt) en
op save drukken:
HOOFDSTUK 2. BESPREKING
21
Figuur 2.5: Vaste IP instellen
Daarna bovenaan in de menubalk van Ubuntu onze connectie kiezen:
Figuur 2.6: Vaste IP instellen
2.1.1
Web-applicatie
Om gewenste informatie aan de gebruikers te tonen, wordt in dit project een webapplicatie
toegepast.
Het doel van de webapplicatie is als volgt:
• Nieuwe gebruikers laten registreren
• Nationaal nummer en gegevens van personen toevoegen (nodig om toegang tot installaties
te beperken)
• Lijst met alle aanwezige installaties weergeven
• De toestand van de gekozen installatie weergeven (data van verschillende sensoren +
openings-/sluitingstijd)
• Elektrische apparaten van gekozen installatie aansturen (ventilator, verlichting, ...)
• Lijst met alle types van de installaties weergeven
• Nieuwe types toevoegen
• Videogesprek starten met gekozen installatie
HOOFDSTUK 2. BESPREKING
22
Bij het creëren van een webapplicatie heb ik PHP-scripttaal gebruikt, daar er veel informatie
dynamisch dient aangemaakt te worden op de webpagina. Enkel Html-taal gebruiken is hier
niet van toepassing.
De webapplicatie werkt op de Apache-server die op Ubuntu is geı̈nstalleerd. Alle files van de
webapplicatie bevinden zich in een map op volgende pad: /var/www/html. De toegang tot deze
map is beperkt. Als men hier files wil toevoegen of aanpassen, moet men super-user privilegies
toepassen. Bv.:(in terminal ingeven) sudo cp /home/user/Desktop/new.php /var/www/html;
dit commando kopieert file new.php van bureaublad naar map van de Apache- server.
2.1.2
Login pagina
Op deze pagina kunnen gebruikers van de webapplicatie inloggen. Er wordt ook op elke pagina
van de webapplicatie gecontroleerd of de gebruiker is ingelogd. Als de gebruiker niet is ingelogd,
ontvangt hij een foutmelding en een link om terug naar de login pagina te gaan. Het is
belangrijk voor de toegangscontrole. Immers een onbevoegd persoon kan schade aanrichten
aan installaties, en gevaarlijke situaties veroorzaken.
Figuur 2.7: Login pagina
2.1.3
Registratiepagina
Op deze pagina kunnen nieuwe gebruikers zich registreren. Hier wordt ook gecontroleerd of de
nieuwe user nog niet in de database bestaat.
HOOFDSTUK 2. BESPREKING
23
Figuur 2.8: Registratiepagina
2.1.4
Hoofdpagina
Als de gebruiker succesvol ingelogd is, komt hij op deze pagina terecht. Op de hoofdpagina kan
de gebruiker zien welke opties hij heeft om verder te gaan.
Figuur 2.9: Hoofdpagina
HOOFDSTUK 2. BESPREKING
2.1.5
24
Lijst met alle NN’s
Op deze pagina kan de gebruiker zien welke NN’s (nationaal nummer dat op de identiteitskaart
staat) er in de database aanwezig zijn en ook ziet hij bijkomende informatie (voornaam, naam
en GSM-nummer). NN’s zijn nodig om de toegang tot de installaties te beperken.
Op deze pagina kan de gebruiker tevens NN’s verwijderen en nieuwe NN’s in de database
toevoegen.
Figuur 2.10: Lijst met alle NN’s
2.1.6
Lijst met alle installaties
In dit gedeelte van de webapplicatie kan de gebruiker de lijst met alle Raspberry Pi’s raadplegen.
Elke Raspberry Pi stuurt zijn gegevens naar de database van de server. Achteraf wordt met
behulp van MySQL querry’s en PHP-scripts data uit de database ingelezen en op deze pagina
getoond. Om meer informatie over een bepaalde installatie te krijgen, moet de gebruiker op de
knop ’informatie’ naast de gewenste installatie drukken, dan komt hij op volgende pagina:
HOOFDSTUK 2. BESPREKING
25
Figuur 2.11: Lijst met alle installaties
Informatie over gekozen installatie
Op deze pagina wordt informatie over de gekozen installatie aangeboden.
Concreet:
• Algemene informatie over de installatie: ID, IP-adres, plaats waar installatie zich bevindt,
evenals type.
• Laatste openings-/sluitingstijd en welke kaart bood toegang tot de installatie.
• Gegevens van verschillende sensoren die aanwezig zijn bij de installatie (temperatuursensor, vochtigheidssensor, ...)
HOOFDSTUK 2. BESPREKING
26
Figuur 2.12: Informatie over gekozen installatie
Uitgangen van installatie aansturen
Hier kan men de actuele toestand van de Arduino-uitgangen zien en kan men eveneens de
uitgangen instellen.
Figuur 2.13: Uitgangen van installatie aansturen
HOOFDSTUK 2. BESPREKING
27
Videogesprek
Via deze knop is het mogelijk om een videogesprek met een gekozen installatie te starten.
Figuur 2.14: Videogesprek
Indien men camerabeelden op een webpagina wenst te ontvangen, moeten volgende maatregelen
genomen worden. (Gewoon ter informatie : daar ik de methode van Google Chrome toepas,
dient de gebruiker niets te doen dan gewoon op de knop van ’videogesprek’ te klikken):
• In firefox: gewoon IP-adres van Raspberry Pi en nummer van het port ingeven:
169.254.0.2:8081
• In Google Chrome: het werkt niet zo maar in Chrome. Indien men de beelden
wil zien, moet er een Html-file aangemaakt worden met de volgende tag: img
src=”http://169.254.0.2:8081/ . En als wij deze file openen, dan verschijnen de
camerabeelden op de webpagina.
2.1.7
Types
In dit gedeelte van de webapplicatie kan de gebruiker de lijst met alle types zien. Ook kan
hij nieuwe types toevoegen en al bestaande types verwijderen. Elke installatie moet een type
hebben. Het is noodzakelijk om de juiste benamingen van sensoren (eigenlijk uitgangen en
ingangen van Arduino) weer te geven bij het opmaken van tabellen.
HOOFDSTUK 2. BESPREKING
28
Figuur 2.15: Types
Figuur 2.16: Nieuwe type aanmaken
2.1.8
Connectie met database
Een laatste punt van de bespreking van de webapplicatie, maar zeker één van de belangrijkste,
betreft de file die toegang geeft tot de database. Als men de connectie met de database
wil verwezenlijken, is de beste methode om alle nodige codes in een PHP-file te bewaren en
HOOFDSTUK 2. BESPREKING
29
vervolgens deze file in PHP-code op te roepen.
Ik heb hiervoor een file db.php aangemaakt. Deze file staat in een map met alle PHP- files van
de webapplicatie.
Inhoud van db.php-file:
$host = ’169.254.0.3’; - IP-adres van de server
$user = ’root’; - gebruikersnaam die wordt gebruikt voor het opstellen van de connectie met
de database
$pswrd = ’777777’; - wachtwoord
$db = ’BAP’; - naam van de database
$connection = mysql connect($host,$user,$pswrd); - opstellen van connectie
Paar if’s om zeker te zijn dat connectie is gelukt:
if(!$connection)
die(’ niet gelukt ’ .mysql error());
}
if(!mysql select db($db,$connection)){
exit(mysql error());
}
Er moet ook een gebruiker aangemaakt worden, zodat de database bereikt kan worden.
Daarvoor dient men in phpMyAdmin een nieuwe gebruiker aan te maken die alle privilegies
en remote access tot de server (name=root, pass=777777) heeft.
2.2
Bespreking werking van hardware en software op de
Raspberry Pi
Hier werd de samenwerking van de Raspberry Pi en de randapparatuur besproken. Verder werd
besproken wat het masterscript op de Raspberry Pi juist doet.
2.2.1
Het masterscript
Dit script zorgt voor alles wat er op de Raspberry Pi gebeurt: dataverwerking, hardware
aansturen, data inlezen/opslaan van/naar database.
Om te zorgen dat het masterscript bij het opstarten van Raspberry Pi in gang wordt gezet,
moet men rc.local openen met het volgende commando:
sudo nano /etc/rc.local
HOOFDSTUK 2. BESPREKING
30
en dan pad van het script script toevoegen:
python /home/pi/Desktop/script.py &
& symbool achteraan is nodig, zodat script in apart proces opstart (het is een loop-script).
Anders kan Raspberry Pi niet volledig opstarten.
2.2.2
Gebruikte bibliotheken
Hier kan men raadplegen welke bibliotheken in het masterscript gebruikt werden en voor welke
doeleinden zij dienden:
• Smartcard-bibliotheek: deze bibliotheek is nodig, opdat de kaartlezer kan aangesproken
worden en opdat de informatie die zich op de kaart bevindt, in te lezen.
• MySQLdb-bibliotheek: met deze bibliotheek kan Python een database aanspreken.
• Seriële bibliotheek: door het aanwenden van deze bibliotheek is het mogelijk de data
met Python seriëel te versturen en te ontvangen (noodzakelijk om Arduino te kunnen
aanspreken).
• Datetime-bibliotheek: geeft de datum en tijd, wordt gebruikt om openings- en sluitingstijd te kunnen zien.
• RPi.GPIO-bibliotheek: met deze bibliotheek wordt het mogelijk GPIO-pinnen van
Raspberry Pi te gebruiken (vereist voor de display en de knoppen).
• RPLCD-bibliotheek: deze bibliotheek wordt gebruikt om de display op een gemakkelijke
manier aan te sturen.
• Ipgetter-bibliotheek: opdat men van de buitenwereld installatie kan bereiken, moet de
externe IP van de installatie gekend zijn. Met deze bibliotheek kan ik het externe IPadres verkrijgen en verder in de Python code gebruiken.
2.2.3
Bespreking van het masterscript
Het masterscript bestaat voornamelijk uit 2 delen. Bij initialisatie wordt een gedeelte van de
code maar 1 keer uitgevoerd en het is belangrijk dat alles juist verloopt, anders zal Raspberry
Pi niet starten. De rest van het script wordt continu in het loop-gedeelte verwerkt. Hier werd
besproken wat het script juist doet in detail.
HOOFDSTUK 2. BESPREKING
31
Initialisatiefase:
Seriële verbinding opzetten
Hier wordt seriële verbinding met Arduino opgezet. De eerste verbinding moet helemaal in het
begin gebeuren. Het is nodig voor een stabiele dataversturing tussen Raspberry Pi en Arduino.
Scherminitialisatie
Bij de initialisatie van het scherm worden de vereiste GPIO-poorten gedefiniëerd om de display
te kunnen aansturen.
Informatie over installatie inlezen
In dit gedeelte van het script wordt informatie over de installatie uit een info.txt file ingelezen.
File info.txt bevat ID, adres en type van de installatie. Deze informatie is nodig om verder
bij de uitvoering van het script gebruikt te worden. Als de file niet gevonden wordt, of als er
een fout voorkomt bij het inlezen van de gegevens, wordt het script gestopt en wordt er een
foutmelding op het scherm getoond.
De file info.txt bevindt zich in het boot-gedeelte van de SD-card. Dat wil zeggen dat deze file
gemakkelijk kan aangepast worden met een Windows-computer. Het is handig, omdat de rest
van de card onzichtbaar is voor Windows.
Uitgangen van Arduino aansturen
Bij het opstarten van de Raspberry Pi moeten de uitgangen van Arduino 1 keer in het begin
aangestuurd worden. Dit is vereist, want verder in de loop-fase wordt er gekeken in de database
of de uitgangen veranderd zijn of niet. Als ze niet veranderd zijn, dan worden ze ook niet
bediend. De uitgangen moeten dus zeker in het begin aangestuurd worden.
Loop-fase:
Nationale nummers aanvragen aan de server en toevoegen in lokale database
Om toegang tot de installatie aan de juiste persoon te kunnen aanbieden, moet de nationale
nummer van de kaart van deze persoon in de lokale database aanwezig zijn. In dit deel van
de code vraagt Raspberry Pi aan de server naar NN’s die zich in de database van de server
bevinden en plaatst deze NN’s in de lokale database van de Raspberry Pi zelf.
HOOFDSTUK 2. BESPREKING
32
Informatie over installatie naar de server doorsturen
Indien men bestaande installaties in een webapplicatie wil zien, moeten ze eerst in de database
van de server aanwezig zijn. Deze code zorgt voor het versturen van ID, IP-adres, adres waar
installatie geplaatst is en type naar de database van server.
Gegevens van de kaart aflezen
Als er een kaart in de kaartlezer ingevoerd wordt, dan wordt dit deel van de code uitgevoerd.
Om de nodige informatie van de kaart kunnen aflezen, moeten er commando’s in een
hexadecimale notitie naar de kaartlezer gestuurd worden.
Commando’s en hun betekenis:
Eerst select commando sturen om de vereiste file te kiezen:
SELECT = [0x00, 0xA4, 0x08, 0x0C, 0x04, 0xDF, 0x01, 0x40, 0x31]
00 A4 08 0c 04 df 01 40 xx Lc
00 : ISO CLAss ( standard ISO APDU)
A4 : ISO file select INStruction
08 0c : P1 P2 for this operation (otherwise you get an error...)
04 : length of the ’path’
df 01 : directory for Id data
40 xx : the files Id
31 : owner’s identity (names, birth,...)
33 : owner’s address
35 : owner’s picture
Lc is the expected answer length (?)
Dan commando sturen om gegevens in te lezen:
COMMAND = [0x00, 0xB0, 0x00, 0x00, 0x9C]
00 b0 xx yy zz
00 : ISO CLAss ( standard ISO APDU)
b0 : ISO read binary INStruction
xx yy : offset in the file (256*xx)+yy
zz : number of bytes to read
Als de kaartlezer deze commando’s ontvangen heeft en alles is correct, dan stuurt hij de data
terug in de vorm van ASCII-symbolen. Eerst worden alle karakters die niet tot de ASCII 128
behoren, weggewerkt. Dan wordt er naar de nationale nummer gezocht in deze data (NN bevindt
zich tussen het 60ste en het 90ste karakter). En ten laatste wordt NN naar een leesbare string
omgevormd en wordt dit op het scherm getoond.
HOOFDSTUK 2. BESPREKING
33
Daarna worden alle NN’s uit de lokale database uitgehaald en het NN van de ingevoerde kaart
wordt met deze NN’s vergeleken. Als het NN van de ingevoerde kaart overeen komt met één
van de NN’s uit de database, dan wordt er een melding op het scherm getoond dat de kaart
aanvaard is en dat er toegang wordt verleend. Als het NN niet overeen komt met één van de
NN’s uit de database, dan wordt er op het scherm ’geen toegang’ vermeld.
De uitgangen van Arduino aansturen en de data voor de uitgangen controleren
Men kan verschillende elektronische apparaten die aan de uitgangen van Arduino aangesloten
zijn, aansturen. Om dit mogelijk te maken, wordt dit deel van het script gebruikt.
Eerst worden er data (toestand die uitgangen moet hebben) van de lokale database ingelezen.
Dan dient er informatie aan de server database aangevraagd te worden.
Verder wordt één van de volgende opties uitgevoerd:
Als er geen data voorhanden zijn in zowel lokale als server databases, of de database van de
server niet bereikbaar is, dan hoeft men niets te doen, want dit heeft dan toch geen nut.
Als de data uit de lokale database gelijk zijn aan de data van de server, dan dient men evenmin
iets te ondernemen, zodat een onnodige aansturing van Arduino vermeden wordt (bespaart
tijd).
Als er zich geen informatie over de uitgangen van Arduino in de lokale database bevindt, maar
wel in de database van de server, dan moet men de informatie van de server database naar de
lokale database kopiëren en de uitgangen van Arduino aansturen.
Als de data in de lokale database niet gelijk zijn aan de data in de server database, dan
dient men de informatie van de server naar de lokale database te kopiëren en de uitgangen van
Arduino aan te sturen.
Opdat er informatie naar Arduino verstuurd kan worden, dient men eerst een seriële connectie
op te starten. Na het opzetten van een connectie wordt een boodschap met data naar Arduino
seriëel verstuurd. Arduino ontvangt deze boodschap en voert die aan zijn kant uit.
Voorbeeld van een boodschap:
w#3:123#5:125, dat wil zeggen schrijven(w van ’write’) naar de uitgang 3 waarde 123 en naar
de uitgang 5 waarde 125.
Deurcontrole en sturen van toegangstijd naar de databases
Hier wordt gecontroleerd of de deur open of gesloten was. Bij het openen of sluiten van de deur
wordt de datum, tijd en het NN van de kaart naar de server en de lokale database doorgestuurd.
Dan kan de gebruiker achteraf de toegangstijden van de webapplicatie bekijken.
HOOFDSTUK 2. BESPREKING
34
Informatie uit de lokale database halen, als op één van de knoppen gedrukt is
Om te weten te komen of er op één van de knoppen gedrukt is, moet men controle op de
GPIO-poorten van de Raspberry Pi, waar de knoppen zijn aangesloten, uitvoeren. De knoppen
kunnen voor verschillende toepassingen gebruikt worden. In dit project heb ik gekozen om er
informatie van de database mee uit te halen (bv.: helpdesk telefoon) en aan het scherm te
tonen.
Informatie van de sensoren naar de databases sturen
Wanneer men in de webapplicatie de toestand van verschillende sensoren aan de gebruiker wil
tonen, dient deze informatie eerst naar de database van de server gestuurd te worden.
In dit gedeelte van de code wordt eerst een seriële connectie met Arduino gemaakt. Dan wordt
naar Arduino karakter ’s’ gestuurd (van ’send’). Als Arduino dit karakter ontvangt, dan begint
hij die informatie terug naar de Raspberry Pi te versturen.
2.2.4
Bespreking gebruikte hardware
Hier wordt besproken voor welke doeleinden elk van de externe apparaten die aan de Raspberry
Pi aangesloten zijn, gebruikt worden.
Figuur 2.17: Gebruikte hardware
HOOFDSTUK 2. BESPREKING
35
Arduino
Het doel van Arduino binnen dit project is informatie van verschillende sensoren naar de
Raspberry Pi doorsturen en elektronische apparaten aansturen. Arduino wordt met een USBkabel aan de Raspberry Pi aangesloten. De USB-kabel zorgt voor de voeding van Arduino en
zorgt ervoor dat data worden doorgestuurd.
Arduino heeft ook software nodig om de stand van de ingangen te kunnen doorsturen en ook
om de uitgangen van Arduino aan te sturen. Ik heb het programma zo geschreven dat als er
een serieel karakter ’s’ (van ’send’) naar de Arduino gestuurd wordt, dan zendt die de stand
van alle ingangen terug. Als er een karakter ’w’ (van ’write’) verschijnt met de nodige data
daarachter (bv.: w#3:125#9:255), dan zal Arduino uitgangen aansturen die vermeld zijn in de
gestuurde data.
Kaartlezer
Wanneer men de toegang tot de installatie wil beperken, wordt er een kaartlezer gebruikt. De
kaartlezer leest de gegevens die op de identiteitskaart staan en haalt de nationale nummer er
uit. Daarna wordt het nationale nummer dat was ingelezen van de kaart, vergeleken met de
NN’s die in de lokale database staan. Als het NN van de persoon die aan de kast wil werken
overeen komt met een van de NN’s die in de database staan, dan wordt er toegang verleend.
16x2 LCD scherm
Het 16x2 lcd scherm wordt gebruikt om verschillende meldingen aan de user te tonen. Ook een
groot voordeel is dat dit scherm verlichting heeft.
De versie van het scherm dat ik gebruikt heb voor dit project heeft ook knoppen en kan direct
aan de Raspberry Pi aangesloten worden.
Camera
De webcamera wordt gebruikt om te kunnen zien wie met de installatie bezig is op dat moment.
Bovendien biedt hij een extra mogelijkheid om in het oog te houden of alles in orde is met de
installatie.
Video:
Als men beelden naar de server door middel van een webcamera wil doorsturen, past men
Motion-software toe. Nadat deze software geı̈nstalleerd is, kan men een config file openen
(sudo nano/etc/motion/motion.conf) en verschillende opties aanpassen, zoals de grootte
HOOFDSTUK 2. BESPREKING
36
van het beeld, het aantal beelden die per seconde worden doorgestuurd (fps), de jpegcompressiekwaliteit en nog veel andere.
Om te zorgen dat Motion Daemon zelf start bij het opstarten van Raspberry Pi, moet men de
volgende lijnen in de configuratiefile aanpassen:
DAEMON = OFF (veranderen naar ON)
Webcam localhost = ON (veranderen naar OFF)
Indien men handmatig via de command line Motion Daemon start of stopt (kan handig voor
het debuggen zijn), moeten wij de volgende commando’s gebruiken:
sudo service motion start
sudo service motion stop
De Motion-software kan ook voor bewegingsdetectie aangewend worden, maar dit vraagt ook
meer rekenkracht van de processor. Een ander voordeel van Motion-software houdt in dat deze
software uit zichzelf minder rekenkracht gebruikt, als er geen video naar de server doorgestuurd
wordt.
De camera heeft een ingebouwde microfoon en kan ook voor geluidsopname gebruikt worden.
Om geluid laten werken op Raspberry Pi, moet men de volgende commando’s gebruiken:
Kiezen voor 3.5 jack als audio-uitgang:
amixer cset numid=3 1
Instellen audio-uitgang op 80% sterkte en het geluid hoorbaar maken:
amixer -c 0 set PCM 80% unmute
amixer -c 0 set PCM 80% unmute (2 keer!!!, anders het werkt niet!)
Indien men zeker wil zijn dat de camera geluid kan opnemen, moeten wij de volgende
commando’s gebruiken:
Dit commando zorgt voor de opname van geluid naar de test.wav file (de geluidsopname kunnen
wij stoppen door Ctrl-C te drukken):
arecord -D plughw:1,0 test.wav
Met dit commando kan men de opgenomen file laten afspelen:
aplay test.wav
Hoofdstuk
3
Resultaten
3.1
Vooropgestelde doelstellingen
Het project bestaat uit twee kanten: de serverkant (webapplicatie) en de installatiekant
(Raspberry Pi en andere hardware die in de kasten wordt geplaatst). Hier worden de
doelstellingen besproken die voor dit project opgesteld werden.
3.1.1
Serverkant en webapplicatie
Een webapplicatie ontwikkelen waar de gebruiker:
• Nieuwe nationale nummers van de identiteitskaarten opslaan om toegang tot de
installaties te kunnen aanbieden.
• Lijst met installaties kunnen zien, evenals gedetailleerde informatie over de gekozen
installatie (algemene informatie, toestand van uitgangen, informatie van sensoren,
openings-/sluitingstijden)
• Uitgangen van de gekozen installatie kunnen aansturen (bv.: slot van de installatie op
afstand openen)
• Extra: videogesprek functie. De bedoeling van deze functie is dat de gebruiker beelden
van de installatie kan zien en dat hij kan praten met personen die aan de installatie aan
het werken zijn.
3.1.2
Installatiekant (Raspberry Pi en andere hardware)
Hardware die bij de installaties gevoegd wordt, moet volgende mogelijkheden aanbieden:
37
HOOFDSTUK 3. RESULTATEN
38
• Controle van de identiteitskaarten en aansturen van het slot
• Informatie over de installatie naar de server versturen (zodat de gebruiker van de
webapplicatie deze installatie in de lijst van installaties kan terugvinden)
• Uitgangen van de Arduino kunnen aansturen
• Data van de sensoren naar de lokale en de server databases kunnen opslaan
• Toegangstijd kunnen zien
• Verschillende informatie op het scherm laten zien
• Knoppen die aan de GPIO-poorten van Raspberry Pi aangesloten worden, kunnen
gebruiken
3.2
Behaalde resultaten
Het was meer een onderzoekingsproject om te weten welke mogelijkheden men kan bereiken
met het gebruikte materiaal. Hier worden de behaalde resultaten besproken.
3.2.1
Serverkant en webapplicatie
Het servergedeelte van het project en de webapplicatie is grotendeels gelukt. De gebruiker van
de webapplicatie kan nationale nummers toevoegen en verwijderen.
Het is ook mogelijk om de lijst met alle installaties en met de gedetailleerde informatie over
de gekozen installatie (algemene informatie, toestand van de uitgangen, informatie van de
sensoren, openings-/sluitingstijden) te bekijken.
De gebruiker kan de uitgangen van de gekozen installatie aansturen.
De extra functie voor het videogesprek is gedeeltelijk gelukt. De gebruiker kan wel beelden van
de camera zien, maar hij kan niet met de persoon bij de installatie praten.
3.2.2
Installatiekant (Raspberry Pi en andere hardware)
De controle van de identiteitskaarten en het aansturen van het slot is geslaagd.
Informatie over installatie naar de server versturen is eveneens geslaagd.
Het is mogelijk uitgangen van Arduino vanuit de webapplicatie aan te sturen.
Raspberry Pi kan de data van de sensoren naar de lokale en de server databases opslaan.
HOOFDSTUK 3. RESULTATEN
39
De toegangstijd kunnen opslaan naar de databases is gelukt.
Verschillende informatie op het scherm laten zien werkt.
De knoppen die aan de GPIO-poorten van Raspberry Pi aangesloten werden, worden gebruikt
om informatie uit de database aan het scherm tonen (telefoon van helpdesk). Maar ze kunnen
ook voor andere doeleinden gebruikt worden.
Hoofdstuk
4
Besluit
Helemaal in het begin van de stage wist ik niet goed hoe dit project zou verlopen, omdat ik
veel informatie moest zoeken over verschillende zaken die ik nooit gebruikt had. Dit project
was vooral interessant voor me, omdat ik veel in de realiteit kon toepassen van wat ik tijdens de
lessen geleerd had en tegelijkertijd meer te weten kon komen over zaken die ik vroeger nog niet
gezien had. Gedurende dit project heb ik vooral veel kennis opgedaan over Linux-software en
over hoe ik deze software samen met elektronische hardware (Raspberry Pi, Arduino, camera,
kaartlezer, scherm) kan gebruiken om de vereiste doelen te bereiken. Uiteindelijk vind ik dat
het project goed verlopen is en de resultaten zijn grotendeels, zoals ik het had verwacht.
Ik vind het goed dat we onze thesis binnen een echt bedrijf dienden uit te werken, want dit
levert zeker een goede ervaring voor de toekomst. De toepassing en verbetering van soft skills
is heel belangrijk voor de verdere carrière. Deze thesis bood een uitstekende gelegenheid om
mijn mogelijkheden te toetsen en ook om meer zelfstandig te leren werken.
Volgens mij is het project in de verwachte mate uitgewerkt en op de wijze die in het begin van de
stage besproken werd. Er kunnen zeker nog veel mogelijkheden voorzien worden, bijvoorbeeld
qua data verwerking: grafieken tekenen met data van de sensoren, of qua extra hardware
gebruik: een GSM-module toevoegen om onafhankelijk van de internetverbinding te handelen.
Tenslotte vind ik dat het een zeer interessante en leerrijke stage geweest is. Ik moest enerzijds
met software en anderzijds met hardware werken. Ik denk dat deze opdracht zich perfect leende
voor de afronding van onze opleiding.
40
Bijlage
A
Appendix 1
A.1
Raspberry Pi pinout
Figuur A.1: Raspberry Pi pinout
41
Bibliografie
[1] Raspberry pi home automation with arduino, Andrew K. Dennis, 2013
[2] Raspberry pi for secret agents, Stefan Sjoegelid, 2013
[3] Raspberry pi cookbook, Simon Monk, 2014
[4] https://pihw.wordpress.com/guides/direct-network-connection/ - Access RPi via ssh direct
van de laptop (+ toegang tot RPi GUI)
[5] https://www.howtoforge.com/ubuntu-14.10-lamp-server-tutorial-with-apache-php-andmysql - LAMP server installatie
[6] http://askubuntu.com/questions/237461/how-do-i-access-ubuntu-server-running-invirtualbox-from-outside - Access tot server vanuit RPi en omgekeerd
[7] http://www.robbiebrandrick.com/Blog/Details/6 - Hoe toegang tot internet aan RPi geven
met behulp van laptop
[8] http://www.emirplicanic.com/php/php-function-to-generate-html-table-using-mysqldatabase-data - Data uit DB met php in tabellen tonen
[9] http://lifehacker.com/how-to-clone-your-raspberry-pi-sd-card-for-super-easy-r-1261113524
- Hoe image van sd card maken (backup)
[10] http://www.penguintutor.com/linux/light-webserver - Lichte server + DB op RPi
installeren
[11] http://acsccid.sourceforge.net/ - Drivers voor kaartlezer voor RPi
[12] http://ludovicrousseau.blogspot.be/2010/04/pcsc-sample-in-python.html - Voorbeeld van
code in python om data kunnen uithalen van het kaart
[13] https://www.eftlab.com.au/index.php/site-map/knowledge-base/118-apdu-response-list
- Codes die kaart kan terug sturen
42
BIBLIOGRAFIE
43
[14] http://stackoverflow.com/questions/4214231/sending-data-using-post-in-python-to-php
- Doorsturen data naar server met python
[15] http://myacr38.blogspot.be/2007/03/belgian-id-card.html - Specifieke commando’s die
zijn nodig om data van belgische pass in te lezen
[16] http://www.raspberrypi.org/documentation/linux/software/python.md - Arduino ondersteuning op RPi
[17] http://www.akeric.com/blog/?p=2420 - Arduino ondersteuning op RPi
[18] http://blog.oscarliang.net/connect-raspberry-pi-and-arduino-usb-cable/ - Voorbeelden serieel data sturen/ontvangen naar/van arduino
[19] http://www.instructables.com/id/Raspberry-Pi-remote-webcam/?ALLSTEPS - Camera
tutorial voor RPi
[20] https://stmllr.net/blog/live-mp3-streaming-from-audio-in-with-darkice-and-icecast2-onraspberry-pi/ - Geluid versturen vanuit RPi
[21] https://pypi.python.org/pypi/RPLCD/0.3.0 - display ondersteuning op RPi
[22] http://raspberry.io/projects/view/reading-and-writing-from-gpio-ports-from-python/ - informatie over GPIO-poorten op RPi
Download