/termostat-ethernet

Termostat postavený na platforme Arduino s Ethernet shieldom Wiznet W5100 / modulom Wiznet W5500. Využíva teplotný senzor DS18B20 na OneWire zbernici. Arduino riadi výstup - relé na základe rozdielu cieľovej a nameranej teploty so zohľadnením hysterézy. Thermostat built on the Arduino platform with Ethernet shield Wiznet W5100 / module Wiznet W5500. It uses the DS18B20 temperature sensor on the OneWire bus. The Arduino controls the output-relay based on the difference between the target and measured temperature, taking into account the hysteresis.

Primary LanguageC++MIT LicenseMIT

Termostat - Arduino + Ethernet / ESP32 + PHY Ethernet

  • Termostat postavený na platforme Arduino s Ethernetom Wiznet, alebo na ESP32 s PHY Ethernetom LAN8720
  • Rozšírený popis k projektu, schéma zapojenia, dokumentácia: https://martinius96.github.io/termostat-ethernet/
  • Arduino funguje v režime HTTP webservera, kde ponúka na HTML stránkach komplexný prehľad aktuálne nameraných a platných údajov
  • Umožňuje zmeniť údaje o cieľovej (referenčnej) teplote a hysteréze, ktorá sa používa pre riadenie vykurovania
  • Tieto údaje sú zapísané do EEPROM pamäte, ktorá má životnosť až 100-tisíc prepisov
  • Webserver je prístupný z domácej LAN siete na statickej, alebo dynamickej IP adrese pridelenej z DHCP servera
  • Arduino riadi na základe navolenej hysterézy a cieľovej teploty výstup - relé, ktoré spína signál pre kotol
  • Programová logika sa vykonáva nezávisle na webserveri (nevyžaduje sa keep-alive spojenie, alebo pozornosť používateľa)
  • Projekt nerieši výkonovú reguláciu kotla!
  • Pre meranie teploty Arduino využíva senzor Dallas DS18B20 na OneWire zbernici v parazitnom / normálnom zapojení (použité v schéme zapojenia)
  • Arduino na UART pravidelne vypíše pridelenú (respektíve statickú) IP adresu, na ktorú sa môže používateľ pripojiť
  • Pri Ethernet module W5200 až W5500 je nutné pripojiť aj vývod D2 Arduina na INT vývod Ethernet modulu okrem SPI vývodov
  • Projekt môže fungovať celoročne, aj ako Ethernet teplomer v prípade, že je odpojený výstup ku riadeniu kotla.
Názov súboru Shield IPv4
dynamic_W5100.hex W5100 priradená cez DHCP (obsahuje i maintain pre predĺženie lease time / vyžiadanie novej IP)
dynamic_W5500.hex W5500 priradená cez DHCP (obsahuje i maintain pre predĺženie lease time / vyžiadanie novej IP)
static_W5100_1_254.hex W5100 192.168.1.254
static_W5100_4_1.hex W5100 192.168.4.1
static_W5500_1_254.hex W5500 192.168.1.254
static_W5500_4_1.hex W5500 192.168.4.1

Nahratie programu do Arduina cez avrdude (vzorovo pre COM21 a program sketch.ino.hex):

  • avrdude -CC: avrdude.conf -v -patmega328p -carduino -PCOM21 -b115200 -D -Uflash:w:sketch.ino.hex:i

Schéma zapojenia (Uno, Nano, Mega)

Termostat - Ethernet - Arduino Dôležité informácie:

  • Serial monitor: 115200 baud/s
  • Údaje o hysteréze a referenčnej teplote uložené v EEPROM pamäti permanentne

HTML stránky bežiace na Arduine:

  • / - 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 v JSON formáte

Rozšírené informácie k projektu v článku:

Screenshoty webaplikácie + výstup Serial monitoru

Ethernet termostat vypnutý - webserver - Arduino Ethernet termostat zapnutý - webserver - Arduino Ethernet termostat- presmerovanie používateľa po odoslaní dát do formulára UART - RS232 výstup konfigurácie termostatu a stavu výstupu - Arduino JSON output - Ethernet termostat - Arduino

JSON klienti - sťahovanie dát z termostatu

  • Programové implementácia pre klientov na platforme Arduino, ESP8266, ESP32, ktorí sa dokážu pripojiť k WiFi termostatu
  • Dokážu načítať dáta, ktoré termostat distribuuje - hysteréza, cieľová teplota, nameraná teplota na podstránke /get_data.json
  • Dáta z JSON formátu klient deserializuje, vyparsuje pre ďalšie použitie, archiváciu, upload do MySQL databázy, cloud
  • Možnosť na základe dát riadiť perifériu (solenoid radiátora, ohrev, ventilátor, notifikácie o teplote pre Android, iOS zariadenia)
  • Pripájanie JSON klienta sa realizuje každých 15 sekúnd k termostatu cez websocket
  • V rozšírenej implementácii JSON klienta o MQTT sa dáta posielajú na dostupný free MQTT Broker - IoT Industries Slovakia
  • Dáta sa Publishujú do hlavného topicu termostat, pričom je každá entita rozdelená subtopicom
  • Subtopicy sú: hysteresis, actual_temp, target_temp
  • JSON klient má k daným subtopicom prihlásený Subscribe prostredníctvom čítania hlavného topicu termostat/#
  • Tento MQTT Broker je verejný a tak môžu byť dáta zmenené, prepísané, čítané akýkoľvek používateľom služby
  • Ak do svojho mikrokontroléru nahrá firmvér JSON klienta bez zmeny akýkoľvek iný používateľ, bude vám prepisovať dáta v preddefinovanom topicu
  • Možno prispôsobiť pre váš MQTT broker a systém inteligentnej domácnosti, kde môžete mať dáta z termostatu - Hassio, Domoticz, MQTT Mosquitto, Loxone
  • Pre súkromný MQTT broker je možné využiť aj autentizáciu menom a heslom, viz. dokumentácia: https://pubsubclient.knolleary.net/api
  • K dispozícii je aj firmvér pre JSON MQTT klientov s označením MQTTS - využívajú šifrované spojenie cez socket s MQTT brokerom
  • Tento typ firmvéru je dostupný iba pre ESP8266 a ESP32. Arduino s Ethernetom nepodporuje šifrovanie JSON klient - Arduino, ESP8266, ESP32