Domowa stacja pogodowa ESP-Now: 9 kroków (ze zdjęciami)
Domowa stacja pogodowa ESP-Now: 9 kroków (ze zdjęciami)
Anonim
Domowa stacja pogodowa ESP-Teraz
Domowa stacja pogodowa ESP-Teraz

Od dłuższego czasu chciałem mieć domową stację pogodową i taką, którą wszyscy członkowie rodziny mogliby łatwo sprawdzić pod kątem temperatury i wilgotności. Oprócz monitorowania warunków zewnętrznych chciałem również monitorować poszczególne pomieszczenia w domu oraz mój warsztat garażowy. To dałoby nam znać, kiedy jest dobry czas na przewietrzenie domu lub uruchomienie osuszacza (zimą tutaj dużo pada). To, co stworzyłem, to system czujników oparty na ESP-Now, który raportuje do lokalnego serwera internetowego, który każdy może sprawdzić na swoim komputerze lub telefonie. Na telefon napisałem jako prostą aplikację na Androida, aby było to jeszcze łatwiejsze.

Krok 1: Szczegóły projektu

Szczegóły projektu
Szczegóły projektu

Chciałem mieć różne stacje czujników, które mógłbym umieścić w różnych lokalizacjach i przekazać je do jednej głównej stacji (lub węzła), który zapisałby informacje. Po wypróbowaniu różnych pomysłów zdecydowałem się skorzystać z protokołu ESP-Now firmy Espressif, ponieważ pozwalał on na szybką komunikację bezpośrednio między urządzeniami. Możesz przeczytać trochę o ESP-Now tutaj, a to repozytorium GitHub było wielką częścią mojej inspiracji.

Pierwsze zdjęcie przedstawia układ systemu. Każdy czujnik raportuje swoje pomiary do urządzenia bramki, które przekazuje dane do głównego serwera za pomocą przewodowego połączenia szeregowego. Powodem tego jest to, że protokół ESP-Now nie może być aktywny w tym samym czasie co połączenie WIFI. Aby użytkownik mógł uzyskać dostęp do strony internetowej, sieć WIFI musiałaby być włączona przez cały czas, co uniemożliwia korzystanie z komunikacji ESP-Now na tym samym urządzeniu. Chociaż urządzenie bramy musi być urządzeniem opartym na Espressif (zdolnym do ESP-Now), głównym serwerem może być dowolne urządzenie zdolne do uruchamiania strony internetowej.

Niektóre stacje z czujnikami byłyby zasilane bateriami (lub bateriami naładowanymi energią słoneczną), a inne po prostu byłyby zasilane z sieci. Chciałem jednak, aby wszyscy używali jak najmniej energii i właśnie tutaj niezwykle pomocna jest funkcja „głębokiego uśpienia” dostępna dla urządzeń ESP8266 i ESP32. Stacje czujników okresowo się budziły, wykonywały pomiary i wysyłały je do urządzenia bramki, a następnie wracały do snu na pewien zaprogramowany okres czasu. Ich okres budzenia wynoszący tylko około 300 ms co 5 minut (w moim przypadku) znacznie zmniejsza ich zużycie energii.

Krok 2: Czujniki

Czujniki
Czujniki
Czujniki
Czujniki

Do pomiaru parametrów środowiskowych można wybrać różne czujniki. Zdecydowałem się pozostać tylko przy czujnikach obsługujących komunikację I2C, ponieważ umożliwiały one szybkie pomiary i działały na każdym z posiadanych przeze mnie urządzeń. Zamiast pracować bezpośrednio z układami scalonymi, szukałem gotowych do użycia modułów, które miały takie same wyprowadzenia, aby uprościć moje projekty. Zacząłem od chęci pomiaru temperatury i wilgotności, dlatego wybrałem moduł oparty na SI7021. Później chciałem czujnik, który mógłby mierzyć również ciśnienie i postanowiłem wypróbować moduły czujników oparte na BME280. W niektórych lokalizacjach chciałem nawet monitorować poziom światła, a moduł BH1750 był do tego idealny jako osobny moduł czujnika. Kupiłem moduły czujników w serwisie eBay i oto moduły, które otrzymałem:

  • BME280 (GY-BMP/E280), mierzy temperaturę, wilgotność i ciśnienie
  • SI7021 (GY-21), mierzy temperaturę i wilgotność
  • BH1750 (GY-302), mierzy światło

Dostępne są dwa style modułów PCB GY-BMP/E280. Oba mają ten sam pin dla pinów 1 do 4. Jeden moduł ma dwa dodatkowe piny, CSB i SDO. Te dwa piny są wstępnie połączone w 4-pinowej wersji modułu. Poziom pinu SDO określa adres I2C (Ground = domyślnie 0x76, VCC = 0x77). Pin CSB musi być podłączony do VCC, aby wybrać interfejs I2C. Wolę moduł 4-pinowy, ponieważ jest gotowy do użycia zgodnie z moim przeznaczeniem.

Ogólnie rzecz biorąc, moduły te są bardzo wygodne w użyciu, ponieważ mają już zainstalowane rezystory podciągające dla linii komunikacyjnych i wszystkie są zasilane napięciem 3,3 V, dzięki czemu są kompatybilne z płytami opartymi na ESP8266. Zwróć uwagę, że styki tych układów scalonych czujników generalnie nie tolerują napięcia 5 V, więc bezpośrednie połączenie ich z czymś takim jak Arduino Uno może je trwale uszkodzić.

Krok 3: Stacje czujników

Stacje czujników
Stacje czujników

Jak wspomniano, wszystkie stacje czujników byłyby urządzeniami Espressif wykorzystującymi protokół komunikacyjny ESP-Now. Z poprzednich projektów i eksperymentów miałem do dyspozycji kilka różnych urządzeń do przeprowadzenia wstępnych testów i włączenia ich do ostatecznego projektu. Miałem pod ręką następujące urządzenia:

  • dwa moduły ESP-01
  • dwie płytki rozwojowe Wemos D1 mini
  • jedna płytka rozwojowa Lolin ESP8266
  • Jedna płyta zestawu WIFI szeregowego ESP12E;
  • jedna płytka GOOUUU ESP32 (38-pinowa płytka rozwojowa)

Miałem również płytkę rozwojową Wemos D1 R2, ale były z nią problemy, które nie pozwalały jej wybudzić się z głębokiego uśpienia i jako urządzenie typu bramka zawieszały się i nie uruchamiały poprawnie. Naprawiłem go później i stał się częścią projektu otwierania drzwi garażowych. Aby "deepsleep" działał, pin RST ESP8266 musi być połączony z pinem GPIO16, aby wyłącznik czasowy mógł wybudzić urządzenie. Idealnie to połączenie powinno być wykonane za pomocą diody Schottky'ego (katoda do GPIO16), aby ręczny reset przez połączenie USB-TLL podczas programowania nadal działał. Jednak rezystor o niskiej wartości (300 Ω) lub nawet bezpośrednie połączenie przewodowe może nadal być skuteczne.

Moduły ESP-01 nie pozwalają na łatwy dostęp do pinu GPIO16 i należy je przylutować bezpośrednio do układu scalonego. Nie jest to proste zadanie i nie polecam tego każdemu. Płyta zestawu szeregowego WIFI ESP12E była trochę nowością i wymagała kilku zmian, aby była przydatna do moich celów. Najłatwiejsze w użyciu deski to deski typu Wemos D1 mini i deska Lolin. Urządzenia ESP32 nie wymagają żadnych modyfikacji, aby deepsleep działały. Andreas Spiess ma na ten temat niezłą instrukcję.

Krok 4: Stacja czujnika ESP-01

Stacja czujników ESP-01
Stacja czujników ESP-01
Stacja czujników ESP-01
Stacja czujników ESP-01
Stacja czujników ESP-01
Stacja czujników ESP-01

We wszystkich stacjach czujników moduły czujników są montowane pionowo, aby zmniejszyć ilość kurzu, który może się na nich zbierać. Nie wszystkie są w obudowach i nie mogę ich montować w obudowach. Powodem tego jest to, że urządzenia mogą się nagrzewać i wpływać na odczyty temperatury i wilgotności przy niedostatecznej wentylacji.

