ESP8622 z wyświetlaczem SSD1306 (OLED) DHT22, BH1750 pod ESPEasy

Domoticz cz. 3.1: ESP Easy na ESP8266 – zdalny i lokalny wyświetlacz OLED, temperatura, wilgotność, światło – stacja pogodowa

W poprzednim wpisie podłączyliśmy wyświetlacz OLED typu SSD1306 do Raspberry Pi. Twórca ESP Easy – Richard ten Klooster (https://github.com/ESP8266nu/ESPEasy) – rozwija projekt pozwalając na uzupełnianie bezprzewodowego czujnika o nowe elementy. Dziś w bardzo prosty sposób uzupełnimy nasz czujnik o wyświetlacz oraz miernik natężenia światła. Nasza stacja „kontroli” pogodoy dostanie zdalny wyświetlacz.

Połączenie takich elementów pomiarowych powstało ponieważ czujnik ma mierzyć temperaturę i wilgotność w domku z drewnem, a dodatkowa lampka oświetlająca drogę – ma zapalać się po zmroku. Poza tym, chciałem przetestować stabilność I2C przy dwóch urządzeniach na ESPEasy.

Czego będziemy potrzebować?

Software & Hardware

Do dzieła

Podobnie jak poprzednio, ale nawet nie używając tej wiedzy – podłączenie wyświetlacza OLED jest równie łatwe jak w Raspberry Pi. Po zalogowaniu się na adres ESPEasy – wybieramy które PINy będą służyły za szynę I2C. W przykładzie, są to domyślne: GPIO 4 & 5. Podłączamy nasz zasilacz do +3,3V, GND, oraz SDL i SCL do GPIO 4 & 5. Konfiguracja wygląda następująco:

ESP Easy - SSD1306
ESP Easy – SSD1306

Dla przypomnienia – tak nazywała się czujka oraz wartości jakie definiowaliśmy – musimy je podać ponownie, tak samo dla wyświetlacza, aby ESP pobrało właściwe dane:

ESPEasy DHT22 - config
ESPEasy DHT22 – config

Zauważmy, że jedną z pierwszych opcji jest adres na szynie I2C – aby zweryfikować wartość adresu, udajemy się do Tools->I2C Skan, który powinien nam dać wartość adresu – w przykładzie pojawia się już dodatkowo – korzystający z tej samej szyny, podłączony równolegle – czujnik natężenia światła BH1750:

ESP Easy - Scan i2c
ESP Easy – Scan i2c

Mamy więc poprawny adres (szesnastkowo): 0x3c!
Jeśli wszystko uzupełniliśmy dobrze, to po uruchomieniu ESPEasy, powinniśmy na ekranie otrzymać: „ESP Easy”.

Teraz należy skonfigurować sposób prezentacji na ekranie (normalny, odwrócony), oraz wybrać które linie wyświetlacza będą prezentowały dane,  jednak najpierw – spróbujmy wyświetlić coś z zewnątrz

Zdalny i lokalny wyświetlacz

ESPEasy umożliwia nie tylko wyświetlanie danych z lokalnych czujników – ale pozwala także wyświetlić dowolny tekst poprzez bardzo prostą kontrolę (bez uwierzytelnienia), a wszystko co potrzebne do wyświetlenia przekazujemy za pomocą URL.
Po pierwsze – możemy włączać i wyłączać nasz wyświetlacz. W przykładzie adresem IP naszego czujnika ESP Easy jest 10.20.30.40. Możemy wyłączyć ekran (bo zbyt mocno świeci w nocy)

Następnie go włączyć:

Możemy wyczyścić:

Gdy jednak chcemy wyświetlić jakąś wartość albo tekst – używamy w linii komend – na przykład na naszym Raspberry Pi curl’a:

na przykład:

Na koniec użyjemy tej funkcji aby wyświetlić wartość z domoticza na wyświetlaczu naszego czujnika (a więc – jakby w drugą stronę)

Wracajmy jednak do wyświetlania naszych zmiennych z DHT22 i czujnika natężenia światła – zaczynamy od statycznego tekstu – przedstawiającego naszą czujkę w Line 1. Line 2 oraz zgodnie z sugestią z wiki może zawierać uptime – oraz czas – wiemy że urządzenie działa.

Pamiętajmy, że czas ustawiamy z serwera NTP w Tools.

Jak widać aby ESPEasy wyświetliło czas lub wartość uptime, należy pobrać wartość ze zmiennej – aby to zrobić należy ją umieścić w znakach procentu (%). Wiki pokazuje, które wartości są dostępne do wyświetlnia.

Następnie wyświetlamy zmienne z naszych czujek – na początek DHT22. Jak pamiętamy w konfiguracji DHT22 nadaliśmy jej nazwę

ESPEasy DHT22 - config
ESPEasy DHT22 – config

– stąd też bierze się nazwa zmiennej AmicaTempHum. Konstrukcja wygląda trochę inaczej – tym razem zmienna jest okalana nawiasami kwadratowymi, a konkretna wartość czujnika – mamy przecież dwie w DHT 22, jest rozdzielana znakiem hash (#): [AmicaTempHum#Humidity]. Tym razem widoczny na końcu znak % służy do informowania o procentowej wilgotności.

Podobnie postępujemy z temperaturą. Po zadanym czasie raportowania ekran zostanie uzupełniony o nowe dane:

ESP8622 z wyświetlaczem SSD1306 (OLED) pod ESPEasy
ESP8622 z wyświetlaczem SSD1306 (OLED) pod ESPEasy

Pozostaje nam opcjonalnie podłączyć równolegle – a więc VCC 3,3V do VCC, SDA i SCL do SDA & SCL i GND do GND – czujnik natężenia światła BH1750. Podobnie jak DHT22 potrzebuje szczątkowych prądów do pracy, a płytka Amica NodeMCU ma odpowiedni zapas wydajności prądowej. Jeśli podłączymy ją poprawnie – będzie pokazywała po zaświeceniu – poprawną wartość natężenia w luksach:

ESP8622 z wyświetlaczem SSD1306 (OLED) DHT22, BH1750 pod ESPEasy
ESP8622 z wyświetlaczem SSD1306 (OLED) DHT22, BH1750 pod ESPEasy

Przy następnym pomiarze – dostajemy informację ile światła mamy do wykonania tego zdjęcia:
ESP8622 z wyświetlaczem SSD1306 (OLED) DHT22, BH1750 pod ESPEasy

Jeśli otrzymacie stałe wartości rzędu 54612 lux – to czujnik jest niepoprawnie podłączony.

To wszystko – po dodaniu odpowiednich wirtualnych sensorów (DHT22 już mamy, dodajemy natężenie światła) Domoticz dostanie informację o natężeniu światła. Wtedy przykładowo – dzięki prostemu skryptowi (tak jak w przypadku otwierania garażu) zapali lampę w odpowiednim czasie, gdy jest ciemno. Dzięki ‚Events’ w domoticzu jest to dość łatwe do zrobienia. Jednak w komentarzu do wpisu pojawił się ciekawy wątek!

Wyświetlamy wartości z domoticz na ekranie czujnika

Patrząc na przykład – widzimy, że linia 7 jest całkowicie pusta. Ponieważ posiadam czujnik ciśnienia i temperatury – chciałem go podłączyć jeszcze do ESP8266, ale ponieważ nie został wysłany na czas – sklep skasował zamówienie. Pozostaje czekać na kolejny… albo wykorzystać ten który już mam podłączony do domoticza! BMP180 o którym mowa – informuje mnie o temperaturze wokół domoticza oraz o ciśnieniu atmosferycznym w hPa. O ile temperatura nie jest aż tak interesująca – to zdecydowanie chciałbym na wyświetlaczu mieć ciśnienie. Jeśli pamiętacie wpis o otwieraniu garażu za pomocą skryptu LUA w domoticzu to pamiętacie, że można dzięki niemu pobrać wartość i wykonać dowolną „akcję”. Należy:

  • pobrać wartość ciśnienia
  • obciąć nieinteresujące miejsca po przecinku
  • wyświetlić wartość na SSD1306 naszego czujnika

Skrypt w LUA dostanie więc funkcję zaokrąglania do 1 miejsca po przecinku, a ponieważ wywoływać go wystarczy raz na minutę (można też przy zmianie – jak kto woli – wtedy if z devicechanged) wybieramy opcję time.

Miernik ciśnienia w domoticzu ma nazwę ‚TemperaturaCisnienie’ a więc nazwa skryptu to:

Adres IP należy oczywiście zmienić, a skrypt umieszczamy w /home/pi/domoticz/scripts/lua:

Po chwili w linii numer 7 dostaniemy informację o ciśnieniu!

Dodatkowo przykład z komentarzy:
Jeśli nadal macie podłączony termometr z poprzedniego wpisu o termometrze dla Domoticza – to odpowiedni skrypt wygląda następujaco (pamiętajcie o odpowiedniej nazwie!)

Tym razem uaktualniamy wartość tylko wtedy jeśli się zmieni.