GitHub - początek.

Odkąd postanowiłem zawodowo wejść w świat IT, założyłem konta na wielu portalach branżowych, większość głównie po to aby nikt mi nie zabrał z czasem nazwy użytkownika, część myśląc o włożeniu tam swojej pracy na co brakowało mi czasu. Zmotywowany wpisami na blogu gynvael polecam wszystkim! postanowiłem to zmienić! Na moim Githubie pojawiły się dwa nowe repozytoria, jednym z nich jest bardziej poważny projekt sterownika do terrarium zarządzalnego z sieci lokalnej po protokole MQTT, drugim jest napisany w kilka(naście?) minut szybki kontroler lampek led do szałowego swetra świątecznego.

Terruino

Pomysł zrodził się w mojej głowie około roku 2020, z powodu braku dostępnego dobrego sterownika terra/akwarystycznego, takiego który sprawiłby jak najlepsze warunki planowanemu podopiecznemu, by czuł się komfortowo. Gady i ryby trzymane przez ludzi potrzebują sztucznie utrzymywanych naturalnych warunków, aby zapewnić im jak najlepszy dobrobyt nie wystarczy zwykły filter czy lampa działająca non stop. Ale to warto byłoby rozdzielić na osobny rozdział.

Zwierzak i jego warunki

Swego czasu, błądząc po internecie trafiłem na wpisy o agamach brodatych(Pogona vitticeps), poczytałem dłuższą chwilę i zdecydowałem się że to zwierzak dla mnie - trochę społeczny, trochę nie. Nie wymagający aż tyle uwagi jak kot, pies, ptaki - które pozostawione samemu dostają depresji. Agama większość czasu woli spędzać sobie sama, nakarmiona i dogrzewana przez lampy UV, lecz też nie przeszkadza jej gdy od czasu do czasu weźmie się ją na ręce. Zdjęcie Agamy Brodatej z Wikipedii Fotografia za Wikipedia - Frank C. Müller, Baden-Baden - CC BY-SA 2.5

Jak napisałem wyżej - wymaga dogrzewania. Agamy poprzez wygrzewanie na promieniach UV, normalnie zapewnianych przez słońce metabolizują niektóre składniki odżywcze, muszą mieć więc zapewnione odpowiednie lampy przez odpowiednio długą część dnia. Oprócz tego jako zwierze zmiennocieplne wymaga odpowiedniej temperatury do komfortowego bytowania. Warto byłoby też dać jej odpowiednie, nastrojowe oświetlenie symulujące cykl dnia jej zwyczajowego miejsca życia, kontynentu australijskiego - fajnie gdyby wraz z nastaniem świtu, również w terrarium zapalało się światło i ogrzewanie, a podczas sezonu letniego - wentylator w przypadku wyższych temperatur. Dodatkowo, większość gadów nie znosi zbyt dobrze wahań wilgotności, tu też przyda się wentylator by powietrze trochę osuszyć, żeby zwiększyć wilgotność fajnie byłoby mieć jakąś małą pompkę robiącą delikatną mgiełkę.

Jak zbudować terrarium?

Biorąc powyższe pod uwagę, zrobiłem liste potrzebnych rzeczy(oprócz ficzycznego zbiornika terrarystycznego):

  • sterownik wraz z odpowiednim osprzętem do przekazywania poleceń oraz systemem zabezpieczeń
  • Aparatura pomiarowa(termometr, higrometr)
  • lampę UV i grzałkę
  • Wentylator i spryskiwacz

