EXTRACTO:
El autor presenta la presente memoria para documentar la construcción y uso de 4 relevadores para controlar 4 Luces en su casa, mediante la red WiFi. El presente es un prototipo que funciona correctamente.
TIMELINE:
06-01-2018 Se crea el Post Principal.
ANTECENDETES:
Hola que tal, esta semana que he estado algo enfermo y mi salud no me permite hacer mucho, me puse a revolver las cosas que tengo de Arduino y es que con el tiempo he comprado bastantes, muchas que ni sabia que estab por ahí, limpiando me encontre un Wemos D1, basicamente es un ESP8266 con forma de Arduino, y no teniendo mucho que hacer me he puesto a jugar con el, la idea es prender y apagar unas luces que estan en la cornisa del segundo piso, del patio interior de mi casa, y es que la casa es muy grande y cuando uno llega especialmente por las noches, es bastante tetrico ademas que no me gusta que se vea asi cuando tenemos visita, pero tambien es bastante molesto ir a subir para prender o apagar las luces, si las queremos dejar encendidas o si solo queremos revisar que todo este en orden, por lo que me vino a la mente que podria usar este Wemos D1 para realizarlo.
Para este truco necesitaremos;
Wemos D1
4 relevadores de estado solido
Jumpers, cable USB y PC.
Les dejare el diagrama, que todo es muy sencillo (Al final por favor vean la nota de por que utilizo esos pines, me ha dolido un rato la cabeza).
CODIGO UTILIZADO:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266mDNS.h>
#include <ESP8266WebServer.h>
ESP8266WiFiMulti wifiMulti; // Create an instance of the ESP8266WiFiMulti class, called 'wifiMulti'
ESP8266WebServer server(80); // Create a webserver object that listens for HTTP request on port 80
const int led1 = 12; //Luz 1 de balcon
const int led2 = 13; //Luz 2 de Balcon
const int led3 = 2; //Luz 3 de Balcon
const int led4 = 0; //Lavadoras
void handleRoot(); // function prototypes for HTTP handlers
void handleLED();
void handleNotFound();
String pagina = ""; //ESPACIO PARA CREAR PAGINA
void setup(void){
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
pagina +="<h1>LUCES DE PATIO Y LAVADORAS</h1>"
"<p>LUCES:"
"<p>"
"<a href=\"dos\"><button> LUZ 1 </button></a> "
"<p>"
"<a href=\"tres\"><button> LUZ 2 </button></a> "
"<p>"
"<a href=\"cuatro\"><button> LUZ 3 </button></a> "
"<p>"
"<a href=\"cinco\"><button>LAVADORAS</button></a> "
"<p>"
"<a href=\"seis\"><button>APAGA TODO</button></a> "
"<p>"
"<a href=\"siete\"><button>ENCIENDE TODO</button></a> "
"
"
"
";
Serial.begin(115200); // Start the Serial communication to send messages to the computer
delay(10);
Serial.println('\n');
wifiMulti.addAP("MEGACABLE-", "*********"); // add Wi-Fi networks you want to connect to
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");
Serial.println("Connecting ...");
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) { // Wait for the Wi-Fi to connect: scan for Wi-Fi networks, and connect to the strongest of the networks above
delay(250);
Serial.print('.');
}
Serial.println('\n');
Serial.print("Connected to ");
Serial.println(WiFi.SSID()); // Tell us what network we're connected to
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // Send the IP address of the ESP8266 to the computer
if (MDNS.begin("esp8266")) { // Start the mDNS responder for esp8266.local
Serial.println("mDNS responder started");
} else {
Serial.println("Error setting up MDNS responder!");
}
server.on("/", [](){
server.send(200, "text/html", pagina);
});
//Si recibimos el parámetro "dos" nos envía por el puerto serial del esp8266 al arduino el caracter 2
server.on("/dos", [](){
server.send(200, "text/html", pagina);
if( digitalRead(led1)== 0) digitalWrite(led1,HIGH);
else (digitalWrite(led1, LOW));
Serial.println("LUZ 1");
delay(100);
});
//Si recibimos el parámetro "tres" nos envía por el puerto serial del esp8266 al arduino el caracter 3
server.on("/tres", [](){
server.send(200, "text/html", pagina);
if( digitalRead(led2)== 0) digitalWrite(led2,HIGH);
else (digitalWrite(led2, LOW));
Serial.println("LUZ 2");
delay(100);
});
//Si recibimos el parámetro "cuatro" nos envía por el puerto serial del esp8266 al arduino el caracter 4
server.on("/cuatro", [](){
server.send(200, "text/html", pagina);
if( digitalRead(led3)== 0) digitalWrite(led3,HIGH);
else (digitalWrite(led3, LOW));
Serial.println("LUZ 3");
delay(100);
});
//Si recibimos el parámetro "cinco" nos envía por el puerto serial del esp8266 al arduino el caracter 5
server.on("/cinco", [](){
server.send(200, "text/html", pagina);
if( digitalRead(led4)== 0) digitalWrite(led4,HIGH);
else (digitalWrite(led4, LOW));
Serial.println("LAVADORAS");
delay(100);
});
server.on("/seis", [](){
server.send(200, "text/html", pagina);
digitalWrite(led1, HIGH);
delay(100);
digitalWrite(led2, HIGH);
delay(100);
digitalWrite(led3, HIGH);
delay(100);
digitalWrite(led4, HIGH);
Serial.println("APAGA TODO");
delay(100);
});
server.on("/siete", [](){
server.send(200, "text/html", pagina);
digitalWrite(led1, LOW);
delay(100);
digitalWrite(led2, LOW);
delay(100);
digitalWrite(led3, LOW);
delay(100);
digitalWrite(led4, LOW);
Serial.println("ENCIENDE TODO");
delay(100);
});
server.onNotFound(handleNotFound); // When a client requests an unknown URI (i.e. something other than "/"), call function "handleNotFound"
server.begin(); // Actually start the server
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient(); // Listen for HTTP requests from clients
}
void handleNotFound(){
server.send(404, "text/plain", "404: Not found"); // Send HTTP status 404 (Not Found) when there's no handler for the URI in the request