niedziela, 14 czerwca 2020

Stacja Pogodowa ESP8266 + wyświetlacz T6963


Wcześniej stworzyłem stację pogodową przy której były użyte dwa mikrokontrolery Atmega328p  (arduino nano) i ESP8266 (NodeMCU) z wyświetlaczem opartym na sterowniku T6963.
Na forum https://www.elektroda.pl/rtvforum/topic3687207.html
rzucono mi rękawicę abym podłączył ESP8266 bezpośrednio do wyświetlacza. Początkowo pojawił się problem z biblioteką którą używałem do obsługi wyświetlacza - u8glib, biblioteka ta nie była kompatybilna z kompilatorem do ESP8266. Dzięki podpowiedzi użytkownika @khoam dowiedziałem się, że istnieje biblioteka u8g2 która również obsługuje ten wyświetlacz i jest zgodna z ESP8266. Kolejnym problemem była ilość wolnych portów, wyświetlacz z u8glib wymagał 13 linii sygnałowych, natomiast biblioteka u8g2 wymaga już 12 linii sygnałowych (RD podłączone na stałe do stanu wysokiego). Po przeczytani dokumentacji biblioteki okazało się, że można zwolnić jeszcze jedną linię - RESET wpisując w definicji tego pinu"U8X8_PIN_NONE" zamiast numeru portu procesora. Teraz obsługa wyświetlacza wymaga już 11 linii sygnałowych, a tyle wolnych posiada właśnie ESP8266( 9 portów D0-D8 + Rx i Tx).

Zmieniłem też sposób pozyskiwania danych pogodowych z serwisu OpenWeatherMap używając biblioteki
esp8266-weather-station https://github.com/ThingPulse/esp8266-weather-station
Biblioteka ta współpracuje z biblioteką do obsługi JSON - JsonListener.h - formatu danych które można odebrać z OpenWeatherMap, już sam nie bawię się w parsowanie danych. JsonListener pobiera się ona automatycznie przy pobieraniu biblioteki esp8266-weather-station. Dodatkowo biblioteka WeatherStation obsługuje zarówno pobieranie aktualnej pogody i prognozy pogody. W opcji bezpłatnej serwis oferuje prognozę w odstępach co 3 godziny.
U siebie wyświetlam jaka pogoda będzie za 3, 6 i 9 godzin.

Bezpośrednie podłączenie do wyświetlacza i większe zasoby niż w przypadku płytki Nano(Atmega328p) pozwoliły na dodanie grafiki którą utworzyłem za pomocą strony https://xbm.jazzychad.net

Kwestia podłączenia: komunikacja między wyświetlaczem a płytką z ESP nie wymaga konwertera poziomów z 5V na 3.3V - wyświetlacz i płytka zasilone są z 5V, natomiast komunikacja odbywa się na poziomie 3.3V - wyświetlacz akceptuje ten poziom napięć. W poprzednim wątku przewinęło się też zagadnienie zasilania kontrastu dla tego typu wyświetlacza. Dlatego też krótko wyjaśnię jak zrobiłem to u siebie:  użyłem przetwornicy SMA01L-15 izolowanej galwanicznie z wejściem 5V, a podającą na wyjściu 15V



Zagadnienie pobierania czasu i ustawiania strefy czasowej się nie zmieniły dlatego nie będę ich ponownie opisywał.

Dorzuciłem również możliwość utworzenia AccessPointa, ustawienia połączenia z siecią WiFi, podania klucza i lokalizacji z poziomu przeglądarki na stronie która jest wygenerowana z pomocą biblioteki WiFiManager.
Oto widok strony w smartfonie:


Wrzucam kod dla zainteresowanych, nie po to aby pokazać swoją pracę, a bardziej po to aby zachęcić do zrobienia podobnych projektów z wykorzystaniem środowiska Arduino i ESP8266. Tak naprawdę dużo roboty robią tutaj zewnętrzne biblioteki, także zasłużone brawa dla ich twórców.

Gotowy kod do pobrania:
WeatherStationESP8266_T6963 - opis.ino
Przy próbie kompilacji upewnij się że masz ściągnięte wszystkie biblioteki użyte w kodzie.

Instrukcja  jak uzyskać klucz do serwisu OpenWeatherMap:
https://docs.thingpulse.com/how-tos/openweathermap-key/

Open Weather Maps API - stąd można pozyskać dane środowiskowe (temperatura, wilgotność, itd...):
https://openweathermap.org/api

Jak dodać płytkę ESP8266 do Arduino IDE:
https://zalepa.blogspot.com/2017/08/modu-wifi-esp8266.html

Konwersja obrazu do formatu XBM:
https://xbm.jazzychad.net

Przetwornica z 5V na 15V:


Brak komentarzy:

Prześlij komentarz