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:
- 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.
- 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.
- 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.
- 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éhoreconnect()cez úplné odpojenie a pripojenie až po plánovaný reštart zariadenia, ak sa pripojenie nepodarí obnoviť po definovanom počte pokusov.
- Riešenie: Implementovaná robustná funkcia
- 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ť.
- Riešenie: Je aktivovaný hardvérový watchdog časovač (
- 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íkazlogs), čo umožňuje detailnú diagnostiku na diaľku.
- 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 (
- 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.
- Riešenie: Kód načíta senzory podľa ich indexu (
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.