ESP8266 Bevattning Controller (5 / 6 steg)
Steg 5: Programmering systemet
Index.php sidan på servern samlar in information från användaren och skickar det till en formhandler (sendcmd.php). Denna fil formaterar data, skapar en anslutning till ESP och skickar kommandon till ESP. zon och tidslängden skickas.
Denna information skickas till ESP via GET. ESP8266 tolkar detta huvud för detaljer och aktiverar GPIOs eller inaktiverar baserat på denna information.
Kommandon kan skickas till ESP via, TCP, UDP eller MQTT. De alla fungerar bra. Jag tycker TCP server mycket tillförlitlig och att föredra framför de andra.
Ett exempel huvud: 60 min varje zon:
Få /? zone0 = 60 & zone1 = 60 & zon†2 = 60 HTTP/1.1
Skicka detta stannar alla zoner:
Få /? stoppa HTTP/1.1
För detta projekt har jag fyra filer bosatt på ESP8266 att interagera med servern och kontrollera GPIO stiften.
- init.lua
- control.lua
- servernode.lua
- stop.lua
Filen servernode.lua kommer att samla detta huvud och kalla den control.lua filen om den hittar zonen och varaktighet överstiger 0. Det kommer att ringa stop.lua om stopp hittas eller huvudet ignoreras om zon eller stopp inte finns.
Den control.lua filen parsas sidhuvud och tur varje GPIO pin på den i ordning och för den tid som anges.
Filer på servern är:
- index.php
- sendcmd.php
- lastcmd.txt
Filen lastcmd.txt innehåller den totala tiden skickas till ESP. Detta används till utsäde timern i javascript i index.php. Timern i ESP och nedräkningen skriptet inte är synkroniserade, men de är inom en minut eller två. Korrekt nog för denna app.
Ovanstående filer är här: github - breagan/ESP8266-WaterController
Det är viktigt att notera om du reläer är normalt öppen (NO) eller normalt stängd (NC). Vissa reläer kan du välja, vissa är aktiv hög eller aktiv låg, beroende på vilket som, är det viktigt att reläerna är Öppna när controller startas och när registeransvarige inte är påslagen!
Som ett exempel, är GPIO16 drog höga när registeransvarige stövlar. Jag kan sätta den till låg i init.lua, however i en panik loop, tiden mellan startsekvensen och ange det till låg i init.lua, över och över igen skickar tillräckligt spänning att utlösa nödsänkningssolenoiden och aktivera zonen.
Jag vill avsiktligt stänga 24vac kretsen för att aktivera ventilerna. Jag vill inte ha några ventiler aktiveras om registeransvarige förlorar sin makt eller går in i en loop med döden. Standardvärdet i varje tänkbart konfiguration, utom när ett kommando skickas är ingen makt till ventiler.
Min reläer är normalt öppna och utlösta (stängd) när spänning läggs från GPIOs. GPIOs används dras alla låg när driva, appliceras och under startprocessen. Ställa dem till låg i filen init.lua är inte nödvändigt men jag föredrar redundans.