Firmvér pre Meteo Modul s riadením relé cez Modbus TCP

Vytvorené: 24. 8. 2025 08:37 Aktualizované: 27. 8. 2025 13:14
Vyriešené
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:

  1. 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.
  2. 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č.
  3. 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.
  4. 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.
  5. 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.
  • 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:
      1. Hardvérový Watchdog: Zabezpečí automatický reštart v prípade zamrznutia kódu.
      2. Pokročilá správa WiFi: Funkcia manageWifiConnection autonómne rieši výpadky pripojenia.
      3. 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.

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.

Vyriešené: 18. 8. 2025