Sercem dzisiejszego projektu jest płytka z Wi-Fi, której nie trzeba przedstawiać; oparta na ESP8266 płytka deweloperska NodeMCU. Jest to platforma open source do tworzenia systemów wbudowanych opartych na Wi-Fi i jest oparta na popularnym module Wi-Fi ESP8266, z firmware NodeMCU opartym na Lua. NodeMCU narodził się z chęci przezwyciężenia ograniczeń związanych z pierwszymi wersjami modułu ESP8266, który nie był kompatybilny z breadboardami, był trudny do zasilania i jeszcze trudniejszy do programowania. Płytka NodeMCU jest łatwa w użyciu, tania, co szybko przyciągnęło ją do serc konstruktorów i dziś jest jedną z najpopularniejszych płytek.
W tym projekcie dodamy 2-kanałowy moduł przekaźnika do płytki ESP8266. Istota projektu polega na sterowaniu GPIO NodeMCU z poziomu strony internetowej na dowolnym urządzeniu podłączonym do tej samej sieci co płytka. Stan GPIO steruje cewkami przekaźników, co powoduje, że przekaźnik przełącza się pomiędzy stanem normalnie otwartym (NO) i normalnie zamkniętym (NC) w zależności od stanu GPIO, tym samym efektywnie włączając lub wyłączając podłączone urządzenie.
Jeśli nie masz dostępu do modułu przekaźnikowego, możesz użyć 2× jednokanałowych modułów przekaźnikowych lub pojedynczych przekaźników z obsługującymi je układami tranzystorowymi.
Schemat
Schemat dla tego projektu jest dość prosty. Podłącz elementy tak jak pokazano na poniższym schemacie.
Aby ułatwić śledzenie połączeń, poniżej znajduje się mapa pinów połączeń pomiędzy NodeMCU a modułem przekaźnika.
Jeśli używasz zwykłych przekaźników bez układu podtrzymującego moduł, podłącz przekaźniki do NodeMCU jak pokazano poniżej. Upewnij się, że cewki przekaźnika mają napięcie znamionowe 5 V lub zmień zasilanie 5 V, aby dopasować je do znamionowego napięcia cewki Twojego przekaźnika.
Mając gotowy schemat, możemy przejść do pisania kodu dla projektu.
Kod
Jednym z najłatwiejszych sposobów programowania NodeMCU jest użycie Arduino IDE. Wymaga to jednak skonfigurowania Arduino IDE poprzez zainstalowanie pliku obsługi płytki dla NodeMCU. Jeśli używasz Arduino IDE do zaprogramowania NodeMCU po raz pierwszy, musisz to zrobić zanim przejdziesz do tego projektu. Postępuj zgodnie ze szczegółowym przewodnikiem "Getting Started with the NodeMCU", aby dowiedzieć się, jak skonfigurować Arduino IDE do programowania płytek opartych na ESP8266.
Kod dla tego projektu jest zmodyfikowaną wersją kodu z artykułu "NodeMCU ESP8266 WebServer". Kod bazuje na bibliotece ESP8266Wi-Fi.h, która pozwala na łatwe wykorzystanie funkcjonalności Wi-Fi płytki. Zawiera ona wszystko co jest nam potrzebne do stworzenia lub dołączenia do punktu dostępowego Wi-Fi, a także stworzenia serwera i klienta, które są istotne dla tego projektu. Biblioteka jest dołączona do plików płytki NodeMCU dla Arduino, więc nie ma potrzeby instalowania jej po zainstalowaniu plików płytki.
Kod do tego projektu pozwoli nam na zdalne sterowanie urządzeniami podłączonymi do GPIO (poprzez przekaźniki) płytki NodeMCU.
Na początek dołączamy bibliotekę, którą wykorzystamy w projekcie, czyli w tym przypadku jest to biblioteka ESP8266Wi-Fi.h.
Następnie dodajemy dane uwierzytelniające punktu dostępowego Wi-Fi, do którego będzie podłączone NodeMCU. Upewnij się, że nazwa użytkownika i hasło znajdują się pomiędzy cudzysłowami. Określamy również port, przez który system będzie się komunikował i tworzymy zmienną do przechowywania żądań.
Następnie deklarujemy piny Nodemcu, do których podłączone są piny przekaźników i tworzymy zmienne przechowujące stan każdego przekaźnika.
Następna jest funkcja void setup(). Zaczynamy od zainicjalizowania monitora szeregowego (ponieważ będzie on później używany do debugowania) i ustawienia pinModes pinów, do których podłączone są przekaźniki jako wyjściowe. Następnie ustawiamy piny "LOW", aby zapewnić, że system startuje w stanie OFF.
Następnie łączymy się z punktem dostępowym używając poświadczeń podanych jako argumenty do funkcji Wi-Fi.begin() i używamy funkcji Wi-Fi.status() do sprawdzenia czy połączenie się powiodło. System będzie próbował tak długo, aż połączenie się powiedzie.
Jeżeli połączenie jest udane, na monitorze szeregowym jest drukowany tekst, aby to wskazać, wraz z adresem IP NodeMCU. Ten adres IP staje się adresem internetowym serwera i powinien być wpisany w dowolnej przeglądarce internetowej w tej samej sieci co serwer, abyśmy mogli uzyskać do niego dostęp.
Następnie uruchamiamy serwer za pomocą funkcji server.begin().
Następnie piszemy funkcję void loop(). To właśnie tutaj wykonywana jest większość pracy. Zaczynamy od użycia funkcji server.available() do nasłuchiwania połączeń przychodzących od klientów (przeglądarek internetowych). Gdy klient jest dostępny i połączony, odczytujemy jego żądanie i wysyłamy nagłówek jako odpowiedź.
Następnie żądanie klienta jest sprawdzane, czy wskazuje ono na naciśnięcie przycisku na stronie internetowej. Jeżeli tak, to stan GPIO jest zmieniany odpowiednio do żądania. Jeśli żądanie wskazuje na "ON", pin jest ustawiany na HIGH, a zmienna stanu jest odpowiednio aktualizowana.
Następnie tworzymy stronę internetową, która będzie wyświetlana i aktualizowana przez NodeMCU w miarę interakcji z użytkownikiem. Kluczową funkcją do tego jest funkcja Client.println(), która służy do wysyłania skryptów HTML linia po linii do klienta.
Zaczynamy od wskazania, że kilka następnych tekstów, które mają zostać wydrukowane, to linie HTML, zgodnie z deklaracją doctype.
Następnie dodajemy poniższe linie, aby strona była responsywna niezależnie od używanej przeglądarki.
Następnie, niektóre kawałki CSS są wysyłane do klienta, aby nadać stronie internetowej przyjazny wygląd. Możesz to edytować, aby dodać swój własny kolor, styl czcionki itp.
Następnie wysyłany jest nagłówek strony, po którym następują przyciski, a przyciski są ustawione tak, aby wyświetlały aktualny stan urządzeń. Będą one pokazywały OFF, jeśli aktualny stan to ON i odwrotnie.
Następnie zamykamy połączenie i przepływ wraca na górę.
Kompletny kod projektu dostępny jest poniżej, a także załączony w dziale download.
Demo
Wgraj kod do NodeMCU. Upewnij się, że wszystko jest podłączone zgodnie z opisem w sekcji schematy. Po załadowaniu kodu powinieneś zobaczyć adres IP swojego serwera WWW wyświetlony na monitorze szeregowym, jak pokazano poniżej.
Skopiuj adres IP i wklej go w przeglądarce internetowej na dowolnym urządzeniu (Mobile lub PC) podłączonym do tej samej sieci co NodeMCU. Powinieneś zobaczyć stronę internetową i mieć możliwość przełączania podłączonych urządzeń poprzez klikanie przycisków.
Jak wspomniano powyżej, ten pr4ojekt może posłużyć jako budulec dla bardziej złożonych serwerów WWW i rozwiązań IoT. Co zbudujesz?