Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Projekt otwierania drzwi garażowych DIY WiFi
Świat IoT dopiero zaczyna eksplodować – każda firma technologiczna na całym świecie próbuje dowiedzieć się, jak wpasuje się w ten nowy świat. To po prostu wielka szansa! Więc w tym instruktażowym, zgodnie z tym tematem IoT, omówimy, jak możesz stworzyć własny demonstrator IoT, który jest rzeczywiście przydatny;)
TL;DR podsumowanie
- skonfigurować niezawodny przepływ pracy do kodowania modułu WiFi ESP32
- flashuj to
- zmontuj go na swojej płytce prototypowej
- pobierz nasz kod aplikacji i rozpakuj go
- dodaj swoje dane uwierzytelniające Wi-Fi i statyczny adres IP
- podłącz go do swojej sieci Wi-Fi
- edytuj progi i zamontuj go w swoim garażu
- podłącz go do styków otwierania drzwi garażowych
- i kliknij!
- NIE WYMAGA LUTOWANIA (z wyjątkiem szpilek do tablic zaciskowych, jeśli jest to wymagane)
Wymagane części
- Moduł czujnika czasu lotu tinyLiDAR
- Wipy3.0 lub podobna karta WiFi oparta na ESP32
- Optycznie izolowany przekaźnik półprzewodnikowy (Omron G3VM-201AY1) do sterowania mechanizmem otwierania drzwi garażowych
- Rezystor 470 omów (5% 1/8 wata lub większy jest w porządku)
- Chwilowy przełącznik przyciskowy dla pinu BOOT (GPIO0) do aktualizacji oprogramowania układowego na płycie ESP32;
- Klucz USB do portu szeregowego do przesyłania kodu i interakcji z REPL na ESP32 (użyj wersji 3.3v I/O)
- Płytka do krojenia chleba + przewody
- Zasilanie: 3,3 V do 5 V przy 500 mA lub większym. Możesz użyć ładowarki do telefonu komórkowego microUSB do zasilania i płytki zaciskowej microUSB, aby podłączyć ją do płytki stykowej.
Krok 1: IoT Co?
Niewątpliwie słyszałeś już o terminie IoT we wszystkich mediach, ale co to znaczy?
W dużym uproszczeniu oznacza to podłączenie do Internetu wszelkiego rodzaju czujników i rzeczy, którymi można sterować. W dzisiejszych czasach Internet jest synonimem łączności bezprzewodowej i dlatego wszystko, co elektroniczne, nagle staje się bezprzewodowo połączone za pośrednictwem pewnego rodzaju łącza bezprzewodowego, takiego jak WiFi / BT / LoRa / SigFox itp. Po połączeniu z Internetem możemy wykrywać i / lub kontrolować te rzeczy z naszego ulubionego kontrolera mobilnego, takiego jak nasz telefon komórkowy, lub zautomatyzuj je za pomocą aplikacji działającej gdzieś na serwerze (np. w chmurze).
Chociaż większe firmy sprzedają ostatnio większą kontrolę głosu, sztuczną inteligencję i łączność z chmurą; podstawy, aby to wszystko się stało, są nadal takie same. Musisz podłączyć swoją "rzecz" do łącza bezprzewodowego, zanim którakolwiek z tych koncepcji będzie możliwa. Zacznijmy więc od podstaw i dowiedzmy się, jak podłączyć czujnik czasu lotu tinyLiDAR do taniego modułu WiFi, a następnie pokażmy, jak przesyłać dane tam iz powrotem przez sieć. Pod koniec tej instrukcji będziesz mieć własnego działającego pilota do bramy garażowej z obsługą Wi-Fi z monitorem w czasie rzeczywistym, aby sprawdzić, czy drzwi są otwarte, czy zamknięte.
Z technicznego punktu widzenia, jak pokazano na powyższym schemacie blokowym, projekt ten implementuje serwer WWW micropython działający na module Wi-Fi ESP32 przy użyciu protokołu komunikacyjnego „websockets” do przesyłania danych tam iz powrotem z dowolnej mobilnej przeglądarki internetowej. Do tego mamy czujnik czasu lotu tinyLiDAR wykonujący pomiary na żądanie, dzięki czemu można sprawdzić, czy drzwi garażu pozostały otwarte.
Krok 2: Wypróbuj - nie, naprawdę, wypróbuj teraz
To wszystko jest stosunkowo nową dziedziną w elektronice, więc będzie wymagane wiele eksperymentów, aby wszystko działało dobrze. Mamy nadzieję, że będziesz mógł budować na tej bazie kodu i tworzyć własne, ciekawsze projekty IoT.
Cały kod użyty w tym artykule działał dobrze w momencie pisania tego tekstu. Jednak wraz ze wzrostem tempa innowacji w przestrzeni IoT rzeczy mogły się zmienić do czasu, gdy to przeczytasz. W każdym razie rozwiązywanie problemów i dostosowywanie ich do własnego użytku przynajmniej wprowadzi cię w tę ekscytującą nową przestrzeń i zaczniesz myśleć jak inżynier IoT!
Gotowy? Zacznijmy od pierwszego kroku tworzenia własnego stabilnego środowiska programistycznego.
Krok 3: Micropython i ESP32
Moduły WiFi ESP32 zostały stworzone przez Espressif i znacznie się poprawiły od czasu ich pierwszej generacji modułów ESP8266 sprzed zaledwie kilku lat. Te nowe wersje mają znacznie więcej pamięci, mocniejszy procesor i więcej funkcji niż oryginalne moduły i nadal są tanie. Powyższy diagram pokazuje, ile udało im się zmieścić w tym małym chipie ESP32. Sam układ scalony ESP32 jest dwurdzeniowym mikrokontrolerem z radiem Wi-Fi 802.11b/g/n, a także zintegrowanym radiem Bluetooth 4.2. Moduły oparte na ESP32 zazwyczaj dodają antenę, dodatkową pamięć FLASH i regulatory mocy.
Zauważ, że kiedy mówimy o module ESP32 w tej instrukcji, mamy na myśli płyty Pycom Wipy3.0, które są oparte na chipie/module ESP32. Z naszego doświadczenia wynika, że płyty Pycom wydają się mieć wyższą jakość wykonania niż dostępne typowe tanie moduły ESP32. Podczas opracowywania zawsze pomocne jest zredukowanie jak największej liczby zmiennych, dlatego zdecydowaliśmy się na płyty Pycom zamiast tanich generyków.
W przypadku aplikacji OEM kodowanie ESP32 jest zwykle wykonywane w języku C, ale na szczęście istnieje również wiele opcji do wyboru, więc nie będziesz musiał schodzić do tego niskiego poziomu, jeśli nie chcesz. Zdecydowaliśmy się użyć micropythona do całego naszego kodowania w tej instrukcji.
Micropython, jak mogłeś przypuszczać, jest podzbiorem pełnego języka programowania Python, który obsługuje niektóre mniej znane wyszukiwarki i strony internetowe, takie jak Google, YouTube i Instagram;)
Micropython rozpoczął się jako projekt kickstarter pierwotnie dla procesora STM32, ale stał się teraz bardzo popularny dla wielu różnych mikrokontrolerów. Używamy tutaj najnowszego oficjalnego portu micropythona Pycom ESP32.
Krok 4: Szybszy sposób
Kod micropythona ma prosty interfejs GUI, który nazywa się REPL, co oznacza "Read-Eval-Print Loop". REPL ESP32 normalnie działa z prędkością 115,2 Kbaud, ponieważ jest dostępny przez port szeregowy. Powyższy obrazek pokazuje ten monit REPL oznaczony trzema strzałkami czekającymi na bezpośrednie polecenia. Jest to łatwy sposób na wypróbowanie naszych prostych poleceń i większość programistów używa ich do tworzenia oprogramowania, ale okazało się, że jest to boleśnie powolna droga. Dlatego postanowiliśmy zrobić to w inny sposób dla tego pouczającego…
Ponieważ moduły ESP32 mają szybką łączność Wi-Fi, wystarczy uzyskać dostęp do modułu przez Wi-Fi za pośrednictwem serwera FTP, który jest już osadzony w standardowym kodzie micropythona. Umożliwi nam to korzystanie z klientów FTP, takich jak FileZilla, aby po prostu przeciągnąć i upuścić nasz kod na ESP32.
Aby to zrobić, musimy najpierw podłączyć moduł ESP32 do sieci Wi-Fi. Moduły Wipy3.0 uruchamiają domyślnie mały punkt dostępowy po włączeniu, dzięki czemu można połączyć się z nimi bezpośrednio z laptopa pod adresem 192.168.4.1. Sprawdź więcej szczegółów tutaj, jeśli podoba Ci się ta metoda.
Pracujemy na komputerach stacjonarnych w naszym laboratorium, więc chcieliśmy, aby moduły ESP32 zamiast tego łączyły się z naszą siecią. Aby to zrobić, wystarczy nadać modułowi statyczny adres IP i informacje o naszym haśle, aby zalogować się do naszej sieci WiFi.
Krok 5: Pobierz teraz
Pobierz teraz kod aplikacji i rozpakuj pliki do tymczasowego folderu na swoim komputerze. Następnie rozpocznij edycję plików skryptów mywifi.txt i boot.py przy użyciu własnych danych logowania do sieci Wi-Fi.
Btw - naszym ulubionym edytorem tekstu jest nadal SublimeText. Można go pobrać tutaj.
Powinieneś również pobrać teraz oprogramowanie terminala TeraTerm i oprogramowanie FTP FileZilla, jeśli nie masz ich jeszcze na swoim komputerze.
Będziesz musiał skonfigurować FileZillę, jak pokazano na powyższych obrazkach. Również w menedżerze witryn musisz "dodać nową witrynę" dla logowania ESP32 przy użyciu statycznego adresu IP, który wybrałeś, jak pokazano powyżej. Użytkownik to „mikro”, a hasło to „python”. Ważne jest, aby używać pasywnego FTP i ograniczyć go tylko do pojedynczych połączeń. Odkryliśmy, że ograniczenie prędkości przesyłania pomogło również zapobiec zawieszaniu się przesyłania. Chociaż nie pokazano tego na zdjęciach, pomocne byłoby powiązanie programu SublimeText z typami plików, aby można było edytować kod, klikając dwukrotnie po lewej stronie ekranu FTP. Aby to zrobić, po prostu przejdź do menu Ustawienia i w Edycja plików/Powiązania typu pliku wprowadź lokalizację pliku exe SublimeText dla każdego powiązania. Na przykład nasz był:
js "C:\Sublime Text Build 3065 x64\sublime_text.exe"
. "C:\Sublime Text Build 3065 x64\sublime_text.exe" htm "C:\Sublime Text Build 3065 x64\sublime_text.exe" html "C:\Sublime Text Build 3065 x64\sublime_text.exe" py "C:\Sublime Text Build 3065 x64\sublime_text.exe" css "C:\Sublime Text Build 3065 x64\sublime_text.exe"
Skopiuj wyodrębnione pliki aplikacji dla tej instrukcji do nowego folderu o nazwie „FTP” na swoim komputerze, tak jak my. Łatwiej będzie później przeciągnąć stąd do FileZilla.
Zwykle dobrym pomysłem jest posiadanie najnowszego oprogramowania wbudowanego na ESP32. Aktualizacja modułów Pycom do korzystania z najnowszego micropythona jest bardzo prosta i można ją wykonać w około 3 minuty za pomocą narzędzia do aktualizacji oprogramowania układowego.
Pamiętaj tylko, aby ustawić port COM dla klucza USB na Serial i odznaczyć tryb wysokiej prędkości, jak pokazano na powyższym obrazku „Komunikacja”. Nasz był port COM 2. Zauważ, że aby wprowadzić moduły ESP32 w ten tryb aktualizacji, będziesz musiał nacisnąć przycisk GPIO0/Boot (na pinie P2) jednocześnie naciskając i zwalniając przycisk Reset.
Krok 6: Czas sprzętowy
Teraz byłby dobry moment, aby podłączyć sprzęt na płytce prototypowej, jak pokazano na powyższym schematycznym schemacie.
Po tym wszystko się skończy. Uruchom oprogramowanie terminala z odpowiednim portem COM dla klucza USB do portu szeregowego, ustaw go na 115,2 Kbaud.
Po włączeniu moduł powinien pokazywać znajomy monit REPL, który wyświetla trzy strzałki ">>>".
Teraz przejdź do edytowanego pliku mywifi.txt i skopiuj całą zawartość (CTRL+C). Następnie przejdź do ekranu terminala REPL i naciśnij CTRL+E, aby przejść do trybu wycinania i wklejania. Następnie kliknij prawym przyciskiem myszy, aby wkleić zawartość do ekranu REPL, a następnie naciśnij klawisze CTRL + D, aby wykonać wklejoną zawartość.
Powinien od razu rozpocząć odliczanie, aby powiedzieć, że próbuje połączyć się z siecią Wi-Fi. Powyższy zrzut ekranu pokazuje komunikat o pomyślnym połączeniu.
Po połączeniu możesz użyć FileZilla, aby połączyć się z serwerem FTP w modułach pod statycznym adresem IP, który wybrałeś już w plikach mywifi.txt i boot.py.
Krok 7: Nadal z nami?
Jeśli do tej pory wszystko było w porządku, to dobrze dla ciebie! Ciężka praca wykonana:) Teraz będzie płynnie żeglować - wystarczy kilka wytnij i wklej i będziesz gotowy do pracy, dzięki czemu możesz go zamontować w swoim garażu.
Aby edytować dowolny kod, możesz dwukrotnie kliknąć lewą stronę okna FTP w FileZilla, aby uruchomić SublimeText. Zapisz zmiany, a następnie przeciągnij je na prawą stronę, czyli na okno ESP32.
Na razie wystarczy przeciągnąć pliki z lewej strony na prawą stronę FileZilla, aby przesłać każdy plik osobno do modułu ESP32. Zajmuje to tylko kilka krótkich sekund zamiast minut, jak robi to normalna metoda REPL. Pamiętaj, że wszystkie pliki powinny znajdować się w katalogu głównym o nazwie „flash” na płycie Pycom. Możesz utworzyć zakładkę w FileZilla, aby łatwiej tu wrócić następnym razem.
Jeśli kiedykolwiek wystąpi problem polegający na zawieszeniu się programu FileZilla i przekroczeniu limitu czasu przesyłania, zauważysz plik po stronie ESP32, który ma 0 bajtów. Próba napisania tego może doprowadzić Cię do szaleństwa, ponieważ nigdy się nie kończy, bez względu na to, czego próbujesz! To bardzo dziwny stan i zdarza się bardzo rzadko. Najlepszym rozwiązaniem jest usunięcie pliku 0 bajtów i ponowne włączenie modułu. Następnie pobierz ŚWIEŻĄ kopię pliku źródłowego do ponownego przesłania do modułu ESP32. Pamiętaj, że kluczem jest tutaj świeża kopia. W jakiś sposób plik źródłowy po prostu nie zostanie załadowany poprawnie, jeśli zawiesi się w ten sposób nawet jeden raz.
Odkryliśmy, że pomaga przeciągnąć każdy plik indywidualnie do modułu ESP32, zaczynając od boot.py. Ten pierwszy plik jest odpowiedzialny za wprowadzenie modułu do sieci, więc nie będziesz już musiał wykonywać wycinania i wklejania w REPL. Możesz jednak chwycić folder www i przeciągnąć go jednym ujęciem. To zawsze działało dla nas w naszym rozwoju. Wszystkie te pliki są przechowywane we wbudowanej nieulotnej pamięci flash w module ESP32, więc będą tam po odłączeniu zasilania. Po prostu fyi - main.py będzie wykonywany po boot.py za każdym razem, gdy moduł zostanie włączony.
Krok 8: Wskazówki dotyczące hakowania
Spójrz na cały kod i spróbuj wyszukać w Google słowa kluczowe, których nie rozpoznajesz. Gdy wszystko będzie już gotowe, możesz spróbować zmienić wszystko, co chcesz, aby zobaczyć, co robi.
Jeśli coś pójdzie nie tak, zawsze możesz wyczyścić kod i/lub ponownie sflashować moduł w ciągu około 3 minut, tak jak to zrobiłeś wcześniej.
Aby ponownie sformatować pamięć flash i wyczyścić cały kod za jednym razem, możesz wpisać następujące polecenie w REPL:
importuj system
os.mkfs('/flash')
Następnie wykonaj cykl zasilania lub naciśnij przycisk resetowania na płycie Wipy.
Zauważ, że istnieje również inny sposób na ominięcie boot.py i main.py, jeśli coś pójdzie ci na myśl. Wystarczy tymczasowo podłączyć pin P12 do pinu wyjściowego 3.3V i nacisnąć przycisk Reset, jak pokazano powyżej. Pominie cały twój kod i raz przejdzie prosto do REPL, dzięki czemu możesz rozwiązać problem bez usuwania całego kodu z pamięci flash.
Po zakończeniu przesyłania wszystkich plików wystarczy nacisnąć przycisk Reset na module ESP32, aby go ponownie uruchomić.
Zobaczysz znajome odliczanie na ekranie terminala REPL, gdy ponownie zaloguje się do sieci Wi-Fi. Różnica polega na tym, że ten kod jest teraz uruchamiany z pliku boot.py.
Krok 9: Strony internetowe
Mikroserwer powinien już działać na ESP32, więc wypróbuj go za pomocą przeglądarki na komputerze lub urządzenia mobilnego.
Po prostu przejdź do swojego statycznego adresu IP i powinieneś zobaczyć ekran podobny do powyższego.
Z naszego mikroserwera działającego na ESP32 udostępniane są dwie strony internetowe.
Pierwsza z nich to domyślna strona index.html, która udostępnia prosty przycisk OTWÓRZ/ZAMKNIJ, aby zasymulować typ otwierania drzwi garażowych z pilotem. Gdy naciśniesz go w przeglądarce internetowej, zobaczysz dużą niebieską ikonę koła zębatego. Jest to potwierdzenie, że połączenie websocket zostało nawiązane pomyślnie i otrzymałeś potwierdzenie z serwera, że twoje polecenie "press" zostało odebrane poprawnie. Po naciśnięciu tego przycisku na płycie Pycom powinna zaświecić się jasna zielona dioda LED. Połączenie websockets przesyła stany przycisku, wysyłając proste wiadomości tekstowe „naciśnij” po naciśnięciu i „naciśnij” po zwolnieniu. W celu potwierdzenia, mikroserwer odsyła ten tekst, ale dodaje do niego "_OK", aby powiedzieć, że otrzymał go poprawnie.
Po podłączeniu optycznie izolowanych zacisków przekaźnika półprzewodnikowego (SSR) do mechanizmu otwierania drzwi garażowych (patrz schemat poglądowy), naciśnięcie przycisku spowoduje również fizyczne otwarcie/zamknięcie drzwi.
Daj mu kilka sekund i spróbuj ponownie, jeśli nie widzisz niebieskiej ikony koła zębatego, ponieważ może się ponownie uruchomić lub coś. Pamiętaj, że websocket zamknie się automatycznie po około 20 sekundach, jeśli go nie używasz, aby zapobiec blokowaniu. Pamiętaj również, że gniazda sieciowe są zorientowane na połączenie, więc musisz je zatrzymać, aby zmienić strony, w przeciwnym razie możesz nie być w stanie połączyć się ponownie, dopóki nie naciśniesz resetu modułu ESP32. Dla naszego przykładowego kodu mamy kilka sposobów zatrzymania gniazda sieciowego: dotknij tekstu stanu, obracających się kropek lub hiperłącza, aby przejść do następnej strony.
Druga strona internetowa służy do odczytywania pomiarów odległości z czujnika czasu lotu tinyLiDAR. Wystarczy nacisnąć przycisk raz, a rozpocznie się przesyłanie odczytów odległości do urządzenia mobilnego przez około 20 sekund. Gdy naciśniesz, zapali się czerwona dioda LED na płycie Pycom, dzięki czemu będziesz mógł powiedzieć, że otrzymuje polecenie naciśnięcia przycisku z tej strony.
Obie strony wskazują, że drzwi są otwarte lub zamknięte, czytając odległość od tinyLiDAR. Zmienna doorThreshold musi być ustawiona w obu plikach html w sekcji skryptu, jak pokazano tutaj:
//--------------------------
//**** Dostosuj według potrzeb **** var doorThreshold = 100; // odległość w cm var ws_timeout = 20000; // maksymalny czas otwarcia/zamknięcia drzwi w ms domyślnie wynosi 20 sekund //-------------------------- //--- -----------------------
Będziesz musiał edytować ten próg dla konfiguracji garażu, aby mógł wykryć, kiedy brama garażowa jest zwinięta, a zatem OTWARTA lub opuszczona, a zatem ZAMKNIĘTA. Po wprowadzeniu zmian dla progu w obu plikach html, prześlij te pliki html ponownie i uruchom go ponownie, aby sprawdzić, czy wszystko nadal działa poprawnie.
Jeśli wszystko jest w porządku, możesz teraz śmiało zamontować deskę do góry nogami w swoim garażu, jak pokazano na powyższym obrazku. Podłącz również piny 3 i 4 przekaźnika SSR do otwierania drzwi garażowych. Polaryzacja nie jest ważna, ponieważ używamy wersji MOSFET SSR - wystarczy zwierać styki, aby zasymulować kliknięcie przycisku na jednostce bazowej bramy garażowej.
Krok 10: I to wszystko
Gratulacje! Otwarcie bramy garażowej jest teraz tak proste, jak stuknięcie w telefon i możesz sprawdzić, czy była otwarta, czy nie, wykonując pomiary w czasie rzeczywistym za pomocą tinyLiDAR:)
Możesz teraz używać ESP32 z gniazdami sieciowymi przez Wi-Fi do wszystkiego, co chcesz. Przeczytaj więcej o "websocketach", jeśli ich nie znasz - są naprawdę dość szybkie i łatwe w użyciu.
Implementacja tinyLiDAR z ESP32 również była bardzo łatwa, mimo że czujnik został pierwotnie zaprojektowany do pracy na Arduino UNO. Mamy bardziej rozbudowaną wersję beta Terminala GUI, która uruchamia większość poleceń tinyLiDAR w micropythonie na ESP32 - patrz obrazek powyżej. Jest dostępny w naszej sekcji pobierania wraz z instrukcją obsługi itp.
Przejrzyj cały nasz kod, aby zrozumieć, jak wszystko się łączy, i spróbuj zmienić rzeczy, aby móc na nim budować, aby robić, co chcesz.
Proszę pamiętać, że nie było tu wzmianki o bezpieczeństwie. Bezpieczeństwo to ogromny obszar w IoT i należy traktować go poważnie. Jeśli chcesz używać tego projektu w swoim garażu, powinieneś zadbać o silne i bezpieczne hasła do sieci Wi-Fi. W sieci jest wiele informacji na temat bezpieczeństwa, więc koniecznie przeczytaj najnowsze i bądź na bieżąco.
Dzięki za przeczytanie i miłego hackowania! Pozdrawiam.