Spisu treści:

Monitor temperatury i wilgotności: 6 kroków (ze zdjęciami)
Monitor temperatury i wilgotności: 6 kroków (ze zdjęciami)

Wideo: Monitor temperatury i wilgotności: 6 kroków (ze zdjęciami)

Wideo: Monitor temperatury i wilgotności: 6 kroków (ze zdjęciami)
Wideo: EVE Weather zewnętrzny monitor temperatury i wilgotności dla Apple HomeKit z Thread 2024, Listopad
Anonim
Monitor temperatury i wilgotności
Monitor temperatury i wilgotności
Monitor temperatury i wilgotności
Monitor temperatury i wilgotności

W tej instrukcji pokażę, jak zrobić własny monitor temperatury i wilgotności do swojego salonu. Urządzenie posiada również funkcje WiFi, w celu rejestracji danych na zdalnym serwerze (np. Raspberry Pi) i późniejszego dostępu do nich poprzez prosty interfejs WWW.

Główne części urządzenia to mikrokontroler ESP8266, czujnik temperatury i wilgotności DHT11 oraz wyświetlacz LCD 16x4 znaków. Projekt jest w pełni open source, więc możesz pobrać schemat, układ płytki i pliki projektowe dla obudowy i wprowadzić dowolne zmiany.

Krok 1: Narzędzia i części

Narzędzia i części
Narzędzia i części
Narzędzia i części
Narzędzia i części
Narzędzia i części
Narzędzia i części
Narzędzia i części
Narzędzia i części

Do zbudowania monitora potrzebne będą następujące części:

1 x ESP-12F [2€] - Z tego co wiem ESP-12E i ESP-12F są w zasadzie identyczne, z tą różnicą, że ESP-12F ma lepszą antenę.

1 x czujnik temperatury i wilgotności DHT11 [0.80€] - DHT22 również będzie działać, ale trzeba będzie wprowadzić pewne zmiany w modelu 3D obudowy, DHT22 jest również nieco droższy.

1 x 16x4 Character LCD 5 V [3,30 €] - Tak, będziesz potrzebować 5 V, ponieważ płytka PCB jest zaprojektowana tak, aby wyświetlacz LCD był zasilany bezpośrednio z 5 V, a nie z regulatora napięcia. Zrobiono to w celu zmniejszenia obciążenia regulatora napięcia, ale także dlatego, że wyświetlacze 5V są zwykle tańsze. Ale nie martw się, nawet jeśli ESP8266 działa przy 3,3 V, nadal będzie działał dobrze.

1 x regulator napięcia SMD LD1117V33, znany również jako LD33 (pakiet SOT223) [0.80€]

1 x kondensator ceramiczny SMD 100nF (pakiet 0603)

1 x 10uF tantalowy kondensator SMD (opakowanie 3528)

Rezystor 1x10K SMD (pakiet 0805)

1 x 10K trymer Pot (przez otwór)

Rezystor 1 x 47 Ω SMD (pakiet 0805) - Służy tylko do ograniczania prądu, który trafia do podświetlenia wyświetlacza LCD. Możesz poeksperymentować z różnymi wartościami oporu i wybrać preferowaną intensywność.

1 x SMD Momentary Switch [0,80 €] - Konkretny, którego użyłem, to ten, ale możesz użyć dowolnego przełącznika chwilowego, który chcesz o tej samej powierzchni. Udało mi się również znaleźć te same przełączniki w serwisie eBay za mniej, otrzymując więcej niż jeden.

1 x 5,5 x 2,1 mm DC Jack (montaż na panelu) [0,50 €] - Ten, którego użyłem, ma średnicę wycięcia w panelu 8 mm i długość 9 mm. Można go łatwo znaleźć w serwisie eBay, wyszukując „Gniazdo DC do montażu na panelu” (patrz załączony obrazek).

1 x 2,54 mm (100 mil) 40-pinowa męska głowica pinowa (otwór przelotowy)

