"Vieno laido" termometrai Dallas DS18B20
1-wire funkcijos atyvavimas Raspberry Pi
Pirmas testas - ant stalo. Termometrus jungiu į pirmą io-hat plokštės įejimą - in1.
Raspberry-pi pakeitimai
sudo vim /boot/config.txt
dtoverlay=w1-gpio,gpiopin=18
Po kiekvieno config.txt redagavimo reikia perkrauti RPi:
sudo reboot
Konfigūravimo tikrinimas
# ar moduliai aktyvūs?
lsmod | grep w1
Rezultatas turi būti:
w1_therm 28672 0
w1_gpio 16384 0
wire 36864 2 w1_gpio,w1_therm
Jeigu rezultatas ne toks, moduliai aktyvuojami komandomis:
sudo modprobe w1_gpio
sudo modprobe w1_therm
Raspberris pats detektuoja prijungtus termometrus ir failų sistemoje jie atsiranda adresu /sys/bus/w1/devices
kataloguose kurių pavadinimai prasideda 28-
:
Temperatūros tikrinimas:
$ cat /sys/bus/w1/devices/28-3c01d075482c/w1_slave
7e 01 55 05 7f a5 81 66 84 : crc=84 YES
7e 01 55 05 7f a5 81 66 84 t=23875
Taigi ant stalo viskas veikia puikiai. Du termometrai detektuoti, temperatūras rodo.
Kaip nesisekė realioje situacijoje
Ant stalo viskas paprasta ir maniau greit susisuksiu bet... Eilinį kartą supratau, kad pirmiausia reikia paskaityti gamintojo rekomendacijas ir tik tada imtis darbo. Bet aš juk protingesnis už gamintoją ir kam tie manualai reikalingi!
Daviklius sujungiau žvaigždės principu. Atskiri kabeliai iki 4 termometrų ir kabelių ilgiai smarkiai skiriasi. Galuose prilitavau daviklius, tada viską sujungiau spintoje - neveikia. Atjungiau visus daviklius galuose palikdamas vieną - tikrinu - neveikia. Ištraukiau kabelius iš RPi ir pajunginėju po vieną atskirai - po vieną visus detektuoja ir rodo temperatūrą. Pajungiu bet kuriuos du kartu - nebeveikia. Teko palikti kitai dienai.
Prisiskaičiau rekomendacijų forumuose (gamintojo manualą vis dar ignoruoju). io-hat plokštės inputai užpullupinti 10k varžomis. Gamintojas rekomenduoja pullupinti 4.7k. Padarau su 4.7k - veikia po du bet ne daugiau. Prisipirkau kondensatorių po 100nF ir varžų visokių pagal 100 rekomendacijų forumuose.
Kaip pavyko
Perjungiu signalo laidą į kitą io-hat įėjimą, kuris be pullupo, pakoreguoju config.txt į dtoverlay=w1-gpio,gpiopin=7
, pullupinu/užtrumpinu signalo laidą ir 5 V su 2.2k varža, jungiu visus termometrus - visi VEIKIA!
Kaip integruoti į node-red
Apačioje nuoroda į waveshare straipsnelį su pavyzdžiais kaip nuskaityti temperatūras keliomis programavimo kalbomis.
Node-red aš įdiegiau "node-red-contrib-ds18b20-sensor" nodą bet vėliau pastebėjau, kad kol vyksta temperatūros reikšmių atnaujinimas visi kiti node-red procesai užšąla. Užšaliumas trunka kelias sekundes ir jeigu tuo momentu pvz įjunginėji vonioje šviesą - nieks nereaguoja. Pasinaudodamas waveshare pavyzdžiais pasirašiau golang servisą, kuris nuskaito visų sistemoje rastų termometrų reikšmes ir publikuoja jas MQTT protokolu.
Kas toliau?
Dabar matau realią situaciją name - kiek temperatūros duoda saulė, kada galima uždaryti/atidaryti vožtuvus. Kol kas valdau tik pirmą ir trečia aukštus, liko ali prisipirkti el. pavarų visiems likusiems vožtuvams.
Sujunginėju node-red makaronus, dabartinis rezultatas:
Nuorodos
- Jungimo rekomendacijos https://www.maximintegrated.com/en/design/technical-documents/tutorials/1/148.html
- 1-Wire DS18B20 Sensor https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor
- DS18B20 w1-gpio Device Tree gpiopin NOT = 4 https://raspberrypi.stackexchange.com/questions/43037/ds18b20-w1-gpio-device-tree-gpiopin-not-4/88648#88648