Relé controlado desde Internet.

Relé controlado desde internet

Objetivos:

  • El objetivo es mostrar un sencillo ejemplo de control remoto de un relé, a través de internet.

Recursos:

  • Necesitamos tener instalado el entrorno de desarrollo gratuito de Arduino y las librerias ESP8266.
  • Cable adaptador de USB a comunicación serie, para poder programar la placa de control.
  • La placa de control Wifi, genérica ESP8266 con relé incorporado.
  • Un alimentador 240V. 12V=

Descripción:

El controlador ESP8266, es compatible con el entorno de trabajo de Arduino IDE, muy extendido por tener incorporado un controlador Wifi y por ser muy económico.

El equipo se comunica vía Wifi con el servidor www.Masiot.es intercambiando la información contenida en la base de datos y que es accesible desde cualquier explorador web accediendo a la página donde están los elementos de control.

La comunicación la inicia siempre nuestro equipo ESP8266, por lo que no necesitamos conocer la IP pública de nuestro router ni abrir puertos de comunicación.

Es un método totalmente seguro y no requiere manipular el router, por lo que se puede instalar en cualquier lugar con acceso a internet.

Como insertar un Selector en nuestra Web:

Selector HMI:

Un Selector es un campo de Entrada.

Esta es la forma como se ve en la web:

Código del selector:

Este código es el que ponemos en nuestra web para insertar el selector de control del relé:

1
2
3
4
<label class="selector">
      <input type="checkbox" id="c10">
      <div class="posicion_sel">Relé</div>
</label>

El id=”c10″ es el enlace con el servidor y el módulo IOT.

Cuando modificamos este selector, realmente modificamos el campo de entrada checkbox con id=”c10″, esto queda guardado en el servidor.

Cuando nuestro equipo IOT pide el estado de c10 al servidor, el servidor responde el valor de c10 y el relé será accionado en consecuencia.

Como insertar un Piloto en nuestra Web:

Piloto HMI:

Un Piloto es un campo de Salida.

Esta es la forma como se ve en la web:

Código del piloto:

Este código es el que ponemos en nuestra web para insertar el piloto del estado actual del relé:

1
2
3
4
<label class="piloto">
      <input disabled  type="checkbox" id="C010">
      <div class="piloto_pos">Piloto</div>
</label>

Programa del Arduino ESP8266:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*  PLACA ESP8266 CON Relé incorporado
    Abril 2018 Probado OK José Coll
    Compilar para placa Generic ESP8266 Module
    con IDE Arduino 1.8.3
 */
#include <ESP8266WiFi.h> //Incluye la librería ESP8266WiFi
int PinLED   =2;      //Definimos el pin de salida LED Azul
int PinRELE  =4;      //Definimos el pin de salida del RELE 
int PinOPTO  =5;      //Definimos el pin de entrada Optoacoplador 

void setup() {
  pinMode(PinLED, OUTPUT);//Inicializamos como salida
  pinMode(PinRELE, OUTPUT);//Inicializamos como salida
  pinMode(PinOPTO, INPUT_PULLUP);//Inicializamos como Entrada

  WiFi.mode(WIFI_AP);    //Modo de trabajo
  WiFi.mode(WIFI_STA);   //Fuerzo Modo correcto.
  WiFi.begin("vodafoneC7E8", "XXXYUSLXPIXXXX"); //Datos de mi router
  delay(500);
  while (WiFi.status() != WL_CONNECTED){ //Espero conexión OK
      delay(100); 
    }
}

void loop(){
  String contenido = "/Acceso1/IOdata.php";  // Apunta a la ruta y archivo php
  contenido += "?user=arduino"; //Apunta a la base de datos del usuario
  contenido += "&P6=";
  contenido += "123";//DHT_Humedad();
  contenido += "&retorno=C10"; //Indicamos que queremos que retorne el dato checkBox10
  WiFiClient client_1; //Inicializamos el cliente (client_1)
 
  if (client_1.connect("www.masiot.es", 80)){
    client_1.print(String("GET ")+ contenido + " HTTP/1.1\r\n" +
                 "Host: " + "www.masiot.es" + "\r\n" +
                 "Connection: close\r\n" +
                 "\r\n"
                );
    while (client_1.connected()){
      if (client_1.available()){
        String line = client_1.readStringUntil('\n');

        //****************************************************************************
        //**********  Comprueba si hay respuesta a la petición  **********************
        //****************************************************************************
        if (line.indexOf("retorno=1") != -1){            //Hemos recibido Led ON
            digitalWrite(PinRELE, LOW);  //Enciende o apaga el LED en función de la petición
            }  
        if (line.indexOf("retorno=0") != -1){            //Hemos recibido Led OFF
            digitalWrite(PinRELE, HIGH); //Enciende o apaga el LED en función de la petición
            }
        }
      }
    client_1.stop();                                   //Finalizamos la conexión con el servidor
  }
  else{
    client_1.stop();//conexión con el servidor no lograda!
    }
delay(500); //Tiempo en ms. de espera antes de nuevo ciclo
}