1 x 2,54 mm (100 mil) 40-pinowa obrobiona żeńska głowica pinowa (otwór przelotowy)

Zworka 1 x 2,54 mm (100 mil) - taka sama jak w przypadku płyt głównych komputerów.

4 śruby M3 8mm

Wkładki gwintowane 4 x M3 4x4mm - można je łatwo znaleźć, wyszukując w serwisie eBay hasło „M3 Press-In Brass Copper Inserts” (patrz załączony obrazek).

4 śruby M2 12mm

4 x nakrętki M2

1 x kabel USB typu A do 5,5 x 2,1 mm z wtyczką DC [1,5 €] - Pozwoli to na zasilanie urządzenia ze standardowej ładowarki do telefonu lub prawie dowolnego komputera z portem USB. Urządzenie pobiera tylko 300mA w najgorszym przypadku i średnio 250mA, więc wystarczy nawet port USB 2.0.

1 x PCB - Grubość płytki nie jest krytyczna, więc po prostu wybierz 1,6 mm, co jest zwykle najtańszą opcją u większości producentów PCB.

3 x Kawałki Skręconego Drutu (około 60mm każdy)

3 x kawałki rurki termokurczliwej (około 10 mm każdy)

Oraz następujące narzędzia:

Lutownica

Konwerter USB na szeregowy - Będzie potrzebny do zaprogramowania ESP8266 na płycie.

Śrubokręt krzyżakowy i/lub klucz imbusowy - w zależności od rodzaju używanych śrub.

Drukarka 3D - Jeśli nie masz dostępu do drukarki 3D, zawsze możesz użyć zwykłego plastikowego pudełka projektowego i samodzielnie wykonać wycięcia za pomocą narzędzia Dremel. Minimalne wymiary wewnętrzne takiego pudełka to 24mm wysokości, 94mm długości i 66mm szerokości. Do zamontowania wyświetlacza LCD konieczne będzie również użycie 8-milimetrowych wsporników M2.

Dremel - potrzebny tylko wtedy, gdy nie decydujesz się na obudowę drukowaną w 3D.

Krok 2: Wykonanie PCB

Dokonywanie PCB
Dokonywanie PCB
Dokonywanie PCB
Dokonywanie PCB
Dokonywanie PCB
Dokonywanie PCB

Pierwszym krokiem jest wykonanie PCB. Możesz to zrobić, wytrawiając go samodzielnie lub po prostu wchodząc na stronę swojego ulubionego producenta PCB i składając zamówienie. Jeśli nie planujesz żadnych zmian w układzie płytki, możesz po prostu pobrać plik ZIP zawierający pliki gerber załączone w tym kroku i wysłać go bezpośrednio do producenta. Jeśli jednak chcesz wprowadzić zmiany, schematy KiCADa i pliki układu tablicy można znaleźć tutaj.

Po zdobyciu płyt nadchodzi czas na lutowanie elementów. Powinno to być całkiem proste, ale jest kilka rzeczy, na które należy zwrócić uwagę. Po pierwsze, nie przystępuj jeszcze do lutowania PCB na nagłówku LCD, będzie to musiało zostać wykonane podczas końcowego montażu ze względu na sposób, w jaki zaprojektowano obudowę. Jeśli tworzysz własną obudowę, możesz zignorować tę radę.

Złącze U3 to miejsce podłączenia czujnika DHT11. W idealnym przypadku należy do tego celu użyć obrobionego pod kątem 90° żeńskiego złącza kołkowego. Ale jeśli tak jak ja, nie jesteś w stanie go znaleźć, po prostu zdobądź prosty i sam go wygnij. Jeśli zrobisz to później, przewody DHT11 również będą nieco krótkie, więc będziesz musiał przylutować niektóre rozszerzenia. Odległość między listwą stykową a czujnikiem po podłączeniu musi wynosić około 5 mm.

Powodem, dla którego chcesz użyć obrobionej główki kołka, jest to, że otwory są mniejsze w porównaniu ze zwykłymi główkami kołków żeńskich. Tak więc przewody czujnika mogą tam mocno przylegać, tworząc solidne połączenie. Ale możesz również spróbować przylutować DHT11 do kawałka męskiej główki pinowej i podłączyć ją w ten sposób do zwykłej kątowej żeńskiej główki pinowej, która powinna działać równie dobrze.

Krok 3: Wykonanie obudowy

Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy

Teraz, gdy płytka jest już przylutowana, czas zrobić obudowę. Należy wydrukować dwie różne części, główny korpus obudowy i wieko. W pokrywie znajdują się również otwory montażowe do przymocowania jej do ściany.

Obie części można zadrukować standardową dyszą 0,4 mm na wysokości warstwy 0,2 mm, w moim przypadku czas drukowania wyniósł około 4 godzin dla obu części łącznie. Pokrywa nie wymaga żadnych podpór głównej części obudowy, jednak wymaga, głównie części pod gniazdami śrubowymi. Po wydrukowaniu bądź bardzo ostrożny przy usuwaniu podpór, udało mi się przy tym złamać jeden z kołków do LCD i musiałem go ponownie przykleić superklejem.

Obudowa została zaprojektowana we FreeCAD, więc jeśli chcesz wprowadzić jakiekolwiek zmiany, powinno to być całkiem proste. Pliki STL do drukowania obudowy, a także pliki projektowe FreeCAD można znaleźć na Thingiverse.

Krok 4: Montaż monitora

Z wydrukowaną obudową czas na złożenie wszystkiego w całość. Najpierw umieść wyświetlacz LCD w obudowie i przesuń go w lewo, tak aby między nim a otworem na czujnik powstała szczelina.

Obraz
Obraz

Następnie umieść na nim płytkę drukowaną, z czujnikiem już podłączonym do listwy pinowej.

Obraz
Obraz

Następnie wciśnij czujnik do otworu, przesuń wyświetlacz LCD z powrotem do pozycji i włóż płytkę drukowaną na główkę pinów. Teraz przymocuj wyświetlacz LCD na miejscu za pomocą nakrętek i śrub M2, a następnie przylutuj płytkę drukowaną do listwy stykowej.

Obraz
Obraz

Następnie umieść gniazdo zasilania na miejscu, podłącz do niego kilka przewodów i przylutuj ich drugie końce do płytki drukowanej. Dobrym pomysłem byłoby również zastosowanie w tym przypadku rurek termokurczliwych.

Obraz
Obraz

Ostatnim krokiem jest zamontowanie metalowych wkładek gwintowanych, aby pokrywę można było przykręcić śrubami M3. W tym celu będziesz musiał użyć lutownicy, aby je podgrzać, aby można je było wepchnąć do otworów. Możesz zapoznać się z tą instrukcją, jeśli potrzebujesz więcej informacji na temat dodawania metalowych gwintów do wydruków 3D.

Obraz
Obraz

Krok 5: Konfiguracja serwera

Konfiguracja serwera
Konfiguracja serwera

Przed wgraniem firmware do ESP8266 jest jeszcze jedna rzecz, którą należy zrobić, a mianowicie skonfigurować serwer do logowania danych odbieranych przez urządzenie. W tym celu możesz użyć praktycznie dowolnej maszyny z systemem Linux, od Raspberry Pi w sieci prywatnej po droplet DigitalOcean. Poszedłem z tym później, ale proces jest prawie taki sam, bez względu na to, co wybierzesz.

Instalacja Apache, MySQL (MariaDB) i PHP

Najpierw musimy skonfigurować LAMP, czyli zainstalować na serwerze Apache, MySQL (MariaDB) i PHP. W tym celu musisz użyć menedżera pakietów swojej dystrybucji, ze względu na przykład użyję apt, który jest menedżerem pakietów używanym przez prawie każdą dystrybucję opartą na Debianie, w tym Raspbian.

aktualizacja sudo apt

