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):

ttyUSB dmesg

No i jest to ttyUSB0. Przed wgraniem firmware’u dobrze jest wymazać flash:

erase esptool

Teraz czas na właściwe flashowanie, do nodemcu v3 wgrywamy soft o objętości 4MB (4096kB):

write_flash esptool

Jako ciekawostkę pokażę jeszcze sreeny z wrzucania softu przy pomocy Felix script z podaniem parametrów (port, rozmiar pamięci, release):

Felix script

I dalsza część:

Felix script esp

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.

sieć wifi esp_0

Hasło do sieci to configesp:

esp_0 password

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:

esp easy pierwsze uruchomienie

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ł:

esp easy połączony z siecią

Czyli teraz łączymy się z siecią, do której jest podpięty ESP i otwieramy w przeglądarce wskazany adres:

Panel w esp easy

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:

Zakładka hardware ESP Easy

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.

ESP Easy BME280 i LCD

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:

scan i2c zakładka tools

Zapamiętujemy adres PCF8574 i przechodzimy do zakładki Devices, na pierwszej pozycji klikamy Edit i ustawiany parametry jak niżej:

BME280 i ESP Easy

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:

LCD HD44780 i ESP Easy

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:

LCD ESP Easy

Logując się do panelu, zakładka Devices będzie wygląda mniej więcej tak:

LCD i iBME280 w Devices

Czyli są odczyty z czujnika, na wyświetlaczu LCD powinniśmy zobaczyć:

LCD - dane z BME280

Wysyłamy dane do ThingSpeak

Jesli nie posiadamy konta w ThingSpeak, to zakładamy je sobie – wystarczy darmowe. Tworzymy kanał z 3 polami (Field):

Kanał z 3 polami

Odczytujemy sobie API Keys, a dokładnie write key, który najlepiej skopiować.

ThingSpeak API Key

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:

ESP Easy zakładka config

I wykresy powinny się rysować, aktualizacja co 1 minutę:

Wykresy z BME280

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.

Wpis “ESP easy – prosty sposób na obsługę czujników po WiFi” komentowano 6 razy

  1. 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

  2. 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.

  3. 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.

Odpowiedz na „SpeXAnuluj pisanie odpowiedzi