sobota 17. září 2016

ESP8266 od WeMos

Původně jen modul k zprostředkování WiFi konektivity jiným kontrolérům se svým čínským tvůrcům povedl natolik, že se jako lavina šíří světem různých udělátek.

Zapomeňte na Intel Edison, Intel Quark, xDuino, PIC AXE... tady si za pár šupů užijete spoustu legrace a nezrujnuje vás, když to občas zahoří, nebo když hotový prototyp jen strčíte do krabičky, omotáte izolepou a přibijete do kůlny k trámu, kde si bude v klidu pár let měřit, než mu dojde baterka.

Sice má pár nedostatků a otravností, ale za 50,- korun českých jsem ochoten odpustit kde co.



Začínáme

Původně jsem si pořídil pár modulů typu ESP8266-07 (keramická anténa a pigtail pro připojení antény větší). Ale jsem rozhodně lepší programátor než elektronik a tak mi to flashování firmware atd. šlo dost ztuha. V podstatě mě to začalo bavit až ve chvíli, kdy jsem odložil páječku a pořídil si moduly od firma WeMos.

WeMos začala dodávat ESP na destičce se standardní roztečí pinů a se slušnou sbírkou rozšiřujících modulů - schildů. Přidalo se také pár dalších výrobců, takže je z čeho vybírat.

Co pořídíte za svých 15 USD?

Zhruba za 14 dní vám do vaší poštovní schránky začnou nosit sovy malé balíčky a do tří týdnů to máte pohromadě.

Moduly od WeMos-u a pár akumulátorů.
Mohou obsahovat (zleva a od shora):

  1. Modul s relé pro spínání zátěže až 250V/5A
  2. Modul s čtečkou Micro SD karet
  3. Modul s RGB diodou
  4. Modul s OLED displejem 64x48 pixelů
  5. Modul s tlačítkem
  6. Napájecí modul (poskytuje 3.3V i 5V a nabíjí připojené akumulátory z připojeného Micro USB)
  7. Modul s MCU ESP-8266 (přes vyvedené USB lze modul programovat i napájet)
  8. Modul se senzorem teploty a vlhkosti (DHT22, -40~80°C (±0.5°C), 0-99.9%RH (±2%RH))
  9. Modul se senzorem teploty a vlhkosti (DHT11, 0~60°C (±2°C), 20-90%RH (±5%RH))
  10. Modul se senzorem tlaku vzduchu (BMP085, 300-1100hPa, tj. +9000m až -500m)


Máte-li ještě akumulátor z mobilu, zkanibalizovaný drátek z počítače a vhodnou krabičku, můžete mít za necelých 400,- takovouto fešnou stavebnici:

Pohotovostní stavebnice s ESP-8266 od WeMos.cc

Firmware

Standardně je MCU vybaven tzv. AT firmwarem, který se s vámi baví po sériové lince pomocí AT příkazů. Pokud ale do něj nahrajete jiný firmware, tak jako mávnutím kouzelného proutku umí třeba BASIC, NodeMCU Lua, Arduino, Javascript, ...

Pokud bych byl bohatý, byl bych jen malinko excentrický, takto jsem blázen do novinek, takže zkouším jazyk Lua. To s sebou obnáší nahrání nového firmware, které však není bez pastí nalíčených na jazykové retardy a tak i pro osvěžení své paměti uvádím postup:

Napřed si na disk stáhneme a případně instalujeme vše potřebné:

ch340g driver
Pokud se chceme s ESP bavit po USB, musíme mít odpovídající driver
Link: http://www.wemos.cc/downloads/

ESP8266Flasher
Pro nahrání firmware budeme potřebovat nějaký nástroj, osvědčil se mi tento. V adresáři Win32/Release nebo Win64/Release vyberte odpovídající verzi.
Link: https://github.com/nodemcu/nodemcu-flasher

Firmware od NodeMCU
Na stránkách NodeMCU vypníme svůj email, následně zatrhneme moduly, které chceme do firmware zahrnout (pro začátek necháme třeba tak jak jsou) a na konci stránky klikneme na [Start your build]. Do poštovní schránky vám přijde link na stažení dvou verzí fw, jedna obsahuje celočíselnou, druhá float aritmetiku. (ano, u tohoto mcu je to hodně o paměti, zejména RAM je málo)
link: https://nodemcu-build.com/

esp_init_data_default.bin
Pokud výrobce ESP změní něco ve WiFi části, je potřeba nahrát nový soubor s inicializačními daty. Ten musíme vyseparovat ze souboru s SDK. postup je popsán ZDE, takže stručně stáhneme SDK a a vyseparujeme se ZIP archivu soubor esp_init_data_default.bin.
Link: http://bbs.espressif.com/download/file.php?id=1572

Poznámka: Tento soubor s inicializačními daty stačí nahrát pouze jednou, pak už se s tím nemusíme až do další verze firmware (zde 1.5.4.1) smolit.

blank512k.bin
Tento soubor budete potřebovat ve chvíli, kdy vyrobíte zapeklitou chybu v programu takového rázu, že bude mcu cyklicky havarovat a restartovat. Jediná šance je pak flashnout tento soubor.
Link: https://github.com/iotcafe/nodemcu-firmware-lua5.3.0/tree/master/pre_build/0.9.4/512k-flash

ESPlorer
Je vývojový nástroj pro ESP a (mimo jiné) Lua. Prostě takové Visual Studio pro ESP. Je možné, že budete ještě potřebovat nainstalovat Javu (https://java.com/en/download/)
Link: http://esp8266.ru/esplorer/

Flashujeme firmware

Jakmile budete mít tuto fázi za sebou, očekávají vás jen samá pozitiva a životní jistoty.

Spustíme ESP8266Flasher, na záložce Config nastavíme flashované soubory a adresy pro jejich umístění:

Flashujeme firmware a inicializační data
Na záložce Operation klikneme na Flash. Jakmile projede teploměr (cca 1 minuta), máme hotovo. Dokud si nepřidáme do firmware nějaký další modul, nebudeme muset tuto operaci opakovat.

Lua na ESP8266

Zde jen stručně o principech tohoto jazyka. Ač mi momentálně funguje teploměr ve skleníku programovaný v Lua, nejsem odborníkem na tuto problematiku.


  1. Lua je interpret, ale při běhu je kompilován
  2. Na ESP je vytvořen filesystém, ve kterém jsou soubory se scripty
  3. Pokud je po startu nalezen soubor init.lua, je automaticky spuštěn
  4. Přivedete-li program v Lua až k panice (PANIC), je ESP restartován
  5. K programování a práci se soubory použijte Esplorer

Vzhledem k [3] a [4] je vhodné použít init.lua takový, který umožňuje přerušení provádění programu, jinak bychom museli v případě problémů přehrát filesystém souborem blank512k.bin.

Takto vypadá ten správný init.lua, jenž následně spustí main.lua, kde už si můžeme dělat co chceme. v případě problémů pošleme po sériové lince char(13), tedy dáme Enter.

function abortInit()
    print('Press ENTER to abort startup')
    
    uart.on('data','\r', function(data)
        tmr.unregister(0) --disable the start up timer
        uart.on('data') --stop capturing the uart
        print('Startup aborted')
    end, 0)

    tmr.alarm(0,5000,0, function()
        uart.on('data') -- stop capturing the uart
        print('Running startup')
        dofile('main.lua') --run the main program
    end)
end

tmr.alarm(0,1000,0,abortInit)

Poznámka: pokud nemáte zkušenosti s asynchronním programováním, máte se na co těšit a dost se zapotíte. Ale stojí za to přijít tomu na kloub.

Prostředí ESPlorer

Zdroj napájení, akumulátory

Pokud chcete provozovat ESP autonomně, budete potřebovat nějaký zdroj energie. Mě se osvědčila kombinace modulu pro napájení od WeMos a Li-ion akumulátor z notebookového packu (více ZDE). Někdy postačí plonkovní akumulátor z mobilu, jen se na něj hůř pájí vývody.

Meteostanice, ThigSpeak.com a Low-Power

Klasická aplikace je teploměr a vlhkoměr, v mém případě pro skleník. hardware získáme zaklapnutím modulu napájení, samotného ESP, modulu pro měření teploty a vlhkosti (DHT22) a nějakého Li-ion akumulátoru. Šikovnější (já) to vloží do nějaké krabičky, pak je nižší možnost, že vám to vyzkratuje slimák, který přes moduly zkrátí cestu k salátu.

Skleníkový teploměr
Jedná se o technologický prototyp, pokud to ještě měsíc vydrží
udělám mu pěknější krabičku a možná
dodám i měření napětí akumulátoru, abych jej
včas vyměnil za nabitý
Data můžete posílat třeba na server ThingSpeak.com, který je pro nekomerční použití zdarma a dovoluje zajímavé kejkle s daty:

Teplota a vlhkost ve skleníku, venku evidentně prší,
tuším, že rajčata mi definitivně sežehne plíseň.
(thingspeak.com)

Kombinovaný graf teploty a vlhkosti
(thingspeak.com)

Pokud budete používat ESP v autonomním provozu, narazíte na problémy s napájením, kdy se zapnutou WiFi bude mít odběr 200 mA, což je cca 10 hodin na klasický Li-ion akumulátor. Proto prozkoumejte odkazy pod článkem, kde je tabulka různých módů, dovolujících snížit odběr až na 10µA.

Ve výše uvedené meteo-stanici jsem použil mód deep sleep (10µA), ze kterého se modul probouzí každých 10 minut, změří data a pošle je na ThingSpeak.com Pro tento mód je potřeba propojit vývody D0 (alias xpd_dcdc, GPIO16, PIN8) a RST (alias ext_rstb, PIN32),  viz. červený drát na fotografii výše.

Odkazy

Stránky a zdroje, které byste neměli minout.







Žádné komentáře:

Okomentovat