Płyty ESP-01 są bardzo kompaktowe i mają niewiele cyfrowych pinów IO do współpracy, ale wystarczy interfejs I2C. Płyty wymagają jednak skomplikowanej modyfikacji, aby umożliwić działanie „głębokiego snu”. Na pokazanym zdjęciu drut został przylutowany od pinu narożnego (GPIO16) do pinu RST na główce. Drut, którego użyłem, to izolowany drut „naprawczy” o średnicy 0,1 mm. Powłoka izolacyjna topi się po podgrzaniu, więc można ją lutować, aby naprawić ślady itp. w płytkach drukowanych i nadal nie martwić się tworzeniem zwarć w miejscach, w których przewód styka się z innymi komponentami. Jego rozmiar utrudnia pracę i wlutowałem ten przewód na miejscu pod mikroskopem (hobbysta/kolekcjoner pieczątek). Należy pamiętać, że nagłówek po prawej stronie ma rozstaw pinów 0,1 (2,54 mm). Zainstalowanie tutaj diody Schottky'ego wcale nie byłoby łatwe, więc zdecydowałem się po prostu wypróbować sam przewód i obie jednostki działają przez ponad miesiąc bez żadnych problemów.

Moduły zostały zainstalowane na dwóch prototypowych płytkach, które stworzyłem. Jedna (nr 1) to płytka programatora, która umożliwia również instalowanie i testowanie modułów I2C, podczas gdy druga (nr 2) to płytka rozwojowa/testowa dla urządzeń I2C. Do pierwszej płytki przylutowałem stare złącze męskie USB i małą płytkę PCB, aby zasilać urządzenie bezpośrednio z adaptera ściennego USB. Drugie urządzenie ma zwykłe gniazdo DC zmodyfikowane tak, aby pasowało do listwy zacisków śrubowych i jest również zasilane przez adapter ścienny.

Schemat pokazuje, jak są połączone i jak działa programator. Nie posiadam żadnych innych modułów ESP-01, więc nie potrzebowałem od razu programatora. W przyszłości prawdopodobnie zrobię dla nich płytkę PCB. Obie te płyty mają zainstalowany moduł czujnika SI7021, ponieważ nie byłem tak zainteresowany pomiarami ciśnienia w tych lokalizacjach.

Krok 5: Stacja czujnika ESP 12E Serial WIFI Kit

Stacja czujnikowa zestawu ESP 12E szeregowego WIFI
Stacja czujnikowa zestawu ESP 12E szeregowego WIFI
Stacja czujnikowa zestawu ESP 12E szeregowego WIFI
Stacja czujnikowa zestawu ESP 12E szeregowego WIFI

Płytka ESP12E Serial WIFI Kit nie była przeznaczona do rozwoju tak bardzo, jak do pokazania, co można zrobić z tym urządzeniem. Kupiłem go dawno temu, aby dowiedzieć się trochę o programowaniu ESP8266 i w końcu postanowiłem nadać mu nowe zastosowanie. Usunąłem wszystkie diody LED, które zostały zainstalowane na potrzeby demonstracji i dodałem nagłówek programujący USB, a także nagłówek I2C odpowiedni dla używanych modułów. Do analogowego pinu wejściowego był podłączony fotorezystor CdS i postanowiłem go tam zostawić. Ta konkretna jednostka miała monitorować mój warsztat, a fotosensor, który miał, wystarczył, aby dać mi znać, czy przypadkowo pozostawiono włączone światła. W przypadku pomiaru światła znormalizowałem odczyty, aby dać mi procentową moc wyjściową, a wszystko powyżej „5” w nocy oznaczało, że światła były włączone lub drzwi do domu nie były prawidłowo zamknięte. Piny RST i GPIO16 są wyraźnie oznaczone na płytce drukowanej, a łącząca je dioda Schottky'ego została zamontowana na spodzie płytki. Jest zasilany przez płytkę szeregową USB, która jest bezpośrednio podłączona do ładowarki ściennej USB. Mam dodatki do tych płyt szeregowych USB i nie potrzebuję tego teraz.

Nie robiłem schematu do tej płyty i generalnie nie polecam kupowania takiego do tego celu. Płyty Wemos D1 Mini są znacznie bardziej odpowiednie i zostaną omówione dalej. Chociaż, jeśli masz jeden z nich i potrzebujesz porady, chętnie Ci pomogę.

