Stap 5: Het programmeersysteem
De index.php pagina op de server verzamelt gegevens van de gebruiker en stuurt het naar een formhandler (sendcmd.php). Dit bestand de gegevens indeelt, maakt een verbinding met de ESP en stuurt dat de opdrachten aan de ihb Zone en tijdsduur worden verzonden.
Deze informatie wordt naar de ESP via GET verzonden. De ESP8266 parseert deze header voor details en schakelt de GPIOs in of uit op basis van deze informatie.
Opdrachten kunnen worden verzonden naar de ESP via, TCP, UDP of MQTT. Ze werken allemaal goed. Ik vind de TCP server zeer betrouwbare en verkieslijk aan de anderen.
Een voorbeeld van de header: 60 min elke zone:
Krijgen /? zone0 = 60 & zone1 = 60 & zone2 = 60 HTTP/1.1
Verzenden van dit stopt alle zones:
Krijgen /? stop HTTP/1.1
Voor dit project zal ik heb vier bestanden resident op de ESP8266 voor interactie met de server en controleren van de GPIO pinnen.
- init.lua
- Control.lua
- servernode.lua
- Stop.lua
Het bestand servernode.lua zal verzamelen deze header en noemen het control.lua bestand, indien hij zone en duur boven 0 vaststelt. Het zal stop.lua noemen als stop wordt gevonden of de header negeren als zone of stop is niet gevonden.
Het bestand control.lua zal ontleden de kop en zet elke GPIO pin op het in orde en voor de opgegeven duur.
Bestanden op de server zijn:
- index.php
- sendcmd.php
- lastcmd.txt
Het bestand lastcmd.txt bevat de totale tijd die is verzonden naar de ESP. Dit wordt gebruikt om het zaad van de countdown timer in de javascript in de index.php. De timer in het ESP en het countdown-script worden niet gesynchroniseerd, maar ze zijn binnen een minuut of twee. Nauwkeurig genoeg voor dit app.
De bovenstaande bestanden hier: github - breagan/ESP8266-WaterController
Het is belangrijk op te merken of relais u normaal open bent (niet) of normaal gesloten (NC). Sommige Relais laat u kiezen, sommige zijn actief hoog of actief laag, indien dit, het is belangrijk dat de relays openen wanneer de laarzen van de controller en als de controller niet wordt aangedreven!
Als voorbeeld, wordt GPIO16 getrokken hoog wanneer de laarzen van de controller. Ik kan het op laag ingesteld in de init.lua, maar in de loop van een paniek, de tijd tussen de opstartvolgorde en stellen het op laag in de init.lua, over en over opnieuw voldoende spanning stuurt te leiden tot de solenoïde en activeren van de zone.
Ik wil met opzet sluiten het 24vac circuit om te activeren van de kleppen. Ik wil niet alle kleppen geactiveerd als de controller haar macht verliest of een dood lus terechtkomt. De standaardwaarde in elke denkbare configuratie, behalve wanneer een opdracht wordt verzonden is niet bevoegd om de kleppen.
Mijn Relais zijn normaal open en geactiveerde (gesloten) Wanneer spanning wordt toegepast vanaf de GPIOs. De GPIOs gebruikt worden alle getrokken lage macht wordt toegepast als tijdens het opstartproces. Hen te stellen op laag in het bestand init.lua is niet nodig maar ik heb liever de redundantie.