sudo apt zainstaluj apache2 mysql-server mysql-client php libapache2-mod-php php-mysql

Po wykonaniu tej czynności, jeśli umieścisz adres IP swojego serwera w pasku adresu przeglądarki, powinieneś być w stanie zobaczyć domyślną stronę Apache.

Konfiguracja bazy danych

Teraz potrzebujemy bazy danych do rejestrowania danych. Najpierw połącz się z MySQL jako root, uruchamiając, sudo mysql

I utwórz bazę danych i użytkownika z dostępem do niej w następujący sposób, TWÓRZ BAZY DANYCH `czujniki`

UŻYWAJ „czujników”; CREATE TABLE `temperature` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `client_id` smallint(6) NOT NULL, `value` smallint(6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, KLUCZ PODSTAWOWY (` id`)) ENGINE=InnoDB; CREATE TABLE `wilgotność` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `client_id` smallint(6) NOT NULL, `value` smallint(6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, KLUCZ PODSTAWOWY (` id`)) ENGINE=InnoDB; UTWÓRZ UŻYTKOWNIKA '[nazwa użytkownika]'@'localhost' ZIDENTYFIKOWANY PRZEZ '[hasło]'; PRZYZNAJ WSZYSTKIE PRZYWILEJE 'sensors'.* 'sensors'@'localhost'; WYJŚCIE

Pamiętaj, aby zastąpić [nazwa użytkownika] i [hasło] rzeczywistą nazwą użytkownika i hasłem użytkownika MySQL, którego lubisz. Zanotuj je również, ponieważ będziesz ich potrzebować w następnym kroku.

Konfiguracja skryptów logowania i interfejsu sieciowego

Przejdź do katalogu /var/www/html, który jest głównym dokumentem domyślnego wirtualnego hosta Apache, usuń plik HTML zawierający domyślną stronę internetową i pobierz znajdujące się w nim skrypty logowania i interfejsu sieciowego.

cd /var/www/html

sudo rm index.html sudo wget https://raw.githubusercontent.com/magkopian/esp-arduino-temp-monitor/master/server/log.php sudo wget https://raw.githubusercontent.com/magkopian/esp- arduino-temp-monitor/master/server/index.php

Teraz edytuj skrypt logowania za pomocą nano, sudo nano log.php

Musisz zastąpić [nazwa użytkownika] i [hasło] nazwą użytkownika i hasłem użytkownika MySQL, które utworzyłeś w poprzednim kroku. Zastąp także [klucz klienta] unikalnym ciągiem i zanotuj go. Będzie to używane jako hasło, aby monitor mógł uwierzytelnić się na serwerze.

Na koniec edytuj index.php za pomocą nano, sudo nano index.php

i zastąp [nazwa użytkownika] i [hasło] nazwą użytkownika i hasłem użytkownika MySQL, tak jak w przypadku skryptu logowania.

Konfiguracja HTTPS (opcjonalnie)

Może to być opcjonalne, ale jeśli połączenie między ESP8266 a serwerem odbywa się przez Internet, zdecydowanie zaleca się użycie szyfrowania.

Niestety, nie możesz po prostu użyć czegoś takiego jak Let’s Encrypt do uzyskania certyfikatu. Dzieje się tak, ponieważ przynajmniej w momencie pisania, biblioteka klienta HTTP dla ESP8266 nadal wymaga podania odcisku palca certyfikatu jako drugiego argumentu podczas wywoływania metody http.begin(). Oznacza to, że jeśli używasz czegoś takiego jak Let’s Encrypt, będziesz musiał aktualizować oprogramowanie układowe do chipa co 3 miesiące, aby zaktualizować odcisk palca certyfikatu po każdym odnowieniu.

