Chtěl jsem udělat něco jedinečného, velkolepého, vzrušujícího. Dopadlo to ale jako vždycky, je to zase teploměr!
Většina těch úžasných IoT hraček je druhým koncem v Číně. To není z mnoha důvodů dobré. Ne každý je nadšen z toho, že robotický vysavač LIDARem naskenuje jeho byt a hned za tepla náčrtek odesílá do Činy. Tomu ovšem zabránit nedovedu. Chtěl jsem jen nějak omezit potřebu externího portálu pro ukládání dat a zkusit něco nového.
Po zapnutí se zařízení připojí k síti WiFi a načte si časový údaj z externího NTP serveru. Je otestována existence senzoru SHT40. Čas je synchronizován, vytvoří se měsíční graf z historických dat a započne měření teploty a vlhkosti. Měří se v intervalu 1 minuta a neustále se počítá pro danou hodinu aritmetický průměr zjištěných veličin. Zároveň jsou tyto hodnoty průběžně zobrazovány v grafu. Na konci hodiny se aritmetický průměr uloží do pole proměnných a začne se počítat průměr v další hodině.
Před půlnocí se všechny hodinové průměry z celého dne uloží do souborového systému jako jediný řádek hodnot opatřený datem. V návaznosti na to se zpracují všechny existující hodnoty v pevné paměti a vytvoří se aktuální grafy vyjadřující teplotní a vlhkostní průměry v jednotlivých měsících aktuálního roku.
V pevné paměti se vytvoří dva soubory, jeden pro teplotu, druhý pro vlhkost, které se celý rok doplňují. Je možné si je kdykoliv stáhnout do PC či mobilu a udělat si rozbor nebo grafické zobrazení dat. Pohodlně třeba v Excelu. Soubory mají snadno importovatelný a jednoduchý formát *.csv.
Hodiny, kdy zařízení nebylo v provozu, jsou bez hodnoty. Na začátku dalšího roku se vytvoří soubory nové a staré zůstanou. Kapacita paměti flash / filesystému odpovídá odhadem cca 20 rokům záznamu. Smazat soubory je možné pouze obnovením souborového systému LittleFS do počátečního stavu.
Systém zahrnuje WeMos D1 mini a sensor SHT40. Sensor je připojen přes sběrnici I2C. Tlačítko přepíná z módu STA do AP.
Program jsem rozdělil do několika částí:
Nainstalovat vývojové prostředí Arduino není nijak složité. Najdete to popsáno i v českém jazyce na více místech, stejně jako instalaci desek ESP8266 do IDE. Tu pochopitelně musíte provést také. O čem se ale zase tak často nemluví, je plugin pro vytvoření obrazu LittleFS ve volné paměti flash.
Najdete ho na adrese:
https://github.com/earlephilhower/arduino-littlefs-upload/releases/download/1.5.3/arduino-littlefs-upload-1.5.3.vsix
Stačí ho stáhnout a vložit do adresáře ve vašem počítači „C:\Users\"username"\.arduinoIDE\plugins“. Pokud adresář plugins neexistuje, tak ho prostě vytvoříte. Restartujte Arduino IDE a máte skoro hotovo. Už jen chybí jediná použitá externí knihovna Adafruit SHT4x Library, tu si nainstalujte i s nabízenými doplňky.
Před programováním je třeba nastavit v prostředí Arduina některé parametry desky:
A už můžete programovat. Pro vytvoření LittleFS musíte pak nakonec ještě spustit plugin. Stisknete Shift + CTRL + P a v nově otevřeném menu najděte „Upload LittleFS to Pico/ESP8266/ESP32“. Stačí ho spustit, pracuje automaticky a zajistí, aby se soubory z adresáře „data“ dostaly kam patří.
Pokud jste nenastavili defaultní parametry WiFi přímo v programu, pak WeMos po zapnutí jen bliká a signalizuje tím, že není připojen k žádné síti. Pak tedy stiskněte Smart Button. Tím se WeMos přepne do režimu AP. Poznáte to podle trvalého svitu modré LED na modulu. Vy pak třeba na mobilu v dostupných sítích Wifi vyhledáte síť s názvem vašeho sensoru a připojíte se na ni. Pozor na jednu věc. Mobil obvykle začne hlásit, že zvolená Wifi nemá připojení k internetu a snaží se vás odpojit.
Pak napíšete do adresního řádku prohlížeče "logger.local", nebo "192.168.4.1". Po nastavení WiFi je nezbytné potvrdit nové parametry tlačítkem SUBMIT na webové stránce. To si vyžádá heslo oprávněného uživatele. V tomto rozhraní pak můžete pro zpětný přechod do režimu stanice použít volbu Restart.
Pokud byste chtěli logovat teplotu někde, kde nemáte stabilní WiFi, pak by mělo stačit vytvořit mobilem HotSpot a připojit se loggerem na něj. Po synchronizaci času můžete HotSpot zavřít a logger by měl pracovat autonomně dál. Nesmí ovšem dojít k výpadku napájení.
K zařízení je možné se připojit z počítače, tabletu nebo mobilním telefonem po přihlášení do stejné sítě WiFi. Pak stačí do vyhledávacího řádku prohlížeče napsat „logger.local“. Na velikosti písmen nezáleží. Toto jméno si můžete změnit před kompilací programu. To „logger" je jméno - label a může mít maximálně 63 znaků.
Ta první začíná dvěma plovoucími grafy, které zobrazují hodinové průměry teploty a vlhkosti za posledních 24 hodin. První údaj v grafu se objeví po minutě provozu. Kladná teplota se zobrazuje červeně, záporná teplota modře. Hodnoty jednotlivých sloupců grafu zobrazíte najetím myši nebo na mobilu poklepem prstu
Pokud není při startu zařízení nalezeno čidlo nebo není synchronizován čas, pak se žádné grafy nezobrazují a stejně tak se neaktualizují soubory s daty ve flash paměti.
Pokud nedojde k synchronizaci času, tak se o ni sytém pokouší opakovaně každých 5 minut, dokud se mu to nepodaří. Po tuto dobu je časový údaj červený .
Ještě musím upozornit na to, že udávaný čas je UTC +1 bez respektování letního času.
Údaj o teplotě a vlhkosti je čten ze sensoru každou minutu. Časový údaj ukazuje nejen hodiny a minuty, ale také dny od zapnutí zařízení. To je to DD na začátku časového údaje. Síla signálu WiFi ve standardní formě a velikost volné paměti jsou asi každému jasné.
Druhá webová stránka začíná zase grafy a dostanete se na ni tlačítkem NEXT. Tentokrát tyto grafy vyjadřují měsíční průměry teploty a vlhkosti. Jsou počítány z uložených denních záznamů. Vždy při zapnutí a při půlnoci se aktualizují spolu se záznamem denních hodnot.
Dalšími položkami jsou:
jméno a heslo pro WiFi - Pokud cokoliv na této stránce upravujete, musíte to potvrdit stiskem tlačítka SUBMIT. Jinak se prostě nic nestane a změny budou zapomenuty. A v okamžiku, kdy toto tlačítko poprvé stisknete, tak budete vyzváni k zadání uživatelského jména a hesla. Pozor, to je to v záhlaví programu! Použité heslo uživatele platí až do uzavření prohlížeče, který si přístupové údaje uchovává pro danou session.
Update slouží k přechodu na stránku pro aktualizaci firmware – OTA přes WiFi.
Heating – zahřívání sensoru. Sensor SHT40 má navíc ještě jednu funkcionalitu. Je to topení. Vytápět sensor je možné třemi různými výkony s dobou zapnutí 0,1s nebo 1s. Toho lze různě využít v obtížných klimatických podmínkách s vysokou vzdušnou vlhkostí a především v případě kondenzace vodních par na sensoru.
Topení by nemělo být používáno při teplotách okolí vyšších než 65°C, aby se čidlo nepřehřálo. Taky by nemělo být topení používáno trvale. Já jsem zvolil variantu středního výkonu 110mW po dobu 1 sekundy. Ovšem pouze jednorázově na přímý požadavek uživatele.
V případě, že máte problém s měřením vlhkosti, což se nejspíš projeví trvalou 100% hodnotou RH, tak prostě aktivujte na webovém rozhraní topení zaškrtnutím parametru "Heating". A nic nebrání to udělat třeba i několikrát v intervalu cca 30s, výrobce hovoří o pracovním cyklu maximálně 10%.
Topení se samo vypíná po vypršení nastaveného časového intervalu 1s. Pokud zaškrtnete checkbox a potvrdíte SUBMIT, tak se zapne topení a po sekundové prodlevě se provede kontrolní měření.
Default nastaví výchozí, při programování nastavené parametry WiFi.
Restart je poslední volitelná položka a snad komentář nepotřebuje.
Za zmínku stojí ještě nápisy Sensor, FS Writing, FS Reading. Ty nemají nic společného se zaškrtávacími checkboxy, vedle kterých jsou umístěny. Nápis Sensor zčervená, pokud se při startu nepodaří inicializace SHT40. Nápis FS Writing je příznak zápisu do LittleFS. Pokud zčervená, je něco opravdu špatně, protože se zápis nezdařil. FS Reading bude po prvním zapnutí zařízení červený, protože ještě neexistují žádné soubory s daty. Ty se vytváří až o první půlnoci po zapnutí. Pak by měl nápis zezelenat.
Už jsem zmínil, že je používán souborový systém LittleFS. Jsou v něm uloženy nejen naměřená data, ale i některé soubory, nezbytné pro design a chod webových stránek/tabulek. Pokud nahrajete samotný program bez upgrade LittleFS, tak nebude fungovat záznam dat a webové stránky budou na hranici srozumitelnosti. Proto připomínám ten plugin nahraný do Arduino IDE.
Soubory s daty se vždy jmenují templetopočet.csv a humiletopočet.csv. Tedy letos je to temp2025.csv a humi2025.csv. Vše psáno malými písmeny. Když chcete soubor stáhnout, napíšete prostě do příkazového řádku prohlížeče logger.local/temp2025.csv.
Vždy první provozní den v novém roce se automaticky vytvoří soubory s aktuálním letopočtem a pracuje se s nimi po zbytek roku.
Dosažené výsledky mě příjemně překvapily. Reakce HTTP serveru jsou dostatečně rychlé a webové rozhraní je přívětivé i na mobilním telefonu.
„Zkuste to bez cloudu milý…“ 😊