Stacja pogodowa


Stacja pogodowa zbudowana z kilka czujników podłączonych do mikrokontrolera ESP8266 NodeMCU v3. Dane wysyłane są co 5 minut do bazy danych, a następnie pobierane na stronie żeby pokazać je w formie wykresów. Obecnie wszystko jest razem połączone na płytce prototypowej. Szczegółowy opis działania poniżej.



Czujniki i moduły: Funkcje ESP8266: Opis działania:

Zacznę od zasilania. Mam dwa zasilacze HLK-PM01. Jeden jest do grzałki, która ciągnie prądu około 0.5A a drugi zasila całą reszte. Ważne było dla mnie, aby w zimie grzałka utrzymywała temperaturę w obudowię na plusie, żeby wydłużyć żywotność całej elektroniki, jedynie czujnik BME280 jest w radiacyjnej obudowie. Jak widać jest też bateria 18650, która zasila cały układ (opróćz grzałki) tylko wtedy jak padnie stałe zasilanie. Bateria potrafi zasilić układ na około 10 dni. Zasilacz ładuję również baterię poprzez moduł TP4056. Jeśli stałe zasilanie działa to Mosfet-P logic lvl odcina baterię od podawania zasilania po to, aby moduł TP4056 jednocześnie nie ładował baterii i nie podawał z niej prądu na całą resztę. Gdy padnie prąd to Mosfet odrazu przepuszcza zasilanie z baterii, dzięki czemu układ ma cały czas zasilanie. Prąd z baterii jest podwyższony dzięki przetwornicy step up.

ESP8266 budzi się co około 4 minut. Łączy się z siecią WiFi, dzięki czemu działa w trybie "online", jeśli nie uda mu się połączyć to przechodzi w tryb "offline" próbując co 4 sekundy połączyć się z siecią. Inicjalizuje wszystkie czujniki, jeśli wystąpi jakiś problem to mając połaczenie z siecią wysyła odpowiedni komunikat. Pobiera dane z czujników i w zależności od trybu zapisuję te dane na kartę sd lub wysyła je poprzez http POST na stronę php, gdzie skrypt zapisuję te dane do bazy MSQL. Czas jest cały czas sprawdzany poprzez moduł RTC, dzięki czemu każdy pomiar wysyła się dokładnie co 5 minut. Jeśli po wybudzeniu połączy się z WiFi to najpierw sprawdza czy jest plik z zapisanymi rekordami. Jeśli jest to wysyła wszystkie dane do bazy danych.

Tryb offline - Pobiera wszystkie dane z czujników i zapisuję je do pliku tekstowego na karcie sd. Często w nocy mam wyłączony router i cała noc zapisuję te dane do jednego pliku w formie 20|5.02|2...

Tryb online - Sprawdza i w razie potrzeby synchronizuje czas. Pobiera dane konfiguracyjne i ustawia grzałkę przy jakiej temperaturze ma grzać albo kiedy ma przestać grzać. SPS30 ma funkcję czyszczenia wentylatora, rozpędza wentylator na maksymalne obroty na 10s. Domyślnie czyści się raz w tygodniu, ale mogę zdalnie ustawić żeby to zrobił przy kolejnym wybudzeniu.

Dane Wyświetlane są za pomocą PHP oraz Javascript. Javascript głównie odpowiada za wykresy i automatyczne odświerzanie danych. Strona z wizualizacją danych nie jest jeszcze w pełni gotowa, planuje ulepszyć wygląd wykresów oraz dodać więcej danych. W ciągu paru miesięcy działania stacji zauważyłem kolejny problem. Esp potrafi się kompletnie zawiesić, zdarzyło się to z 3 razy. Raz zauważyłem dopiero po dwóch dniach. Żeby przywrócić działanie muszę całkowicie odciąć zasilanie. Nie wiem jeszcze czym jest to spowodowane, planuję wprowadzić logi i zapisywać je na karcie sd, żeby zobaczyć dokładnie w którym momencie się to dzieje. Możliwe jest też ze ESP jest w jakimś stopniu uszkodzony, zdarzyło mi się zrobić chwilowe zwarcie lub coś źle podłączyć.

Panel zarządzania


Po lewej widzimy panel zarządzania. Monitoruje temperaturę w obudowie. Grzałka radzi sobie z mrozami do około -5 stopni. Planuje wymienić zasilacz 5v na 12v żeby znacznie poprawić jej działanie. Istotną rolą tutaj jest również wartość time_sync, któa odpowiada za synchronizacje czasu. Miałem sporo problemów z czasem. Często po synchronizacji, moduł RTC miał błędną datę. Dzięki ustawieniu wartości 1 w tym polu. Zegar jeszcze raz się ustawi przy następnym wybudzeniu ESP. Obecnie Skrypt automatycznie ustawia tą wartość po wykryciu błędnej daty przesłanej z ESP. Mimo to miałem sporo błędnych synchronizacji. Po przyjrzeniu się bliżej okazało się, że kable połączeniowe były lekko luźne i do końca nie stykały.