Spisu treści:

Czujnik temperatury sieci domowej: 7 kroków
Czujnik temperatury sieci domowej: 7 kroków

Wideo: Czujnik temperatury sieci domowej: 7 kroków

Wideo: Czujnik temperatury sieci domowej: 7 kroków
Wideo: Czujnik temperatury i wilgotności TUYA WiFi - monitoruj warunki w miejscu pracy i sypialni. 2024, Listopad
Anonim
Czujnik temperatury sieci domowej
Czujnik temperatury sieci domowej

Co musisz wiedzieć, aby wykonać ten projekt:

Musisz wiedzieć o: - niektórych umiejętnościach elektronicznych (lutowanie)

- Linux

- Arduino IDE

(konieczna będzie aktualizacja dodatkowych płyt w IDE:

- aktualizacja/programowanie płytki ESP poprzez Arduino IDE.

(w sieci jest kilka fajnych samouczków)

Można to zrobić za pomocą Arduino Uno lub za pomocą FTDI (adapter USB na szeregowy).

Użyłem mojego Uno, ponieważ nie miałem żadnego portu szeregowego na moim komputerze ani nie miałem FTDI

Krok 1: Idź na zakupy

Iść na zakupy
Iść na zakupy

Czego będziesz potrzebować, aby tak się stało?

W przypadku cyfrowego czujnika temperatury i wilgotności:

- Płytka stykowa lub alternatywa, taka jak prototypowa płytka drukowana, lut, lutownica…

- Trochę drutu

- dwa zworki

- rezystor 10k Ohm

- ESP12F (inne modele też mogą działać…)

- DHT22 (nieco droższy niż DHT11, ale dokładniejszy)

- 3 akumulatory AA i uchwyt na baterie

- małe plastikowe pudełko, w którym można umieścić swój projekt

- W późniejszym etapie planuję dodać HT7333 z dwoma kondensatorami 10uF pomiędzy akumulatorem a ESP

do stabilizacji napięcia wejściowego (VCC) do zalecanego 3,3V, ale także do ochrony ESP przed przepięciem.

W części dotyczącej sieci:

- Twoja domowa sieć WiFi

W przypadku części serwerowej:

- Dowolny system oparty na Linuksie (zawsze włączony!)

Użyłem Raspberry Pi (którego używam również jako serwera dla moich zewnętrznych kamer IP).

- kompilator gcc do kompilacji kodu serwera

- pakiet rrdtool do przechowywania danych i generowania wykresów

- Apache (lub inny serwer WWW)

Twój ulubiony komputer stacjonarny lub laptop z zainstalowanym Arduino IDE.

Krok 2: Konfiguracja i tło

Konfiguracja i tło
Konfiguracja i tło

W tej wersji podłączonego do Wi-Fi - żeby nie powiedzieć IOT - czujnika temperatury i wilgotności użyłem ESP12F, DHT22 i uchwytu na 3 baterie AA z ładowalnymi bateriami.

Co 20 minut ESP wykonuje pomiar z DHT22 i wysyła go do serwera (Raspberry Pi) przez UDP w mojej domowej sieci WiFi. Po wysłaniu pomiarów ESP zapada w głęboki sen. Oznacza to, że tylko zegar czasu rzeczywistego modułu pozostaje zasilany, co zapewnia niewiarygodną oszczędność energii. Przez około 5 sekund moduł wymaga około 100mA, a następnie w ciągu 20 minut głębokiego snu tylko 150uA.

Nie chciałem korzystać z żadnej usługi internetowej, ponieważ mam swoje Raspberry Pi, które i tak jest zawsze włączone iw ten sposób miałem przyjemność napisać również część serwerową.

Na serwerze (Raspbian Pi z systemem Raspbian) napisałem prosty odbiornik (serwer) UDP, który przechowuje wartości w prostym RRD. (Baza danych Round Robin przy użyciu RRDtool autorstwa Tobiasa Oetikera.)

Zaletą RRDtool jest to, że tworzysz bazę raz, a jej rozmiar pozostaje ten sam. Ponadto nie musisz mieć serwera bazy danych (takiego jak mySQLd) działającego w tle. RRDtool daje Ci narzędzia do tworzenia Bazy Danych i generowania wykresów.

Mój serwer cyklicznie tworzy wykresy i wyświetla wszystko na bardzo prostej stronie http. Mogę sprawdzić swoje odczyty za pomocą prostej przeglądarki, łącząc się z serwerem Apache2 na Raspberry Pi!

W końcu nie miałem FTDI (USB na szeregowy), więc użyłem mojego Arduino UNO. Musisz podłączyć TX i RX oraz GND ESP i UNO. (Wiem, twój instynkt może ci powiedzieć, żebyś skrzyżował RX i TX… też próbował, nie działa.)

Nie dokonałem konwersji poziomu (UNO: Wysoki = 5 V, ale ESP to w zasadzie urządzenie 3,3 V… Na rynku jest kilka fajnych FTDI, w których można nawet wybrać wysoki poziom na 5 lub 3,3 V.

Mój obwód zasilany jest 3 akumulatorami AA - a więc tak naprawdę 3 X 1,2V. W późniejszej fazie zamierzam umieścić HT7333 między akumulatorem a obwodem dla bezpieczeństwa; nowo naładowane akumulatory mogą mieć napięcie powyżej 1,2V, a ESP powinien być zasilany min. 3V i max. 3,6V. Także jeśli zdecyduję się - w chwili słabości - na włożenie baterii alkalicznych (3 X 1,5V = 4,5V) to mój ESP się nie usmaży!

Rozważałem również użycie panelu słonecznego o wymiarach 10 cm x 10 cm, ale nie było to warte zachodu. Robiąc 3 pomiary na godzinę (zasadniczo 3x 5 sekund @ 100mA max. i przez resztę czasu @100uA) mam nadzieję zasilać mój układ przez 1 rok na tych samych akumulatorach.

Krok 3: Arduino - część ESP12

Arduino - część ESP12
Arduino - część ESP12
Arduino - część ESP12
Arduino - część ESP12

Zrobiłem ten projekt w różnych krokach.

Istnieje kilka linków, które pomagają zaimportować ESP12 (aka. ESP8266) do Arduino IDE. (Musiałem użyć wersji 2.3.0 zamiast najnowszej z powodu błędu, który mógł zostać w międzyczasie rozwiązany…)

Zacząłem od podłączenia ESP przez mój Arduino UNO (używany tylko jako mostek między moim komputerem przez USB do portu szeregowego) do interfejsu szeregowego ESP. Wyjaśniają to oddzielne instrukcje.

W moim skończonym projekcie zostawiłem przewody do podłączenia do portu szeregowego na wypadek, gdybym kiedykolwiek musiał rozwiązywać problemy. RX

Następnie musisz podłączyć swój ESP12 w następujący sposób:

Kołki ESP…

GND UNO GND

RX UNO RX

TX UNO TX

PL VCC

GPIO15 GND

Początkowo próbowałem zasilać mój ESP z 3,3 V na UNO, ale szybko przeszedłem do zasilania mojego ESP za pomocą zasilacza stołowego, ale możesz również użyć swojego akumulatora.

GPIO0 Podłączyłem ten zworką do GND aby umożliwić flashowanie (=programowanie) ESP.

Pierwszy test: zostaw zworkę otwartą i uruchom monitor szeregowy w Arduino IDE (przy 115200 bodach!).

Wyłącz i włącz ESP, powinieneś zobaczyć jakieś śmieci, a następnie komunikat taki jak:

Ai-Thinker Technology Co. Ltd. gotowy

W tym trybie ESP działa trochę jak staromodny modem. Musisz używać poleceń AT.

Wypróbuj następujące polecenia:

AT+RST

i następujące dwa polecenia

AT+CWMODE=3

ok

AT+CWLAP

Powinno to dać listę wszystkich sieci Wi-Fi w okolicy.

Jeśli to działa, jesteś gotowy na następny krok.

Krok 4: Testowanie ESP jako klienta NTP (Network Time Protocol)

Testowanie ESP jako klienta NTP (Network Time Protocol)
Testowanie ESP jako klienta NTP (Network Time Protocol)
Testowanie ESP jako klienta NTP (Network Time Protocol)
Testowanie ESP jako klienta NTP (Network Time Protocol)

W Arduino IDE, w Plik, Przykłady, ESP8266WiFi, załaduj NTPClient.

Aby to działało, potrzebne są drobne poprawki; musisz podać swój identyfikator SSID i hasło do swojej sieci Wi-Fi.

Teraz załóż zworkę, zwierając GPIO0 do GND.

Wyłącz i włącz ESP i prześlij szkic do ESP.

Po kompilacji powinno rozpocząć się przesyłanie do ESP. Niebieska dioda LED na ESP będzie szybko migać podczas pobierania kodu.

Zauważyłem, że musiałem trochę pobawić się z restartowaniem IDE, restartem ESP, zanim wgranie zadziała.

Zanim zaczniesz kompilować/przesyłać szkic, pamiętaj o zamknięciu konsoli szeregowej (=monitor szeregowy), ponieważ uniemożliwi to przesyłanie.

Gdy przesyłanie się powiedzie, możesz ponownie otworzyć monitor szeregowy, aby zobaczyć, jak ESP skutecznie pobiera czas z Internetu.

Świetnie, zaprogramowałeś ESP, podłączyłeś się do Wi-Fi i dostałeś czas z Internetu.

W następnym kroku przetestujemy DHT22.

Krok 5: Testowanie czujnika DHT22

Testowanie czujnika DHT22
Testowanie czujnika DHT22

Teraz wymagane jest dodatkowe okablowanie.

Piny DHT…Podłącz pin 1 (po lewej) czujnika do VCC (3.3V)

Podłącz pin 2 ESP GPIO5 (DHTPIN na szkicu)

Podłącz pin 4 (po prawej) czujnika do MASY

Podłącz rezystor 10K z pinu 2 (dane) do pinu 1 (zasilanie) czujnika.

Podobnie jak w przypadku testu NTP, znajdź szkic DHTtester i dostosuj go w następujący sposób:

#define DHTPIN 5 // wybraliśmy GPIO5 do połączenia z czujnikiem#define DHTTYPE DHT22 // ponieważ używamy DHT22, ale ten kod/biblioteka jest również odpowiednia dla DHT11

Ponownie zamknij monitor szeregowy, wyłącz i włącz ESP, skompiluj i sflashuj ESP.

Jeśli wszystko pójdzie dobrze, pomiary pojawią się na monitorze szeregowym.

Z czujnikiem można się trochę pobawić. Jeśli będziesz na nim oddychać, zobaczysz, że wilgotność rośnie.

Jeśli masz lampę biurkową (nie LED), możesz poświecić czujnikowi, aby go trochę podgrzać.

Świetny! Teraz działają dwie duże części czujnika.

W następnym kroku skomentuję ostateczny kod.

Krok 6: Łączenie w całość…

Łączymy to w całość…
Łączymy to w całość…

Znowu dodatkowe okablowanie… to ma umożliwić DeepSleep.

Pamiętaj, DeepSleep to niesamowita funkcja dla urządzeń IoT.

Jeśli jednak twój czujnik jest podłączony do DeepSleep, może być trudno przeprogramować ESP, więc zrobimy kolejne połączenie zworkowe między

GPIO16-RST.

Tak, to MUSI być GPIO16, ponieważ jest to GPIO, które jest przewodowe, aby wybudzić urządzenie, gdy zegar czasu rzeczywistego wyłączy się po DeepSleep!

Podczas testów możesz zdecydować się na 15-sekundowy DeepSleep.

Kiedy debugowałem, przestawiłem zworkę na GPIO0, aby móc sflashować swój program.

Po zakończeniu pobierania przestawiłem zworkę na GPIO16, aby DeepSleep działał.

Kod dla ESP nazywa się TnHclient.c

Musisz zmienić SSID, hasło i adres IP swojego serwera.

Istnieją dodatkowe wiersze kodu, których można użyć do rozwiązywania problemów lub testowania konfiguracji.

Krok 7: Serwerowa strona rzeczy

Serwerowa strona rzeczy
Serwerowa strona rzeczy
Serwerowa strona rzeczy
Serwerowa strona rzeczy

Powszechnym nieporozumieniem jest to, że UDP jest zawodny, a TCP jest…

To tak samo głupie, jak stwierdzenie, że młotek jest bardziej użyteczny niż śrubokręt. Są to po prostu różne bardzo przydatne narzędzia i oba mają swoje zastosowania.

Swoją drogą, bez UDP Internet by nie działał… DNS jest oparty na UDP.

Dlatego wybrałem UDP, ponieważ jest bardzo lekki, łatwy i szybki.

Wydaje mi się, że moje WiFi jest bardzo niezawodne, więc klient wyśle co najwyżej 3 pakiety UDP, jeśli potwierdzenie „OK!” nie jest odbierany.

Kod C dla TnHserver znajduje się w pliku TnHServer.c.

W kodzie znajduje się kilka komentarzy wyjaśniających to.

Będziemy potrzebować na serwerze dodatkowych narzędzi: rrdtool, apache i być może tcpdump.

Aby zainstalować rrdtool na Raspbian, wystarczy zainstalować pakiet w następujący sposób: apt-get install rrdtool

Jeśli potrzebujesz debugować ruch sieciowy, przydaje się tcpdump apt-get install tcpdump

Potrzebowałem serwera WWW, aby móc korzystać z przeglądarki w celu przeglądania wykresów: apt-get install apache2

Użyłem tego narzędzia: https://rrdwizard.appspot.com/index.php, aby uzyskać polecenie utworzenia bazy danych Round Robin. Wystarczy uruchomić to tylko raz (jeśli zrobisz to dobrze za pierwszym razem).

rrdtool utwórz TnHdatabase.rrd --rozpocznij teraz-10s

--krok '1200'

'DS:Temperatura:WSKAŹNIK:1200:-20,5:45,5'

„DS:Wilgotność:WSKAŹNIK:1200:0:100.0”

„RRA:ŚREDNIA:0,5:1:720”

„RRA:ŚREDNIA:0,5:3:960”

'RRA:ŚREDNIA:0,5:18:1600'

Na koniec używam wpisu crontab, aby codziennie o północy restartować mój serwer TnHserver. Używam TnHserver jako zwykły użytkownik (tj. NIE root) jako środek ostrożności.

0 0 * * * /usr/bin/pkill TnHserver; /home/user/bin/TnHserver >/dev/null 2>&1

Możesz sprawdzić, czy TnHserver działa, wykonując

$ ps -elf | grep TnHserver

i możesz sprawdzić, czy nasłuchuje pakietów na porcie 7777, wykonując

$ netstat -anu

Aktywne połączenia internetowe (serwery i nawiązane)

Proto Recv-Q Send-Q Adres lokalny Adres obcy Stan

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Wreszcie CreateTnH_Graphs.sh.txt to przykładowy skrypt do generowania wykresów. (Generuję skrypty jako root, możesz nie chcieć tego robić.)

Korzystając z bardzo prostej strony internetowej, możesz oglądać wykresy z dowolnej przeglądarki w sieci domowej.

Zalecana: