ESPEasy firmware
2017. november 27. írta: eNeS

ESPEasy firmware

Ha röviden jellemeznem kellene, a firmware-ek svájcibicskája névvel illetném, segítségével programozói tudás nélkül, hosszas fejlesztgetés nélkül tudunk sokféle szenzort néhány kattintással életre kelteni.
Az első feltöltése persze kíván némi gyakorlatot... ám meglátásom szerint egy ESPEasy beállítása nem sokkal bonyolultabb, mint egy WiFi router beállítása. 

A firmware vagy mikroprogram olyan mely a hardver alapszintű funkcióit teszi elérhetővé magasabb szinten álló programok vagy driverek számára. Gyakorlatilag a hardver szükséges, beágyazott része, ami azonban a későbbiekben frissíthető, ezzel jó esetben új funkciókat, illetve a régi funkciók működésének javulását érhetjük el, illetve az intelligens, hálózatra kötött eszközök esetében a biztonsági hiányosságok foltozását.

Az ESPEasy az okoskütyükben méltán népszerű ESP8266 WIFI chipekre készült, gyakorlatilag bármelyikre feltölthetjük, egyesekben könnyebben, másokban nehezebben hozzáférhetőek a feltöltéshez szükséges RX/TX és tápfeszültséget szolgáltató csatlakozók. De természetesen ESP modulokat saját magunk is rendelhetünk, pl könnyen programozható, USB csatlakozóval szerelt fejlesztői panelként, amiből saját szenzorokat építhetünk.

A működőképes ESPEasy böngészőből elérhető felületet biztosít, ezen keresztül lehet mindent beállítani, valahogy így néz ki:

espeasy0.jpg

De haladjunk sorban, első körben letöltjük a szükséges binárist. (vagy a forrást, ha az Arduino fordítóval tudunk bánni)

A legutolsó stabil kiadás az 1.2, több mint egy éves:
http://www.letscontrolit.com/downloads/ESPEasy_R120.zip

Három bináris található benne, különböző méretű Flash memóriával szerelt ESP modulokhoz, meg a feltöltést segítő Windowson futó esptool.exe.
Képekkel segített bemutató van a letscontrolit honlapon, ami szemlélteti milyen kinézetű modulok, jellemzően mennyi memóriával szoktak árulni.
https://www.letscontrolit.com/wiki/index.php/Tutorial_ESPEasy_Firmware_Upload#Flash_size

Én azt javasolnám, ha lehetőségünk van vásárláskor választani 1MB alattit sose vegyünk, 1MB-osat is csak akkor, ha feltétlenül indokolt. (Vásárlási tipp: szoktak trükközni a bitekkel és bájtokkal 512KB=4Mbit, 1MB=8Mbit,4MB=32Mbit)
A 4MB-ossal könnyebb az élet, és a későbbi OTA (On-The-Air) frissítés, WiFi-n/böngészőn keresztül. De a lényeg most az, hogy a fájlnévben jelölik melyik bináris melyik méretűhöz való.

Az 1MB-os modulokkal is meg lehet oldani, de két lépésben, először az alábbi kis méretű firmware-t kell rátölteni, ami aztán be tudja húzni a nagyobbikat a helyére a következő lépésben:
https://www.letscontrolit.com/wiki/index.php/ESPEasy#2.0.2B_firmware_on_1MB_modules

A legújabb 2.x verzió még nem "stabil" kiadás, de azért ennek használatát javaslom, mivel nagyon sok javítás van benne az előző stabil kiadáshoz képest:
https://github.com/letscontrolit/ESPEasy/releases

Jelenleg az ESPEasy_v2.0.0-dev12.zip a legújabb, ezt kicsomagolva már többféle dolgot láthatunk, a 8285 végű bináris az ESP8266 kissebbik verziójához az ESP8285-höz való, ami pl a Sonoff Touch-ban, valamint az újabb Sonoff S20-akban is megtalálható. (Az S20-ak régebbi szériája 8266-os)
Ezen kívül 1MB (1024) és 4MB (4096) típusokhoz található kész bináris és mindezen verziókból van Normal/Test/Development verzió. A Normal a legkisebb csak egy alap plugin készlettel rendelkezik a Test-ben van pár működő, de még nem széleskörűen tesztelt plugin, a Dev-ben pedig vannak kísérleti, még alig tesztelt pluginok. Ezen felül szintén megtalálhatóak benne a Windows alatti flasheléshez szükséges alkalmazások.

Plugin: olyan programrész, mely az eredeti program nélkül nem működőképes, annak működését bővíti valamely új elemmel, esetünkben valamilyen új szenzor támogatása szerepel bennük. Ezt a plugint vagy az eredeti fejlesztőgárda, vagy nyílt forrású projekt lévén bárki készíthette.

Nem vagyok Windows hívő, szerencsére az esptool-t bármikor telepíthetném a Linuxom alatt is egy tárolóból, de a sokkal barátibb PyFlasher-t szoktam választani. (egyébként ez is elérhető Windowsra is) Jó hír, hogy immár az ESP8285-ök számára létfontosságú DOUT módot is támogatja! (Megjegyzés: Feltöltés előtt a GPIO0 lábat GND-re kell kötni.)
Az alábbi képen még a régi látható. Használata pofonegyszerű, kitallózzuk a letöltött firmware fájlt, kiválasztjuk az USB-soros csatlakozónkat a Serial port-nál, egy szimpatikus feltöltési sebességet választva (a 115200 általában jó) a Flash mode a 4MB-al szerelteknél általában "dio", ESP8285-nél mindig "dout" (pl S20!), kivéve ha más szerepel a chipen. Az "Erase flash" segítségével az eszközön levő korábbi konfigurációtól tudunk megszabadulni, pl Wifi jelszó, admin jelszó, stb..

nodemcu2.jpg

Feltöltés után újra kell indítani az eszközt, illetve ha USB csatlakozós NodeMCU rendszerű, akkor meg kell győződni róla, hogy nem adatkábellel vagy nem gazdaUSB-re van kötve, hanem 5V dugasztápra.

Ha mindent jól csináltunk meg fog jelenni egy ESP_Easy_0 nevű WiFi AP, a jelszava configesp.
Csatlakozzunk ehhez és böngészővel látogassuk meg a 192.168.4.1 weboldalt. Az alábbihoz hasonló listából válassszuk ki rajta a saját WiFi-nket és adjuk meg a jelszavunkat. (az eszközökön levő felhős gyári kínai firmware-ekkel ellentétben ez nyílt forrású, így meggyőződhetünk róla, hogy valóban nem gyűjti és továbbítja a jelszavainkat)
Fél percenként ellenőrzi, van-e élő WiFi kapcsolat, ha nincs, akkor megpróbálja a másodlagosként megadott AP-t elérni, ha ez sem megy, akkor visszaáll AP üzemmódba, ahol a fentihez hasonló módon érhető el, és állítható be újra. (Az alapértelmezett AP jelszót ezért érdemes átállítani!)

Gépünkkel újracsatlakozunk saját WiFi hálózatunkhoz és a routeren megkeressük a kiosztott DHCP IP címek listáján az új ESP eszközt.. majd ennek IP címét beütve a böngészőbe máris kezdhetjük a beállítását.

Az első menüpont a Main, ez töltődik be nyitóoldalként, és a cikk elején már bemutatott információkat jeleníti meg.

Config menü

Itt adható meg az eszköz neve, ami bármi lehet, de célszerű olyasmit választani, hogy később tudjuk azonosítani mi ez. :)

Fontos! A Unit Number értéke mindig egy 0-tól nagyobb (1-31), és a hálózatban egyedi szám legyen.. pl két 1-es számú ESP ugyanazon a hálózaton furcsa MQTT hibákat fog okozni.

