Spis treści:
Podstawowe informacje.
Kod źródłowy softwaru jest dostępny pod adresem https://github.com/kalamlacki/rpi_thermometer . Aplikacja bazuje na połączeniu termometru cyfrowego one wire Dallas Semicondactor DS18B20 z GPIO Raspberry PI. Wyniki z termometru można zczytywać pasywnie, to znaczy że mój soft nigdzie ich nie przesyła tylko oczekuje na żądania w trybie serwera www. Gdy przychodzi request od clienta do termometru na adres jaki ma RPI, np:http://127.0.0.1:4445/temp
w tym momencie zwracana jest wartość temperatury wcześniej sczytana z termometru i zwracana w odpowiedzi http, wynik jest wysyłany w postaci 1 linijkowej odpowiedzi TXT do klienta http, który zainicjował żądanie. Przykładowa odpowiedź z RPI wygląda następująco:
DS18B20 Temperature=20.06C
Odpowiedź tą można w łatwy sposób użyć w waszych skryptach automatycznego sterowania np ogrzewaniem w domu.
Aby użyć aplikacji należy sklonować repozytorium do siebie na komputer z Linuxem/Raspbianem przy pomocy poleceń:
git clone https://github.com/kalamlacki/rpi_thermometer
Jeśli nie mamy gita i i nnych narzędzi zainstalowanych na malince to wywołujemy polecenie:
apt-get install make git gcc g++ libmicrohttpd-dev
Po sklonowaniu repozytorium naleźy przełączyć się na brancha master:
cd rpi_thermometer
git switch master
W tej chwili należy skąpilować program poleceniem make:
make
Na ekranie pojawi się wyjście kompilatora gcc. Docelowym programem wykonywalnym jest program o nazwie "meteod". Jeśli go uruchomimy poleceniem ./meteod to nie zwróci on żadnych informacji na standardowe wyjście tylko przejdzie do pracy w tle jako demon, czyli zachowuje się jak prawie każdy serwer w Raspbianie. Nasłuchuje on na porcie 4445 i oczekuje na żądanie http i zwraca prostą odpowioedź z temperaturą. Po skąpilowaniu programu należy go zainstalować aby uruchamiał się przy starcie malinki w tym celu kopiujemy plik wykonywalny meteod do katalogu /usr/local/bin Należy również pamiętać aby włączyć magistralę 1-wire w konfiguratorze raspi-config bo inaczej malinka nie będzie wiedzieć że na GPIO ma podpięty temometr DS18B20. Aby meteod odpalał się przy starcie systemu, należy go dodać do skryptów startowych czyli do /etc/rc.local Wystarczy że do /etc/rc.local dodamy linie /usr/local/bin/meteod gdzieś na końcu skryptu i nadamy prawa do wykonania skryptu przez:
chmod 755 /etc/rc.local
Schematy połączeń GPIO Raspberry PI i DS18B20
GPIO i jego wyprowadzenia wyglądają jak na obrazku poniżej:Termometr cyfrowy DS18B20 wygląda jak na obrazku poniżej:
Wyprowadzenia pinów DS18B20:
I teraz aby spiąć wszystko ze sobą potrzebujemy 3 kabelków z jednej strony zakończonymi golpinami żeńskimi a z drugiej zalutowanymi przewodami do DS18B20. Nie jest to jakoś skomplikowane lutowanie, ważne jest jednak aby od strony termometru były piny zaizolowane np. termokurczkami aby piny termometru nie zwierały się ze sobą. I tak łączymy Vdd termometru do lini 3.3V, GND DS18B20 do GND malinki, DQ termometru do GPIO4 (pin 7) malinki. A międzu linią 3.3V a DQ umieszczamy rezystor 4.7K
Przykłady użycia.
Jak już wszystko podłączymy i skonfigurujemy to możemy przetestować czy wszystko działa poprawnie. I teraz zakładam że znaleziony adres IP malinki w twojej sieci to 192.168.1.101 to możemy teraz w przeglądarce albo przy użyciu aplikacji curl na Linuxie wywołaćcurl http://192.168.1.101:4445/temp
i w odpowiedzi na terminalu otrzymujemy:
DS18B20 Temperature=20.06C
i to będzie znaczyło że wszystko działa poprawnie i możemy takiego termometru używać np do kontroli temperatury w mieszkaniu przy użyciu własnych skryptów