
IoT prakticky - programovanie Raspberry Pi v Pythone 6: 1-Wire zbernica
Mini seriál je zameraný na obsluhu hardvéru pripojeného na dosku Raspberry PI. V tejto časti na praktických príkladoch ukážeme možnosti komunikácie pomocou zbernice 1-Wire.
Príklady sú v vo videu
Zbernica 1-Wire má jedno zariadenie master a jedno, alebo viac zariadení slave, ktoré sú buď ovládané, alebo sa z nich čítajú údaje. Všetky zariadenia sú pripojené paralelne na spoločný dátový vodič a na spoločnú zem. Na pripojenie stačia dva vodiče, keďže pripojené zariadenia je možné napájať cez dátový vodič, ale vo väčšine prípadov sa používa aj tretí, napájací vodič. Prenosová rýchlosť je: 15,4 kb/s v štandardnom režime, alebo až 125kb/s v režime Overdrive. Každé pripojené zariadenie má 64 bitový unikátny identifikátor. Na prenos údajov sa využíva rôzna šírka impulzov na dátovom vodiči.
Ukážeme pripojenie tepelného čidla DS18B20, ktoré je pripojené cez 1-Wire zbernicu na integrovaný obvod DS2482-100. Ten je k Raspberry Pi pripojený cez komunikačné rozhranie I2C. Pýtate sa, načo je dobré takéto komplikovanejšie riešenie, keď Raspberry Pi síce nemá zbernicu 1-Wire implementovanú v hardvéri, ale ako softvérovú obsluhu zariadení pripojených na GPIO4.Tak prečo nepripojiť dátový vodič z teplomera priamo na GPIO4?
![]() |
![]() |
Vľavo pripojenie tepelného čidla cez DS2482, vpravo priamo na pin GPIO4
Problém je v tom, že na niekoľko metrov dlhý prívodný kábel sa môže naindukovať rušenie, prípadne aj impulzy s napäťovou úrovňou, ktorá by mohla SoC Broadcom poškodiť. Naproti tomu obvod DS2482-100 je na pripájanie zariadení na dlhých vodičoch prispôsobený.
OK, tak iná námietka: prečo nepoužiť senzor na meranie teploty určený pre I2C. Samozrejme môžete taký senzor použiť, avšak problém je s dĺžkou kábla a v neposlednom rade aj s presnosťou.
![]() |
![]() |
Moduly na bezpečné pripojenie 1-Wire zariadení na dlhých vodičoch. Modul sa k RPI pripája cez I2C
Aby sme nemuseli nič zapájať a vašu pozornosť sústredili na softvérovú obsluhu, v príklade sme využili dosku určenú pre domácu automatizáciu UniPi 1.1 Lite. Na komunikáciu a externými zariadeniami ako napríklad digitálne teplomery má doska UniPi 1.1 Lite integrovaný 1-Wire kanál s konektorom RJ45. Komunikáciu zabezpečuje čip DS2482-100. Tento obvod je k mikrokontroléru pripojený cez I2C a má adresu 0x18.
Najskôr je potrebné povoliť používanie zbernice 1-Wire, buď v používateľskom rozhraní v menu Preferences, Raspberry Pi Configuration v zložke Interfaces, alebo príkazom sudo raspi-config zadaného z terminálu a následným povolením 1-Wire v položke textového menu „5 Interfacing Options“. Po povolení 1-Wire je potrebné Raspberry reštartovať.
Príkazom i2cdetect -y 1 zistíte, či je pripojený riadiaci obvod komunikácie, v našom prípade čip DS2482-100. Ten je pripojený cez I2C.
#i2cdetect -y 1
Znovu pripomíname, že zariadenia komunikujúce cez I2C sa dajú pripojiť aj priamo cez port GPIO4, ale vtedy môžete použiť dĺžku prívodných vodičov len niekoľko desiatok cm
Vtedy je potrebné editovať konfiguračný súbor config.txt
Príkazom
sudo nano /boot/config.txt
a pridať doň riadok
dtoverlay=w1-gpio,gpiopin=4
V príklade budeme využívať OWFS, čiže virtuálny súborový systém pre 1-Wire. Funguje tak, že údaje zo zariadení sa ukladajú do súborov v zložkách pre jednotlivé konkrétne zariadenia.
Príkazom
sudo apt-get -y install owfs python-ow ow-shell
nainštalujete modul OWFS pre Python
Následne je potrebné upraviť súbor /etc/owfs.conf:
Dajte do komentára riadky
# server: FAKE = DS18S20,DS2405
# ftp: port = 2120
Do sekcie USB device: DS9490 pridajte riadok:
server: device = /dev/i2c-1
a napokon vymažte komentáre v riadkoch:
Ak využívate viac paralelne pripojených zariadení, je potrebné aby OWFS fungoval na všetkých
server: i2c = ALL:ALL
Obsah súboru owfs.conf po úpravách bude
Súbor uložte a reštartujte Raspberry.
Pripojte 1-Wire zariadenia a v súborovom manažéri si pozrite adresár /sys/bus/w1/devices
Prípadne si jeho obsah môžete nechať vypísať cez konzolovú aplikáciu príkazmi
Príkazom owdir načítate stromovú štruktúru virtuálneho adresára. K dispozícii sú aj príkazy owget, owread a owwrite
V programovacom jazyku Python môžete zistiť požadované údaje pomocou kódu
Ostatné časti seriálu:
Programovanie Raspberry Pi v Pythone 1: Konfigurácia https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone---1-cast--konfiguracia
Programovanie Raspberry Pi v Pythone 2: Vstupy a výstupy https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone---2-cast--vstupy-a-vystupy
Programovanie Raspberry Pi v Pythone 3: PWM výstup a ovládanie servomotorov https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone-3--PWM-vystup-a-ovladanie-servomotorov
Programovanie Raspberry Pi v Pythone 4: softvérová obsluha vstupov
Programovanie Raspberry Pi v Pythone 5: softvérová obsluha vstupov: I2C komunikácia https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone-5--I2C-komunikacia
Zobrazit Galériu