Sposobem na obejście tego byłoby wygenerowanie certyfikatu z podpisem własnym, który wygasa po bardzo długim czasie (np. 10 lat) i utrzymywanie skryptu logowania na własnym wirtualnym hoście z własną subdomeną. W ten sposób możesz mieć interfejs sieciowy do dostępu do danych w oddzielnej subdomenie, która będzie używać odpowiedniego certyfikatu od zaufanego urzędu. Użycie certyfikatu z podpisem własnym w tym przypadku nie jest kwestią bezpieczeństwa, ponieważ odcisk certyfikatu, który jednoznacznie go identyfikuje, zostanie zakodowany na stałe w oprogramowaniu układowym, a certyfikat będzie używany tylko przez ESP8266.

Zanim zaczniemy, założę, że posiadasz już nazwę domeny i możesz na niej tworzyć subdomeny. Tak więc, aby wygenerować certyfikat, który wygasa po 10 latach, uruchom następujące polecenie i odpowiedz na pytania.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/sensors.key -out /etc/ssl/certs/sensors.crt

Ponieważ jest to certyfikat z podpisem własnym, odpowiedź na większość pytań nie ma większego znaczenia, z wyjątkiem pytania, które prosi o nazwę pospolitą. W tym miejscu musisz podać pełną subdomenę, która będzie używana dla tego wirtualnego hosta. Subdomena, którą tu podasz, będzie musiała być taka sama jak nazwa_serwera, którą ustawisz później w konfiguracji hosta wirtualnego.

Następnie utwórz nową konfigurację hosta wirtualnego, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

