Firmvér pre Hydroponický Modul s ESP8266 a Modbus TCP

Vytvorené: 24. 8. 2025 08:36 Aktualizované: 4. 9. 2025 19:00
Vyriešené
Značky:
iot esp8266 modbus home-assistant hydroponics arduino firmware sensor
Obsah článku

title: "Firmvér pre Hydroponický Modul s ESP8266 a Modbus TCP"
slug: "esp8266-hydroponics-modbus-firmware"
technologies: ["ESP8266", "Arduino", "Modbus TCP", "WiFiManager", "DS18B20", "Telnet", "OTA"]
tags: ["iot", "esp8266", "modbus", "home-assistant", "hydroponics", "arduino", "firmware", "sensor"]
date_solved: "2025-08-18"

Projekt/Téma: Univerzálny monitorovací a riadiaci modul pre hydroponické systémy postavený na platforme ESP8266.

1. Cieľ / Problém na vyriešenie: Cieľom bolo vytvoriť stabilný a flexibilný IoT modul, ktorý dokáže autonómne monitorovať kľúčové parametre hydroponického systému (teplota vody na dvoch miestach, vlhkosť pôdy) a ovládať externé zariadenie (ventilátor). Kľúčovou požiadavkou bola jednoduchá integrácia do nadradených systémov (ako Home Assistant) prostredníctvom štandardného priemyselného protokolu Modbus TCP. Modul musí byť zároveň jednoducho konfigurovateľný (WiFi pripojenie), spravovateľný a aktualizovateľný na diaľku (Web, Telnet, OTA).

2. Použité technológie a nástroje:

  • Mikrokontrolér: ESP8266
  • Vývojové prostredie: Arduino Framework
  • Senzory:
    • 2x Teplotný senzor DS18B20 (One-Wire zbernica)
    • 1x Senzor vlhkosti pôdy (analógový aj digitálny výstup)
  • Protokoly:
    • Modbus TCP: Pre strojovú komunikáciu a integráciu so SCADA/HMI systémami.
    • HTTP: Jednoduchý webový server pre zobrazenie stavu a logov.
    • Telnet: Konzola pre vzdialenú správu a diagnostiku.
    • mDNS: Pre jednoduché nájdenie zariadenia v sieti pod menom hydroponic-modul.local.
  • Kľúčové knižnice:
    • WiFiManager: Pre správu WiFi pripojenia cez captive portál.
    • ModbusIP_ESP8266: Implementácia Modbus TCP slave (server).
    • DallasTemperature & OneWire: Ovládanie DS18B20 senzorov.
    • ESP8266WebServer: Pre HTTP rozhranie.
    • ArduinoOTA: Pre bezdrôtové aktualizácie firmvéru.
    • EEPROM: Pre perzistentné ukladanie počtu reštartov.

3. Kľúčové postupy a konfiguračné kroky:

  1. Inicializácia: Pri štarte modul načíta a inkrementuje počítadlo bootov z EEPROM, inicializuje GPIO piny pre relé a senzory, a nastaví senzory DS18B20.
  2. Konektivita: Spustí sa WiFiManager, ktorý v prípade chýbajúcej konfigurácie vytvorí vlastný Access Point. Užívateľ sa pripojí, zadá prihlasovacie údaje k domácej WiFi a modul sa pripojí k sieti.
  3. Spustenie Služieb: Po úspešnom pripojení sa spúšťajú všetky sieťové služby: Modbus TCP server, webový server, Telnet server a služba pre OTA aktualizácie.
  4. Hlavná slučka (Loop): V hlavnej slučke sa cyklicky vykonávajú nasledujúce úlohy:
    • Obsluha prichádzajúcich požiadaviek (Modbus, Web, Telnet, OTA).
    • Správa Telnet klientov.
    • Monitoring a aktívna správa WiFi pripojenia.
    • Spracovanie príkazov prijatých cez Modbus (napr. reštart, reset WiFi).
    • Pravidelné (každých 5 sekúnd) čítanie hodnôt zo senzorov a ich zápis do Modbus registrov.
    • Pravidelné (každú sekundu) aktualizovanie systémových registrov (uptime, RSSI, voľná pamäť).
    • Pravidelné "kŕmenie" watchdog časovača, aby sa predišlo zacykleniu.