Krok 6: Stacje czujników D1 Mini

Stacje czujników D1 Mini
Stacje czujników D1 Mini
Stacje czujników D1 Mini
Stacje czujników D1 Mini
Stacje czujników D1 Mini
Stacje czujników D1 Mini

Płyty rozwojowe typu Wemos D1 Mini ESP8266 są moimi ulubionymi i gdybym miał to zrobić, po prostu bym ich używał. Mają dużą liczbę dostępnych pinów IO, mogą być programowane bezpośrednio przez Arduino IDE i nadal są dość kompaktowe. Pin D0 to GPIO16 na tych płytach, a podłączenie diody Schottky'ego jest dość łatwe. Schemat pokazuje jak mam te płytki podłączone i obie używają modułu czujnika BME2808.

Jedna z dwóch tablic służy do monitorowania pogody na zewnątrz i jest zasilana z baterii słonecznej. Panel słoneczny o wymiarach 165 mm x 135 mm (6 V, 3,5 W) jest podłączony do modułu ładowania akumulatora litowo-jonowego TP4056 (patrz schemat konfiguracji stacji czujnika akumulatora zasilanego energią słoneczną). Ten konkretny moduł ładowania (03962A) posiada obwód zabezpieczający akumulator, który jest niezbędny, jeśli akumulator (zestaw) go nie zawiera. Bateria litowo-jonowa została poddana recyklingowi ze starego akumulatora do laptopa i nadal może pomieścić wystarczającą ilość energii, aby uruchomić płytę D1 Mini, szczególnie przy włączonym głębokim śnie. Płytka została umieszczona w plastikowej obudowie, aby była nieco bezpieczna przed żywiołami. Aby jednak wnętrze było wystawione na działanie temperatury i wilgoci na zewnątrz, po przeciwnych stronach wywiercono dwa otwory o średnicy 25mm i przykryto (od wewnątrz) czarną tkaniną krajobrazową. Tkanina została zaprojektowana tak, aby umożliwić wnikanie wilgoci i dzięki temu można ją zmierzyć. Na jednym końcu obudowy wywiercono mały otwór i zainstalowano przezroczyste plastikowe okienko. To tutaj został umieszczony moduł czujnika światła BH1750. Całe urządzenie jest umieszczone na zewnątrz w cieniu (nie bezpośrednio na słońcu) z czujnikiem światła skierowanym na zewnątrz. W naszej deszczowej/pochmurnej zimowej pogodzie od prawie 4 tygodni jest zasilany energią słoneczną.

Krok 7: Brama i serwer WWW

Brama i serwer WWW
Brama i serwer WWW
Brama i serwer WWW
Brama i serwer WWW
Brama i serwer WWW
Brama i serwer WWW

Płyta Lolin NodeMCU V3 (ESP8266) została użyta dla urządzenia ESP-Now Gateway, a ESP32 (płyta GOOUUU) została użyta dla serwera WWW. Prawie każda płyta ESP8266 lub nawet ESP32 mogła służyć jako urządzenie bramy, była to po prostu płyta, którą „pozostawiłem” po użyciu wszystkich innych płyt, które miałem.

Użyłem płyty ESP32, ponieważ potrzebuję płyty o nieco większej mocy obliczeniowej do zbierania danych, sortowania ich, zapisywania w pamięci i uruchamiania serwera WWW. W przyszłości może mieć również własny czujnik i lokalny wyświetlacz (OLED). Do przechowywania użyto karty SD z dostosowanym adapterem. Użyłem zwykłego adaptera microSD na kartę SD i przylutowałem 7-pinową męską (raster 0,1 ) do platerowanych styków. Postąpiłem zgodnie z radą tego GitHuba, aby wykonać połączenia.

Konfiguracja prototypowa (z przewodami Dupont) nie obejmuje modułu czujnika, ale sfinalizowana płytka PCB, którą zaprojektowałem, pozwala na jeden, a także mały wyświetlacz OLED. Szczegóły dotyczące sposobu, w jaki zaprojektowałem tę płytkę drukowaną, są częścią innej instrukcji Instructable.

