Víte, jak se daří vaší kytce? Zjistěte to s ESP8266, přehledně v grafech a s ultra nízkou spotřebou
- April 30 2020
- ESP32, ESP8266, NodeMCU , Wemos, RTLDuino...
- 3122x Přečteno
Jsme v době, která bastlířům přeje, můžete koupit nejrůznější moduly za pár desetikorun či stokorun a během chvíle vytvořit například poloprofesionální meteostanici jejíž kvalita závisí pouze od kvality zakoupených čidel.
Já se rozhodl vytvořit automatický zalévací systém, ke kterému patří i měření teploty a vlhkosti vzduchu a stejně tak i měření teploty a vlhkosti půdy.
Důraz kladu zejména na nízkou spotřebu a dobře intepretovaná data dostupná odkudkoliv.
Hlavní deska
Jako základ jsem zvolil svou desku MeteoV3.1, kterou používám už u několika svých projektů a stejně tak jí používají i další bastlíři - třeba Kutil domácí z twitteru, ten jí používá ke snímání teploty v kompostu.
Meteo v3 namontováno v krabičce, čidlo umístěno v kompostu, kompost provzdušněn a zalit vodou.
— Marty (@KutilDomaci) April 26, 2020
Jsem zvědavý na graf!#meteov3 @chiptronCZ pic.twitter.com/ymHyr6P1cG
V mém případě je deska napájena dvojicí AA baterií z Ikea, která má dle mého nejlepší poměr cena vs. kapacita. Detailní měření této baterie a spousty dalších najdete na http://www.nejlepsi-baterie.cz/.
MeteoV3.1 můžete osadit modulem ESP07, ESP08 nebo ESP12, vyvedeny jsou konektory pro I2C, 1-wire i dva GPIO, které můžete volitelně použít. Ke snímání napětí baterie můžete využít i připravený konektor připojený na AD převodník ESP8266.
Pokud byste desku chtěli napájet vyšším napětím než je 3.6V, stačí osadit LDO stabilizátor s nízkou vlastní spotřebou LF33.
Čidla
Takže hlavní desku bychom měli, teď zbývají čidla. Dlouhá léta používám Si7021, které měří jak teplotu tak i vlhkost vzduchu a navíc obsahuje i topné těleso, kterým můžete zvýšit přenost měření vlhkosti.
Pro Si7021 používám tuto knihovnu: https://github.com/LowPowerLab/SI7021
Jeho vlastní spotřeba v režimu spánku je neuvěřitelných 60nA, v režimu měření pak 150uA.
Rozsah napájecího napětí je od 1.9 do 3.6V.
Takže volba byla docela jasná. Čidlo jsem umístil do radiačního štítu.
Komplikovanější volbou pak byl výběr vhodného čidla pro měření vlhkosti půdy.
Na výběr jsou vlastně dva typy měření - jeden měří odpor mezi elektrodami, druhý kapacitu.
Měření kapacity ná své výhody, tou největší je, že zde neprochází proud mezi elektrodami.
Můžete koupit kapacitní čidlo vlhkosti půdy na aliexpress, ale to není voděodolné, takže musíte řešit i voděodolnost.
Už nějakou chvíli mám čidlo od hardwario, které kromě voděodolnosti a kapacitního měření vlhkosti půdy navíc obsahuje i teplotní čidlo a použitá sběrnice je 1-wire. Můžete tak připojit na jeden pin spoustu stejných čidel.
K tomuto čidlu jsem využil arduino knihovnu, která je dostupná na https://github.com/bigclownlabs/SoilSensor.
Spotřeba během měření je kolem 2.4mA, v režimu spánku pak pouhých 16uA.
Spoiler: při použití čidla s MeteoV3.1 jsem proud snížil na 0mA.
Napájecí napětí čidla je pak od 2.8V do 5.5V. Hodí se tak i ke klasickým 5V Arduino deskám.
Co nejnižší spotřeba
Pro dosažení co nejnižší spotřeby je důležitý jednak výběr součástek, ale také jejich použití.
Hned v úvodu této kapitoly zmíním jeden problém, na který jsem při použití ESP8266 narazil.
Čidlo vlhkosti půdy obsahuje čidlo DS28E17 - převodník mezi I2C-1-wire, které má ale tu vlastnost, že se po uspání automaticky probudí v případě, kdy nastane na sběrnici nějaká komunikace...
A ESP8266 vygeneruje pulz při uspání - ten můžete vidět níže.
Tento krátký pulz na DATA pinu probudí čidlo a jeho odběr není 16uA, ale 2.3mA, což je mnohem více.
Znovu ale čidlo uspat nemůžete, protože ESP8266 už dávno spí.
Tento problém naštěstí vyřešila deska MeteoV3.1, která obsahuje, jak už jsem zmínil, dva GPIO piny, které můžete použít jako vstup nebo výstup.
Já jeden z nich, GPIO12, použil jako výstup, kterým spínám napětí VCC čidla vlhkosti od hardwario.
Tím jsem docílil vlastní spotřeby čidla 0mA. Ano, prostě odpojíte čidlo od napájení.
Další snížení spotřeby můžete docílit pomocí vašeho kódu... ESP8266 umí tři režimy spánku.
Bastlíři často používají ESP8266 následovně - zapnou WiFi, něco čtou z čidel, vypočítavají, WiFI zbytečně běží a až jako poslední úkon odešlou data na nějaký server.
Rozdíl mezi normálním módem a modem-sleep činí i 55mA (ze 70mA na 15mA), což je výrazná úspora.
Vzhledem k tomu, že při každém zapnutí čidla zapnu i ohřev čidla Si7021, ESP8266 běží několik vteřin naprosto zbytečně - je tedy dobré snížit spotřebu například vypnutím WiFi periférie.
Elegantnějším řeším by však bylo využití EEPROM paměti, průběh kódu by pak byl následovný
- zapnutí ESP8266 (vypnutí WiFi periférie)
- zapnutí ohřebu Si7021
- zapsání aktuálního stavu do EEPROM - další zapnutí ESP8266 už bude vyčtení a odeslání dat na server
- probuzení ESP8266 po několika vteřinách
- vypnutí ohřevu Si7021
- připojení k WiFi, změření dat, uspání na několik (desítek) minut
Zobrazení dat
Zobrazení dat je další důležitou částí každého projektu, já jsem využil The IoT Guru cloud o kterém jsem psal tady: https://chiptron.cz/articles.php?article_id=260
V článku výše najdete obrázkový návod, jak nastavit váš účet tak, aby vám to celé bez problému fungovalo.
K zobrazení dat pak můžete použít webové rozhraní nebo jejich aplikaci.
Graf teploty vzduchu na balkónu
Graf vlhkosti vzduchu na balkónu
Graf teploty půdy
Graf vlhkosti půdy
V aplikaci jsou pak data zobrazeny například takto
Spotřeba a kód
A dostáváme se ke spotřebě... díky použitým součástkám i jejich využití, je spotřeba v nejhlubším režimu spánku pouhých 24,76uA.
Odeslání dat probíhá jednou za 30 minut - ale tato hodnota je nastavitelná v kódu.
Kód je ke stažení na tady.