4. Výsledné kódy a skripty:

  • Kľúčová konfiguračná sekcia (Definície): Najdôležitejšia časť pre prispôsobenie firmvéru konkrétnemu hardvéru a požiadavkám. Definuje priradenie pinov, adresy Modbus registrov a časové konštanty.

    // === WiFiManager Nastavenia ===
    #define CONFIG_PORTAL_TIMEOUT 180
    
    // === Logovanie, Web Server a Telnet ===
    #define WEB_PORT 80
    #define TELNET_PORT 23
    
    // === EEPROM Nastavenia ===
    #define EEPROM_SIZE 512
    #define EEPROM_BOOT_COUNT_ADDR 0
    
    // === Modbus Registry Adresy (prispôsobené tvojmu Home Assistant configu) ===
    #define REG_WATER_TEMP_UPPER 10  // Teplota hornej nádrže (DS18B20)
    #define REG_WATER_TEMP_LOWER 11  // Teplota dolnej nádrže (DS18B20)
    #define REG_FAN_CONTROL      12  // Coil: Ovládanie ventilátora
    #define REG_UPTIME           13  // Uptime modulu v minútach
    #define REG_SIGNAL           14  // Sila WiFi signálu (RSSI)
    #define REG_SOIL_MOISTURE    15  // Vlhkosť pôdy (0-1023)
    #define REG_SOIL_MOISTURE_DIGITAL 16 // Binárny stav vlhkosti pôdy (TRUE = vlhké)
    
    // Coils
    #define COIL_RESET_WIFI_SETTINGS 17
    #define COIL_SYSTEM_RESTART      451
    
    // System registers
    #define REG_SYSTEM_BOOT_COUNT   403
    #define REG_SYSTEM_FREE_HEAP    404
    
    // === Pinové Definície ===
    #define ONE_WIRE_BUS D1 // GPIO5
    #define FAN_CONTROL_PIN D2 // GPIO4
    #define SOIL_MOISTURE_ANALOG_PIN A0
    #define SOIL_MOISTURE_DIGITAL_PIN D6

5. Zistené problémy a riešenia (Gotchas):

  • Problém: Nestabilné WiFi pripojenie môže spôsobiť nedostupnosť modulu.
    • Riešenie: Implementovaná robustná funkcia manageWifiConnection, ktorá v niekoľkých krokoch eskaluje pokusy o obnovu spojenia – od jednoduchého reconnect() cez úplné odpojenie a pripojenie až po plánovaný reštart zariadenia, ak sa pripojenie nepodarí obnoviť po definovanom počte pokusov.
  • Problém: Zariadenie môže v nepredvídateľnom stave "zamrznúť".
    • Riešenie: Je aktivovaný hardvérový watchdog časovač (ESP.wdtEnable(8000)), ktorý je v hlavnej slučke pravidelne resetovaný. Ak sa slučka z akéhokoľvek dôvodu zasekne na viac ako 8 sekúnd, watchdog automaticky reštartuje mikrokontrolér, čím sa zabezpečí vysoká dostupnosť.
  • Problém: Potreba jednoduchej diagnostiky bez fyzického prístupu.
    • Riešenie: Implementovaný systém logovania do cyklického buffera v pamäti. Logy sú dostupné cez tri rozhrania: hardvérový sériový port, webovú stránku (/logs) a Telnet konzolu (príkaz logs), čo umožňuje detailnú diagnostiku na diaľku.
  • Problém: Nesprávna identifikácia senzorov DS18B20, ak sa ich poradie na zbernici zmení.
    • Riešenie: Kód načíta senzory podľa ich indexu (getByIndex). Toto je jednoduché, ale krehké riešenie. Pre produkčné nasadenie je odporúčané modifikovať kód tak, aby identifikoval senzory podľa ich unikátnej 64-bitovej hardvérovej adresy, čím sa zabezpečí ich správne priradenie aj po zmene zapojenia.

6. Finálny výsledok / Záver: Výsledkom je vysoko stabilný a funkčne bohatý firmvér, ktorý transformuje jednoduchý ESP8266 modul na priemyselne kompatibilné IoT zariadenie. Vďaka kombinácii WiFiManager, Modbus TCP, OTA a pokročilých mechanizmov pre sebaobnovu (watchdog, WiFi management) je modul vhodný pre dlhodobé a spoľahlivé nasadenie v automatizačných projektoch, ako sú hydroponické farmy alebo smart home systémy.

Vyriešené: 18. 8. 2025