V prejšnjem članku smo začeli govoriti o komunikaciji. RPi je že uspešno komuniciral z LCD zaslonom, nato s senzorjem vlage in temperature TH02 po vodilu I2C. Čas je, da gremo s komunikacijami naprej. Čaka nas komunikacija po vodilu 1Wire, na katerega bomo priključili temperaturni senzor DS18B20, nato pa se bomo spoznali s protokolom UART (ang. Universal asynchronous receiver/transmitter), ki ga bomo potrebovali za krmiljenje brezžičnega oddajnika – sprejemnika (transiverja) HM-TRP 868.
1Wire
1Wire je protokol, ki kot nam že ime pove, poteka po eni žici. Torej nimamo kot pri I2C eno žico za signal in drugo za uro. Po isti žici najprej pošljemo ukaz, nato pa po isti žici prejmemo podatke iz sužnja. Torej gre zopet za topologijo gospodar – suženj, oziroma več sužnjev. Vsak suženj ima svoj enoličen tovarniško nastavljen naslov, ki pa ni določen kot pri sužnjih I2C – kjer imajo vsi čipi z enako oznako enak naslov, ampak imajo kljub istemu imenu naslove različne. Iz tega sledi, da naslovov ne najdemo v tehnični dokumentaciji, ampak jih moramo nekako iz čipa prebrati. Kako to naredimo? Ne boste verjeli, vendar nam to niti ni potrebno. Vse to za nas naredi RPi. Ja, res je – ne hranite ga zaman. No pa pojdimo lepo po vrsti. Kako smo vezali naš senzor? Priključili smo kar dva, DS18B20 (slika 1) in DS1820, vezavo si lahko ogledate na sliki 2.
Kot vidite smo podatkovno linijo senzorjev vezali na priključek 7. RPi komunikacije sicer ne podpira le na tem priključku, vendar so s spremembo velike težave. Torej uporabimo priključek 7, ki je v ta namen predviden. Senzorja imamo priključena sedaj se lotimo branja temperature. Najprej moramo namestiti gonilnik, oziroma module v Linuxu. To naredimo z ukazom:
$ sudo modprobe w1-gpio
$ sudo modprobe w1-therm
Namestili smo gonilnik za 1Wire, nato pa še gonilnik za Dallas 1Wire temperaturni senzor. To moramo narediti ob vsakem ponovnem zagonu. Kaj? To vam ni všeč? No potem pa naredimo tako, da se bo to naložilo samodejno. Odprimo datoteko kamor bomo vnesli našo željo:
$ sudo nano /etc/modules
in na konec dodamo naslednji vrstici:
w1-gpio
w1-therm
kot smo pri nano-tu že vajeni pritisnemo zaporedje <ctrl + o>, <enter> in nato <ctrl + x>. Na tem mestu se poraja vprašanje, zakaj bi ob vsakem zagonu skrbeli za vodilo, če za to lahko poskrbi Linux? Težava se pojavi, če želimo priključek 7 uporabiti za kak drug namen. Če to želimo, lahko module tudi odstranimo z ukazom:
$ sudo modprobe –r w1-gpio
$ sudo modprobe –r w1-therm
Da pa bi v vsej zmedi lahko vedeli, katere module imamo nameščene, to lahko preverimo z ukazom:
$ lsmod
Izpišejo se nam nameščeni moduli lupine (Linux-a). Nam je „w1_gpio“ izpisalo v drugi vrsti, „w1_therm“ pa v prvi. Ustvarila se je tudi nova mapa, ki predstavlja 1Wire vodilo. Najdemo jo na mestu „/sys/bus/w1/“, v njej pa se nahaja mapa „devices“. Seveda želimo izvedeti, kakšna naslova imata naša dva čipa. To najdemo tako, da v „LXTerminal“ vnesemo naslednjo kodo, ki izpiše vsebino mape (stikalo „-1“ omogoči izpis vsake mape/datoteke v svojo vrsto):
$ ls -1 /sys/bus/w1/devices
nam je izpisalo:
10-000802839836
28-000002dca3de
w1_bus_master10
Na prvi pogled nič kaj uporabne številke. Vendar nam prvi dve vrstici predstavljata mapi naših senzorjev 18B20 z začetkom 28 in 1820 z začetkom 10. Če boste priključili več senzorjev iz iste družine, se bo ime njihove mape začelo z istima številkama, nadaljevanje pa bo enolično. V mapi „w1_bus_master1“ imamo datoteke, v katerih lahko spremljamo/nastavimo nekatere parametre, kot na primer število sužnjev, imena sužnjev, ročno odstranimo sužnja, največje število sužnjev in podobno. V mapah „10-*“ in „28-*“ pa imamo poleg ostalih datotek tudi „w1_slave“, v kateri se skriva meritev. Torej se z ukazom „cd“ najprej pomaknimo v mapo senzorja, kjer bomo to datoteko našli.
Priročnik Raspberry Pi in Python za začetnike
Raspberry Pi in Python za začetnike (6)
AX elektronika d.o.o.
2014_SE223_41