Trzy ostatnie podpunkty pomińmy, to będą gotowe produkty, ciekawszy jest sam sterownik i jego peryfieria, można je podzielić na:

  • sam sterownik, wybór padł na popularny wtedy ESP8266 - mikrokontroler z wbudowanym Wi-Fi
  • przekaźniki - niezbędne by niskie napięcie z ESP mogło sterować normalnym gniazdkowym napięciem 230v.
  • system sterowania, ambitnie postanowiłem skorzystać zarówno ze sterowania offline, oraz online przy wykorzystaniu wbudowanego WiFi.
    • offline - ekran TFT 1.8”, obok przyciski(do tej pory nie zbudowałem prototypu przyciskowego zarządzania…)
    • online - dostęp za pomocą jakiejś nieokreślonej technologii z internetu.
  • System zabezpieczeń, by w przypadku awarii ESP jaszczurka nie doznała urazu, albo co gorsza aby lampa nie podpaliła mieszkania.
    • rozwiązania softwarowe w sterowniku:
      • w przypadku braku sieci korzystanie z zapisanych ustawień
      • raportowanie błędów m.in poprzez powiadomienia push na telefonie
      • możliwość przejścia do trybu awaryjnego w danych sytuacjach
    • fizyczna warstwa zabezpieczeń:
      • przewód szybkotopliwy, stosowany często w pociągach, pomieszczeniach etc - w przypadku pożaru jako pierwszy się topi przerywając obwód
      • wyłącznik bimetaliczny, normalnie zamknięty - w przypadku awarii sterownika i ciągłej pracy grzałki przy zwiększeniu temperatury otworzy obwód, wyłączając grzałkę.
      • podtrzymanie bateryjne sterownika, by wysłał informacje o awarii zasilania w mieszkaniu, to ostatecznie zostało przeniesione na wyższą warstwę - serwerową.

Mając ukompletowany plan działania, postanowiłem zacząć zbieranie części, po zakupach na arduino i przeglądaniu możliwych rozwiązań softwarowych, najpierw zdecydowałem się na stworzenie prostego interfejsu graficznego z wykorzystaniem bibliotek Adafruit_ST7735 oraz Adafruit_GFX, potrzebnych do sterowania typowym wyświetlaczem TFT 1,8 cala - mnóstwo klonów jest dostępnych na AliExpress.

Aby mieć co wyświetlać, trzeba mieć dane, w tym przypadku postawiłem na dwa termometro-higrometry DHT22 i kooperująca z nimi biblioteka DHTEsp jeden miał być w środku terrarium, drugi w pokoju, planowałem w przyszłości także rozbudowę o trzeci, sprawdzający warunki na zewnątrz, jednakże stwierdziłem że do tego celu lepiej się przyda jakaś lokalna centralka pogodowa.

By mieć dostęp z sieci oraz móc wyświetlać aktualną godzinę, potrzebowałem zaprząc Wi-Fi do pracy, do tego celu posłużyła biblioteka ESP8266WiFi, kompatybilna oczywiście z moim mikrokontrolerem. Dodatkowo musiałem dograć biblioteki WiFiUDP do użycia protokołu UDP oraz NTPClient do komunikacji z serwerem czasu.

Po sprzęgnięciu wszystkiego razem do wspólnej pracy, efektem był pierwszy prototyp, z góry przepraszam za słabej jakości zdjęcie ;) Terruino pierwsza iteracja

Halo Terruino tu serwer, czy mnie słyszysz?

Zadowolony ze swoich efektów - działało mi pobieranie czasu z zewnętrznego, GUSowskiego serwera, na ekranie pokazywały się informacje o aktualnym stanie sieci WiFi, o przekroczeniu dopuszczalnych wartości temperatury czy wilgotnośći, a także numeryczne wskazania termometru i higrometru, poszedłem o krok dalej i postanowiłem oprócz pobierania, również wysyłać.

