Úvod

Rozhraní

Nastavení

Komponenty

Kompilace

Provoz

Souhrn

File systém přes OTA

Grafický výstup

Download

Graf tmep.cz

Program pro měření vlhkosti HUMI

26.1.2021

Úvod

Program HUMI byl primárně vytvořen pro odesílání teploty a vlhkosti ze senzoru HTU21 (SI7021) na portál tmep.cz. Tam jsou data uchovávána a v případě potřeby zobrazována i ve formě grafu.

Program však může pracovat i autonomně a jeho zajímavé vlastnosti je možné využít i pro jiné senzory nebo veličiny. K tomu stačí malá modifikace nebo přidání a nastavení vhodných knihoven.

Základním hardwarem je obvod ESP8266. Je možné použít samostatný modul ESP8266-12 s pár součástkami, ale pozor, na titulním obrázku nejsou vidět pullup a pulldown rezistory, které jsou schovány pod obvodem. NodeMcu ESP8266 a také WeMos D1 Mini ESP8266 modul můžete použít prakticky bez úprav. Stačí připojit čtyřmi vodiči čidlo a nahrát program HUMI.

Program provádí dvě hlavní činnosti. Zobrazuje základní okamžité údaje ze senzoru a provozní data na vlastní webové stránce a naměřené hodnoty pak odesílá na portál tmep.cz. Pokud nepotřebujeme data nikam odesílat, lze jediným parametrem při kompilaci programu odesílání vypnout.

Příjemnou vlastností je také OTA, to je možnost nahrání nového firmware - sketche do ESP8266 přes WiFi, bez toho, že bychom ho museli připojovat k PC přes sériovou linku. A je dlužno říct, že OTA funguje skvěle. Podmínkou pro správnou funkci je, aby měl váš modul s ESP8266 alespoň 1MB paměti, ale to je již dnes naprosto obvyklé.

Přístup k upgrade firmware je chráněn heslem, které si zvolíte. Pomocí parametru je možné také nastavit jednoduché omezení přístupu heslem k lokální webové stránce.

Pochopitelně je možné se k webové stránce připojit i z internetu, předpokládá to však, že umíte ve svém routeru nastavit mapování portů na toto zařízení. Dobré je také nastavit statickou adresu DHCP systému pro váš ESP8266, protože jeho IP adresa se může za určitých podmínek změnit a může být problém ho potom s prohlížečem najít a připojit se na něj.

Předpokladem funkce programu ve spojení s portálem tmep.cz je, že se tam zaregistrujete a získáte takzvanou doménu a identifikátor GUID. Veškeré informace k této problematice hledejte přímo na webu tmep.cz

Arrow up

Popis rozhraní lokální webové stránky

Lokální webové rozhraní má velmi střízlivý vzhled. Za prvé nejsem expert na tvorbu webových prezentací, za druhé zbytečně moc grafiky zpomaluje chod aplikace. Ale hlavní důvod je ten, že spousta návrhářů využívá styly a skripty, které se stahují z kdovíjakých webových stránek bez jakékoliv záruky. Vypadá to někdy hodně pěkně, ale pak stačí ztráta vnějšího připojení a je po žížalkách, stránky mohou být i nečitelné. Jednoduchá tabulka plně dostačuje, na druhé straně jsem se snažil, aby interface poskytoval potřebné údaje.

Web face

NAME je v programu volitelné jméno vašeho senzoru, nezapomeňte ovšem, že tabulka upravuje svoji šířku podle obsaženého textu, tak to není dobré s délkou jména přehánět.

MAC je MAC adresa senzoru, která se načítá přímo z chipu ESP8266. Zvolil jsem její zobrazení proto, protože podle výrobce je číslem ID obvodu značena celá série obvodů a není to tedy na rozdíl od MAC adresy jednoznačný identifikátor. Znalost MAC adresy vám také pomůže při konfiguraci DHCP statické IP adresy a při případném mapování portů na routeru.

VALUE jsou poslední naměřené hodnoty přečtené ze senzoru.

RESET popisuje slovy, jak došlo k restartu zařízení. Je to interní proměnná obvodu ESP8266. Například text "Software/System restart" je zobrazen po upgrade firmware bezdrátově přes OTA.

ON je informace o době provozu zařízení od posledního restartu. Je ve formátu DD:HH.MM.SS, ale i když to tak může vypadat, nejsou to hodiny a neukazují tedy reálný čas.

WiFi vyjadřuje intenzitu WiFi signálu v dBm a v procentech. Je to pochopitelně informace pouze jednosměrná, tedy jak slyší anténka ESP8266 WiFi signál, který přichází od vašeho routeru respektive WiFi acess pointu.

RAM zjednodušeně řečeno ukazuje, kolik má obvod ještě k dispozici volné paměti

VCC je napájecí napětí obvodu, které by mělo být 3,3V s tolerancí cca 10%.

"The host's response is OK" je řádek hlášení. Popisuje se na něm stav připojení k serveru tmep.cz a hlásí případné chyby, pokud vzniknou a dají se jednoduše detekovat. Kolečko vpravo od hlášení přeblikává v rytmu odesílání dat na tmep.cz. Je to pouze signalizace, která slouží k lepší orientaci, protože za běžných podmínek je reakce serveru poněkud stereotypní.

Úplně poslední pole tabulky obsahuje odpověď serveru na odeslání dat a může přispět k diagnostice případných problémů.

Arrow up

Nastavení proměnných programu

Nastavení programu provádějte v části - záložce, která se jmenuje HUMIx_LOOP. Jsou to tyto proměnné:

ssid = "SetApSSID";nastavte jméno vaší WiFi
password = " SetYourPassword ";nastavte heslo vaší WiFi
host = "xxxx.tmep.cz";nastavte kompletní cestu na tmep.cz včetně
vám přidělené domény xxxx
guid = "xxxxxxxxxxxx";nastavte vám přidělené GUID xxxxxxxxxxxx
WWWAUTHENTI = false; pokud nastavíte WWWAUTHENTI = true;
tak po vás bude lokální webová stránka
požadovat před připojením následující
uživatelské jméno a heslo
WWWUSERNAME = "admin";nastavte si uživatelské jméno pro webovou
stránku
WWWPASSWORD = "admin";nastavte si heslo pro webovou stránku
OTAUSER = "admin";nastavte si uživatelské jméno pro OTA -
update fw přes WiFi
OTAPASSWORD = "admin"; nastavte si určitě heslo pro OTA -
update fw přes WiFi
OTAPATH = "/firmware" cesta pro aktualizaci firmware přes OTA
SensorName = " HTU21D-001";zde vložte libovolné jméno vašeho senzoru,
použijte délku do 38 znaků včetně mezer,
větší počet zvětší šířku webové tabulky,
speciální znaky je třeba zadávat v HTML
syntaxi
SensorReadPeriod = 10000L;perioda čtení senzoru v milisekundách,
nyní 10 s
SendPeriod = 60000L;perioda odesílání dat na server tmep.cz v [ms],
nyní 1 minuta
PageRefreshPeriod = 10;perioda obnovování lokální webové stránky,
nyní 10 s
SendToTmep = true;hodnota SendToTmep = false; zablokuje
odesílání dat na server tmep.cz.,
zařízení bude pracovat pouze jako lokální
webová stránka se zobrazováním posledního měření
FloatRounding = 1;Počet zobrazovaných a odesílaných desetinných
míst naměřených veličin, tj. teploty a relativní vlhkosti.

Arrow up

Komponenty programu

Jednotlivé záložky jsou vlastně systém nezávislých funkcí. Účelem jejich použití je zpřehlednění programu.

HUMIx_LOOP je základní smyčka programu se všemi globálními parametry.

HUMIx_HTML_TYPOGRAPHER provádí formátování dat, přijatých od serveru tmep.cz jako odpověď - response. Vkládají se html tagy, kontroluje délka řádků a také aby objem dat nepřekročil přijatelný limit.

Malé odbočení. Když jsem testoval chybová hlášení, tak jsem zjistil, že i když odpojím internet, tak mám pořád připojení k serveru tmep.cz. Po dlouhém bádání, které vám možná ušetřím, jsem zjistil, že nejspíš většina domácích routerů ASUS v případě, že jsou odpojeny od WAN, tedy internetu, podsunou svoji webovou stránku. A v tom okamžiku nevíte, co se vlastně děje.

Našel jsem na internetu způsob, jak vypnout tuto vlastnost na starších i novějších zařízeních ASUS, ale stejně jsem program upravil, aby byl schopen se s touto vlastností automaticky vyrovnat a nahlásit alespň chybu. Víc totiž udělat nemůže. Kde není, ani čert nevezme.

HUMIx_ESP5266_READ_PARAMS čte parametry ESP8266 a přepočítává sílu signáli WiFi

HUMIx_HTML_DATA tvoří základ lokální webové stránky, případně kontroluje uživatelské jméno a heslo, pokud jste tuto funkci aktivovali.

HUMx_POWER_ON_TIME z funkce millis() vytváří řetězec DD:HH:MM:SS, který se zobrazuje na webové stránce.

HUMIx_READ_SENSOR čte veličiny z čidla a další data pro webovou stránku.

HUMIx_SEND_DATA_TO_HOST zajišťuje odesílání dat na server tmep.cz, generuje chybová hlášení a přijímá odpovědi serveru tmep.cz

Arrow up

Kompilace programu

Já jsem při programování obvodu volil konfiguraci s prostorem 1MB pro OTA a 1MB pro souborový systém SPIFFS. To mi umožnilo posléze nahrát speciálním nástrojem - tools pro LittleFS do SPIFFS třeba i webovou ikonku favicon.ico. A zkoušel jsem to i s pěkným obrázkem. Jen se mi nepodařilo obrázky odeslat přes OTA. To mi zrušilo veškerý obsah v SPIFFS. Musel jsem obrázky nahrát sériovou linkou.

Pro přehlednost hovořím o SPIFFs, ale ve skutečnosti jsem použil modernější file system LittleFS. K němu je třeba použít odpovídající nástroj pro uložení souborů. Ten se dá najít na webu github.com. Bez faviconu se obejdete, ani jeho struktura, ani práce se souborovým systémem není předmětem tohoto popisu. Fungovat to bude i bez SPIFFS, ESP8266 odpoví prohlížeči, že favicon.ico nemá a hotovo.

Když do ESP8266 přes Arduino IDE program nahrajete, tak raději proveďte reset obvodu ještě ručně. Po flashování se obvod bez resetu nespustí a vy pak můžete taky marně čekat. Pokud chcete něco na programu vylepšit, tak to udělejte a vyzkoušejte si OTA. Nebo na zkoušku můžete přehrát program sebou samým. Stačí v novější verzi Arduino IDE místo "Nahrát" zvolit položku "Export kompilovaného Binaru". Vyčkejte a pak otevřete "Zobraz adresář s projekty" a tam máte již kompilovaný program s příponou *.bin. Ten si dáte někam, kde ho snadno najdete. Pak se stačí připojit na lokální webovou stránku čidla a do řádku prohlížeče napsat cestu (defaultně je /firmware). Poprvé budete vyzváni k zadání uživatelského jména a hesla pro OTA. Pak se objeví nabídka. V mém případě to pak vypadá takto:

OTA face

Další postup je asi jasný. Jen připomenu, že položka FileSystem v OTA mi nejen nefungovala, ale mazala i již v SPIFFS uložené soubory. Zatím to bez sériové linky prostě neumím.

Po vybrání binárního souboru a stisku tlačítka Update firmware se kód nahraje do ESP8266 a provede se automaticky pro provoz dostačující restart. Trvá to dejme tomu 30 - 40 s. Pak se do prohlížeče načte znovu lokální webová stránka, pokud jste program nějak chybně neupravili. Pak by nezbylo, než zase zařízení připojit k sériové lince na první nahrání funkční verze programu s OTA.

Prostě je to při troše pozornosti velmi pohodlné nahrávání, bez nutnosti k čidlu vůbec chodit. Z mnoha desítek pokusů nedošlo u mě ani jednou k selhání.

Arrow up

Provoz zařízení

Připojování k WiFi je signalizováno blikáním interní LED v půlvteřinových intervalech a klasickým vypisování teček na sériový výstup rychlostí 115 200bd. Pokud se obvod opravdu připojí, tak vypíše na serial svoji IP a MAC adresu. Pak se ovšem od sériové linky odpojí a veškerý výstup probíhá výhradně na webovou stránku ležící na jeho IP adrese !

První měření i odeslání dat na server tmep.cz (pokud jste to povolili) se provede bezprostředně po připojení k WiFi. A úspěšnost lze obvykle posoudit již z hlášení na lokální webové stránce. Běžná reakce této webové stránky je mezi 80-200ms. Jen jednou za čas se interval trochu prodlouží, souvisí to asi s procesy, které probíhají na pozadí ve WiFi mangementu.

Chybová hlášení za provozu:

Data sending is disabled - odesílání dat nebylo při kompilaci povoleno, funguje jen lokální režim

Connection to host failed ! - připojení k serveru se nezdařilo

Connection to host successful - server je připojen

Host not respond - time out ! - server neodpověděl v časovén limitu 1s

The host's response is OK - obdržena správná hlavička odpovědi HTTP/1.1 200 OK

This is an invalid host response ! - odpověď neobsahuje správnou hlavičku

Too much data ! - odpověď je nestandardní, delší než 256 znaků

Stabilita se v mém případě jeví výborná. Údaj o době provozu od restartu se nejspíš vynuluje po cca 50 dnech a začne počítat znovu, ale to asi není věc, která by nás měla trápit.

Arrow up

Stručný souhrn

Malé shrnutí základního nastavení. Senzor se sběrnicí I2C je k ESP8266 připojen následovně:

SenzorESP8266
Vcc3.3V
GNDGND
SDAGPIO4
SCLGPIO5

Senzor se čte každých deset sekund, data se odesílají každou minutu a lokální webová stránka se obnovuje každých deset sekund. Všechny tyto parametry jsou v podstatě libovolně nastavitelné.

Puntík vpravo od hlášení se mění při každém pokusu o odeslání dat, ať už je úspěšný či nikoliv. Při pokusu o odeslání také kratince problikne LED_BUILTIN.

Nula na konci response serveru tmep.cz je parametr délky těla zprávy serveru podle standardu HTTP 1.1.

Nikde se o tom sice nepíše, ale moje zkušenosti ukazují, že pokud používáte samotný modul ESP8266-12 s externím sériovým převodníkem USB / RS232, může vzniknout jeden problém. Napájím převodnk z USB a po jeho odpojení pro normální provoz bez sériové linky je tedy bez napájení. To však bývá příčinou závažné nestability celého modulu ESP8266-12. Vadí mu připojené piny Tx a Rx nenapájeného převodníku. Proto jednoznačně doporučuji tyto výstupy pro normální provoz od ESP8266-12 odpojit! Pokud ovšem napájíte celé zařízení pouze z USB, pak by tento problém neměl vůbec vzniknout.

Přestože jsem pamětí rozhodně nešetřil, program má ještě dost rezerv na případné vaše rozšíření. Překladač mi vypsal toto využití zdrojů:

Projekt zabírá 345124 bytů (33%) úložného místa pro program. Maximum je 1044464 bytů. Globální proměnné zabírají 30628 bytů (37%) dynamické paměti, 51292 bytů zůstává pro lokální proměnné. Maximum je 81920 bytů.

Arrow up

Jak na upgrade file systému přes OTA

28.1.2021

Dlouho jsem hledal radu, jak nahrát nějaký soubor do file systému přes OTA, jak se zmiňuji výše. Ale vždy jsem si LittleFS (SPIFFS) naopak zbořil.

Teď jsem se ale dočetl, že nemohu uploadovat soubory přímo, ale musím nejprve celý file system konvertovat do *.bin. Existuje na to speciální nástroj, který prý víc nefunguje než funguje. Ale já našel v té děsivé džungli internetu (Měli by ho zrušit ...) přímo drahokam, radu nad zlato.

Pro upgrade přes sérivou linku je vždy potřeba tools (stažený z github.com), který jsem si už do Arduino IDE nainstaloval. Když mám data pro SPIFFS uložena v projektu v adresáři data, kde musí být umístěna, tak stačí ten nástroj ESP8266 LittleFS Data Upload nad otevřeným projektem spustit. On se snaží nahrávat přes sériovou linku, ale protože není ESP8266 připojeno, tak na tom havaruje. Před svým skonem ale vypíše, kde si vytvořil file systém ve formátu *.bin.

Pro projekt s názvem HUMI3_LOOP to vypadá nějak takto:
[LittleFS]upload:C:\Users\Pavel\AppData\Local\Temp\arduino_build_732033/HUMI3_LOOP.mklittlefs.bin

A pak stačí soubor HUMI3_LOOP.mklittlefs.bin vytáhnout z tohoto umístění a uploadovat ho přes OTA položkou FileSystem. Aby bylo pak možné jednoduše předat soubor klientovi, nesmí chybět nastavení ve vašem ESP8266 http serveru.

Pro favicon.ico je to tento řádek:
server.serveStatic("/favicon.ico", LittleFS, "favicon.ico");

Ten řádek kódu říká, aby server při požadavku klienta na soubor favicon.ico sáhnul do file systému a požadovaný soubor poslal přímo klientovy. Úžasné svojí jednoduchostí. Když soubor není nalezen, pak se vrátí klientovy 404 File not found. Krásně transparentní a dokonce to i funguje. Jen při této práci záleží na přesnosti názvu a na velikosti písmen.

Ale když jsem poprvé úspěšně nahrál přes OTA favicon.ico, tak v Chrome se maličká ikonka nezobrazovala. Mazal jsem cache a kdoví co ještě. Nakonec jsem spustil Edge a ejhle, ikona byla. Chrome si pamatoval, že kdysi favicon od zdroje nedostal a znovu už ho pak nežádal. Po nějaké době si ale dal říci.

Soubor z file systému http serveru ESP8266, včetně toho favicon.ico, získáte také jednoduše přímým dotazem IP-ESP8266/favicon.ico a máte to na obrazovce. Je úžasné, když jsem si nahrál přes OTA pěkný JPG obrázek a prohlížečem si ho mohl zobrazit přímo z toho potměšilého švába. Všimněte si prosím maličkého modrého faviconu vlevo nahoře. Samotný obrázek je přes celou obrazovku, ale zmenšil jsem okno prohlížeče, aby bylo vidět co a jak.

test picture

Pokud to vše znáte a věděli jste jak na to, tak jste mi to měli říct... :-)

Arrow up

Přidání vektorového obrázku vlhkoměru

31.1.2021

Před časem jsem vytvořil tři vektorové obrázky ve formátu SVG. Dělal jsem je ručně, protože jsem nenašel vývojový prostředek, který by byl schopen vytvořit požadované v rozumném datovém objemu. Pokud si to někdy vyzkoušíte, brzo zjistíte v čem je problém.

Jeden ten obrázek, animované švýcarské nádražní hodiny, byl součástí časoměrného programu. Druhý je barometr, který mám na webu. Ten považuji za opravdu povedený. A třetí je vlhkoměr, který jsem naprogramoval, abych udělal radost milovníkům obvodů DHT11 a podobných. Tyto obvody však sám považuji za velmi špatné a dokonce jsem je myslím i naházel do koše. Přinášely jenom neustálé problémy.

Protože jsem s těmi vektory strávil opravdu nepředstavitelnou spoustu času, tak je chci taky využít, no ne?

Vektorovou grafiku vlhkoměru jsem tedy integroval i do tohoto zařízení. Je to velmi jednoduché. Platí vše výše uvedené. Základní stránka pochopitelně zůstává. Když však do příkazového řádku prohlížeče napíšete IP-ESP8266/svg , tak se vám objeví obrázek měřidla s údaji.

svg picture

Takových budíčků koluje po webu spoustu, ale vězte, že to není totéž. Ty ostatní se totiž vesměs odkazují na všemožné externí zdroje a loví skripty ze všech stran. Já ten v podstatě animovaný vektorový obrázek SVG velmi pracně vytvořil a vše je ryze lokální a u vás.

Jen je dobré vědět, že hodně staré prohlížeče formát SVG nepodporují.

Program HUMI4 pro ESP8266 Arduino s vektorovým SVG obrázkem navíc

Program HUMI3 pro ESP8266 Arduino bez grafiky

Arrow up