Mikrokontróler ESP32 je prepojený s PHY Ethernet modulom LAN8720 cez rozhranie RMII (Reduced Media Independent Interface). ESP32 cez WiFi kontróler zabezpečuje MAC vrstvu pre PHY Ethernet. Webserver implementovaný v Arduino Core a umožňuje riadiť termostat cez prehliadač v LAN sieti, kde je ESP32 dostupné na pridelenej IPv4 adrese z DHCP servera v LAN sieti. Logika termostatu sa vykonáva nezávisle na otvorenej webaplikácii termostatu. Zmena logiky, prahových teplôt sa vykonáva prostredníctom HTTP požiadaviek od klientov v sieti cez HTML formulár, prípadne je možné požiadavku zaslať aj priamo prostredníctvom HTTP POST požiadavky s predvolenými argumentami fname a fname2. Na základe požiadavky na konkrétnu podstránku je možné ovládať výstup, napríklad manuálne / automaticky, alebo je možné argumentom nastaveným na určitú hodnotu prepísať riadiace dáta (cieľová teplota, hysteréza - dátový typ float). Riadiace dáta sú uložené v emulovanej EEPROM pamäti na ofsete flash pamäte, pričom je životnosť tohto sektora na úrovni 10-tisíc prepisov. Webserver beží na štandardnom HTTP porte - 80.
Termostat dokáže automatizovane prostredníctvom GPIO výstupu (invertovaná logika) ovládať signalizačné relé pre zapnutie / vypnutie kotla. Dokáže tak nahradiť existujúci izbový termostat a sprístupniť ho v sieti všetkým klientom. Termostat dokáže obsluhovať akékoľvek zariadenie s prehliadačom - počítač / smartfón / tablet / Smart TV a podobne. Ako rozhodovací algoritmus sa využíva cieľová teplota s hysterézou, ktorá sa porovnáva s nameranou teplotou z digitálneho senzora teploty Dallas DS18B20. Cieľová teplota a hysteréza je načítaná z EEPROM pamäte, kde je uchovaná aj v prípade výpadku napájania permanentne a pri zápise nových dát sa prepíše. Rozlíšenie senzora DS18B20 pri meraní je 12-bitov, čomu rozpovedá rozlíšenie na teploty 0.0625 °C, čo je minimálny rozlišovací krok medzi rozlišnými meraniami. Dáta po OneWire zbernici môžu prísť do mikrokontroléru po vyžiadaní za 500 až 1000 ms v závislosti od počtu senzorov na OneWire zbernici, dĺžke zbernice a podobne... Rozhodovacia logika termostatu sa vykonáva každých 10 sekúnd nezávisle na webaplikácii, nevyžaduje sa keep-alive spojenie pre vykonanie logiky, systém tak funguje autonómne a nevyžaduje pozornosť používateľa.
Po hardvérovej stránke projekt využíva:ESP32 | Dallas DS18B20 |
---|---|
3V3 | Vcc |
GND | GND |
D5 | DATA |
ESP32 | Relé (OMRON G3MB-202P / SRD-05VDC-SL-C) |
---|---|
5V | Vcc |
GND | GND |
D4 | IN |
ESP32 | PHY Ethernet LAN8720 |
---|---|
3V3 | Vcc |
GND | GND / RBIAS |
D18 | MDIO |
D19 | TXD0 |
D21 | TXEN |
D22 | TXD1 |
D23 | MDC |
D25 | RXD0 |
D26 | RXD1 |
D27 | CRS_DV |
HTML stránky bežiace na ESP32:
Webové rozhranie je navrhnuté pre prispôsobenie sa väčším i menším obrazovkám. Je reponzívne, podporuje širokouhlé obrazovky s vysokým rozlíšením, ale aj mobilné zariadenia. Rozhranie využíva importované CSS štýly Bootstrap frameworku z externého CDN servera, ktorý načíta client-side zariadenie pri otvorení stránky bežiacej na ESP32. Aby ostali nastavené hodnoty termostatu zachované aj po výpadku napájania, sú uložené do EEPROM pamäte ESP, ktorá je emulovaná vo flash pamäti, nakoľko platforma nemá fyzicky EEPROM čip (pamäť). Referenčná teplota na offset 10, hysteréza na offset 100. Každá z hodnôt zaberá maximálne 5B v EEPROM pamäti + ukončovací znak. Dáta sa prepisujú iba pri odoslaní HTML formulára, prevádzka termostatu je tak maximálne šetrná k EEPROM pamäti pre jej maximálnu trvácnosť. Stav výstupu existuje iba v RAM pamäti, kde sa pri zmene prepisuje. Hodnota sa neukladá do emulovanej EEPROM pamäte vo flash pamäti.
Prostredníctvom meta tagu Refresh vykonáva webserver obnovu celej stránky každých 30 sekúnd a prostredníctvom Javascriptu sa vypisuje do HTML stránky aj orientačný čas do refreshu. Do tohto času je potrebné stihnúť zapísať zmenu pre termostat, inak sa input okná pre číselné vstupy do formulára resetujú pri obnovení stránky. Na základe spätnej väzby od používateľov Android zariadení bol čas pre Refresh predĺžený z 10 na 30 sekúnd. Dynamický údaj, ktorý sa predovšetkým mení je aktuálna hodnota výstupu - Zapnutý / Vypnutý, ktorý informuje prevádzkovateľa o skutočnom stave výstupu spoločne aj s farebným označením. Nakoľko sa logika systému vykonáva nezávisle na webserveri, do refreshu môže už byť výstup v inom stave, ako aktuálne vypísanom vo webaplikácii. Zmena výstupu je ihneď vypísaná napríklad na UART monitor (115200 baud/s). Na webovej stránke termostatu nájde používateľ aj informácie o uptime zariadenia (ako dlho beží), t.j. čas v dňoch, hodinách, minútach a sekundách.
Termostat vykuruje od nameranej teploty 22.49 °C a nižšej. V prípade dosiahnutia teploty 23.01 °C a vyššej sa výstup vypne, signalizačné relé sa rozpojí a plynový kotol prestáva kúriť. Nastáva dobeh vykurovania a chladnutie miestnosti v ktorej sa vykonávajú merania. Termostat sa opäť aktivuje až pri dosiahnutí teploty 22.49 °C, alebo nižšej.
Implementácia obsahuje program pre dynamickú IPv4 adresu priradenú k Ethernet PHY termostatu z DHCP servera v sieti. Termostat je určený iba pre interiérové teploty! (nad 0°C), čomu je prispôsobená aj logika systému! Termostatom je možné nahradiť už existujúci izbový termostat, možno dočasne nahradiť ohrievač v akváriu / teráriu pre udržiavanie stálej teploty.