Razvojna plošča GrovePi+
Ena izmed ključnih prednosti mini računalnika Raspberry Pi je zagotovo velika skupnost, ki veliko pripomore k razvoju dodatkov za napravo. Med dodatke pa spada tudi razvojna plošča GrovePi+, ki je naslednica izvorne plošče GrovePi. Gre za izdelek podjetij Dexter Industries in Seeedstudio, ki omogoča priklop številnih tipal na Raspberry Pi, s katerimi lahko pridobimo želene podatke. Grove je sprva nastal kot dodatek za odprtokodni mikrokrmilnik Arduino in prav tako omogočal enostavnejši priklop tipal, brez potrebe po naprednejšem znanju elektrotehnike. Zaradi lažjega prehoda iz Arduina na Raspberry Pi pa so pri omenjenih podjetjih poskrbeli tudi za ploščo kompatibilno z mini računalnikom in jo poimenovali GrovePi. Vsa tipala namenjena razvojni plošči Grove delujejo tudi z GrovePi oziroma GrovePi+, ki je izboljšana različica svoje predhodnice in je kompatibilna s prav vsemi revizijami in različicami, od Raspberry Pi 1 do Raspberry Pi 2. Razvojna plošča je tako primerna za vse, ki bi radi brez vlaganja časa v elektroniko prišli do podatkov za svoj projekt, pa tudi tiste, ki se s svetom računalništva in elektrotehnike šele spoznavajo. Pri GalagoMarket so se zato odločili, da nam omogočijo preizkus in vam tako predstavimo delček tistega, kar omogoča GrovePi+.
Strojna oprema
GrovePi+ je dodatna razvojna plošča za Raspberry Pi, ki jo pritrdimo na prvih 26 vhodno-izhodnih pinov naprave. Na njej se nahaja 15 priključkov za tipala, ki jih povežemo s 4 pinskim kablom kateri je priložen ob vsakem posameznem tipalu. Plošča temelji na čipu, ki ga najdemo tudi na Arduinu – ATmeta328 in vsebuje 6 kanalov za pretvarjanje iz analogne v digitalno obliko. GrovePi+ je tako zasnovan na podlagi Arduina in ima zelo podobno strukturo ter oznake priključkov, kar se pozna tudi pri programski opremi. Na plošči se nahaja 7 digitalnih, 2 serijska, 3 analogni in 3 I2C priključki. Poleg teh so še vedno na voljo skoraj vsi GPIO pini z izjemo dveh I2C pinov, ki se uporabljata za komunikacijo med Raspberry Pijem in GrovePi+. Velika prednost pri uporabi Grove kompleta je enostavnost priključevanja tipal, saj ne potrebujemo spajkanja elementov, niti preizkusnih plošč in odvečnih kablov. Sistem priklopa tipal je podoben priključevanju kablov komponent v osebnih računalnikih, saj so vsi priključki narejeni tako, da ne moremo zamenjati levega predela kablov z desnim.
Na voljo je več kot 100 različnih tipal, ki so prirejena za uporabo z razvojno ploščo GrovePi+. Večina teh temelji na bolj poznanih elektronskih komponentah, ki jih je sicer mogoče kupiti posamezno in ustrezno priključiti neposredno na GPIO pine. V kolikor pogoji za komunikacijo s tipali ne zadoščajo, pa ima plošča še dve indikatorski LED diodi. Prva prikazuje, če je Raspberry Pi vklopljen ter GrovePi+ nanj ustrezno pritrjen in je obarvana zeleno. Druga pa prikazuje možnost komunikacije s tipali – če pogoji niso zadostni je obarvana rdeče in posledično tudi ni mogoče brati podatkov iz tipal. Na plošči so še 3 pritrdilne luknje – ena je namenjena prvi različici Raspberry Pi (Model A in Model B), drugi dve pa prenovljeni in drugi različici naprave (Model A+, Model B+ in Raspberry Pi 2). Prav tako je na plošči tudi odprtina za kabel Raspberry Pi kamere.
Programska oprema
Zaradi lažjega prehoda iz Arduina na Raspberry Pi, je programski paket za dostop do priključkov narejen podobno, kot za Arduino. Če torej prehajate iz mikrokrmilnika na mini računalnik, vam drugega kot le navajanje na operacijski sistem in novo strojno opremo, ni potrebno spoznati. Elektronske komponente tipal prirejenih za GrovePi+, ki so bolj znane in večkrat uporabljene pa so le še dodaten plus iz vidika programerja. To pomeni, da v veliki večini lahko uporabimo ali ustrezno priredimo že spisane knjižnice, ki bi jih sicer uporabili pri neposredni povezavi komponent na GPIO pine.
Za uporabo GrovePi+ je najprej potrebno namestiti ustrezno programsko opremo, ki komunicira z razvojno ploščo. Po uspešni namestitvi se Raspberry Pi ponovno zažene, nato pa GrovePi+ lahko pritrdimo na GPIO pine. Poleg glavne programske opreme so pri Dexter Industries pripravili še številne druge primere programov in projektov, na voljo pa so celo sheme za izdelavo svojega vezja, ki je združljiv z Grove tipali. Celoten arhiv datotek je na voljo na GitHubu. Postopek namestitve je hiter in enostaven, zato si ga bomo podrobneje ogledali.
Vse kar potrebujemo pred namestitvijo GrovePi+ je nameščen in skonfiguriran operacijski sistem, najbolj priporočljiv je Raspbian. Pred nadaljevanjem se je potrebno vpisati v uporabniški račun, ki ima možnost začasnega ali trajnega poganjanja ukazov, ki potrebujejo dostop do kritičnih sistemskih map in datotek. Nato nadaljujemo s prenosom celotnega arhiva iz GitHuba:
1 |
git clone https://github.com/DexterInd/GrovePi |
Ko se celoten arhiv prenese, se premaknemo vanj, spremenimo pravice izvajanja namestitvene skripte in kot skrbniški uporabnik to skripto tudi poženemo.
1 2 3 |
cd GrovePi/Script chmod +x install.sh sudo ./install.sh |
Pred namestitvijo potrebnih stvari za uporabo GrovePi+, nas skripta vpraša za potrditev namestitve.
Za nadaljevanje pritisnemo tipko Enter, nato pa morebitno namestitev paketov potrdimo s črko y. Trajanje celotne namestitve je odvisna od tega katere pakete ste že namestili na vaš Raspberry Pi in od hitrosti vaše mrežne povezave, v kolikor se morajo paketi še prenesti. Povprečno trajanje namestitve je nekje od 15 do 20 minut. Namestitev se konča s ponovnim zagonom naprave. Ponovno se vpišite v uporabniški račun in Raspberry Pi ugasnite. Sedaj lahko pritrdite GrovePi+ na GPIO pine, nato pa ponovno priključite Raspberry Pi na električno napajanje in se vpišete v uporabniški račun s skrbniškimi pravicami. Za potrditev uspešne namestitve zaženemo ukaz i2cdetect, ki nam bo povedal, na katerem strojnem naslovu se nahaja GrovePi+. Uporabniki novejših Raspberry Pijev, od revizije 2 naprej (oznaka pod logotipom je Raspberry Pi (c) 2011.12), kar vključuje tudi Model A+, Model B+ in Raspberry Pi 2, zaženete ukaz:
1 |
sudo i2cdetect -y 1 |
Uporabniki starejših Raspberry Pijev, ki so bili narejeni takoj po izidu mini računalnika, pa poženite ukaz:
1 |
sudo i2cdetect -y 0 |
V kolikor pri izpisu v drugi vrstici (označena z 00) opazite 04, to pomeni, da ste uspešno namestili opremo za uporabo GrovePi+ in ga Raspberry Pi lahko zazna ter z njim komunicira. V nasprotnem primeru izklopite Raspberry Pi, odstranite GrovePi+ iz GPIO pinov ter postopek ponovite od začetka.
Programska oprema, ki se nahaja v arhivu na GitHubu vsebuje podporo za kar 5 različnih programskih jezikov. Podprti so C, Go, Node.js, Python in Bash. Od teh je najbolje podprt Python, kjer najdemo veliko večino primerov, medtem ko za C trenutno ni na voljo nobenega primera. Ogledali si bomo še primer uporabe Grove tipal, ki omogočajo zajem raznoraznih podatkov. Za potrebe prikaza delovanja in komunikacije s tipali smo prejeli in preizkusili:
- Grove – Temp&Humi Sensor (tipalo za temperaturo in vlažnost)
- Grove – Barometer Sensor (tipalo za merjenje temperature, tlaka in nadmorske višine)
- Grove – PIR Motion Sensor (tipalo za zaznavanje premikanja)
- Grove – GPS (tipalo za zajem trenutne lokacije)
Najenostavnejši projekt, ki ga lahko naredimo s tremi tipali je izpis zajetih podatkov na zaslon. Za vključitev PIR tipala, pa bomo podatke izpisali le takrat, kadar zaznamo premikanje. Pri tem bomo uporabili programski jezik Python, ki je iz strani Raspberry Pi skupnosti tudi najbolj podprt, kar, kot že omenjeno velja tudi za GrovePi. Zaradi različnih elektronskih komponent, ki se nahajajo na tipalih, bomo uporabili dva digitalna, I2C in serijski priključek. Na digitalne bomo priklopili tipalo za temperaturo in vlažnost ter tipalo za zaznavanje premikanja. Na I2C priključek bomo priklopili tipalo za merjenje temperature, tlaka in nadmorske višine. Na serijski priključek označen z RPISER pa bomo priključili tipalo za zajem trenutne lokacije. Preden pa se lotimo dejanskega programiranja, potrebujemo namestiti še eno knjižnico, s katero bomo lahko pridobili podatke iz barometra. Gre za Adafruit Python GPIO knjižnico.
1 2 3 |
git clone https://github.com/adafruit/Adafruit_Python_GPIO.git cd Adafruit_Python_GPIO sudo python setup.py install |
Sedaj ustvarimo mapo v kateri se bodo nahajale zahtevane datoteke, ki bodo omogočile pridobivanje podatkov. V to mapo skopiramo ali prenesemo še knjižnice grovepi (nahaja se tudi v arhivu iz GitHuba v mapi Software/Python), BMP085 (izboljšana knjižnica s podporo BMP085 in BMP180 od Adafruit) in grove_gps (izvzet del kode iz datoteke, ki se prav tako nahaja v arhivu v mapi Software/Python, ki omogoča branje podatkov iz GPS tipala). Vse potrebno za pisanje našega programa imamo, zato tipala priključimo na:
- Temp&Humi Sensor na D2
- PIR Motion Sensor na D4
- Barometer Sensor na I2C-1
- GPS na RPISER
S pomočjo kode iz preostalih primerov znotraj arhiva v Software/Python, ki ustrezajo našim tipalom, lahko dokaj hitro izpišemo podatke za naš projekt na zaslon. Končna koda, ki izpiše podatke iz tipal izgleda približno tako:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys, grovepi, time, BMP085 from grove_gps import GPS # Grove Temperature & Humidity Sensor priključen na D2 temp_sensor = 2 # Grove PIR Motion Sensor priključen na D8 pir_sensor = 8 # Grove Barometer (BMP180) priključen na I2C-1 bar_sensor = BMP085.BMP085() # Grove GPS Sensor priključen na RPISER gps_sensor = GPS() grovepi.pinMode(pir_sensor, "INPUT") while True: try: if grovepi.digitalRead(pir_sensor): temp, vlaznost = grovepi.dht(temp_sensor, 0) temp2, tlak, nadm_visina = bar_sensor.read_temperature(), bar_sensor.read_pressure(), bar_sensor.read_altitude() _ = gps_sensor.read() _, _, _, _, lat, _, long, _ = gps_sensor.vals() print "****************" print "Temp&Humi Sensor:\n\tTemperatura =", temp, "°C, Vlažnost =", vlaznost, "%" print "****************" print "Barometer:\n\tTemperatura = {0:0.2f} °C, Tlak = {1:0.2f} Pa, Nadmorska višina = {2:0.2f} m".format(temp2, tlak, nadm_visina) print "****************" print "GPS Sensor:\n\tLokacija = {} °N, {} °E".format(float(lat)/100, float(long)/100) print "****************" time.sleep(.1) except IOError: print "IO Napaka" except IndexError: print "Ni mogoče prebrati podatkov GPS" except KeyboardInterrupt: print "Izvajanje programa končano" sys.exit(0) |
Izpis na zaslon se zgodi potem, ko tipalo za zaznavanje gibanja zazna premikanje – če z roko pomahamo pred tipalo, se bodo podatki izpisali na zaslon. Zaradi zakasnitve izvajanja zanke za 0,1 sekundo pa na zaslon dobimo dvojni izpis. To je mogoče preprečiti z zmanjšanjem zakasnitve ali dodatno logiko znotraj zanke.
Zaključek
GrovePi+ je zares priročen razvojni dodatek, ki omogoča pridobivanje podatkov iz tipal v najkrajšem možnem času. Za uporabo ne potrebujemo dodatne elektronske opreme, saj tipala priključimo s pomočjo priloženih kablov. Ravno zaradi tega ga v prvi vrsti priporočamo vsem, ki bi se radi ukvarjali z elektroniko, pa ne veste katere komponente potrebujete ter kam je potrebno kaj priklopiti. Svoj GrovePi+ lahko naročite preko GalagoMarketa, kjer so vam na voljo tudi dodatna tipala. GrovePi+ ni mogoče uporabljati kot samostojno napravo, saj je le dodatek za mini računalnik Raspberry Pi. Dodatek je združljiv z vsemi različicami Raspberry Pi, od Raspberry Pi Model A/Model B/Model A+/Model B+, do Raspberry Pi 2.
Pri ustvarjanju z GrovePi+ in mini računalnikom Raspberry Pi pa vam želimo veliko idej in inovativnosti!