Obsah článku
title: "Firmvér pre Meteo Modul s riadením relé cez Modbus TCP"
slug: "esp8266-meteo-modul-cuckoo-clock"
technologies: ["ESP8266", "Arduino", "Modbus TCP", "WiFiManager", "DS18B20", "Telnet", "OTA"]
tags: ["iot", "esp8266", "modbus", "home-automation", "weather-station", "arduino", "firmware", "sensor"]
date_solved: "2025-08-18"
Projekt/Téma: Vývoj firmvéru pre meteorologický modul na platforme ESP8266, určený na monitorovanie počasia a ovládanie dvoch relé, s primárnou integráciou cez Modbus TCP.
1. Cieľ / Problém na vyriešenie: Cieľom bolo vytvoriť autonómny modul schopný merať vonkajšiu teplotu (pomocou DS18B20) a detegovať dážď (pomocou senzora zrážok). Zariadenie malo zároveň poskytovať možnosť diaľkového ovládania dvoch nezávislých relé. Hlavnou požiadavkou bola robustná a štandardizovaná komunikácia pre jednoduchú integráciu do nadradených systémov domácej automatizácie. Ako špecifický prípad použitia sa v kóde spomína "Meteo Modul pre Kukučkové Hodiny", čo naznačuje, že relé môžu byť použité na riadenie mechanizmu hodín v závislosti od počasia.
2. Použité technológie a nástroje:
- Mikrokontrolér: ESP8266
- Vývojové prostredie: Arduino Framework
- Senzory a Aktuátory:
- 1x Teplotný senzor DS18B20 (One-Wire)
- 1x Senzor dažďa s digitálnym a analógovým výstupom
- 2x Relé modul pre spínanie externých zariadení
- Protokoly a Rozhrania:
- Modbus TCP: Primárne rozhranie pre čítanie senzorických dát a ovládanie relé.
- HTTP: Jednoduchý webový server pre základný prehľad o stave, zobrazenie logov a reset WiFi.
- Telnet: Príkazový riadok (CLI) pre pokročilú diagnostiku a manuálne ovládanie relé.
- mDNS: Zariadenie je dostupné v sieti pod menom
meteo-modul.local.
- Kľúčové knižnice:
WiFiManager: Zabezpečuje jednoduché úvodné nastavenie WiFi pripojenia.ModbusIP_ESP8266: Implementuje Modbus TCP server (slave).DallasTemperature&OneWire: Na komunikáciu so senzorom teploty.ESP8266WebServer: Pre HTTP rozhranie.ArduinoOTA: Umožňuje bezdrôtové nahrávanie nového firmvéru.EEPROM: Ukladá počet reštartov zariadenia.
3. Kľúčové postupy a konfiguračné kroky:
- Inicializácia: Po štarte si zariadenie načíta a zvýši počítadlo bootov z EEPROM, nastaví piny pre relé do východiskového stavu (vypnuté) a inicializuje zbernicu pre senzory.
- Pripojenie k sieti: Pomocou WiFiManager sa automaticky pripojí k známej sieti. Ak konfigurácia chýba, vytvorí vlastný prístupový bod (
MeteoModul-XXXX) pre jednoduché nastavenie cez webový prehliadač. - Spustenie sieťových služieb: Po pripojení sa aktivujú všetky kľúčové služby: Modbus TCP server, webový server, Telnet server a OTA listener.
- Definícia Modbus mapy: V
setup()sa presne definuje, ktoré Coily (digitálne výstupy/stavy) a ktoré Input Registre (hodnoty senzorov) budú prístupné cez Modbus. To zahŕňa relé, senzory a systémové informácie. - Hlavná slučka (Loop): Aplikácia v cykle vykonáva nasledujúce operácie:
- Obsluhuje sieťové požiadavky (Modbus, Web, Telnet, OTA).
- Aktívne monitoruje stav WiFi pripojenia a v prípade výpadku sa ho snaží obnoviť.
- Synchronizuje stav fyzických relé so stavom príslušných Modbus Coilov, čo umožňuje ich ovládanie cez Modbus.
- Každé 2 sekundy načíta aktuálne hodnoty z teplotného a dažďového senzora a zapíše ich do Modbus registrov. Logovanie prebieha iba pri významnej zmene hodnôt.
- Každú sekundu aktualizuje systémové registre (uptime, RSSI, voľná pamäť).
- Resetuje watchdog časovač, čím zabezpečuje ochranu proti zamrznutiu.
4. Výsledné kódy a skripty:
-
Definícia Modbus registrov a mapovania pinov: Táto časť je kľúčová pre integráciu a prispôsobenie. Jasne definuje adresy pre komunikáciu a fyzické pripojenie komponentov.
// === Modbus Registry Adresy === #define REG_RELE1 15 // Coil #define REG_RELE2 16 // Coil #define REG_UPTIME 18 // Ireg #define REG_SIGNAL 19 // Ireg #define REG_RAIN_DIGITAL 20 // Coil #define REG_RAIN_ANALOG 21 // Ireg #define REG_OUT_TEMP_DS 22 // Ireg // Coils pre systémové funkcie #define COIL_RESET_WIFI_SETTINGS 450 #define COIL_SYSTEM_RESTART 451 // === Pinové Definície === int rele1 = D1; int rele2 = D2; #define ONE_WIRE_BUS D5 #define RAIN_DIGITAL_PIN D6 #define RAIN_ANALOG_PIN A0
5. Zistené problémy a riešenia (Gotchas):
- Problém: Neustále logovanie a posielanie dát zo senzorov môže zahlcovať sieť a logy, aj keď sa hodnoty nemenia.
- Riešenie: Firmvér implementuje inteligentné logovanie. Hodnota z teplotného senzora sa zaznamená a aktualizuje v Modbus registri len vtedy, ak sa zmení o viac ako 0.5°C. Podobne, dáta z dažďového senzora sa logujú len pri zmene digitálneho stavu alebo pri väčšej zmene analógovej hodnoty (>20). Tým sa výrazne znižuje "šum" v dátach.
- Problém: Ako ovládať relé cez Modbus aj cez Telnet bez vzniku konfliktu?
- Riešenie: Ovládanie je synchronizované. Príkazy z Telnetu priamo menia stav GPIO pinu a zároveň aktualizujú stav príslušného Modbus coilu (
mbtcp.Coil(...)). Hlavná slučka následne synchronizuje stav GPIO podľa Modbus coilu. Týmto spôsobom je Modbus master vždy informovaný o aktuálnom stave, bez ohľadu na to, či bol zmenený cez Modbus alebo Telnet.
- Riešenie: Ovládanie je synchronizované. Príkazy z Telnetu priamo menia stav GPIO pinu a zároveň aktualizujú stav príslušného Modbus coilu (
- Problém: Zariadenie v teréne sa stane nedostupným kvôli chybe v softvéri alebo strate konektivity.
- Riešenie: Aplikácia využíva kombináciu dvoch mechanizmov:
- Hardvérový Watchdog: Zabezpečí automatický reštart v prípade zamrznutia kódu.
- Pokročilá správa WiFi: Funkcia
manageWifiConnectionautonómne rieši výpadky pripojenia. - Vzdialený reštart: Možnosť reštartu alebo resetu WiFi nastavení cez Modbus Coil (
COIL_SYSTEM_RESTART,COIL_RESET_WIFI_SETTINGS) poskytuje "záchrannú brzdu" bez fyzického prístupu.
- Riešenie: Aplikácia využíva kombináciu dvoch mechanizmov:
6. Finálny výsledok / Záver: Firmvér predstavuje vysoko spoľahlivé a flexibilné riešenie pre zber meteorologických dát a diaľkové ovládanie. Architektúra je postavená na osvedčených postupoch pre IoT zariadenia: jednoduchá konfigurácia (WiFiManager), štandardizovaná komunikácia (Modbus TCP), viacero možností správy (Web, Telnet) a mechanizmy pre zabezpečenie dlhodobej stability (Watchdog, manažment konektivity). Kód je dobre štruktúrovaný a pripravený na nasadenie v projektoch vyžadujúcich spoľahlivosť a jednoduchú integráciu.