Spisu treści:

Flaga skrzynki pocztowej MQTT i Wifi Powered: 7 kroków (ze zdjęciami)
Flaga skrzynki pocztowej MQTT i Wifi Powered: 7 kroków (ze zdjęciami)

Wideo: Flaga skrzynki pocztowej MQTT i Wifi Powered: 7 kroków (ze zdjęciami)

Wideo: Flaga skrzynki pocztowej MQTT i Wifi Powered: 7 kroków (ze zdjęciami)
Wideo: The Coolest Mailbox Ever Made!!! Free Plans #Shorts 2024, Listopad
Anonim
MQTT i flaga skrzynki pocztowej zasilanej przez Wi-Fi
MQTT i flaga skrzynki pocztowej zasilanej przez Wi-Fi

Uwaga: aktualizacja o nowe oprogramowanie, schemat i wskazówki dla programisty

Kilka lat rozpocząłem własny projekt automatyki domowej. Zaczęło się od zbudowania sterowanego serwerowo nadajnika 433 MHz z Arduino do przełączania wielu tanich zdalnych przełączników opartych na PT2262. Później dodałem odbiornik oparty na Arduino do mojej stacji pogodowej, podłączyłem styk sterujący mojej ładowarki EV itp. Rzeczy coraz bardziej się przeplatały (i komplikowały!). Tak więc kilka miesięcy temu zdecydowałem się ujednolicić wszystko w oparciu o MQTT do przesyłania wiadomości, Node-RED do automatyzacji (oba działają na pojedynczym Raspberry Pi B+) i MariaDb do logowania (działa na moim serwerze Synology NAS). Później przeniosłem też brokera MQTT (Mosquitto) i Node-RED na NAS..

Ta instrukcja opisuje głupi projekt dla zabawy, podpinający moją skrzynkę pocztową na ulicy w tej domowej infrastrukturze. Chodzi o to, że jeśli ktoś otworzy skrzynkę pocztową zamontowaną na płocie około 10 metrów od drzwi wejściowych, zasygnalizuje mi to mój telefon i ewentualnie inne urządzenia.

Krok 1: Zarys, wymagania wstępne i części

Zarys

Na wysokim poziomie skrzynka pocztowa powinna po otwarciu wysłać unikalną wiadomość MQTT do brokera, aby subskrybenci tego tematu zostali poinformowani. Node-RED również subskrybuje i wykonuje pewną automatyzację, w tym przypadku wysyłając e-mail i/lub wiadomość push na mój telefon.

Skrzynka pocztowa powinna działać na bateriach i działać przez co najmniej rok, przy użyciu mojej sieci Wi-Fi. Ponieważ wybudzenie mikrokontrolera i połączenie z siecią WiFi może zająć kilka sekund, nie mogłem użyć przełącznika aktywacji do odcięcia zasilania. Zamiast tego, procesor powinien mieć możliwość zakończenia swojej działalności po zamknięciu skrzynki pocztowej.

Wymagania wstępne

Zakładam, że masz skromne umiejętności lutowania, pracowałeś trochę z Arduino IDE i zainstalowałeś płyty ESP8266 za pomocą Menedżera płyt. Do zaprogramowania mikrokontrolera potrzebny jest również adapter szeregowy USB 3,3 V.

Zakładam również, że masz działającego brokera MQTT i serwer Node-RED. Jeśli nie, w Internecie jest wiele instrukcji, ale radzę wybrać leniwą drogę i użyć doskonałego skryptu instalacyjnego Petera Scargilla, jeśli chcesz uruchomić to na dowolnym Pi lub Ubuntu, lub użyj obrazu Andreasa Spiessa dla Pi Zero W (linki w opisie tego filmu), co pozwoli Ci zaoszczędzić kilka godzin oglądania uruchomionych skryptów instalacyjnych. Alternatywnie możesz sprawić, by oprogramowanie układowe wysłało wiadomość e-mail bezpośrednio, ale stracisz w ten sposób dużą elastyczność.

Części

  • 1 zamknięty, 3 opakowanie na baterie AA
  • 2 baterie AA
  • 1 moduł ESP8266. Do tego projektu użyłem ESP-01
  • 1 mikroprzełącznik
  • 1 rezystor 47K
  • 1 rezystor 4M7
  • 1 kondensator 2.2uF
  • 1 cienka plastikowa tubka. użyłem długopisu
  • 1 gruba, długa zapałka lub patyczek do lizaka. Powinien łatwo mieścić się i poruszać w plastikowej tubie

Krok 2: Sprzęt: pudełko, przełącznik i okablowanie

