ESP easy – prosty sposób na obsługę czujników po WiFi
Moda na IoT trwa. Bez wątpienia najpopularniejszym modułem jest ESP8266 i jego pochodne. Opisy pojawiały się już na stronie, od flashowania układu w Windows i Linux, po obsługę prostych czujników. Przedstawione tam programy były napisane w dość prostym języku Lua. Dziś opiszę jeszcze prostszą metodę obsługi różnych urządzeń przez ESP, bez konieczności pisania softu. Wszystko będzie się opierać na dość uniwersalnym ESPEasy.
ESP Easy – co to takiego?
ESP easy to firmware, które można wgrać w ESP o pojemnościach flash od 512kB. Zawiera ono graficzny interfejs użytkownika, zoptymalizowany pod przeglądarki urządzeń mobilnych (smartfony, tablety). Z jego poziomu można skonfigurować obsługę przekaźnika, czujnika DS1802, DHT11/22, wyświetlacza LCD, OLED i wiele innych, lista znajduje się tutaj: ESP Devices. Do tego mamy też zaimplementowane protokoły wysyłania danych do nadrzędnych kontrolerów, takich jak Domoticz czy ThingSpeak. Nic też nie stoi na przeszkodzie, by dane odczytywać lokalnie, choćby na wyświetlaczu LCD z konwerterem i2c czy OLED. Zbiór niezbędnych informacji znajduje się pod tym linkiem: ESPEasy wiki.
Wgrywanie ESP Easy
Firmware z esp easy traktujemy jak zwykły soft dla ESP. Sposób wgrania z poziomu Windowsa opisałem tutaj: ESP8266 – początki w Windows. Wraz z pobraniem paczki ze strony domowej projektu otrzymamy wersje do układów z pamięcią 512, 1024 i 4096kB oraz skrypt wgrywający, w którym podajemy numer wirtualnego portu COM, pojemność flash programowanego układu i wydanie espeasy, obecnie stabilna wersja to 120. Wgrywanie z poziomu linuksa opisałem tutaj: ESP8266 i Linux. Można też skorzystać ze skryptów, które znajdziemy tutaj: Flash script linux. Ja wykorzystałem popularny esptool.py, do pobrania np. stąd: GitHub. Przed flashowaniem dobrze jest wymazać pamięć EEPROM, na początek zobaczmy pod jakim wirtualnym portem com jest widziany nasz układ (tu akurat nodemcu v3):
dmesg | grep ttyUSB
No i jest to ttyUSB0. Przed wgraniem firmware’u dobrze jest wymazać flash:
./esptool.py --port /dev/ttyUSB0 erase_flash
Teraz czas na właściwe flashowanie, do nodemcu v3 wgrywamy soft o objętości 4MB (4096kB):
./esptool.py --port /dev/ttyUSB0 write_flash 0x0 ESPEasy_R120_4096.bin
Jako ciekawostkę pokażę jeszcze sreeny z wrzucania softu przy pomocy Felix script z podaniem parametrów (port, rozmiar pamięci, release):
I dalsza część:
Jak widać w kosnoli jest wypisane znacznie więcej rzeczy, ale efekt finalny taki sam, tj. wgrany soft esp easy do ESP.
Pierwsze uruchomienie ESP Easy
Zaraz po wgraniu firmware’u, moduł ESP pracuje jako access point i rozgłasza sieć WiFi o nazwie esp_0.
Hasło do sieci to configesp:
Po podłączeniu powinniśmy dostać ip z dhcp od ESP, jeśli tak się nie stało, to ustawny ręcznie jakiś z 192.168.4.x, gdzie musi być inny niż 1. Stronę konfiguracyjną znajdziemy pod adresem 192.168.4.1:
Na pierwszym ekranie mamy sieci WiFi wykryte przez ESP, z których trzeba wybrać tą, z którą chcemy się połączyć. Kolejny ekran poinformuje nas, pod jakim adresem w nowej sieci będzie dostępny moduł:
Czyli teraz łączymy się z siecią, do której jest podpięty ESP i otwieramy w przeglądarce wskazany adres:
Obsługa czujników w ESP Easy
Poniżej krótko opiszę podłączenie do esp easy czujnika temperatury/wilgotności i ciśnienia BME280 oraz wyświetlacza LCD 2×16 z konwerterem i2c. Zbierane dane meteo wyslemy sobie do thingspeak, który będzie rysował z nich wykresy. Czujnik BME280 musimy zasilić napięciem 3V3, a konwerter i2c 5V (wszystkie dostępne na płytce nodemcu v3) linie SCL i SDA magistrali i2c podciągnąłem do +3V3 za pomocą rezystorów 3,9kΩ. W sumie konwerter i2c od wyświetlacza powinien mieć dopasowanie poziomów napięć, ale dla uproszczenia podłączyłem to bezpośrednio, co jest trochę ryzykowne, ale działa bez zarzutu. W zakładce hardware wybieramy sobie, które GPIO będą liniami SCL i SDA:
Teraz dla bezpieczeństwa najlepiej odpiąć zasilanie od płytki i podłączyć czujnik BME280 i konwerter z wyświetlaczem do zasilania i pod wskazane porty.
Po włączeniu zasilania całości, wchodzimy pod adres ESP i wybieramy zakładkę Tools i wciskamy i2c scan, nasze dwa urządzenia powinny zostać wykryte:
Zapamiętujemy adres PCF8574 i przechodzimy do zakładki Devices, na pierwszej pozycji klikamy Edit i ustawiany parametry jak niżej:
Ważne jest, by IDX/Var był różny od 0, inaczej nie będziemy mieć odczytów. Po wciśnięciu Submit, dodajemy kolejne urządzenie, czyli przycisk Edit i konfigurujemy LCD:
Parametry w nawiasach kwadratowych, to zmienne w formacie [Name#value_name] gdzie Name to nadana przez nas nazwa czujnika a value name to nazwa wartości, którą mierzy. Można też dodawać zmienne systemowe, takie jak czas %systime%, czas pracy %uptime% czy adres ip %ip%. Po zapisaniu danych (Submit) warto zrobić restart ESP (Tools->Reboot) i powinniśmy zobaczyć najpierw coś takiego:
Logując się do panelu, zakładka Devices będzie wygląda mniej więcej tak:
Czyli są odczyty z czujnika, na wyświetlaczu LCD powinniśmy zobaczyć:
Wysyłamy dane do ThingSpeak
Jesli nie posiadamy konta w ThingSpeak, to zakładamy je sobie – wystarczy darmowe. Tworzymy kanał z 3 polami (Field):
Odczytujemy sobie API Keys, a dokładnie write key, który najlepiej skopiować.
Przechodzimy do panelu ESP Easy i w zakładce Config ustawiany Protocol na ThingSpeak, Controller IP na 184.106.153.149, Controller password czyli API write key z thingspeak itd, jak niżej:
I wykresy powinny się rysować, aktualizacja co 1 minutę:
Czyli wyszła nam całkiem funkcjonalna stacja meteo z logowaniem danych.
Podsumowanie
Powyższy przykład pokazuje potencjał malutkiej taniej płytki i chmury obliczeniowej. To co początkowo zbudowałem na cienkim kliencie: Odczyt temperatury przez Internet, a później na Banana Pi Banana Pi, Bananian i obsługa ds18b20 na 1-wire, dziś można zrealizować na ESP i thingspeak.com. Taniej, prościej, energooszczędnie. Generalnie ESP Easy powstało z myślą o budowie inteligentnego domu, gdzie kładzenie kabli do czujników jest kłopotliwe, a sieć WiFi występuje praktycznie zawsze. Także Internet Rzeczy coraz tańszy, prostszy w realizacji, a przez to powszechniejszy.
Wszystko fajnie, tylko pozostaje sprawa bezpieczeństwa takiej sieci. Tak dla zdrowego rozsądku, taka sieć loT powinna być odseparowana od standardowej sieci WiFi.
To zależy oczywiście, co tam masz za urządzenia. Jeśli jakiś moduł ESP który wysyła tylko dane do Thingspeak, to nie ma sensu izolować, ale jak jest to sieć urządzeń + kontroler i całość można nazwać inteligentnym budynkiem, to tak jak piszesz, wydzielona sieć, dobrze zabezpieczona z firewallem wycinającym wszystko co niepotrzebne
Hej mam pytanie. Poprzednie projekty robiłem na nodemcu_float_0.9.6-dev_20150704. Zaciekawił mnie jednak Easy ESP ze względu na mniejszą upierdliwość programowania. Tak więc złożyłem projekt na płytce, wgrałem flash z Easy ESP. Podłączyłem 2 czujniki ds18B20 i podpiąłem to wszystko pod ThingSpeak. No i tu mam problem. Dla obu czujników zrobiłem ustawiłem interwał co 10s. Oba czujniki są podłączone pod jedne GPIO. Skonfigurowane są w Easy ESP jako dwa urządzenia. W interfejsie webowym Easy ESP pięknie widać odczyty z obu czujników natomiast w ThingSpeak pierwszy czujnik ma ładne regularne pomiary na wykresie, natomiast drugi wysyła pomiary bardzo nieregularnie. Raz co 10s, raz co 30s a raz np co 5minut. Nie wiem co może być powodem tego stanu.
Moje przypuszczenia to może niewydajne zasilanie. Włączyłem więc w linię 3,3V kondensator elektrolityczny. Pomiędzy Data a VCC czujników mam wpięty rezystor 4,7k, może przy 2 i więcej powinien on mieć mniejszą wartość? Sam już nie wiem.
ThingSpeak w darmowej wersji umożliwia odbiór danych z więcej niż jednego czujnika nie częściej niż co 15 sekund. Cytat ze strony API Rate Limits
You can update a ThingSpeak channel every 15 seconds if you are a free user and every 1 second if you are a paid user. Updating more frequently results in an error. To change settings to meet your application requirements locally, download the source code from GitHub.
W takim razie ustawiam co 60s, kasuję dane z kanału i zobaczę.
EDIT:
Niestety to samo, jeden czujnikm regularnie co 60s drugi losowa, co 60,s, 3m, 5m…
Mam jeszcze jedno pytanie, jak podpiąć konkretny czujnik do konkretnego pola w ThingSpeak. Można to jakoś przypisać do siebie czy TS robi to losowo?
Miałem dwa czujniki DS18B20 i działało bez problemu. Jaką masz wartość w Config -> Sensor Delay? Sprawdź czy liczba w polu IDX w ESP Easy nie odpowiada liczbie przy Field w TS.
W jaki sposób powiązałeś dane z ESP z Fields w TS.
Chciałbym wrzucić do TS dane z 3 czujników podpiętych do ESP: na jednym wilgoć i temperatura, na drugim ciśnienie, na 3 oświetlenie.
Miałem podpięte dwa czujniki DS18B20 i z tego co kojarzę, wyróżnikiem było pole IDX/VAR w EasyESP
Czy temat ESP padł u Ciebie? W zasadzie to jedyny artykuł z tym cudem.
Nie, nie padł. Może w przyszłym roku uda mi się coś jeszcze opublikować w tym temacie. Mam kilka wersji sprzętowych, w tym z kamerką.