Blog (34)
Komentarze (536)
Recenzje (0)

"Mądrzejszy" dom - RPi oraz DS18B20

@mktos"Mądrzejszy" dom - RPi oraz DS18B2019.01.2014 16:27

Mówimy o "inteligentnych domach". W połączeniu do reszty inteligentnych sprzętów domowych, jak lodówki (wysyłające spam) czy inne czujniki obecności automatycznie włączające światło mają nasze życie ułatwiać lub uprzyjemniać.

Nie mam zamiaru bawić się w aż tak rozbudowane systemy, jakie planują niektórzy. Nie potrzebuję setek rozwiązań i procesora w każdym włączniku ściennym. Ale fajnie jest czasami się nieco pobawić, prawda?

Mam termometr za oknem. Podobnie jak większość osób. Mam jednak termometr elektroniczny z wyświetlaczem ciekłokrystalicznym. Od kiedy jednak kupiłem sobie większy (szerszy) monitor to jest on nieco zasłonięty. Nie było by wygodnie, gdyby obok prognozy pogody na ekranie startowym Windows 8 pojawiała się także faktyczna temperatura w domu, oraz na zewnątrz? O ileż to wygodniejsze rozwiązanie od przesunięcia nieco termometru w lewo, aby go nie zasłaniał monitor! ;-)

A na serio - czemu się nie pobawić?

Hardware

Mam w domu Raspberry Pi, a nawet dwa. Jeden z nich służy jako serwer i (częściowo) router, ale jego piny GPIO pozostają niewykorzystane, więc można by wykorzystać go do odczytu danych z czujnika temperatury i prezentowania (skoro jest to serwer) w postaci danych do wykorzystania przez inne aplikacje - docelowo, przez aplikację dla Windows 8.

Mam też czujnik DS18B20 z interfejsem 1-wire, który dość zgrabnie współpracuje z Raspberry Pi. Podłączenie wygląda następująco:

Linia 3,3V podłączona jest do prawej nóżki czujnika. Poprzez rezystor tworzy "pull-up" z linią danych, która jest podłączona do naszego ulubionego pinu GPIO4 oraz środkowej nóżki czujnika. Lewa nóżka podłączona jest do masy. Rezystor według tutoriala na Adafruit powinien być około 4,7 kiloomów, ale równie dobrze poradzi sobie prawie każdy z zakresu od 4,7 kilooma do 10 kiloomów. Ja użyłem 10 kOhm, bo innego nie miałem pod ręką ;-)

DS18B20 opiera się na 1-wire, co oznacza, że jest możliwość łączenia wielu takich czujników w łańcuch, a będzie dostęp do wszystkich. Jest też możliwość używania tylko dwóch nóżek ("parasite power"), niestety mój bardzo intensywnie nie chciał z tym współpracować.

Software

Czas na oprogramowanie, część pierwsza. Za komunikację z interfejsem 1-wire posłużyć mogą nam moduły jądra w1-gpio oraz w1-therm, który to umie się komunikować z czujnikiem DS18B20. Ich wymogiem jest m.in. podłączenie właśnie 1-wire do pinu GPIO4.

Po ich załadowaniu możemy obejrzeć zawartość katalogu /sys/bus/w1/devices, gdzie powinny znaleźć się podkatalogi (linki symboliczne, ale to nieważne) o nazwach w postaci 28-xxx, gdzie xxx to unikatowy identyfikator czujnika.


sudo modprobe w1-gpio
sudo modprobe w1-therm
ls /sys/bus/w1/devices

W moim wypadku wynik będzie taki:


[ktos@lily ~]$ ls /sys/bus/w1/devices
28-0000054d332a  w1_bus_master1

Z podkatalogu 28-0000054d332a wypiszmy teraz zawartość pliku w1_slave:


[ktos@lily ~]$ cat /sys/bus/w1/devices/28-0000054d332a/w1_slave
6d 01 4b 46 7f ff 03 10 70 : crc=70 YES
6d 01 4b 46 7f ff 03 10 70 t=22812

Odczyt tego "pliku" trwa chwilkę, ponieważ jest to faktycznie odczyt danych z czujnika. W ostatniej linii mamy t=22812, czyli temperatura wynosi 22,812 stopnia Celsjusza. Szybki rzut oka na dwa termometry, jakie mam na półce i wskazują one 22,0 stopnia oraz 22,8 stopnia. Wychodzi zatem, że słusznie podejrzewałem, że jeden z nich nieźle zaniża.

Przydałoby się, aby moduły jądra były ładowane automatycznie. Używam dystrybucji Arch Linux, i zgodnie z opisem na ArchWiki należy stworzyć plik o rozszerzeniu .conf w katalogu /etc/modules-load.d/. Stworzyłem taki plik:


[ktos@lily ~]$ cat /etc/modules-load.d/w1.conf
# ładowanie modułów jądra odpowiedzialnych za 1-wire
# i DS18B20
w1-gpio
w1-therm

Ok, mamy zatem odczyt temperatury. Szkoda tylko, że nie jest to w najpiękniejszej formie, to raz. Dwa, spróbujmy to "wystawić" na świat.

Stworzyłem testowo malutki skrypt, który pokazuje temperaturę w nieco bardziej "ludzkiej" formie (proszę o wyrozumiałość - nie jestem mistrzem Basha - zapewne da się zrobić lepiej):


#!/bin/sh

TEMP=`cat /sys/bus/w1/devices/28-0000054d332a/w1_slave | grep t= | cut -d "=" -f 2`
TEMP=`echo "scale=1; $TEMP/1000" | bc`
echo "$TEMP°C"

Który po uruchomieniu w konsoli prezentuje nieco bardziej ładną formę temperatury z dokładnością do jednego miejsca po przecinku.


[ktos@lily ~]$ scripts/temperature_ds18b20
22.8°C

W sam raz aby to wykorzystać w innych skryptach, np. po zalogowaniu użytkownika pokazywać mu w terminalu temperaturę z czujnika.

Czyli mamy uruchomiony czujnik temperatury. Gdyby dodać kolejny czujnik, wystarczy połączyć linie zasilania, uziemienia i danych, bez dodatkowego rezystora, a jego identyfikator po chwili pojawi się w odpowiednim katalogu i również będzie można odczytać z niego dane.

W następnej części spróbujemy zbudować aplikację serwerową, która będzie udostępniała dane klientom, np. aplikacji dla Windows 8.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.