WiFi termostat postavený na platforme ESP8266 vznikol ako WiFi variant termostatu k existujúcemu Ethernet termostatu postavenom na platforme Arduino + Ethernet. Cieľom je tak na platforme ESP8266 (testované na platformách NodeMCU v3 Lolin, Wemos D1 Mini) priniesť rovnakú funkčnosť po stránke termostatu a logiky ako takej. WiFi termostat prišiel na konci roku 2020 vo verzii 1.0.2.1, čo je posledná stable verzia termostatu, ktorá vyriešila chyby a umožnila plnohodnotné využitie termostatu.
Do projektu bol integrovaný WiFiManager, ktorý umožňuje nakonfigurovať termostat pre domácu WiFi sieť a spustiť tak aj riadiacu funkcionalitu. Termostat sa snaží o pripojenie na domácu WiFi sieť s údajmi, ktoré má uložené vo flash pamäti - SSID a heslo. V prípade, že tieto údaje nemá, alebo predmetná WiFi sieť nie je v dosahu, prepne sa do režimu AP - prístupový bod a vysiela SSID: WiFi_TERMOSTAT_AP bez hesla (Open WiFi) a umožňuje sa tak pripojiť akémukoľvek zariadeniu v dosahu.
ESP8266 má aj integrovaný DHCP server, ktorým pridelí IP adresu z rozsahu 192.168.4.0 / 24 (pričom 192.168.4.1 je IP adresa ESP8266 - zároveň brána) a poskytuje na tejto IP adrese HTTP webové rozhranie - Captive Portal pre konfiguráciu WiFi siete v dosahu. Captive portal vie používateľa okamžite po pridelení IP adresy presmerovať na danú IP adresu a to notifikáciou.
Konfigurácia môže prebiehať úplne manuálne - zadaním SSID a hesla manuálne, alebo zvolením si WiFi siete v dosahu (dynamicky obnovuje a vizualizuje webaplikácia WiFiManagera aj s hodnotou RSSI) a zadaním hesla. Nakonfigurovať je možné WEP, WPA / WPA2 - PSK sieť. Podnikové siete štandardu 802.1X (WPA / WPA2 Enterprise) nie je možné konfigurovať cez webové rozhranie WiFiManagera.
Po nakonfigurovaní a pridelení IP adresy pre termostat v domácej LAN sieti prestáva ESP8266 vysielať vlastnú SSID, prechádza do režimu STA - STATION, teda termostat je plne funkčný a prístupný na príslušnej IP adrese. Výpis je realizovaný v pravidelných intervaloch na UART rozhranie, kde je možné okrem aktuálnej IP adresy priradenej z DHCP vidieť aj informácie o voľnej dynamickej RAM pamäti (Free HEAP), mDNS zázname (tento výpis iba pre mDNS firmvér) a aktuálnej hodnote výstupu.
Pri prvom spustení termostatu - keď sa v (softvérovo emulovanej) EEPROM pamäti ešte nenechádzajú riadiace informácie, teda hodnota z EEPROM je NaN - Not a number je vykonaný automatický zápis do EEPROM pamäte. Na offset 10 je zapísaná cieľová teplota 20.25 °C, na offset 100 je zapísaná počiatočná hodnota hysterézy 0.25°C. Táto logika pre zápis bola upravená vo verzii 1.0.2.1, nakoľko v predchádzajúcej verzii fungovala zle a nedokázala porovnať float s hodnotou NaN.
Termostat meria teplotu prostredníctvom teplotného senzora Dallas DS18B20 na OneWire zbernici v parazitnom / normálnom zapojení (Normálne zapojenie použité v schéme zapojenia projektu). Rozlíšenie senzora DS18B20 pri meraní je 12-bitov, čomu rozpovedá rozlíšenie na 0.0625 °C. Dáta po OneWire zbernici môžu prísť do mikrokontroléru po ich vyžiadaní za 500 až 1000 ms pri 12-bit rozlíšení.
Logika termostatu sa vykonáva každých 10 sekúnd nezávisle na webovom rozhraní / pripojení klienta. Logikou sa porovnáva nameraná teplota s cieľovou teplotou so zohľadnením hysterézy. Termostat vykonáva iba ZAP / VYP reguláciu kotla, nerieši výkonovú reguláciu. Prostredníctvom relé spína riadiaci kontakt pre kotol - nahrádza izbový termostat.
Ukážkové dáta - logika systému WiFi termostat:
- Cieľová teplota: 22.75 °C
- Hysteréza: 0.25 °C
- Namerané dáta z DS18B20: 21.69 °C
- Výstup (výsledok logiky - teplota neklesla pod threshold), ostáva výstup v stave v akom bol t.j. ZAPNUTÝ od dosiahnutia 21.49 °C
Termostat vykuruje od nameranej teploty 22.49 °C a nižšej. V prípade dosiahnutia teploty 23.01 °C 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.
Pre signálový vodič je možné využiť elektromagnetické relé SRD-05VDC-SL-C (max 10A pri 230V), prípadne SSR relé OMRON G3MB-202P (max 2A pri 230V) - možno použiť iba na AC obvody! Pri oboch typoch relé sa využíva active-low signál z mikrokontroléru, ktorý relé zopne. Logický signál 3V3 (operačná logika ESP8266) je dostačujúci pre rozopnutie relé, i keď je relé 5V.
Príklad ZAP / VYP regulácie kotla (vizualizácia z iného projektu):
Termostat má vo webovom rozhraní niekoľko webových stránok, ktoré umožňujú výpis dát, prípadne majú jednoduchý backend, ktorý umožňuje spracovať dáta z HTML formuláru, kde je možné zadať nové údaje o cieľovej teplote a hysteréze. Webové rozhranie má tak predovšetkým informatívny charakter, ktorý informuje používateľa o aktuálnom stave výstupov, nameraných hodnôt a taktiež aj o uptime zariadenia, kde je možné vyčítať, koľko hodín, dní zariadenie beží nepretržite.
Stránky bežiace na platforme ESP8266 pre termostat:
- / - root stránka obsahujúca formulár, aktuálny výpis logického výstupu pre relé, teplotu
- /action.html - spracúvava hodnoty z formulára, zapisuje ich do EEPROM pamäte, presmeruje používateľa späť na root stránku
- /get_data.json - distribuuje dáta o aktuálnej teplote, referenčnej teplote a hysteréze tretej strane (počítač, mikrokontróler, iný klient...) v JSON formáte
WiFi termostat pre ESP8266 nemá softvérovú podporu pre OTA Web Updater, ktorý umožňuje nahrávať binárny firmvér - skompilovaný program. Z toho dôvodu sa OTA v projekte WiFi termostatu pre platformu ESP8266 nevyskytne, nakoľko je nepoužiteľný s binárnym firmvérom, vyžaduje .ino aplikáciu. Pre ESP32 bude táto možnosť dostupná, firmvér je zatiaľ vo vývoji. Program pre WiFi termostat je šírený zdarma pod MIT licenciou iba v binárnej verzii, t.j. v skompilovanom - spustiteľnom programe .bin.
To znamená, že používateĺ môže celú funkcionalitu termostatu využívať, ale nemá prístup k Arduino .ino aplikácii, ktorá je napísaná autorom. Z toho dôvodu sa do verzie WiFi termostatu zdarma nedostala Basic OTA, ktorá umožňuje nahrávať .ino aplikáciu po kompilácii na sieťový COM port. Je súčasťou vyššej verzie, ktorá má viac funkcionalít a prístup k .ino aplikácii.
Nahrávanie programu
Program je možné do ESP8266 nahrať prostredníctvom nástroja ESPTOOL. Nástroj je súčasťou repozitáru projektu WiFi termostat a je pripravený v štýle plug n' play. Nie je potrebná jeho inštalácia. ESPTOOL využíva aj prostredie Arduino IDE pre nahrávanie programu do ESP8266, ESP32 mikrokontrolérov. Firmvér pre termostat je vyhotovený v mDNS a bez mDNS verzie. Firmvér s mDNS verziou obsahuje naviac oproti štandardnej verzii termostatu aj mDNS záznam, čo umožňuje pristúpiť na lokálnej doménové meno a používateľ tak nemusí poznať aktuálnu IP adresu termostatu z DHCP servera.
Doménové meno je wifi-termostat a má postfix .local (v mDNS), teda na termostat s týmto firmvérom je možné pristúpiť prostredníctvom http://wifi-termostat.local/. mDNS služba však musí byť spustená aj na sieti a musí ju podporovať aj zariadenie, ktoré daný request vykonáva! Nástroj ESPTOOL ako Windows aplikácia (.exe) je obsiahnutá vo všetkých firmvéroch. Súčasťou firmvéru je aj .bat spustiteľný súbor, ktorý má prednastavený script a spustenie nástroja ESPTOOL. Dokáže tak plne automatizovane nahrať program do mikrokontroléru.
V spustiteľnom .bat súbore je prednastavený COM port COM7. V prípade potreby je ho nutné prepísať na COM port, ktorý je priradený vášmu ESP8266 (možné zistiť v Správcovi zariadení). Aplikácia sa zapisuje do flash pamäte z offset 0x0. Po nahratí firmvéru sa okno nástroj ESPTOOL automaticky uzavrie. Termostat je pripravený na použitie, stačí nakonfigurovať cez WiFiManager a prevádzkovať.
JSON clients
JSON je formát dát, ktorý distribuuje WiFi termostat na sieťovom umiestnení (screenshot vyššie pre ukážku a formát dát) http://IP_ADRESA_ESP8266/get_data.json. Tieto dáta reprezentujú aktuálnu hodnotu cieľovej - referenčnej teploty, hysterézy a aktuálne nameranej teplote. Dáta môžu byť využité v rôznych ďalších systémoch pre domácu automatizáciu, napríklad:
- HomeAssistant
- Loxone
- Domoticz
- MQTT Broker - napríklad slovenský Broker zdarma pre vývojárov - IoT Industries Slovakia
Taktiež môžu byť dáta využité iným mikrokontrolérom pre samostatné riadenie na základe získaných dát. Dáta môžu byť odosielané a archivované, napríklad v MySQL databáze. Programová implementácia pre mikrokontrolérové platformy pracujúce v režime JSON clientov sú dostupné pre:
- Arduino + Ethernet Wiznet W5100 / W5500
- ESP8266
- ESP32
Všetky platformy využívajú HTTP GET spojenie prostredníctvom websocketu. Dokážu načítať payload s JSON dátami. Pre Arduino sa využíva 128 B JSON buffer, pre ESP platformy štandardný 512 B - payload má veľkosť cca 80B. Dáta sú po stiahnutí deserializované a hodnoty priradené ku kľúčom sú extrahované a vypísané na UART, čo je celá funkčnosť JSON clienta. Client môže byť rozšírený o používateľskú aplikáciu, ktorá môže dáta odosielať do spomenutého systému s ukladaním dát do MySQL databázy, alebo so zápisom aktuálnych dát do topicu MQTT služby (PubSubClient). Pre všetky platformy existuje programová implementácia so zdrojovým kódom, teda .ino aplikáciou, ktorá môže byť ľubovoľne modifikovaná.
Webové stránky projektu
Github repozitár projektu WiFi termostat má aj svoje webové stránky hostované cez Github Pages. Táto služba umožňuje hostovať vlastné HTML stránky k projektu pre jeho prezentáciu, ukážku. Stránky obsahujú popis termostatu, príklad ZAP/VYP regulácie s ukážkovým výpočtom, kedy termostat kúri / nekúri. Súčasťou stránok je aj ukážka JSON výstupu, screenshotov z UART monitoru, webaplikácie termostatu.
V príslušnej podstránke je dostupná elektrotechnická schéma zapojenia spoločne s tabuľkovým zapojením vývodov (vhodné pre laikov, ktorí sa v čítaním schém neorientujú). Ukážka podporovaných senzorov a možných prevedení Dallas DS18B20, popis puzdra, vývodov. Kontaktné informácie na autora WiFi termsotatu, preklik na Ethernet termostat na platforme Arduino. Jednoduchý - heslovitý návod, ako nahrať firmvér projektu do mikrokontroléru na platforme ESP8266. Popis dostupných firmvérov a opis funkcií a podporovaných senzorov plnej verzie projektu WiFi termostat.
Webstránka projektu WiFi termostat: https://martinius96.github.io/WiFi-termostat/index.html
Github repozitár projektu (obsahuje zložku webovej stránky, firmvér pre ESP8266 v .bin, zdrojové kódy pre JSON clientov, schému zapojenia exportovanú z Autodesk Eagle, README popis projektu, licenciu): https://github.com/martinius96/WiFi-termostat/