Było to jakieś 3 lata temu od czasu w którym piszę ten post, w związku czym moja pamięć jest już trochę zawodna i nie będę się rozwijał. Zwłaszcza, że po czasie stwierdziłem ten sposób jako błędną, niebezpieczną ścieżkę rozwoju, o czym nawet na githubie ostrzegłem, jednakże zostawiając dla ciekawskich strzępki kodu by skorzystać z tego rozwiązania. Założyłem prosty serwer LAMP, posługując się głównie rozwiązaniem innego projektanta i dostosowując efekt jego pracy do moich zastosowań, stworzyłem małego potworka który postował niezaszyfrowane dane poprzez HTTP Push do serwera, który za pomocą języka PHP odbierał te dane i pakował do bazy danych. Dane były odbierane, zacząłem nawet pracę nad komunikacją w drugą stronę, tak bym mógł również nadawać odpowiednie nastawy i komunikaty dla ESP, jednakże przez nawał pracy zarzuciłem na jakiś czas dalsze programowanie i wróciłem dopiero do niego bodajże po roku.

Po tym czasie zdążyłem trochę bardziej rozwinąc się, dowiedziec o instnieniu innych sposobów, poeksperymentować z HomeAssistant i MQTT. Stwierdziłem że nie ma sensu budować strony od podstaw, próbować walczyć z wydajnością i zabezpieczeniami, zamiast tego można skorzystać z gotowych, predefiniowanych do tego rozwiązań.

MQTT i HomeAssistant

MQTT jest lekkim protokołem idealnym do przesyłania małych ilości danych w ramkach, korzystają z niego m.in. nowoczesne wodomierze, mierniki prądu, sporo sprzętu IoT. Idealnie więc się sprawdza do komunikacji w lokalnej sieci, jednakże coś w tej lokalnej sieci musi ten ruch odbierać. To był czas około końca roku 2022, zacząłem wtedy bawić się domowymi serwerami z HomeAssistantem, systemem stworzonym do budowania własnego systemu SmartHome, poprzez dogranie odpowiednich wtyczek, można korzystać również z protokołu MQTT. Efektem tego było kompletne wyrzucenie metody HTTP na rzecz bardziej przyjaznego MQTT, zdołałem znowu wysyłać dane do HomeAssistant, znowu zaprzestałem na komunikacji w drugą stronę.

Przyszłość projektu

Projekt rozwijam 3 lata, sporo się przy nim nauczyłem, wracam do niego od czasu do czasu jako pole do nauki i zabawy. Ze względu na małą ilość czasu (doba nie jest z gumy ;)) prace idą dosyć ślamazarnie. Aktualnie pracuję nad dodaniem do ESP8266 ekstendera portów I/O, tak aby przerzucić na ten pod-sterownik ekran TFT, a główne porty zostawić dla sensorów i przekaźników. Niestety robię to pierwszy raz i musze się nauczyc jak przebiega ta komunikacja pomiędzy jednym, a drugim mikrokontrolerem. Mogę się pochwalić jedynie, że jak na pierwsze lutowanie SMD, wyszło mi całkiem schludnie. Korzystałem z gotowego zestawu DIO_Extender ze sklepu AVT. Polutowany Extender od góry Polutowany Extender od dołu

Stan na dzisiaj

Wszelkie płytki prototypowe zamontowałem do tektury, tak aby całość była względnie schludnie i mocno utwierdzona na jednolitym podłożu, widać także moduł ekstendera i przekaźników, osobno na płytkach są zamontowane termometry i wyświetlacz. Zdjęcie Terruino na 25.11.2023

Bonus - głupi projekt lampek

Kompletując rodzinie prezenty na Święta Bożego Narodzenia, wpadł mi w oko super głupi swetr z wizerunkiem Fiata 126p wiozącego na dachu choinkę, co więcej ten swetr w przypadku ruchu zaświecał małe diody LED, jakoby światła na choince. Po czasie niestety bateryjki padły a ich wymiana okazała się niemożliwa, by zrobić trochę radości rodzinie postanowiłem szybko, godzinę przed Wigilią napisać krótki program który jest w osobnym repozytorium.

Poniżej zdjęcie swetra, niestety efektu działania nie mogę znaleźć, może jak odnajdę w archiwach lub wrócę w strony rodzinne, to wstawię. Zdjęcie mnie w świątecznym swetrze