Krok 8: Oprogramowanie

Oprogramowanie
Oprogramowanie

Urządzenia ESP8266 (ESP-TERAZ)

Oprogramowanie dla wszystkich urządzeń zostało napisane w środowisku Arduino IDE (v1.87). Każda stacja czujników uruchamia zasadniczo ten sam kod. Różnią się tylko tym, które piny są używane do komunikacji I2C i do którego modułu czujnika są podłączone. Co najważniejsze wysyłają identyczny pakiet danych pomiarowych do stacji ESP-Now Gateway, niezależnie od tego, czy mają ten sam czujnik. Oznacza to, że niektóre stacje czujników podadzą wartości pozorne dla pomiarów ciśnienia i poziomu światła, jeśli nie mają czujników, które podadzą rzeczywiste wartości. Kod dla każdej stacji i bramy został zaadaptowany z przykładów Anthony'ego Eldera na tym serwisie GitHub.

Kod urządzenia bramy wykorzystywał SoftwareSerial do komunikacji z serwerem WWW, ponieważ ESP8266 ma tylko jeden w pełni działający sprzętowy UART. Działa z maksymalną prędkością 9600 bodów, wydaje się dość niezawodny i jest więcej niż wystarczający do wysyłania tych stosunkowo małych pakietów danych. Urządzenie bramy jest również zaprogramowane na prywatny adres MAC. Powodem tego jest to, że jeśli wymaga wymiany, nie wszystkie stacje czujników muszą być ponownie programowane z nowym adresem MAC odbiorcy.

ESP32 (serwer sieciowy)

Każda stacja czujnika wysyła swój pakiet danych do urządzenia bramy, które przekazuje go do serwera WWW. Wraz z pakietem danych wysyłany jest również adres MAC stacji czujnikowej w celu identyfikacji każdej stacji. Serwer sieciowy posiada tabelę „przeszukiwań”, aby określić lokalizację każdego czujnika i odpowiednio sortować dane. Odstęp czasowy między pomiarami został ustawiony na 5 min plus czynnik losowy, aby uniknąć „zderzania się” czujników ze sobą podczas wysyłania do urządzenia bramki.

Domowy router WIFI został ustawiony tak, aby przydzielał stały adres IP serwerowi WWW, gdy łączy się z siecią WIFI. Dla mnie był to 192.168.1.111. Wpisanie tego adresu w dowolnej przeglądarce spowoduje połączenie z serwerem WWW stacji pogodowej, o ile użytkownik znajduje się w zasięgu WIFI (i łączy się) z siecią domową. Gdy użytkownik łączy się ze stroną internetową, serwer WWW odpowiada tabelą pomiarów i zawiera czas ostatniego pomiaru każdego czujnika. W ten sposób, jeśli stacja czujnika przestaje odpowiadać, widać to z tabeli, jeśli odczyt jest starszy niż 5-6 minut.

Dane zapisywane są w pojedynczych plikach tekstowych na karcie SD i można je również pobrać ze strony internetowej. Można go zaimportować do programu Excel lub dowolnej innej aplikacji do kreślenia danych

Aplikacja na Androida

Aby ułatwić przeglądanie lokalnych informacji o pogodzie na smartfonie, stworzyłem aplikację na Androida przy użyciu Android Studio. Jest dostępny na mojej stronie GitHub tutaj. Wykorzystuje klasę webview do załadowania strony internetowej z serwera i jako takie o ograniczonej funkcjonalności. Nie jest w stanie pobrać plików danych, a i tak nie potrzebowałem ich na moim telefonie.

Krok 9: Wyniki

Wyniki
Wyniki

Na koniec kilka wyników z mojej domowej stacji pogodowej. Dane zostały pobrane na laptopa i wykreślone w Matlab. Załączyłem moje skrypty Matlaba i możesz je również uruchamiać w GNU Octave. Czujnik zewnętrzny działa na baterii naładowanej energią słoneczną od prawie 4 tygodni i o tej porze roku rzadko kiedy mamy do czynienia ze słońcem. Jak dotąd wszystko działa dobrze i wszyscy członkowie rodziny mogą sami sprawdzić pogodę, zamiast pytać mnie teraz!