o następującej treści, NazwaSerwera [subdomena] DocumentRoot /var/www/sensors SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Opcje +FollowSymlinks -Indexes AllowOverride All}/CHELog_{DIRA error-ssl.log CustomLog ${APACHE_LOG_DIR}/sensors-access-ssl.log połączone

Ponownie pamiętaj, aby zastąpić [subdomenę] tą samą subdomeną, której użyłeś z certyfikatem. W tym momencie będziesz musiał wyłączyć domyślny wirtualny host Apache, sudo a2dissite 000-default

zmienić nazwę głównego katalogu dokumentów, sudo mv /var/www/html /var/www/czujniki

i wreszcie włącz nowy wirtualny host i zrestartuj Apache, sudo a2ensite czujniki-ssl

sudo systemctl uruchom ponownie apache2

Ostatnią rzeczą, którą trzeba zrobić, jest uzyskanie odcisku palca certyfikatu, ponieważ trzeba go użyć w kodzie oprogramowania układowego.

openssl x509 -noout -fingerprint -sha1 -inform pem -in /etc/ssl/certs/sensors.crt

Funkcja http.begin() oczekuje, że ograniczniki między bajtami odcisku palca będą spacjami, więc przed użyciem w kodzie musisz zastąpić dwukropki spacjami.

Teraz, jeśli nie chcesz używać certyfikatu z podpisem własnym dla interfejsu internetowego, skonfiguruj nową subdomenę i utwórz nową konfigurację hosta wirtualnego, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

o następującej treści, ServerName [subdomena] DocumentRoot /var/www/sensors #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomena]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[subdomena]/privkey.pem #SSLCertificateChainFile /etc /letsencrypt/live/[subdomena]/chain.pem Opcje +FollowSymlinks -Indexes AllowOverride All ErrorLog ${APACHE_LOG_DIR}/sensors-web-error-ssl.log CustomLog ${APACHE_LOG_DIR}/sensors-web-access-ssl.log połączone

Pamiętaj, aby zastąpić [subdomenę] subdomeną skonfigurowaną dla interfejsu internetowego. Następnie włącz nowy wirtualny host, zrestartuj Apache, zainstaluj certbot i uzyskaj certyfikat dla nowej subdomeny od Let's Encrypt, sudo a2ensite czujniki-web-ssl

sudo systemctl restart apache2 sudo apt aktualizacja sudo apt install certbot sudo certbot certonly --apache -d [subdomena]

Po uzyskaniu certyfikatu ponownie edytuj konfigurację hosta wirtualnego, aby odkomentować wiersze SSLEngine, SSLCertificateFile, SSLCertificateKeyFile i SSLCertificateChainFile, a następnie zrestartuj Apache.

A teraz możesz użyć pierwszej subdomeny, która używa certyfikatu z podpisem własnym do przesyłania danych z ESP8266 na serwer, a drugiej do dostępu do interfejsu WWW z Twojej przeglądarki. Certbot zadba również o automatyczne odnawianie certyfikatu Let's Encrypt co 3 miesiące, korzystając z licznika systemowego, który powinien być domyślnie włączony.

Krok 6: Programowanie ESP8266

Programowanie ESP8266
Programowanie ESP8266

Na koniec pozostaje już tylko załadować firmware do mikrokontrolera. Aby to zrobić, pobierz kod źródłowy oprogramowania układowego stąd i otwórz go za pomocą Arduino IDE. Musisz zastąpić [SSID] i [Hasło] rzeczywistym identyfikatorem SSID i hasłem swojej sieci Wi-Fi. Będziesz także musiał zastąpić [ID klienta] i [Klucz klienta] w wywołaniu funkcji sprintf tymi, których użyłeś w skrypcie PHP na serwerze. Na koniec musisz zastąpić [Host] nazwą domeny lub adresem IP serwera. Jeśli używasz HTTPS, będziesz musiał również podać odcisk palca swojego certyfikatu jako drugi argument w wywołaniu funkcji http.begin(). Wyjaśniłem, jak uzyskać odcisk cyfrowy certyfikatu w sekcji „Konfiguracja HTTPS” w poprzednim kroku.

Następnie, jeśli jeszcze tego nie zrobiłeś, będziesz musiał zainstalować podstawowy pakiet społecznościowy ESP8266 za pomocą menedżera płyty Arduino IDE. Gdy to zrobisz, wybierz NodeMCU 1.0 (moduł ESP-12E) z menu płyt. Następnie musisz zainstalować bibliotekę SimpleDHT za pomocą Menedżera bibliotek. Na koniec naciśnij przycisk Zweryfikuj w lewym górnym rogu okna IDE, aby upewnić się, że kod skompiluje się bez błędów.

A teraz w końcu nadszedł czas na wypalenie firmware na mikrokontrolerze. W tym celu przesuń zworkę JP1 w prawo, aby GPIO0 ESP8266 było połączone z masą, co umożliwi tryb programowania. Następnie podłącz konwerter USB na port szeregowy za pomocą przewodów połączeniowych do nagłówka programowania oznaczonego jako P1. Pin 1 nagłówka programowania jest uziemiony, pin 2 to pin odbiorczy ESP8266, a pin 3 transmisyjny. Potrzebujesz odbioru ESP8266, aby przejść do transmisji twojego konwertera USB na szeregowy, transmisji do odbioru i oczywiście uziemienia.

Na koniec zasil urządzenie napięciem 5 V za pomocą kabla USB do gniazda DC i podłącz konwerter USB do portu szeregowego do komputera. Powinieneś teraz widzieć wirtualny port szeregowy, do którego podłączony jest ESP8266, gdy tylko otworzysz menu narzędzi w swoim IDE. Teraz wystarczy nacisnąć przycisk Prześlij i to wszystko! Jeśli wszystko poszło zgodnie z oczekiwaniami, powinieneś być w stanie zobaczyć odczyty temperatury i wilgotności na wyświetlaczu LCD urządzenia. Gdy ESP8266 połączy się z Twoją siecią i zacznie komunikować się z serwerem, na wyświetlaczu powinna pojawić się również aktualna data i godzina.

Po kilku godzinach, gdy serwer zbierze odpowiednią ilość danych, powinieneś być w stanie zobaczyć wykresy temperatury i wilgotności, odwiedzając http(s)://[host]/index.php?client_id=[identyfikator klienta]. Gdzie [host] to adres IP twojego serwera lub subdomeny, której używasz dla interfejsu internetowego, a [identyfikator klienta] to identyfikator klienta urządzenia, który jeśli zostawisz domyślną wartość, powinien wynosić 1.

Zalecana: