W zwiazku z taniością układów ESP8266 i ich wpółpracą z systemem domoticz postanowiłem zagłębić się w temat. Tak powstał pomysł wyświetlacza do salonu pełniącego funkcje prostej stacji pogodowej.
Zacznijmy od firmware dla esp. Na razie używam gotowca do współpracy z domoticz czyli ESPEasy Olbrzymie możliwości podłączanych czujników i najważniejsze projekt w ciągłym rozwoju.
Co potrzebujemy?
Na początek sam moduł ESP, kupiłem kilka wersji, w tym projekcie użyłem NodeMCU V3. Można znaleźć bez problemu na alledrogo czy u majfrendów.
Wyświetlacz LCD 4x20 znaków, ja koniecznie chciałem negatyw i znalazłem bez problemu polską firmę ZYSCOM sprzedającą je na ebay.
Konwerter stanów logicznych 3-5V niezbędny do podłączenia wyświetlacza do szyny I2C. np ten
Konwerter do wyświetlacza HD44780 by działał na szynie I2C np ten
Czujnik temperatury i wilgotności DHT22
Czujnik ciśnienia BMP280 lub można użyć BME280 który posiada też czujnik wilgotności i wtedy nie ma potrzeby używania DHT22
Do tego jakaś obudowa, mi przypasowała posiadana wcześniej obudowa z praktikera w której był rozgałęziacz, ładowarka USB firmy ORWO.
Zasilacz 220V na 5V o mocy 3W wystarczy. W wspomnianej obudowie jest ładowarka usb, ale napięcie z niej idące, o ile nadaje się do ładowania USB, kompletnie nie nadaje sie do zasilania ESP. Układ co chwila się resetował. Podejrzewam spore zakłócenia acz nie chciało mi się dochodzić co jest grane i użyłem sprawdzonej w boju kostki kupionej kiedyś u majfriendów. Tu jakiś podobny
Łączymy wszystko lutując kabelki pamiętając by strona konwertera I2C o napięciu 3,3 V była podłączona do ESP i do czujnika ciśnienia a 5V do wyświetlacza.
Konwerter wyświetlacza z szyny równoległej na I2C lutujemy wszystkimi nóżkami tak by złącze I2C wystawało po lewej górnej stronie patrząc na wyświetlacz, a nie na płytkę drukowaną. Przykład
Do tego robimy dodatkowe odprowadzenie szyny I2C do czujnika ciśnienia. Czujnik DHT podłączymy na osobnym pinie.
I tak Zasilanie +5V podłączamy na wejście Vin do ESP oraz na wejście VCC konwertera wyświetlacza
Zasilanie 3.3V z płytki ESP podpinamy do czujnika ciśnienia, DHT22 i jedną linię do konwertera stanów logicznych. Można puścić linie niezależnie, wyjść 3.3V na NodeMcu jest kilka.
Masa idzie do wszystkich urządzeń na pin oznaczony GND.
Szyna I2C domyślnie jest na portach GPIO4 i 5 w ESPEasy wiec na NodeMCU będzie to port D2 dla SDA i D1 dla SCL
Dla czujnika ciśnienia opisy są nieco inne i podłączamy SCK (SCL) i SDI (SDA) Opis
DHT22 podłączamy np pod port GPIO12 czyli na nodemcu opisany jako D6 Opis
Uwaga nie wszystkie porty mogą wykonywać wszystkie funkcje. Chcesz zmienić na inne przeczytaj dokumentację. Szczegółowe informacje są na stronach ESPEasy przy konkretnych urządzeniach.
Pewnie to się przyda na etapie montażu :D
Mając gotowe części zaczynamy od przeprogramowania ESP8266 z softu NodeMCU na ESPEasy. Podłączamy naszą płytkę przez złącze usb do komputera. Po podłączeniu komputer powinien zobaczyć nową sieć WIFI o SSID ESP i 6 numerków. Naciskamy guzik flash i trzymając go naciskamy reset. Po czym po chwili puszczamy flash. Weszliśmy w tryb umozliwiający zmianę firmware. Teraz odpalamy ściągnięty firmware ze strony ESPEasy np 142 RC5. I używamy polecenia flash z rozpakowanego zipa. Podajemy port COM pod którym zgłosił się nasz ESP potem wielkość firmware dla tej płytki to 4096 i wersję softu czyli 142. Po zakończeniu odłączamy moduł od USB, czekamy ok 10 sekund i podłączamy ponownie. Powinna pojawić się po chwili sieć WIFI o nazwie ESP_0. Jeśli tak podłączamy się do niej i powinna się sama uruchomić przeglądarka na stronę modułu. Wybieramy tam naszą domową sieć WIFI, wpisujemy do niej hasło i gotowe. Moduł przygotowany do montażu. Jeśli nadal widzisz sieć ESP_6 numerków powtórz procedurę. Przy jednym z modułów potrzebowałem 3 podejść.
Z obudowy wyrzuciłem włącznik oraz gniazdka sieciowe i pozostawiłem ładowarkę USB. W salonie przy kanapie może się przydać.
Wygląda to mniej więcej tak po wstępnym zmontowaniu jeszcze bez czujnika DHT22. Czujniki montujemy jak najblizej otworu po prawej w głębi tak by miały dostęp świeżego powietrza.
Po odpaleniu trzeba skonfigurować ESPEasy tak by pokazało dane z czujników oraz zaczęło obsługiwać wyświetlacz. Wchodzimy na stronkę którą wcześniej wskazał nam soft po dodaniu do sieci WIFI. Dobrym pomysłem jest rezerwacja adresu modułu na serwerze DHCP by nie zmieniał się przy zanikach zasilania.
W zakładce config podajemy nazwę naszego modułu. np ESP1 (ta nazwa będzie się rejestrować w DNS routera więc nie podajemy tam spacji), danych wifi nie zmieniamy za to trzeba podać adres ip serwerka domoticz , port 8080 jest domyślny chyba, że był zmieniany. oraz wypełnić pole Unit nr wpisując 1. Klikamy Submit.
W zakładce hardware nic nie zmieniamy.
W zakładce tools klikamy I2C Scan. Powinny pojawić się dwa urządzenia jak niżej.
0x27 to nasz ekran a 0x77 to czujnik ciśnienia. Zapamiętujemy oba adresy i przechodzimy do guzika Advanced.
Tu warto wpisać serwer NTP by mieć zawsze aktualny czas i móc go wyświetlać. Timezone w okresie zimowym to 60 minut.
Wracamy do ominiętej zakładki Devices:
W konfiguracji szczegółowej należy pamiętać by prawidłowo ustawić adresy urządzeń, typ czujnika DHT22 Wartość IDX wskazuje na urządzenie w domoticzu do którego będzie wysyłana wartość np z DHT22. Dla tego urządzenia tworzymy w domoticzu urządzenie dummy device z sensor type Temp+Hum następnie sprawdzamy jego ID i podajemy w konfiguracji ESP jako własnie IDX.
Możemy do domoticza dodać siłę sygnału wifi by na wykresie widzieć czy nie ma problemu z zasiegiem.
Ponizej szczegółowa konfiguracja ekranu LCD gdyż tutaj trzeba trochę wpisać:
W linii pierwszej wyświetlamy aktualny czas i siłę sygnału wifi dla celów diagnostycznych przynajmniej na początku
Linia 2 i 3 to dane z obu czujników.
U siebie przesyłam na ten ekran jeszcze dane z innego DHT22 znajdującego się na zewnątrz i robię to już z kodu LUA w skryptach domoticza:
sWeatherTemp, sWeatherHumidity = otherdevices_svalues['ESP2 DHT22']:match("([^;]+);([^;]+)") sWeatherTemp = roundNum(sWeatherTemp,1) sWeatherHumidity = roundNum(sWeatherHumidity,1) --print(sWeatherTemp) --print(sWeatherHumidity) runcommand = "curl '10.10.0.214/control?cmd=lcd,4,1,Out%20T:".. sWeatherTemp .. "C%20W:" .. sWeatherHumidity .. "%'"; os.execute(runcommand);
W poleceniu podajemy numer linii i znaku od którego mamy zacząć (tutaj 4,1) a potem interesujące nas dane, znak %20 zastępuje spację.
Po sprawdzeniu wszystkiego izolujemy odsłonięte elementy, miejsca lutowań oraz mocujemy urządzenia w obudowie np na hotglue i składamy całość.
A tak prezentuje się po złożeniu jeszcze bez ramki maskującej wyświetlacz, której do dziś nie wybrałem, pewnie dlatego że LCD do tej obudowy całkiem nieźle pasuje :D.
A tak prezentują się zebrane dane w domoticzu:
BMP280 jest głębiej w obudowie przez co ciepło zasilacza, wyświetlacza i ESP ma wpływ na jego odczyt temperatury.