Paso 5: Programación del sistema
La página index.php en el servidor recoge información del usuario y lo envía a un formhandler (sendcmd.php). Este archivo formatos de los datos, crea una conexión con el ESP y envía que los comandos a la zona especialmente y duración son enviados.
Esta información es enviada a la ESP a través de GET. El ESP8266 analiza este encabezado para más detalles y los GPIOs on activa o desactiva en base a esta información.
Los comandos pueden enviarse a la ESP mediante, TCP, UDP o MQTT. Todos funcionan bien. Encontrar el servidor TCP muy fiable y preferible a los demás.
Un encabezado de ejemplo: 60 min cada zona:
Haz /? zone0 = 60 & zone1 = 60 & zone2 = HTTP/60 1.1
Envío Esto detiene todas las zonas:
Haz /? dejar de HTTP/1.1
Para este proyecto tengo cuatro archivos residentes en el ESP8266 para interactuar con el servidor y controlar los pines GPIO.
- init.lua
- control.lua
- servernode.lua
- STOP.lua
El archivo servernode.lua recogerá este encabezado y llamar al archivo control.lua si lo encuentra, zona y duración superiores a 0. Llame stop.lua si parada se encuentra u omitir el encabezado si no se encuentra la zona o parada.
El archivo control.lua analizará la cabecera y a su vez cada GPIO pin en el apagado en orden y por la duración especificada.
Archivos en el servidor son:
- index.php
- sendcmd.php
- lastcmd.txt
El archivo lastcmd.txt contiene el tiempo total a la ESP. Esto se utiliza el temporizador de cuenta atrás en javascript en el index.php de la semilla. El temporizador en el ESP y el script cuenta regresiva no están sincronizados, sin embargo, dentro de un minuto o dos. Lo suficientemente exacta para esta aplicación.
Los archivos anteriores están aquí: github - breagan/ESP8266-WaterController
Es importante tener en cuenta si usted relés es normalmente abiertos (NO) o normalmente cerrado (NC). Algunos relés permiten elegir, algunas son activo bajo alto o activo, lo que ocurra, es importante que los relés están abiertos cuando botas de controlador y el controlador no funciona!
Por ejemplo, GPIO16 es tiró alto cuando el controlador arranca. Puedo configurarlo para bajo en la init.lua, sin embargo en un bucle de pánico, el tiempo entre la secuencia de arranque y ajuste a la baja en el init.lua y sobre otra vez enviará suficiente voltaje para activar el solenoide y activar la zona.
Quiero cerrar deliberadamente el circuito de 24 VCA para activar las válvulas. No quiero cualquier válvula activada si el controlador pierde su poder o entra en un lazo de muerte. El valor predeterminado en todas las configuraciones imaginables, excepto cuando se envía un comando no es poder de las válvulas.
Mi relés son normalmente abiertas y disparada (cerrado) cuando se aplica el voltaje de los GPIOs. Los GPIOs utilizados son todos tirados bajo cuando se aplica energía y durante el proceso de arranque. No es necesario establecerlos en baja en el archivo init.lua pero prefiero la redundancia.