Raspberry Pi Materjalid:
Raspberry Pi on krediitkaardi suurune arvuti, mida saab kasutada väga erinevates valdkondades (robootikas, veebi sirvimiseks, HD videode m'ngimiseks televiisoris jne). Selle huvilaagri käigus, tutvume Raspberry Pi komponentidega, paigaldame SD kaardile Raspbian operatsioonisüsteemi ja uurime lähemalt, kuidas selle seadme abil releed lülitada. Mõistagi saab releega kontrollida mistahes elektriseadet - rösterit, kohvimasinat, valgustust või elektrilist küttesüsteemi. Raspberry-ga saab ka kõige lihtsamasse relee lülitamisse kerge vaevaga tarkust programmeerida. Näiteks võime vett soojendada sõltuvalt elektri börsihinnast. Lisaks saab Raspberryt kasutada kaugjuhitava kontrollerina, mis huvipäeva jooksul valmib.
Tegevused
- Raspberry Pi süsteemiga tutvumine
- Rasbian operatsioonisüsteemi paigaldamine SD kaardile
- "Targa kodu" ehitamine - relee lülitamine
- Kaugjuhtimine
- Lisaülesanne - relee lülitamine veebilehelt
- SD kaardi taastamine
Iseseisev Raspberry Pi süsteemiga tutvumine
Külasta veebilehte http://www.raspberrypi.org/ ja uuri, mis võimalusi Raspberry Pi pakub. Uuri, milliseid mudeleid Raspberry Pi on teinud ja mis on nende erinevused. Tutvu juhendaja poolt antud riistvaraga ja leia üles: Raspberry PI, relee, toiteallikas, juhtmed, valgusdiood. Uuri Raspberry Pi plaati ja leia üles: protsessor, USB, LAN, HDMI, sisend-väljund pesad, SD kaardi pesa. Tuvasta praktikumis kasutatava Raspberry Pi mudel, selle taktsagedus ja operatiivmälu maht.
Kontrollküsimused:
Mis tüüpi ja kui kiire taktsagedusega protsessor Raspberry Pi-l on? Kas taktsagedust saab muuta? Kuidas? Kui palju on praktikumis kasutatud Raspberry Pi-l operatiivmälu? Mille poolest erinevad Raspberry Pi model B ja Raspberry Pi model B+? Nimeta vähemalt 4 liidest, mille kaudu saab raspberryga infot teiste seadmetega vahetada. Hinda Raspberry Pi voolutarvet ja arvuta (arvestades elektri börsihinda), kui palju võiks maksta selle tööshoidmine kuus?
Raspbian operatsioonisüsteemi paigaldamine SD kaardile
Käesolev juhend baseerub Raspbian operatsioonisüsteemil. Tegemist on linuxi debian distributsiooniga, mis on spetsiaalselt Raspberry Pi riistvarale kohandatud ning kõikidest teistest distributsioonidest enim arendatud. Juhendajad ei piira huvilistel Raspbiani asendamist mõne eksklusiivsema OS-ga, kuid mõistagi ei saa sel juhul ka garanteerida ettenähtud ajaga eesmärgi saavutamist.
ETTEVAATUST! Käesolevas tegevusjuhendis kasutatavad programmid on võimekad ja samas kurjad programmid, mis võivad lihtsa trükivea tõttu ülekirjutada või kustutada väärtuslikku infot (terve teie kõvaketta). Seetõttu tuleb neid kasutades olla eriti tähelepanelik!
Tegevusjuhend
- Valmista ette SD kaart eemaldades sellelt partitsioonitabel.
Selleks mine lehele https://www.sdcard.org/downloads/formatter_4/ ja lae sealt alla SD Formatter 4.0
nimeline tarkvara. SDformatter.zip
- Ava tarkvara SD formatter ja vorminda oma SD kaart.
- Valik Raspberry Pi-le ettevalmistatud kaarditõmmiseid on leitavad Raspberyy pi kodulehel. Lae alla enda lemmik tarkvada, mis võimaldaks tõmmise paigaldamist USB pulgale või SD kaardile. Kui sul veei ei ole oma lemmikut, siis võid kasutada lihtsat tarkvara
Win32DiskImager
. Lae alla tarkvara (http://sourceforge.net/projects/win32diskimager/) ja paki lahti. - Ava tarkvara Win32DiskIMager ja vali eelnevalt alla tõmmatud tõmmis ning kopeeri see SD kaardile. Win32imager.exe
Targa kodu" ehitamine - relee lülitamine
Nüüd, kus oleme Raspberry Pi platvormile ettevalmistanud töötava operatsioonisüsteemi, on aeg sellega midagi põnevat teha. Laseme fantaasial lennata ja kujutlegem, et oleme farmerid, kellel on kaks sulutäit noori põrsaid. Talv on tulemas ja on oht, et põrsastel võib hõredas laudas külm hakata ning uhke peekon läheb raisku. Seega on hädasti vaja külmakraadide korral soojendavaid infrapunalampe sisse ja välja lülitada, et põrsad end hästi tunneks. Jõukas farmer ei soovi aga iga-aastasest palmisaarereisist loobuda ning vajab hädasti põrsakontrollerit, mis tema eest vastavad lülitused ära teeks. Samuti oleks vaja teada saada söödaautomaadi varu, õhu temperatuuri, niiskustaset ja salvestada toimuvast HD kvaliteediga videot. Kogu see muinasjutt on tehtav Raspberry Pi-ga. Ülesandes 3 ja 4 vaatamegi, kuidas realiseerida Raspberry põrssakontrolleris infrapunalampide lülitamist, olles ise kaugel eemal.
Tegevusjuhend
Ühenda monitor, klaviatuur, hiir ning eraldi toodud võrgukaabel Raspberry'ga.
Soorita kõik lisas 1 joonisel 1 toodud ühendused, aga jäta veel patarei ühendamata.
Paigalda SD kaart Raspberry Pi vastavasse pesasse.
Näita juhendajale tehtud ühendusi ja alles siis ühenda Raspberry'ga toitekaabel
, mis tuleb arvuti usb pesast. Viimasena ühenda LED valgusti toitmiseks mõeldud 9V patarei.
Raspberry käivitub ja laeb automaatselt seadistamise menüü. Seda saab ka hiljem avada käsuga sudo raspi-config
.
Tehke menüüs järgnevad seadistused:
- suurenda partitsiooni nii, et kasutatakse kogu kaardil olevat ruumi;
- muuda ära süsteemi vaikeparool;
- Soovi korral võid muuta klaviatuuriasetuse Eestipäraseks: (Generic 105-key ja layout estonian).
- Uuenda Raspbian OS (Advanced options → update)
- välju seadistamise menüüst;
- taaskäivita käsuga
sudo reboot
. - @@Sisesta kasutajanimi pi ja punktis 5 b määratud parool.
- Käivita graafiline kasutajaliides käsuga
startx
. - Ava terminal, et seadistada ja juhtida releega ühendatud väljundit.
Kõigepeal määratle, et soovid relee juhtimiseks kasutada sisend-väljund viiku 2
"echo 2 > /sys/class/gpio/export".
Seejärel määra, et viik 2, oleks seadistatud väljundina
"echo out > /sys/class/gpio/gpio2/direction".
Kirjutame viigule väärtuse 0, et relee sisse lülitada
"echo 0 > /sys/class/gpio/gpio2/value"
Kirjutame viigule väärtuse 1, et relee välja lülitada
"echo 1 > /sys/class/gpio/gpio2/value".
Nagu näha on käske ükshaaval sisestada on üsna tülikas. Järgnevalt vaatame, kuidas koostada lihtsat programmi, mis kogu värki automaatselt teeks.
Loo kodukausta /home/pi/
fail nimega vilkuvLamp.sh
. Faili sisu võib alla laadida siit või sisestada see käsitsi (nano vilkuvLamp.sh
või leafpad vilkuvLamp.sh
). Graafilistest redaktoritest on Rasbian’is vaikimisi paigaldatud leafpad
. Käsuviibal sobib faile muuta programmiga nano. Nano’st saab välja kombinatsiooniga CTRL+X
, muudatuste salvestamiseks vajuta klahvi "y"
.
vilkuvLamp.sh
vilkuvLamp.sh on lihtne bash programm, mis vajadusel seadistab sisend-väljund viigu ja seejärel klõpsutab korduvalt releed:
#!/bin/bash #kontrollime kas v2ljund on seadistatud if [[ ! -d /sys/class/gpio/gpio2 ]] ; then #kui ei ole, siis seadistame viigu 2 echo 2 > /sys/class/gpio/export sleep 0.5 #seadistame viigu v2ljundiks echo out > /sys/class/gpio/gpio2/direction fi for i in {1..5} do echo "Panen p6lema $i" echo 0 > /sys/class/gpio/gpio2/value sleep 1 echo 1 > /sys/class/gpio/gpio2/value echo "Kustutan 2ra $i" sleep 2 done
Anna failile käivitamisõigus chmod 755 vilkuvLamp.sh
.
Ja käivita ./vilkuvLamp.sh
.
Eksperimenteeri programmiga muutes käsu sleep
argumente. Kuidas teha nii, et esimeses tsüklis põleb tuli 1 sekund ja viimases 5 sekundit?
Tee vajalikud seadistused ja muuda programmi nii, et ka teine relee lülituks (juhuks, kui põrsad peaks lisaks infrapunasoojusele soovima veel süüa, juua, sõnnikukoristust või muid automatiseeritud lahendusi)
Kontrollküsimused:
Mida tuleks programmis muuta, et programm töötaks lõpmatult?
Kuidas peatada programmi töö, mis on jäänud lõpmatusse tsüklisse?
Kaugjuhtimine Seni oleme kasutanud oma targa kodu süsteemi lokaalselt. Nüüd uurime, mis moodi saaks Raspberry Pi’d juhtida eemalt, kasutades selleks SSH ühendust.
Tegevusjuhend
Veendu, et Raspberry oleks ühendatud võrgukaabliga.
Luba SSH ühendus seadistades seda menüüst sudo raspi-config (Advanced options)
.
Kirjuta üles Raspberry'le antud ip aadress. Selle leiab käsuga ifconfig
.
Nüüd ühenda monitor, klaviatuur ja hiir tagasi lauaarvutiga ja proovi süsteemi siseneda eemalt.
Ava terminali tarkvara putty, sisesta sihtkoha aadressiks raspberry IP-aadress. Veendu, et ühenduseks kasutataks SSH protokolli ning vastav port oleks 22. Et ei peaks iga kord IP-aadressi uuesti sisestama, seadista sessiooni nimeks näiteks pi, klõpsa save ja seejärel open.
Sisesta kasutajanimi pi ja eelnevalt määratud parool.
Proovi muuta sisend-väljund viikude väärtusi käivitades ülesandes 3 valmistatud programm.
Loomulikult toimib selline dünaamilist IP-aadressi kasutav süsteem vaikimisi vaid sisevõrgus. Kui soovime põrsakontrollerile ligi pääseda internetist, on mõistlik ruuterist määrata Raspberry’le fikseeritud IP-aadress. Seejärel on vaja suunata ruuterisse sissetulevad pordid (näiteks SSH ja HTTP) edasi Raspberry’le. Kuna tavaline kodukasutaja ruuter saab teenusepakkuja käest dünaamilise IP-aadressi, siis on abiks dünaamilise nimeserveri teenused näiteks http://duckdns.org/about.jsp. Sel juhul ei pea teadma koduse ruuteri IP-aadressi vaid saab kasutada nimelahendust stiilis "p6rsakontroller.duckdns.org". Lisaks on SSH ühenduse avamisel oluline tähelepanu pöörata turvalisusele (mitte kasutada vaikimisi kasutajanime/parooli, lubada ligipääs ainult teatud IP-aadressidele või IP vahemikule, hoida Raspberry tarkvara pidevalt uuendatud jne).
Raspberry Pi lisaülesanne
Juba valmis? Keerame vinti peale... Teatavasti ei ole mobiilist just kõige mugavam üle SSH käsuviibale käske sisestada. Kuidas oleks, kui teeks paari nupuga veebilehe, mille vajutamisel muundame farmeri lauda diskosaaliks.
Tegevusjuhend
- Paigalda apache veebiserver
sudo apt-get install apache2
. - Paigalda PHP tugi
sudo apt-get install php5 libapache2-mod-php5
. - Kontrolli, kas apache install õnnestus. Selleks sisesta veebibrauserisse Raspberry IP-aadress.
- Veebiserveri kasutajale www-data on vaja anda sisendi/väljundi muutmise õigus
sudo usermod -G www-data,gpio www-data
- Nüüd tuleb apache veebiserver taaskäivitada
sudo service apache2 restart
- Navigeeri veebilehe juurkausta
cd /var/www
- Nimeta ümber
index.html
fail käsugasudo mv index.html index.php
- Kasutage käsku
sudo leafpad index.php
, et asendada faili sisu järgnevaga:
<?php echo('PHP is working<br>'); if(isset($_GET['run'])){ echo('Starting vilkuvLamp.sh<br>'); exec('/home/pi/vilkuvLamp.sh'); } ?> <form action="index.php" method="get"> <input type="submit" name="run" value="PigDiscoStart" /> </form>
Värskenda veebibrauseris Raspberry lehte ja proovi, kas nupuvajutusel programm käivitatakse. Võimalusel kasuta enda või sõbra nutitelefoni, ühendu praktikumi wifi võrku ja proovi programm ka telefonist käivitada.
Joonis 1. Raspberry Pi, relee, toiteallika ja LED valgusti elektriskeem.
Raspberry Pi klastri ülesseadmise õpetus
Kasutatud riistvara:
- 2x Raspberry Pi B+ või ükskõik milline teine versioon
- Switch
- 3x Ethernet kaablit
- UsB klaviatuur ja hiir
- HDMI kaabel ja monitor HDMI sisendiga
- SD-card lugeja
SD-kaardi valmisseadmine:
http://www.raspberrypi.org/downloads/ Tõmmata sealt raspbian OS. Tegevusjuhend:
Valmista ette SD kaart eemaldades sellelt partitsioonitabel.
- Selleks mine lehele https://www.sdcard.org/downloads/formatter_4/ ja lae sealt alla SD Formatter 4.0 nimeline tarkvara. SDformatter.zip
- Ava tarkvara SD formatter ja vorminda oma SD kaart.
- Lae alla tarkvara (http://sourceforge.net/projects/win32diskimager/) ja paki lahti
- Ava tarkvara Win32DiskIMager ja vali eelnevalt alla tõmmatud tõmmis ning kopeeri see SD kaardile. Win32imager.exe
Ülesseadmine
Kui kõik tehtud, säti üles Pi riistvara (klaviatuur, hiir, monitor, SD-kaart, interneti kaabel ja seejärel toitejuhe) ja lülita sisse. Kui kõik õige, siis tuleb rasp pi conf ette Nüüd confis: 1) Expand filesystem 2) Advanced options -> Select SSH option -> Enable 3) Muuda klaviatuuri, kui tahad, selleks mine Internalization -> Choose keyboard layout ja vali endale sobilik
Installatsioon peaks olema nüüd läbi -> Tee restarti Peale restarti: 1. käsk uuendab sinu op-süsteemi ja tarkvara, teine tõmbab ja installib gfortrani.
sudo apt-get update sudo apt-get install gfortran
Seame ülesse SSH võtmed
a) cd ~ b) ssh-keygen -t rsa -C "pi@raspberrypi" // Don't use sudo here c) Enter, Enter (leaving blanks for passwords) - # should see an ASCII image RSA 2048 d) cat /home/pi/.ssh/id_rsa.pub >> /home/pi/.ssh/authorized_keys
Seame üles MPI
Seame üles MPI(Message Passing Interface) nüüd käsk 8 võib võtta vanemate pi-de peal kuni pool tundi või rohkemgi, käsk 9 võib võtta üle 4 tunni vanemate pi-de peal
1) cd ~ 2) sudo mkdir mpich3 3) cd mpich3 4) sudo mkdir build install 5) sudo wget http://www.mpich.org/static/downloads/3.1.3/mpich-3.1.3.tar.gz 6) sudo tar xvfz mpich-3.1.3.tar.gz 7) cd build 8) sudo /home/pi/mpich3/mpich-3.1.3/configure -prefix=/home/pi/mpich3/install 9) sudo make -j2 10) sudo make install 12) sudo vim /home/pi/.profile 13) Add following code to the bottom of .profile # MPI export PATH="$PATH:/home/pi/mpich3/install/bin"
Paar käsku, mis tasuks meelde jätta, kui tegutsed linuxi failide/kaustade õigustega: Kui tahad anda failile/kaustale kõik õigused, kirjuta chmod 777 file1/dir1 Kui tahad vaadata õigusi, kirjuta ls -la või ls -la | grep file1, kui faile on väga palju, siis | grep file1 filtreerib väljundit.
Esimene programm
Kui tekib probleeme faili kompileerimise/jooksutamisega, võib tihti olla viga selles, et eelnev expordi käsk ei mõjunud kohe, selleks kirjuta terminali see lause ilma jutumärkideta: "export PATH="$PATH:/home/pi/mpich3/install/bin"
Loome nüüd pifaili, kus on kirjas sinu klasteri arvutite ip-d:
1) ip addr show eth0 2) sudo nano /home/pi/pifile ### Siin avaneb nüüd sinu pifile, kirjuta siia ip, mis on näha 1. punktis 3) mpiexec -f pifile hostname 4) mpiexec -f pifile -n 2 ~/mpich3/build/examples/cpi
3. rida peaks printima sinu hostname. 4. rida peaks arvutama pi väärtust. Kui mpiexec ei tööta, proovi mpiexec asemel mpirun.
Pifailis on kirjas ip-addressid, mida mpi kasutab arvutite vahel suhtlemiseks. Praegu on sul kasutuses ainult 1 arvuti. Käsus -f tähendab lihtsalt selle faili lipukest, MPI teab seda nähes, millisest failist ta peab ip-sid lugema. Lisaks on seal kirjas -n 2, see näitab, mitu lõime peaks programm kasutama. Proovi näiteks -n väärtust muuta 1,2,4,8. Tavaliselt, peaks parima tulemuse andma, kui lõimede arv = tuumade arv, ehk 4 tuuma korral -n 4.
Teine Raspberry Pi
Nüüd kui teame, et 1 raspberry pi töötab, on aeg hakata tegema 2. raspPi-d valmis. Kui saab, kasuta näiteks sõbra raspPi-d, klooni töötava raspPi SD kaart uuele tühjale SD kaardile või tee kõik sammud uuesti läbi uue raspPi-ga. Soovitan kloonimist, see on palju kiirem.
Kui 2 või enam raspPi-d on tehtud ja kõik eelnev korras, on aeg teha klaster. Sellejaoks, peavad kõik raspPi-d teadma üksteise ip-sid ja need peavad olema salvestatud pifile sisse. Nad peavad ka saama üksteise logida ilma paroolita, sellejaoks peavad nad teadma üksteise võtmeid. Tee järgnevaid samme iga Pi jaoks, toon näite, kui Pi-sid on 2.
Paroolita sisselogimine & pifile konfigureerimine
Kui oled ühes Pi-s, kutsume seda piA, millel on mingi ip-aadress, olgu see hetkel 1.1.1.1 (Sul on midagi muud kindlasti, tee see kindlaks kasutades terminalis koodi "ip addr show eth0".) Olgu siis ssh lubatud ja teine Pi, kutsume seda piB, millel on mingi teine ip-aadress, olgu see hetkel 2.2.2.2. Jälgi nüüd neid käske: (alguses on kood, ### taga on kommentaar, ära seda terminali kirjuta, see on seletus või käsk, mida teha)
1) ssh-copy-id pi@2.2.2.2 ### Kopeerin oma ssh võtmed piB-le, millel on ip 2.2.2.2
2) ssh pi@2.2.2.2 ### Peaksid saama teise pi terminalile nüüd ligi ilma parooli kasutamata
3) sudo nano pifile ### Lisa oma ip-aadress siia nüüd ( Minupuhul, lisan uue rea ja kirjutan sinna 1.1.1.1 )
4) ssh-copy-id pi@1.1.1.1 ### Olen piB-s ning kopeerin oma ssh võtmed piA-le, millel on ip 1.1.1.1
5) exit ### Oled nüüd tagasi oma algsees piA terminalis
6) sudo nano pifile ### Lisa nüüd siia oma teise piB ip siis, minupuhul on see 2.2.2.2, mille pean lisama lõppi
Kui ei mäleta, kuidas ip-d pifile lisada või leida oma ip-d, siis üleval pool oli sellest juttu.
Esimene paralleelne programm
Nüüd oled valmis jooksutama koode paralleelselt mitme raspPi abil. Testi nüüd eelnevalt läbi käinud programmi:
mpiexec -f pifile -n 8 ~/mpich3/build/examples/cpi
kas on kiirem? Pi2 puhul peaks olema. Pi B+ puhul peaks kiireim olema -n 2, testi seda.
Iseseisev töö õppimiseks
Kirjuta nüüd oma programme või võta veebilehelt: https://github.com/crypotex/jupiter/tree/master/raspberryPi/ExamplePrograms/picalculation Lühikirjeldus programmide kompileerimisest ja jooksutamisest:
Kompileerime C programmi nii: mpicc file.c ### See annab välja a.out kompileeritud koodi, kui tahad defineerida teistsuguse väljundfaili, kirjuta hoopis mpicc file.c -o outfile
Fortrani kompileerimine on väga sarnane, kirjuta mpif90 file.f või mpif90 file.f -o outfile
See annab sulle kompileeritud faili. Kui kompileerimine õnnestub, tee kindlaks, et programmi jooksutamiseks on määratud õiged õigused. Selle õpetus oli üleval pool. Nüüd, et jooksutada, kirjuta mpiexec -f pifile -n 4 outfile ### Siin pifile, 4 ja outfile on muutujad, mille väärtus võib muutuda vastavalt failinimedele ja vajadusele.
Ping-Pong
https://courses.cs.ut.ee/2015/tatar/spring/uploads/Main/pingpong2.tar.gz
Linpack
https://www.howtoforge.com/tutorial/hpl-high-performance-linpack-benchmark-raspberry-pi/
http://www.shodor.org/petascale/materials/Tools/HPL/
Blender
http://cgcookie.com/blender/2013/08/09/setting-up-a-render-farm/
http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Performance/Netrender
Lisamaterjali:
Õpetus, kuidas teha superarvuti kuni 64-st raspberry Pi-st
S.J. Cox, J.T. Cox, R.P. Boardman, S.J. Johnson, M. Scott, N.S. O'Brien Irdis-pi: a low-cost, compact demonstration cluster Cluster Computing 17:349-358 (2014) ajakirjanduslik artikkel veebileht
Veebserverid
F.P. Tso, D.R. White, S. Jouet, J. Singer, D.P. Pezaros A Scale model for cloud computing infrastructures Proc. 2013 IEEE 33rd International Conference on Distributed Computing Systems Workshops (ICDCSW), pp 108-112 (2013) ajakirjanduslik artikkel veebileht
S. Breuning Banoffee Pi Serverid veebileht
Klaster ehitumine
N. Balakrishnan Building and benchmarking a low power ARM cluster MSC dissertation
J. Kiepert Creating a Raspberry Pi-Based Beowulf Cluster artikkel
Raspberry Pi cluster ja Webmin õppetund veebileht
Raamat raspberry Pi superarvutist
A.K. Dennis Raspberry Pi Supercluster Packt Publishing (2011) veebileht
Huvitavat lugemist:
Raspberry Pi asemel kasutatakse selles õpetuses parallella-sid. veebileht
Arvuti Mangid
E.G. Parker, J.F. O'Brien. "Real-Time Deformation and Fracture in a Game Environment". In Proc. ACM SIGGRAPH/Eurographics Symposium on Computer Animation, 156–166, August 2009. ajakirjanduslik artikkel veebileht