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