Cel projektu

Głównym celem mojego projektu jest zbudowanie funkcjonalnej stacji meteo w oparciu o Raspberry Pi 3b, która umożliwi odczyt danych z zewnątrz (pogoda) jak i z wewnątrz (temperatura w domu). Oprogramowanie zostało napisane w języku Java.

Wykorzystane materiały

Autorem ikon statusów pogody jest Rodrigo Dias Fernandes Breckenfeld;
Autorem ikon symbolizujących pomieszczenia jest Yi Chen;
Autorem ikon symbolizujących fotowoltaikę oraz baterię jest kareemov1000;
Autorem ikony symbolizujących kalendarz jest Rohit Arun Rao;
Wszystkie ikony zostały zmodyfikowane - ich kolor został odwrócony.
Wyżej wymienione prace podlegają licencji - CC BY 3.0

Opis realizacji projektu

Użyte elementy

Do realizacji projektu wykorzystałem:
- Raspberry Pi (3b)
- Kabel (wybór padł na zwykłą skrętkę, ponieważ posiada ona 8 żył - umożliwia to podłączenie większej ilości czujników w przyszłości)
- Czujniki temperatury - DS18B20

Instalacja kabli, czujników temperatury

Najbardziej czasochłonną czynnością było poprowadzenie kabla przez kolejne pomieszczenia. Było to spowodowane tym, że skrętka jest dosyć gruba (estetyka wymagała jednak całkowitego ukrycia tego kabla) oraz tym, że kabel będzie obejmował pomieszczenia leżące zarówno na parterze, jak i na piętrze. Stwierdziłem, że najrozsądniejsze będzie poprowadzenie tego kabla pod listewkami, a jako przejście pomiędzy piętrami wykorzystam instalację wodną (kabel puściłem równolegle przy rurach). Początkowo chciałem zasilać malinkę z powerbanku (który mógłby służyć jako awaryjne źródło zasilania), jednakże to rozwiązanie miało zbyt dużo wad. Swoje raspberry wykorzystuję również do innych celów, a pod obciążeniem powerbank okazał się zbyt słabym źródłem zasilania. Ponadto, powerbank podpięty na stałe pod ładowarkę bardzo szybko uległby zużyciu. Ostatecznie zdecydowałem się na użycie dedykowanego zasilacza podłączonego pod UPS, który służy mi głównie jako zasilanie awarjne PC-ta. Całość zamontowałem na małej półce wykonanej z drewna oraz kątownika. Następnym krokiem była konfiguracja malinki oraz wstępne podłączenie czujników.

Podłączenie sensorów, odczyt danych

1. Odczytywanie danych z sensora DS18b20
Przy wykorzystaniu terminala, całość ogranicza się do kilku czynności.
1) Ładujemy moduły dla protokołu 1-wire i obsługę termometrów:
sudo modprobe w1-gpio
sudo modprobe w1-therm

Aby moduły te ładowały się przy starcie systemu wystarczy dopisać w pliku /etc/modules następujący tekst:
w1-gpio
w1-therm
2) Odczytujemy listę urządzeń (podpiętych sensorów):
cd /sys/bus/w1/devices
ls
3) Odczytujemy wartość temperatury z konkretnego sensora przy użyciu polecenia:
cat /sys/bus/w1/devices/28-0000046c32a2/w1_slave
gdzie 28-0000046c32a2 jest przykładowym urządzeniem wyświetlonym z listy. w odpowiedzi uzyskujemy aktualny odczyt temperatury.

2. Odczytywanie danych z sensora BME280.
Szybki test podłączonego sensora możliwy jest przy użyciu m.in. skryptu udostępnionego na githubie przez użytkownika Switch Science, na licencji MIT.
1) Pobieramy skrypt - można to zrobić "ręcznie", lub przy użyciu komendy:
wget https://raw.githubusercontent.com/SWITCHSCIENCE/BME280/master/Python27/bme280_sample.py
2) Uruchamiamy pobrany skrypt przy użyciu komendy:
python bme280_sample.py
Pozostało więc napisać tylko aplikację, która zautomatyzuje cały ten proces.

Napisanie aplikacji

Aplikację postanowiłem napisać w języku Java. Na początku założyłem, że będzie ona wysyłała odczytane dane na zewnętrzny serwis (zdecydowałem, się na 'thingspeak.com'), gdzie będą gromadzone dane (które zostaną potem użyte do wizualizacji na tej stronie). Dane ze wszystkich sensorów będą wysyłane co 5 minut przy użyciu REST-owego zapytania.

Kod aplikacji znajduje się na githubie.

Odczyt pogody

Dane na stronie głównej pochodzą tymczasowo ze strony 'openweathermap.org' Ze względu na przeprowadzone modyfikacje, zmuszony byłem umieścić czujnik BME280 w domu. W niedalekiej przyszłości sytuacja wróci do normy. W przyszłości pomyślę również nad modyfikacją obejmującą bezprzewodowe podłączenie czujników - takie rozwiązanie wyeliminuje problemy związane m.in. z przenoszeniem stacji/czujników w inne miejsca.