SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement

IoT prakticky - programovanie Raspberry Pi v Pythone 6: 1-Wire zbernica

Mikrokontroléry
1

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

    0  1  2 3  4  5  6  7  8  9  a  b  c  d  e  f
00:         -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

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:

mountpoint = /mnt/1wire
allow_other

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

# Sample configuration file for the OWFS suite for Debian GNU/Linux.
#
#
# This is the main OWFS configuration file. You should read the
# owfs.conf(5) manual page in order to understand the options listed
# here.
 
######################## SOURCES ########################
#
# With this setup, any client (but owserver) uses owserver on the
# local machine...
! server: server = localhost:4304
#
# ...and owserver uses the real hardware, by default fake devices
# This part must be changed on real installation
# server: FAKE = DS18S20,DS2405
#
# USB device: DS9490
#server: usb = all
#
# Serial port: DS9097
#server: device = /dev/ttyS1
server: device = /dev/i2C-1
#
# owserver tcp address
#server: server = 192.168.10.1:3131
#
# random simulated device
#server: FAKE = DS18S20,DS2405
#
######################### OWFS ##########################
#
mountpoint = /mnt/1wire
allow_other
#
####################### OWHTTPD #########################
http: port = 2121
####################### OWFTPD ##########################
# ftp: port = 2120
####################### OWSERVER ########################
server: port = localhost:4304

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

cd /sys/bus/w1/devices
ls

Príkazom owdir načítate stromovú štruktúru virtuálneho adresára. K dispozícii sú aj príkazy  owget, owread a owwrite

pi@raspberrypi:~ $ owdir
/28.90F8ED0A0000
/bus.0
/uncached
/settings
/system
/statistics
/structure
/simultaneous
/alarm
pi@raspberrypi:~ $

V programovacom jazyku Python môžete zistiť požadované údaje pomocou kódu

import ow
ow.init('localhost:4304')
sensorlist = ow.Sensor('/').sensorList()
for sensor in sensorlist:
   print('Device Found')
   print('Address: ' + sensor.address)
   print('Family: ' + sensor.family)
   print('Alias: ' + sensor.alias)
   print('ID: ' + sensor.id)
   print('Type: ' + sensor.type)
   print('Temperature: ' + sensor.temperature)
   print(' ')

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

https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone-4--softverova-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

Luboslav Lacko

Všetky autorove články

1 komentár

Zapojenie senzora teploty MBT 3270 reakcia na: IoT prakticky - programovanie Raspberry Pi v Pythone 6: 1-Wire zbernica

28.10.2021 13:10
Dobrý deň

Chcel by som sa opýtať či by ste mi vedeli poradiť ako a kde zapojiť snímač teploty typ 084Z2021 Danfoss MBT 3270 .
Je to snímač ktorý meria teplotu výparov v komíne. Na ktorú pozíciu GPIO je potrebné ho zapojiť ?
Používam Raspberry Pi model B

Ďakujem
Reagovať

Pridať komentár