Megadható egy elsődleges WiFi AP, illetve ha erre nem tud csatlakozni, egy másodlagos is, valamint ezek jelszava. Az AP mode key akkor fog kelleni, ha hosszabb időre elveszti mindkét AP-val a kapcsolatot, akkor az eszköz maga lép AP módba, amire ezzel a jelszóval tudunk rácsatlakozni, hogy konfiguráljuk. Ez alapbeállításban "configesp". Beállítható fix IP cím is, ami nagyban gyorsítja az indulási sebességet, illetve a DeepSleep mód, aminek bekapcsolásától óva intek mindenkit, aki most kezd ismerkedni az eszközzel, mivel ha nincs rendesen bekötve a szükséges csatlakozó, az eszköz bekapcsolás után pár másodperccel elérhetetlenné válik. Egyébként hozzáértők számára nagyon praktikusan csökkenti az energiafelvételt, akkumulátoros üzemhez nagyszerű.

espeasy_config.jpg

Controllers menü

Itt adható meg, milyen szerverek felé továbbítsa a begyűjtött adatokat. Egy időben háromfélét lehet felvenni az alábbiak közül:

  • Domoticz HTTP
  • Domoticz MQTT
  • ThingSpeak
  • OpenHAB MQTT
  • PiDome MQTT
  • EmonCMS
  • Generic HTTP
  • FHEM HTTP
  • Generic UDP

espeasy_cont.jpg

 

Hardware menü

Itt adható meg az egyes csatlakozók használati módja, pl mit használjon I2C kommunikációra, engedélyezzük-e az SPI-t, illetve hogy melyik csatlakozó milyen állapotban legyen bootoláskor. A PIN Led-et csak akkor válasszuk ki, ha konkrétan tudjuk, hogy egy LED van rákötve az adott GPIO-ra, mert ha rossz pint választunk lehet vehetjük elő ismét a kábeleket a flasheléshez.

espeasy_hw.jpg

Devices menü

Ez a legfontosabb rész, itt állíthatjuk be, hogy milyen eszközeink hová vannak kötve, és milyen gyakorisággal jelentsék az állapotukat. Az ESP korlátozott memóriája miatt 12-ben maximálták (4-es csoportokban 3 külön oldalon, a fent látható balra-jobbra nyilakkal lehet váltani köztük) a használható eszközök számát, ami forrásból történő fordítással növelhető egyébként. De most őszintén, 64 ezer bájtnyi műveleti és 96 ezer bájtnyi adattároló memóriával szemben ne legyenek túlzott elvárásaink, gondolom a kevéssé hozzáértőek is érzik, hogy egy DVD kapacitásához képest milyen kevés is ez. És mégis, a kütyü működik. Bármely kellőképpen fejlett technológia megkülönböztethetetlen a varázslattól! :)

espeasy_dev.jpg

A táblázatban láthatóak a legutóbb mért értékek is, de ez csak tájékoztató jellegű, csak kézzel lehet frissíteni, a végleges felhasználásuk valamely, Controllers részben megadott szerveren történik.

A támogatott eszközök sokfélék és egyre csak bővül a körük, a hivatalos lista itt található:
https://www.letscontrolit.com/wiki/index.php/Devices

Ám a letscontrolit fórumán nagyon sok új eszközzel kapcsolatban is találhatunk információkat, továbbá a PluginPlayground-ban több lelkes amatőr - többek között jómagam is - hozzájárul egyedi pluginokkal, további eszközök, funkciók elérésére.

Az eszközök beállításáról külön könyvet lehetne írni, de különösebben nem bonyult az eljárás, nézzünk két egyszerű példát, melyek talán a legnépszerűbbek:

DHT22 hőmérséklet-szenzor

A típus kiválasztása után meg kell adnunk a nevét az Enabled-et bepipálni, megadni melyik GPIO-ra kötöttük, az altípust is ki ki kell választani (DHT11/12/22), majd a Domoticz IDX-et, ami azonosítja a hőmérsékletmérőt a felvett MQTT eszközök között. Amennyiben a Controllers menüben be van állítva az MQTT szerver, van WiFi kapcsolat, akkor a Send to controller bepipálása után az ez alatt levő Delay rubrikában megadott másodpercenkénti gyakorisággal közli a szerverrel a mért értékeket.
A legalul levő két érték a hőmérséklet és páratartalom, melyhez társíthatunk nevet is, mellyel későbbi szabályokban hivatkozhatunk ezekre, illetve képlettel át lehet számolni, korrigálni, valamint meghatározni, hány tizedes pontossággal adja vissza a mért értéket. Legvégül a Submit menti el az eszközt. Látható, hogy különösebb programozói tudást a feladat nem igényel.

espeasy_dht.jpg

Mozgásérzékelő/kapcsoló/relé

Elsőre furcsának tűnhet, de mindezeket egy közös "Switch input" nevű plugin kezel, nevével ellentétben nemcsak bemenet, hanem kimenet is lehet. Gyakorlatilag minden kétállású eszközre jó lehet, ami egy adott GPIO állapotával vezérelhető, vagy arra adja vissza a státuszát. Pl a mozgásérzékelő logikai 1-et ad vissza, ha mozgás van, 0-át ha nyugalomba került. A kapcsolót logikai 1-el kapcsoljuk be, 0-val ki, stb, stb... (nyilván a mozgásérzékelőt nem akarjuk kimenetként használni azért)

Alább látható egy példa, egy mozgásérzékelővel, az előzőhoz hasonló módon megadjuk a nevét, a GPIO-t, amire az eszköz jelzi a státuszát. A típusa lehet dimmer, amivel egycsatornás többállású dimmert, vagy alapesetben kétállású kapcsolót készíthetünk. A gomb típusa normál kapcsolós, 0-ra aktív, vagy 1-re aktív lehet. A send boot state elküldi bekapcsoláskor az aktuális állapotát, ami praktikus.

espeasy_sw.jpg

A Send to Controllert is be kell pipálni, ha szeretnénk, hogy az IDX azonosítóval elküldje, ha mozgást észlel, majd a mozgás megszűnését is, egy alkalommal. (Nálam a képen azért nincs, mert egyéb szabályokkal történő feldolgozás után másképpen továbbítom az információt)
A Delay itt 0-án hagyható, ami azt jelenti, azonnal küldi az észlelést, nem bizonyos időközönként, mint a normál szenzorok esetén. További feldolgozáshoz nevet is adhatunk a változónak, majd Submit-al mentünk.

Notifications menü

Két egyszerű módon történő értesítés van implementálva jelenleg, egy GPIO-ra kötött csipogó-buzzer, vagy SMTP szerver megadása után e-mail küldésére van lehetőség. Igazából ezek a pluginok között voltak, azért lettek átemelve külön menübe, hogy ne foglalják a 12 db eszközhelyet.. no meg remélhetőleg, idővel több kommunikációs forma is rendelkezésre fog itt állni.

espeasy_not.jpg

Tools menü

Itt található több beállítás és diagnosztikát segítő menüpont. A reboot praktikus, ha a tápfeszültség elvétele nem annyira könnyen kivitelezhető (pl falba épített villanykapcsoló), de valamely beállítás érvényesítéséhez kellene. (pl Unit No szám módosítás)

A Log-ban megtekinthető a legutóbbi pár esemény, az Info egy összesítőt ad jelen állapotokról a Show JSON/Pin state buffer segítségével lekérhető a csatlakozók aktuális állapota, menedzselhető a Wifi is..
Az I2C Scan nagyon praktikus, ha engedélyeztük az I2C pineket a Hardware menüben és szeretnénk ellenőrizni, hogy a rá kötött eszközök működnek-e, vagy valamit elkötöttünk, kihagytunk egy felhúzó ellenállást, stb..
Elmenthetőek és visszatölthetőek a beállítások, a Flash memóriában létrehozott fájlrendszerbe is másolhatunk szükség esetén, de a legfontosabb a Firmware Load segítségével tudunk más firmware-t betölteni. (nemcsak ESPEasy-t, de akár Tasmotát vagy ESPurnát is)

