Gymn´azium, Brno, V´ıdeˇ nsk´a 47 Pˇredmˇet: programov´an´ı
Maturitn´ı pr´ace
Mˇeˇren´ı teploty na RaspberryPi Technick´a specifikace; dokumentace
Jan Hor´aˇcek;
[email protected] 15. dubna 2015
Mˇeˇren´ı teploty na RaspberryPi
Jan Hor´aˇcek
Obsah ´ 1 Uvod 1.1 Zadan´ı maturitn´ı pr´ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ˇ sen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Reˇ
3 3 3
2 Hardware 2.1 RaspberryPi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Teplotn´ı senzor DS18B20 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 3 3
3 Software 3.1 Monitorovac´ı skript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Skript generuj´ıc´ı webovou str´anku . . . . . . . . . . . . . . . . . . . . . . .
4 4 5
4 Zhodnocen´ı, v´ yhody a nev´ yhody
6
2
Mˇeˇren´ı teploty na RaspberryPi
Jan Hor´aˇcek
´ Uvod
1 1.1
Zadan´ı maturitn´ı pr´ ace
C´ılem t´eto maturitn´ı pr´ace je navrhnout ˇreˇsen´ı inteligentn´ıho teplotn´ıho senzoru. Tedy takov´eho senzoru, kter´ y bude pr˚ ubˇeˇznˇe zaznamen´avat teploty a na poˇza´d´an´ı je zobraz´ı v pˇrehledn´em grafu.
1.2
ˇ sen´ı Reˇ
K ˇreˇsen´ı probl´emu jsem vyuˇzil hardware a software postaven´ y na univerz´aln´ı desce RaspberryPi, a to pˇredevˇs´ım d´ıky jej´ı mal´e spotˇrebˇe a univerz´alnosti. Popis navrhnut´eho ˇreˇsen´ı je pˇredmˇetem t´eto pr´ace a je rozeb´ır´an n´ıˇze. C´ılem t´eto pr´ace je detailnˇe informovat o principech tohoto ˇreˇsen´ı.
2
Hardware
Hardwrov´e ˇreˇsen´ı vyuˇz´ıv´a dvou kl´ıˇcov´ ych komponent: 1. RaspberryPi B+ prvn´ı generace a 2. digit´aln´ı teplotn´ı senzor DS18B20.
2.1
RaspberryPi
RaspberryPi je poˇc´ıtaˇc velikosti kreditn´ı karty vybaven´ y procesorem architektury ARM a mnoha bˇeˇzn´ ymi rozhran´ımi (napˇr. USB, ethernet), na kter´em lze spustit plnohodnotn´ y operaˇcn´ı syst´em. Pro sv´e ˇreˇsen´ı jsem zvolil pokroˇcilejˇs´ı model B+. Kl´ıˇcov´ ymi v´ yhodami RaspberryPi pro tento projekt jsou: • n´ızk´a spotˇreba elektrick´e energie: 1 − 2 W a • rozhran´ı GPIO. RaspberryPi je nap´ajeno pˇres micro usb, kter´emu je v naˇsem pˇr´ıpadˇe pˇredˇrazen bˇeˇzn´ y s´ıt’ov´ y nap´ajec´ı adapt´er. RaspberryPi je d´ale pˇripojeno do sbˇernice ethernet a koneˇcnˇe je k nˇemu pˇripojen teplotn´ı senzor.
2.2
Teplotn´ı senzor DS18B20
Teplotn´ı senzor DS18B20 nab´ız´ı pˇresn´e mˇeˇren´ı teploty (ˇra´dovˇe 2 platn´a m´ısta ◦ C) a digit´aln´ı rozhran´ı k dat˚ um reprezentuj´ıc´ım aktu´aln´ı teplotu. Nejedn´a se tak o pouh´ y termistor, kter´ y je nutn´e pˇripojit k AD pˇrevodn´ıku a sloˇzitˇe vyhodnocovat teplotu na z´akladˇe vstupn´ıho napˇet´ı. Tyto operace ˇreˇs´ı uˇz samotn´e teplotn´ı ˇcidlo, ve kter´em je vestavˇen´a mimo zmiˇ novan´eho termistoru i obsluˇzn´a elektronika. Tato elektronika poskytuje informace pomoc´ı s´eriov´e sbˇernice podobn´e RS232-TTL. Tato sbˇernice je detailnˇe pops´ana datasheetem teplotn´ıho senzoru, viz [Max08]. V´ ystupem teplotn´ıho senzoru jsou tedy digit´aln´ı data, kter´a ˇcteme RasberryPi skrze GPIO porty. Propojen´ı obou zaˇr´ızen´ı pˇrehlednˇe zobrazuje obr´azek 1. 3
Mˇeˇren´ı teploty na RaspberryPi
Jan Hor´aˇcek
Obr´azek 1: Propojen´ı RaspberryPi a senzoru DS18B20 [Pri]
3
Software
Toto ˇreˇsen´ı vyuˇz´ıv´a operaˇcn´ı syst´em Raspbian, kter´ y je naˇc´ıt´an z 16 GB vysokorychlostn´ı pamˇet’ov´e karty. Z´akladn´ımi softwarov´ ymi stavebn´ımi elementy pak jsou: 1. webov´ y server Apache, 2. automatick´ y spouˇstˇeˇc proces˚ u Cron, 3. datab´aze SQLite, 4. skript pro monitoring teploty a 5. skript generuj´ıc´ı webov´e rozhran´ı. Z´akladn´ı princip cel´e plej´ady softwaru lez shrnout do dvou bod˚ u: • Kaˇzd´ ych 5 minut zap´ıˇseme do datab´aze SQLite aktu´aln´ı teplotu a aktu´aln´ı ˇcas. • Na z´akladˇe poˇzadavku od klienta vygenerujeme webovou str´anku s grafem, kter´ y zobrazuje z´avislost teploty na ˇcase. Nyn´ı podrobnˇe pop´ıˇsi zaj´ımav´e ˇca´sti softwaru.
3.1
Monitorovac´ı skript
Monitorovac´ı skript je spouˇstˇen kaˇzd´ ych 5 minut cronem a zapisuje aktu´aln´ı teplotu do datab´aze. Po aktivac´ı modul˚ u w1-gpio a w1-therm je k dispozici soubor w1 slave v adres´aˇri /sys/bus/w1/devices/ID/, kde ID je unik´atn´ı ID teplotn´ıho senzoru, v konkr´etn´ım pˇr´ıpadˇe /sys/bus/w1/devices/28-0000065d0146/. Tento soubor je kl´ıˇcov´ y pro z´ısk´av´an´ı dat z teplotn´ıho senzoru. Data se z´ısk´avaj´ı velmi jednoduˇse: 4
Mˇeˇren´ı teploty na RaspberryPi
1 2 3
Jan Hor´aˇcek
user@dev :/ sys / bus / w1 / devices /28 -0000065 d0146 cat w1_slave 54 01 4 b 46 7 f ff 0 c 10 fd : crc = fd YES 54 01 4 b 46 7 f ff 0 c 10 fd t =21250
Aktu´aln´ı teplota je ˇc´ıslo 21250 vydˇelen´e konstantou 1000, tedy t = 21.250 ◦ C. Na tomto jednoduch´em principu stav´ı monitorovac´ı skript, kter´ y jednoduˇse provede parsing teploty a v´ yslednou hodnotu uloˇz´ı do datab´aze. Monitorovac´ı skript monitor.py psan´ y v Pythonu pˇrikl´ad´am. Tento skript je zaloˇzen na projektu [Ras].
3.2
Skript generuj´ıc´ı webovou str´ anku
Webov´e rozhran´ı tohoto ˇreˇsen´ı pˇrehlednˇe zobrazuje obr´azek 2.
Obr´azek 2: Webov´e rozhran´ı Webov´a str´anka je opˇet generov´ana skriptem v Pythonu, kter´ y pˇrikl´ad´am v souboru index.py. Tento skript je zaloˇzen na projektu [Ras]. Program je jednoduˇse vol´an Apachem jako cgi skript, na standardn´ı v´ ystup tedy vytiskne http hlaviˇcku a html reprezentuj´ıc´ı webovou str´anku. K t´eto webov´e str´ance je pˇripojen css soubor style.css, kter´ y tak´e pˇrikl´ad´am. Samotn´ y skript obsahuje mnoho neatraktivn´ıch dotaz˚ u do datab´aze, vypisov´an´ı html element˚ u a parsing dat z formul´aˇre. Pˇresto bych se r´ad zastavil u jednoho zaj´ımav´eho elementu: u grafu. Pro vykreslov´an´ı grafu jsem pouˇzil pomˇernˇe zaj´ımav´ y n´astroj od Google, konkr´etnˇe Google Charts, zaloˇzen´ y na Javascriptu. Cel´e vykreslov´an´ı grafu tedy funguje velmi jednoduˇse: 1. Definujeme data v grafu, typ grafu, n´azev grafu. 2. Zavol´ame funkci Google Charts pro vykreslen´ı grafu. 5
Mˇeˇren´ı teploty na RaspberryPi
Jan Hor´aˇcek
Do pˇr´ısluˇsn´eho elementu
, kter´ y specifikujeme, se graf n´aslednˇe vykresl´ı (samozˇrejmˇe vektorovˇe a interkativnˇe).
4
Zhodnocen´ı, v´ yhody a nev´ yhody
Svou maturitn´ı pr´aci povaˇzuji za u ´spˇeˇsnou, projekt je plnˇe funkˇcn´ı. Z´avˇerem bych r´ad diskutoval nˇekter´e parametry navrhnut´eho ˇreˇsen´ı. 1. Spotˇ reba elektrick´ e energie Cel´ y projekt byl navrhov´an s t´ım, ˇze bude neust´ale v provozu a tud´ıˇz byl a je poˇzadavek na n´ızkou spotˇrebu navrhnut´eho zaˇr´ızen´ı v´ıce neˇz kl´ıˇcov´ y. Pˇri navrhov´an´ı ˇreˇsen´ı jsem zvaˇzoval mˇeˇrit teplotu na desce typu Arduino, ˇci na vlastn´ı navrhnut´e DPS s jednoduch´ ym mikrokontrol´erem (napˇr. ATmega8a). V´ yhodou takov´eho ˇreˇsen´ı by byla o nˇekolik ˇra´d˚ u niˇzˇs´ı spotˇreba energie (ˇr´adovˇe mW ), zaˇr´ızen´ı by bylo moˇzn´e nap´ajet napˇr. sol´arn´ım ˇcl´ankem (v pˇr´ıpadˇe um´ıstˇen´ı venku) a bylo by tak energeticky sobˇestaˇcn´e. I pˇres energetick´e v´ yhody jsem se rozhodl pro RaspberryPi a to pˇredevˇs´ım pro to, ˇze 2 W jsou pro mˇe dostateˇcnˇe mal´a spotˇreba a protoˇze RaspberryPi je jednoduˇse konfigurovateln´e a univerz´aln´ı. 2. Snadn´ a opakovatelnost Za velkou pˇrednost sv´eho projektu povaˇzuji to, ˇze jsem schopen vytvoˇrit dalˇs´ı inteligentn´ı teplotn´ı senzory bez n´aroku na sloˇzitou v´ yrobu vlastn´ıho HW, ˇc´ı velk´e u ´pravˇe SW. Projekt lze jednoduˇse zopakovat na jak´emkoliv RaspberryPi. 3. Snadn´ a konfigurovatelnost, dynamiˇ cnost Za dalˇs´ı pˇrednost sv´eho ˇreˇsen´ı povaˇzuji to, ˇze jsem pouˇzil plnohodnotn´ y poˇc´ıtaˇc a tud´ıˇz jsou pro mˇe zmˇeny SW v´ıcem´enˇe ot´azkou nˇekolika kliknut´ı a pˇredevˇs´ım snadn´eho debugov´an´ı (porovn´ame-li napˇr. s pouˇzit´ım mikrokontrol´eru a vlastn´ıho FW).
Reference [Max08] MaximIntegrated: DS18B20 Programmable Resolution 1-Wire Digital Thermometer Datasheet. http://datasheets.maximintegrated.com/en/ds/ DS18B20.pdf. Version: 2008 [Pri]
PrivateEyePi: Monitor your home temperature using your Raspberry Pi. http://www.projects.privateeyepi.com/home/temperature-gauge
[Ras]
RaspberryWebServer: Building an SQLite temperature logger. http:// raspberrywebserver.com/cgiscripting/rpi-temperature-logger/
6