Sprzęt: pudełko, przełącznik i okablowanie
Sprzęt: pudełko, przełącznik i okablowanie
Sprzęt: pudełko, przełącznik i okablowanie
Sprzęt: pudełko, przełącznik i okablowanie
Sprzęt: pudełko, przełącznik i okablowanie
Sprzęt: pudełko, przełącznik i okablowanie

Zacząłem od starej skrzynki na baterie z nieistniejącej dekoracji świątecznej. Został zaprojektowany na trzy baterie AA. Ponieważ ESP8266 będzie ładnie działał na 3 V, mógłbym użyć dwóch baterii i użyć trzeciej pozycji dla mikrokontrolera. Zwróć uwagę, że pudełko miało małą dodatkową komorę, którą mogłem wykorzystać na przełącznik aktywacji. Użyłem bardzo popularnego typu przełącznika pokazanego na zdjęciach, ale usunąłem sprężynę, która zatrzaskuje go w pozycji włączonej lub wyłączonej. Przylutowałem dwa cienkie druciki do styków NC i wkleiłem je w pudełku malutką kroplą super kleju.

Następnie wywierciłem w górnej pokrywie otwór pasujący do plastikowej tuby wyjętej z długopisu. Otwór pokrywa się dokładnie z przełącznikiem i prowadzi tłok wykonany z grubej zapałki.

Na koniec przylutowałem jeszcze dwa przewody do styków akumulatora i poprowadziłem wszystkie cztery przewody do miejsca trzeciego akumulatora, w którym miał być mikrokontroler.

Krok 3: Sprzęt: ESP-01

Sprzęt: ESP-01
Sprzęt: ESP-01
Sprzęt: ESP-01
Sprzęt: ESP-01
Sprzęt: ESP-01
Sprzęt: ESP-01

Biorąc pod uwagę wymaganie WiFi, cały projekt krzyczy ESP8266. Ten mały kontroler WiFi stał się ulubionym koniem roboczym społeczności majsterkowiczów jako moduł, który można kupić za mniej niż 2,50 EUR i integruje pełny stos WiFi i TCP/IP, z wystarczającą pojemnością, aby móc uruchamiać własne programy. Arduino IDE (lub Atom z wtyczką PlatformIO) w pełni obsługuje ESP8266.

Zwykle brałbym ESP-12F, ale miałem małą płytkę ESP-01 leżącą dookoła, która była idealna do pracy i ładnie mieściła się w pojemniku na baterie. Jedynym problemem jest to, że flashowanie oprogramowania układowego w ESP-01 jest dość skomplikowane. Więcej o tym w następnym kroku. Jest jedna modyfikacja do wykonania: musisz usunąć czerwoną diodę LED zasilania z płyty, ponieważ stale pobiera ona 3mA. Po usunięciu diody LED moduł zużywa zaledwie kilkadziesiąt uA w trybie głębokiego uśpienia, co wystarczy na ponad rok na dwóch wysokiej jakości bateriach AA.

Okazało się, że mógłbym użyć dwóch pasków 4-pinowych złączy żeńskich i przylutować kilka dodatkowych elementów w dowolnej formie, aby móc wyjąć ESP-01 w celu aktualizacji oprogramowania, podczas gdy nadal mieściłby się w trzeciej komorze baterii.

Bardzo ważne jest prawidłowe okablowanie ESP. Korzystając z powyższej ściągawki, połącz ją w następujący sposób.

  1. Plus baterii do Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) i rezystora 47K.
  2. Minus akumulatora do GND (A1) i jeden przewód przełącznika.
  3. Drugi przewód przełącznika do kondensatora 100nF i rezystora 4M7.
  4. Otwarte końce obu rezystorów i kondensatora do RST (C2).
  5. TXD (A2) może pozostać niepodłączony.

Edycja: musiałem wymienić ESP-01, ponieważ popełniłem głupi błąd i go zniszczyłem. Okazało się, że ku mojemu zdziwieniu nowy ESP-01 nie resetował się z oryginalnym kondensatorem 100nF. Prawdopodobnie ma nieco inny wygląd. Wymieniłem go na 2,2 uF i teraz znowu działa

Po zakończeniu wszystko można zamontować w puszce, ale trzymaj się, najpierw musimy zaprogramować moduł.

Krok 4: Programowanie ESP-01

Programowanie ESP-01
Programowanie ESP-01
Programowanie ESP-01
Programowanie ESP-01
Programowanie ESP-01
Programowanie ESP-01

Aby sflashować oprogramowanie na ESP-01, możesz zbudować małą platformę lub kupić (prawie) kompletny programator za około 1 euro.

Programowanie sprzętu sprzętowego

Zbuduj mały zestaw z ponownie dwoma żeńskimi nagłówkami dla ESP-01. Potrzebny jest również moduł szeregowy USB, który może zapewnić napięcie 3,3 wolta. Zauważ, że układ ESP8266 nie jest utwardzony 5 woltami, więc błąd tutaj może zabić twój moduł. W każdym razie, ponownie korzystając ze ściągawki, podłącz swój zestaw w następujący sposób:

  1. 3,3V z modułu USBSerial do Vcc, CH_PD, RST i GPIO2.
  2. GND modułu USBSerial do GND i GPIO0.
  3. TXD modułu USBSerial do RXD.
  4. RDX modułu USBSerial do TXD.

Programista pre-kompilacji

Chociaż tworzenie własnych rzeczy jest zabawne, bardziej leniwym podejściem jest uzyskanie interfejsu ESP-01 do interfejsu szeregowego z ulubionej witryny aukcyjnej, patrz obrazek powyżej. Jest to znacznie prostsze, bardziej kompaktowe i bardziej niezawodne niż przypon. Jednak niektórzy z nich nie są programistami, tylko interfejsami szeregowymi. Musisz przylutować mostek druciany pomiędzy GND (pin A1) i GPIO0 (pin C1) z tyłu interfejsu, patrz drugie zdjęcie. Zwróć uwagę, że ESP-01 powinien być podłączony tak, aby antena była skierowana w stronę wtyczki USB, a nie odwrotnie!

Uwaga: istnieją również z przełącznikiem, patrz trzecie zdjęcie, bardzo ładne.

Załaduj oprogramowanie układowe

Zakładając, że Arduino IDE 1.8.3 lub nowsze, wybierz Narzędzia > Płytka i wybierz posiadaną płytkę. W przypadku ESP-01, takiego jak użyłem, wybierz „Generic ESP8266 Module” i ustaw następujące opcje (powinny to być wszystkie wartości domyślne):

  1. Tryb lampy błyskowej: DIO
  2. Częstotliwość błysku: 40 MHz
  3. Częstotliwość procesora: 80 MHz
  4. Rozmiar Flash: 512KB (64KB SPIFFS) Uwaga: jeśli używasz czarnej płyty ESP-01, wybierz 1MB (64KB SPIFFS)
  5. Port debugowania: wyłączony
  6. Poziom debugowania: Brak
  7. Metoda resetowania: ck
  8. Szybkość wysyłania 115200
  9. Port: wybierz port, który jest podłączony do interfejsu szeregowego USB. Na moim komputerze z Ubuntu, który był /dev/ttyUSB0

Podłącz platformę / programistę, załaduj szkic, który znajdziesz tutaj https://gitlab.com/jeroenmeijer/Mailbox.git. Podaj swoje dane uwierzytelniające brokera WiFi i MQTT oraz konfigurację IP w config.h i wybierz Prześlij.

Krok 5: Składanie wszystkiego

Składanie wszystkiego
Składanie wszystkiego

Wywierciłem otwór na plastikową rurkę w wewnętrznej pokrywie mojej skrzynki pocztowej, jak najbliżej zawiasu, a następnie przykleiłem pojemnik na baterie do spodu tej pokrywy. Następnie jako tłoka użyłem grubej zapałki. Przyciąłem zapałkę nożem na odpowiednią długość, aby przełącznik otworzył się, gdy zewnętrzna pokrywa była zamknięta. Sprawdziłem łączność, otwierając pokrywę podczas uruchamiania mosquitto_sub, aby monitorować wiadomości MQTT (zastąp mqttbroker, użytkownika i hasło swoją konfiguracją MQTT):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u użytkownik -P hasło

Około sześć sekund po otwarciu zewnętrznej pokrywy publikowany jest następujący komunikat MQTT. Czas służy do wybudzenia mikrokontrolera i nawiązania połączenia WiFi i brokera.

stat/mailbox/trigger {"vcc":3050, "flap":true, "prev":0, "RSSI":29, "version": "005"}

W tym czasie mikrokontroler pobierał około 70mA. Po zakończeniu przechodzi w głęboki sen i w moim przypadku zużył mniej niż 20uA. „flap” zawsze jest prawdziwe, „vcc” oznacza napięcie akumulatora w mV, a „prev” powinno wynosić 0. Jeśli jest 1 lub 2, oznacza to, że skrzynka nie mogła wcześniej wysłać wiadomości, ponieważ nie mogła się połączyć z WiFi lub dlatego, że nie mógł połączyć się z brokerem MQTT. „RSSI” to siła sygnału WiFi. Oba są bardzo przydatne do diagnozowania problemów.

Dobrym pomysłem jest monitorowanie napięcia baterii przez kilka dni, aby upewnić się, że urządzenie działa zgodnie z przeznaczeniem i z jakiegoś powodu nie rozładowuje baterii.

Oprogramowanie układowe może również aktualizować się bezprzewodowo (OTA), ale jest to nieco poza zakresem tej instrukcji. Dla zainteresowanych konfiguracja OTA jest również w config.h.

Krok 6: Używanie Node-RED do działania na wiadomości MQTT

Używanie Node-RED do działania na wiadomości MQTT
Używanie Node-RED do działania na wiadomości MQTT

W końcu stworzyłem prosty przepływ w Node-RED. Pierwszy węzeł subskrybuje temat skrzynki pocztowej (stat/postbox/trigger). Po otrzymaniu wiadomości drugi węzeł formatuje wiadomość e-mail *). Ostatni węzeł wysyła go na mój adres Gmail, używając Gmaila jako serwera SMTP. Mój telefon poinformuje mnie o nowej poczcie.

Dodałem przepływ Node-RED do fragmentu kodu gitlab, dzięki czemu można go zaimportować do przepływów Node-RED.

Oczywiście możesz dodać więcej węzłów, na przykład, aby rejestrować zdarzenia skrzynki pocztowej w MariaDb lub SqlLite, lub tworzyć dodatkowe alarmy, gdy napięcie baterii spadnie poniżej 2,7 wolta.

Miłego polowania na pocztę!

*) Zobacz następną stronę, teraz używam PushBullet zamiast e-maila.

Krok 7: Po przemyśleniach

Zawsze jest to uczucie, że rzeczy można było zrobić lepiej.

Przełącznik

Wolałbym użyć (super) magnesu i kontaktronu zamiast nieco niezgrabnego podejścia do tłoka. Były dwa powody. Jednym z nich jest to, że nie było możliwości, aby to zadziałało, gdy styk się zamknie, gdy skrzynka zostanie otwarta, a posiadanie go zawsze zamkniętego oznaczało, że zawsze będzie płynął mały prąd. Patrząc wstecz, mniej niż 1uA przepływający przez rezystor 4M7 nie byłby wielkim problemem pod względem żywotności baterii. Drugi był bardziej praktyczny. Wymyśliłem ten projekt w sobotę i napisałem oprogramowanie, zbudowałem to wszystko w niedzielę z tego, co leżało. Po prostu nie miałem kontaktronu w skrzynce na śmieci.

Uwaga: jak skomentował diy_bloke, styki kontaktronowe mają tendencję do sklejania się po namagnesowaniu przez długi czas, więc może tłok wcale nie był takim złym pomysłem. Zobaczymy. *)

Wiadomość o opróżnianiu

Skrzynka pocztowa wysyła również wiadomość podczas jej opróżniania. To nic wielkiego, ale gdy więcej osób w domu otrzyma ostrzeżenie, można skończyć w pętli sprawdzając skrzynkę pocztową, zaprzeczając jej całemu celowi! Można to obejść na kilka sposobów, na przykład sprawdzić, czy wewnętrzna pokrywa jest podniesiona, a jeśli tak, nie wysyłać wiadomości. Lub zamiast używać przełącznika na pokrywie, zainstaluj czujnik na dole skrzynki pocztowej. Lub mały przycisk resetowania, który należy nacisnąć podczas opróżniania. Wszystko to jednak skomplikuje sprawę i prawdopodobnie pogorszy niezawodność.

Wiadomości

Wysyłanie wiadomości e-mail jest dość skutecznym, ale prymitywnym sposobem na wysłanie ostrzeżenia. Bardziej eleganckim sposobem byłaby aplikacja na telefon, ale nie znalazłem aplikacji pulpitu nawigacyjnego Android MQTT, którą można skonfigurować tak, aby uruchamiała alert systemu operacyjnego po otrzymaniu określonej wiadomości. Jeśli jest w pobliżu, dodaj do komentarzy. **)

*) Po ponad roku pracy okazuje się, że użyty przeze mnie lollipop stick, w zasadzie twarda rolka papieru, ma tendencję do skracania się pod stałym naciskiem sprężyny włącznika. Po pewnym rozwiązywaniu problemów zastąpiłem go drewnianym kijem.

**) Używam teraz PushBullet do wiadomości push, niezależnie od pulpitu nawigacyjnego MQTT. Mały interfejs Node-RED low do API można znaleźć tutaj. Upewnij się, że podasz token dostępu w węźle „Przygotuj do pushbullet”, a swój adres e-mail do celów awaryjnych w węźle „Ponów”.

Zalecana: