Spisu treści:

ESP32 Smart Home Hub: 11 kroków
ESP32 Smart Home Hub: 11 kroków

Wideo: ESP32 Smart Home Hub: 11 kroków

Wideo: ESP32 Smart Home Hub: 11 kroków
Wideo: ESP32 HomeKit Tutorial | HomeSpan 2024, Czerwiec
Anonim
Koncentrator inteligentnego domu ESP32
Koncentrator inteligentnego domu ESP32
Koncentrator inteligentnego domu ESP32
Koncentrator inteligentnego domu ESP32
Koncentrator inteligentnego domu ESP32
Koncentrator inteligentnego domu ESP32
Koncentrator inteligentnego domu ESP32
Koncentrator inteligentnego domu ESP32

Stworzenie systemu, który może obsłużyć duże ilości danych z czujników, mieć wiele wyjść i połączyć się z Internetem lub siecią lokalną, jest czasochłonne i pracochłonne. Zbyt często ludzie, którzy chcą stworzyć własne inteligentne sieci domowe, mają problemy ze znalezieniem i złożeniem niestandardowych komponentów w większy system. Dlatego chciałem stworzyć modułową i bogatą w funkcje platformę, która ułatwiłaby konstruowanie czujników i wyjść podłączonych do Internetu Rzeczy.

Dziękujemy DFRobot i PCBGOGO.com za sponsorowanie tego projektu!

Aby uzyskać więcej szczegółowych informacji, odwiedź repozytorium Github:

Kieszonkowe dzieci

  • DFRobot ESP32 FireBeetle

    www.dfrobot.com/product-1590.html

  • Czujnik DHT22

    www.dfrobot.com/product-1102.html

  • APDS9960 Czujnik światła i gestów

    www.dfrobot.com/product-1361.html

  • Moduł LCD I2C 20x4

    www.dfrobot.com/product-590.html

  • Analogowa taśma LED RGB

    www.dfrobot.com/product-1829.html

  • DRV8825 Sterowniki silników krokowych
  • Czytnik kart SD
  • Silniki krokowe NEMA17

Krok 1: Funkcje

Cechy
Cechy
Cechy
Cechy
Cechy
Cechy

Główną cechą tej płyty jest płytka rozwojowa FireBeetle ESP32, która obsługuje całą komunikację, odczyty czujników i wyjścia. Istnieją dwa sterowniki silników krokowych, które sterują dwoma bipolarnymi silnikami krokowymi.

Magistrala I2C jest również przystosowana do użytku z komponentami takimi jak APDS9960 lub LCD. Do odczytu temperatury złamane są piny do podłączenia czujnika DHT22, a także fotorezystor do odczytu poziomu światła otoczenia.

Na płycie znajduje się obsługa analogowego paska świetlnego, na którym znajdują się trzy tranzystory MOSFET do sterowania diodami LED.

Krok 2: PCB

PCB
PCB
PCB
PCB
PCB
PCB
PCB
PCB

Proces projektowania PCB rozpocząłem od stworzenia schematu w Eagle. Ponieważ nie mogłem znaleźć biblioteki FireBeetle ESP32, zamiast tego użyłem dwóch nagłówków pinów 1x18. Następnie stworzyłem obwód zarządzania energią, który mógł przyjmować napięcie 12V przez gniazdo DC baryłkę i przekonwertować go na 5V do zasilania czujników i ESP32.

Po ukończeniu schematu przeszedłem do projektowania samej płytki drukowanej.

Wiedziałem, że wtyczka beczki DC będzie musiała znajdować się blisko przodu płytki, a kondensatory wygładzające zasilacza 100uF musiały być blisko wejść zasilania sterownika silnika krokowego. Po ułożeniu wszystkiego zacząłem wyznaczać ślady.

Oshpark produkuje wysokiej jakości PCB, ale ich ceny są dość wysokie. Na szczęście PCBGOGO.com produkuje również świetne płytki PCB w przystępnej cenie. Udało mi się kupić dziesięć płytek PCB za jedyne 5 USD, zamiast płacić 52 USD za tylko trzy płytki z Oshpark.com.

Krok 3: Montaż

montaż
montaż
montaż
montaż
montaż
montaż

Ogólnie montaż deski był dość łatwy. Zacząłem od przylutowania elementów montowanych powierzchniowo, a następnie wpięcia łącznika lufy i regulatora. Następnie wlutowałem listwy szpilkowe dla komponentów takich jak sterowniki silników i FireBeetle.

Po zakończeniu lutowania przetestowałem płytkę pod kątem zwarcia, przełączając multimetr w tryb pomiaru rezystancji i sprawdzając, czy rezystancja przekracza pewną wartość. Płytka minęła, więc mogłem wtedy podłączyć każdy komponent.

Krok 4: Przegląd programowania

Chciałem, aby kod tej płyty był modułowy i łatwy w użyciu. Oznaczało to posiadanie kilku klas, które obsługują określone funkcje, wraz z większą klasą opakowującą, która łączy te mniejsze.

Krok 5: Wejścia

Wejścia
Wejścia
Wejścia
Wejścia
Wejścia
Wejścia

Do obsługi danych wejściowych utworzyłem klasę o nazwie „Hub_Inputs”, która pozwala hubowi domowemu komunikować się z APDS9960, wraz z tworzeniem i zarządzaniem przyciskami oraz pojemnościowymi interfejsami dotykowymi. Zawiera następujące funkcje:

Przycisk Utwórz

Sprawdź, czy przycisk jest wciśnięty

Uzyskaj liczbę naciśnięć przycisków

Pobierz najnowszy gest

Uzyskaj pojemnościową wartość dotyku

Przyciski są przechowywane jako struktura z trzema atrybutami: is_pressed, numberPresses i pin. Każdy przycisk po utworzeniu jest dołączony do przerwania. Gdy to przerwanie jest wyzwalane, procedura obsługi przerwań (ISR) jest przekazywana do wskaźnika przycisku (podanego jako adres pamięci w tablicy przycisków) i zwiększa liczbę naciśnięć przycisków, wraz z aktualizacją wartości logicznej is_pressed.

Pojemnościowe wartości dotykowe są znacznie prostsze. Są one pobierane przez przekazanie pinezkę do funkcji touchRead().

Ostatni gest jest aktualizowany przez odpytywanie APDS9960 i sprawdzanie, czy wykryto nowy gest, a jeśli został wykryty, ustaw zmienną prywatnego gestu na ten gest.

Krok 6: Wyjścia

Wyjścia
Wyjścia
Wyjścia
Wyjścia
Wyjścia
Wyjścia

Centrum inteligentnego domu oferuje kilka sposobów przesyłania informacji i zmiany oświetlenia. Istnieją piny, które wyrywają magistralę I2C, umożliwiając użytkownikom podłączenie wyświetlacza LCD. Jak dotąd obsługiwany jest tylko jeden rozmiar wyświetlacza LCD: 20 x 4. Używając funkcji „hub.display_message()”, użytkownicy mogą wyświetlać komunikaty na wyświetlaczu LCD, przekazując obiekt ciągu.

Istnieje również listwa pinowa do podłączenia ciągu analogowych diod LED. Wywołanie funkcji „hub.set_led_strip(r, g, b)” ustawia kolor paska.

Dwa silniki krokowe są napędzane za pomocą pary płyt sterownika DRV8825. Postanowiłem wykorzystać bibliotekę BasicStepper do obsługi sterowania silnikiem. Po uruchomieniu płyty tworzone są dwa obiekty krokowe i oba silniki zostają włączone. Aby wykonać krok każdego silnika, używana jest funkcja „hub.step_motor(motor_id, steps)”, gdzie identyfikator silnika to 0 lub 1.

Krok 7: Logowanie

Logowanie
Logowanie
Logowanie
Logowanie
Logowanie
Logowanie

Ponieważ płytka ma kilka czujników, chciałem mieć możliwość lokalnego zbierania i rejestrowania danych.

Aby rozpocząć rejestrowanie, tworzony jest nowy plik z „hub.create_log(nazwa pliku, nagłówek)”, gdzie nagłówek jest używany do utworzenia wiersza pliku CSV, który oznacza kolumny. Pierwsza kolumna to zawsze znacznik czasu w formacie Rok Miesiąc Dzień Godzina:Min:Sek. Aby uzyskać czas, funkcja hub.log_to_file() pobiera czas za pomocą funkcji basic_functions.get_time(). Struktura czasu tm jest następnie przekazywana przez odwołanie do funkcji rejestrującej wraz z danymi i nazwą pliku.

Krok 8: Brzęczyk

Brzęczyk
Brzęczyk

Po co płyta IoT, jeśli nie możesz odtwarzać muzyki? Dlatego dołączyłem brzęczyk z funkcją odtwarzania dźwięków. Wywołanie „hub.play_sounds(melodia, czas trwania, długość)” rozpoczyna odtwarzanie utworu, przy czym melodia jest tablicą częstotliwości nut, czas trwania jest tablicą czasów trwania nut, a długość jest liczbą nut.

Krok 9: Zewnętrzne integracje IoT

Zewnętrzne integracje IoT
Zewnętrzne integracje IoT
Zewnętrzne integracje IoT
Zewnętrzne integracje IoT
Zewnętrzne integracje IoT
Zewnętrzne integracje IoT

Centrum obsługuje obecnie webhooki IFTTT. Mogą być wyzwalane przez wywołanie funkcji Hub_IoT.publish_webhook(adres URL, dane, zdarzenie, klucz) lub Hub_IoT.publish_webhook(adres URL, dane). Spowoduje to wysłanie żądania POST do podanego adresu URL z dołączonymi danymi, wraz z nazwą zdarzenia, jeśli to konieczne. Aby skonfigurować przykładową integrację IFTTT, najpierw utwórz nowy aplet. Następnie wybierz usługę webhook, która jest wyzwalana po odebraniu żądania.

Następnie wywołaj zdarzenie „high_temp” i zapisz je. Następnie wybierz usługę Gmail dla części „To” i wybierz opcję „Wyślij e-mail do siebie”. W ustawieniach usługi wpisz „Temperatura jest wysoka!” dla tematu, a następnie wpisuję „Zmierzona temperatura {{Value1}} przy {{OccurredAt}}”, która pokazuje zmierzoną temperaturę i czas, w którym zdarzenie zostało wywołane.

Po skonfigurowaniu wystarczy wkleić adres URL webhooka wygenerowany przez IFTTT i wstawić „high_temp” w sekcji zdarzenia.

Krok 10: Użycie

Stosowanie
Stosowanie
Stosowanie
Stosowanie
Stosowanie
Stosowanie
Stosowanie
Stosowanie

Aby użyć Smart Home Hub, po prostu wywołaj potrzebne funkcje w setup() lub loop(). Umieściłem już przykładowe wywołania funkcji, takie jak drukowanie aktualnego czasu i wywoływanie zdarzenia IFTTT.

Krok 11: Plany na przyszłość

System Smart Home Hub sprawdza się bardzo dobrze w prostych zadaniach związanych z automatyką domową i gromadzeniem danych. Można go wykorzystać niemal do wszystkiego, np. do ustawiania koloru taśmy LED, monitorowania temperatury w pomieszczeniu, sprawdzania, czy świeci się światło i do wielu innych potencjalnych projektów. W przyszłości chciałbym jeszcze bardziej rozszerzyć funkcjonalność. Może to obejmować dodanie bardziej niezawodnego serwera WWW, lokalnego hostingu plików, a nawet Bluetooth lub mqtt.

Zalecana: