ruzne:humi_teplota_a_vlhkost_s_esp8266
no way to compare when less than two revisions
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
— | ruzne:humi_teplota_a_vlhkost_s_esp8266 [2021/01/27 10:19] (aktuální) – vytvořeno multitricker | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== HUMI - teplota a vlhkost s ESP8266 ====== | ||
+ | **Autor:** Pavel Janko\\ | ||
+ | **Web autora:** http:// | ||
+ | **Kontakt na autora:** pavel.janko@fancon.cz | ||
+ | |||
+ | **Aktuální stránku programu spolu se stažením jeho zdrojového kódu naleznete na adrese:**\\ https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Program pro měření vlhkosti HUMI ===== | ||
+ | |||
+ | ==== Ú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, | ||
+ | |||
+ | 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 zareigistrujete 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 | ||
+ | |||
+ | ==== 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í, | ||
+ | |||
+ | **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 " | ||
+ | |||
+ | **ON** je informace o době provozu zařízení od posledního restartu. Je ve formátu DD: | ||
+ | |||
+ | **WiFi** vyjadřuje intenzitu WiFi signálu v dBm a v procentech. Je to pochopitelně informace pouze jednosměrná, | ||
+ | |||
+ | **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, | ||
+ | |||
+ | Úplně poslední pole tabulky obsahuje odpověď serveru na odeslání dat a může přispět k diagnostice případných problémů. | ||
+ | |||
+ | ==== 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 = " | ||
+ | |password = " SetYourPassword "; | ||
+ | |host = " | ||
+ | |guid = " | ||
+ | |WWWAUTHENTI = false; | ||
+ | |WWWUSERNAME = " | ||
+ | |WWWPASSWORD = " | ||
+ | |OTAUSER = " | ||
+ | |OTAPASSWORD = " | ||
+ | |OTAPATH = "/ | ||
+ | |SensorName = " HTU21D-001"; | ||
+ | |SensorReadPeriod = 10000L; | ||
+ | |SendPeriod = 60000L; | ||
+ | |PageRefreshPeriod = 10;|perioda obnovování lokální webové stránky,\\ nyní 10 s| | ||
+ | |SendToTmep = true; | ||
+ | |FloatRounding = 1;|Počet zobrazovaných a odesílaných desetinných\\ míst naměřených veličin, tj. teploty a relativní vlhkosti.| | ||
+ | |||
+ | ==== 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é jmeno a heslo, pokud jste tuto funkci aktivovali. | ||
+ | |||
+ | **HUMx_POWER_ON_TIME** z funkce millis() vytváří řetězec DD: | ||
+ | |||
+ | **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 | ||
+ | |||
+ | ==== 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, | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Další postup je asi jasný. Jen připomenu, že položka FileSystem v OTA mi nejen nefungovala, | ||
+ | |||
+ | 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í, | ||
+ | |||
+ | ==== 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ží, | ||
+ | |||
+ | **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í, | ||
+ | |||
+ | 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. | ||
+ | |||
+ | ==== Stručný souhrn ==== | ||
+ | |||
+ | Malé shrnutí základního nastavení. Senzor se sběrnicí I2C je k ESP8266 připojen následovně: | ||
+ | |||
+ | |**Senzor**|**ESP8266**| | ||
+ | |Vcc|3.3V| | ||
+ | |GND|GND| | ||
+ | |SDA|GPIO4| | ||
+ | |SCL|GPIO5| | ||
+ | |||
+ | 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. | ||
+ | |||
+ | Přestože jsem pamětí rozhodně neškudlil, 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ů.**// | ||
+ | |||
+ | |||
+ | {{ : |