espeasy_tool.jpg

Amit kihagytam a fentiekből még az Advanced pont, ahol további beállítások várnak ránk:

espeasy_adv.jpg

A legfontosabb a legelső "Rules", amit érdemes engedélyezni, ekkor jelenik meg a fenti menüben a Rules menü, ahol egyedi eseményvezérelt szabályokat írhatunk.
Ha az "Enable serial port" lehetőséget letiltjuk, a soros port számára fenntartott két csatlakozót más célra is ki tudjuk osztani az eszközöknél, ez is igen praktikus, ha egyébként nem használunk soros kommunikációt.

Rules menü

Egy elég szűkre szabott (új verzióban 4x) 2048 bájtnyi kód beírásával (itt jön képbe a korábban bemutatott eszközök és adatsoraik elnevezése, érdemes rövid nevet adni az eszközöknek, hogy több kód férjen) tudjuk saját szánk íze szerint alakítani az ESPEasy működését, a visszaadott értékeket további feldolgozásnak vethetjük alá, használhatunk időzítőket, más ESPEasy modulokkal kommunikálhatunk, több feltételtől függő eredményeket továbbíthatunk az MQTT szerver felé.. aránylag sok lehetőség közül választunk, és még mindig kevesebb munkával jutunk működő eszközhöz, mintha mindent saját magunknak kellene leprogramoznunk, hiszen egy működő keretrendszerbe dolgozunk.

A szabályok készítésére rengeteg példát találhatunk a neten, az alapsúgó:
https://www.letscontrolit.com/wiki/index.php/Tutorial_Rules

És egy konkrét példa, a Sonoff Touch szabályokkal történő kezelésére:
https://www.letscontrolit.com/wiki/index.php/Sonoff_Touch#ESP_Easy

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr6113384389

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Bulerias 2017.12.13. 23:21:39

Szia!
Le tudom tíltani, hogy ne menjen AP módba ha tartósan elvesztette a Wifi-vel a kapcsolatot? Éjszakára kikapcsolom a wifi routert, de a local rule-ok persze dolgoznának továbbra is offline-ban, viszont nem szeretnék a feléledő AP móddal felesleges electrosmogot.
Nagyon jó a blog, csak így tovább! :)

eNeS 2017.12.14. 08:14:57

@Bulerias: Szervusz! Köszönöm, igyekszem! Az ESPEasy alapvetően aktív hálózati kapcsolatot feltételez, így 30 másodpercenként próbálkozik a kapcsolódással, ezt csak a forráskód átírásával lehet kikapcsolni, ami egy sor előre nem látható egyéb szövődményt okozhat. Írtam egy WifiMan nevű plugint egyébként, amivel rule-ból kikapcsolható a WIFI (így kevesebbet is fogyaszt) majd bekapcsolható rule-ból. Az AP módot is kiiktatja elvileg (erősen kísérleti még), a 4/1M bináris és a plugin forrás is elérhető itt: www.letscontrolit.com/forum/viewtopic.php?f=6&t=2846#p21151

Bulerias 2017.12.14. 13:54:56

Ki fogom próbálni az 1M-st, egy sima sonoff-ba lesz. Tudsz abban segíteni, hogy nézzen ki az a rule, ami ha elveszti a routert, akkor "modemsleep,1" mondjuk 1 percre. Utána ellenőrzi, hogy tud-e már csatlakozni, ha nem akkor alszik megint.
Az AP módot meg longpressel vagy reboottal lehetne kierőltetni, ha mégis szükség van rá.

eNeS 2017.12.14. 18:04:45

@Bulerias: jeleneleg semmi ilyesmi event nincs, amivel hasonlót tudnál csinálni. Annyit tudsz tenni, hogy ha éjszakára kikapcsolod a wifi routert, akkor egyúttal a modemsleepet is bekapcsolod, és a rule-ban tudsz pl reggel 6-ra állítani modemsleep,0-t. Hacsak valaki nem fejleszt ilyen plugint is. :) Kéne egy háttérben futó folyamat, ami figyelné a wifi állapotát és generálna egy event-et, ha elvész...

Bulerias 2017.12.17. 19:01:30

Az 1M-s binárishoz tudsz adni elérést? A fenti linken csak a 4M-s találtam.

eNeS 2017.12.17. 21:40:45

@Bulerias: Jogos, csak 4M-st fordítottam. Feltöltöttem egy 1M/128k SPIFFS verziót is. Van ötletem arra, hogyan lehetne a plugint bővíteni azzal, hogy generáljon egy Rule-ban érzékelhető eseményt is, de az AP mód kikapcsolására, úgy hogy közben kliensként próbáljon kapcsolódni néha, még nincs konkrét ötletem. www.letscontrolit.com/forum/download/file.php?id=1786

Bulerias 2017.12.26. 13:31:04

Szuper ez a 2 új lehetőség: KillAP,Wifistate. Számomra ezzel az espeasy tud egy teljesen egyedi módot, képes a rule-okkal offline eldolgolzni és wifi-ről konfigurálható marad.
A mostani update-d előtt úgy oldottam meg az AP mód elnyomást, hogy az IP cim 3. értékét figyeltem eventtel, ha elváltott "1" -ről, akkor AP módba ment, amit egy idő múlva modemslep-pel kilőttem. De ez mostantól még kifinomultabban kezelhető. Köszi!

csonkat 2018.07.26. 14:14:53

Készítettem egy r120-as binárist a saját WiFi azonosítómmal (Arduino IDE 1.8.5). Működik is rendesen. Viszont ha beleteszem az _R166_WifiMan.ino-t (github.com/letscontrolit/ESPEasyPluginPlayground) akkor a következő hibaüzeneteket kapom fordításkor:

Arduino: 1.8.5 (Windows 7), Alaplap:"Generic ESP8266 Module, 80 MHz, 40MHz, DOUT, 115200, 1M (128K SPIFFS), ck, Disabled, None"

C:\Users\csonkat\Desktop\ESPEasy\_P166_WiFiMan.ino: In function 'boolean Plugin_166(byte, EventStruct*, String&)':
_P166_WiFiMan:96: error: 'WifiIsAP' was not declared in this scope
if (WifiIsAP(WiFi.getMode())) {
^
_P166_WiFiMan:97: error: 'setAP' was not declared in this scope
setAP(false); // setWifiState(WifiDisableAP); // WifiAPMode(false);
^
C:\Users\csonkat\Desktop\ESPEasy\_P166_WiFiMan.ino: In function 'void setmodemsleep(byte)':
_P166_WiFiMan:214: error: 'tryConnectWiFi' was not declared in this scope
tryConnectWiFi(); // WiFiConnectRelaxed();
^
exit status 1
'WifiIsAP' was not declared in this scope

Mi lehet a hiba?

eNeS 2018.07.26. 19:29:19

@csonkat: Az, hogy a P166 az aktuális (2018. május) fejlesztői Mega változathoz készült. R120-ban nincs ilyen nevű funkció. De szerintem a többi sincs még benne, pl a tryconnectwifi() és az eggyel előbbi Wificonnectrelaxed() sem, ami valamikor év elején került az ESPEasy forrásba, majd ki onnan. Talán a legelső változat a pluginból még lefordul az ősi R120-on is: github.com/letscontrolit/ESPEasyPluginPlayground/commit/3a55e29f9536fb15106e4304fb1d2219180a1318#diff-0483b6c8b223915173dc69418faaa3c2

csonkat 2018.07.27. 08:34:10

@eNeS: Köszönöm. A Mega változattal sikeres lett a fordítás.