Buenos dias,
Estoy teniendo un problema con el modulo ESP8266 Wifi Relay 1 Channel 5V. La conexion actual al relay es el cable de termostato de una caldera de gasoil.
La finalidad es apagar y encender la caldera controlando la conexion destinada a la caldera de termostato. A priori todo parece funcionar correctamente, el relay recibe la señal via wifi desde un servidor web para encender y apagar el relay.
Las pruebas de programación las realice conectando una bombilla o cualquier dispositivo. El problema por el que realizo esté POST es por que cuando la caldera pasa a modo : stand by (reposo por temperatura interna del agua en la caldera), este me apaga el relay que en ese momento estaba encendido debido a que la temperatura del termostato ambiente era inferior a la solicitada (el temostato ambiente es externo a esté esquema y se comunica con una servidor web encargado de realizar la petición de apagado y encendido al ESP8266Wifi) y ya no se vuelve activar el relay tras la bajada de temperatura de agua debiendo de continuar calentando hasta alcanzar la temperatura ambiente deseada.
¿Puede que tenga que realizar algo parecido al compañero de este post : [SOLUCIONADO] Problema Nodemcu+relé+downlight - Hardware - Arduino Forum?
Código ESP8266Wifi :
class Response {
public:
// Variables declaration
boolean _state;
String _response;
boolean getState()
{
return _state;
}
void setState(bool new_state)
{
_state = new_state;
}
String getResponse()
{
return _response;
}
void setResponse(String new_response)
{
_response = new_response;
}
};
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WebServer.h>
#include <Ticker.h>
#include <ip_addr.h>
const char* ssid = "LAN_XXXXX";
const char* password = "XXXXX";
ESP8266WebServer server(80);
IPAddress ip(192,168,0,200);
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);
const byte ON[] = { 0xA0, 0x01, 0x01, 0xA2 };
const byte OFF[] = { 0xA0, 0x01, 0x00, 0xA1 };
boolean status_relay = false;
Ticker wifiReconnect;
static Response * respuesta = new Response();
void setup() {
//9600 Obligatorio para activar el rele ESP8266WIFI
Serial.begin(9600, SERIAL_8N1);
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.setAutoConnect (true); // Autoconnect to last known Wifi on startup
WiFi.setAutoReconnect (true);
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
WiFi.mode(WIFI_STA);
WiFi.onEvent(eventWiFi);
if ( !isAutoConnected() || hasWifiConfigChanged() ) { // If no aout-connection or if config has changed
connectWiFi(); // connect to Wifi.
}
wifiReconnect.attach(5.0,reconnectWiFi);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.write(OFF, sizeof( OFF ) );
server.on("/", new_client);
server.begin();
Serial.println("Servidor arracando, esperando peticiones");
}
void loop() {
//Leer accion recibida en el servidor
server.handleClient();
if(status_relay)
{
Serial.write(ON, sizeof( ON ) );
}else{
Serial.write(OFF, sizeof( OFF ) );
}
delay(1000);
}
void new_client() {
Serial.println("Conexión recibida");
if (server.hasArg("key") == false || server.hasArg("activo") == false){ //Check if body received
server.send(400, "text/plain", "Parámetros incorrectos");
Serial.println("Parámetros incorrectos");
return;
}
if (server.arg("activo") == "PSi") {
status_relay = true;
}
if (server.arg("activo") == "PNo") {
status_relay = false;
}
if(respuesta->getState() == true)
{
server.send(200, "text/html", "Accion realizada correctamente");
Serial.println("Accion realizada correctamente");
}else{
server.send(500, "text/html", "Accion no realizada correctamente");
Serial.println("Accion no realizada correctamente");
}
}
pd: He probado a activar el relay y apagarlo sin utilizar la variable : status_relay, es decir, en la función : new_client. Mismo resultado.
Gracias por la ayuda de antemano.