//
//
DESKREP
//
// Libreria necesaria para comunicar al arduino por
SPI con el Ethernet shield
#include <SPI.h>
// Libreria de arduino para realizar la
comunicacion ethernet
#include <Ethernet.h>
// Libreria para software Serial
#include <SoftwareSerial.h>
// Libreria para manejo de cadenas
#include <String.h>
/* DESCRIPCION
==========
Autor: Hector David Sandoval Monzon
Arduino SIM800L
======= =======
D2(RX) TXD
D3(TX) RXD
Librerias utilizadas: - String
Descripcion del programa:
El programa se comunica con un SIM800L
Al recibir un mensaje de texto, almacena el
mensaje en una cadena. Esta cadena sera recortada
con el fin
de quedarnos solo con la parte que nos interesa.
Luego evalua el mensaje (realmente lo que quedo
del mensaje luego del recorte)
El programa esta hecho para que pueda cumplir una
determinada tarea en caso de recibir:
- ABRIR
- CERRAR
Ademas, en caso de recibir uno de estos mensajes,
tambien enviara un mensaje de confirmacion al numero
ingresado en la variable CEL de tipo String
*/
SoftwareSerial SIM800L(2, 3); //Declaramos los
pines RX(2) y TX(3) que vamos a usar
String MENSAJE_in; // Declaramos una
variable de tipo String para almacenar el texto del
SMS recibido
String CEL = "954780279"; // Aqui el numero al
que se enviara el mensaje
String NUMEROCEL;
const int PIN_RESET = 4;
// Configuración de MAC e IP
byte mac[]={0xDE, 0XAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192,168,1,6);
// Inicia la libreria Ethernet server con el puerto
80 (por defecto el puerto.............)
EthernetServer server(80);
// Definimos el pin donde estara conectado el FOCO
int PIN_LED=5 ;
String readString=String(30); // Lee los caracteres
de una secuencia en una........
// Los strings se representan como arrays de
caracteres (tipo char)
String state=String(3);
//
// F U N C I O
N S E T U P
//
void setup(){
// Inicia Puerto serie
Serial.begin(9600);
// Inicia la conexion Ethernet y servidor
Ethernet.begin(mac, ip); // Inicializamos con
las direcciones asignadas
server.begin();
// Pin Valvula como salida
pinMode(PIN_LED, OUTPUT); // Representada por
un LED
pinMode(PIN_RESET, OUTPUT);
digitalWrite(PIN_LED,LOW); // Inicialmente
apagado
state="OFF";
// Inicializacion del modulo SIM800L
SIM800L.begin(9600); //Iniciamos una instancia de
la librería SoftwareSerial
SIM800L.println("AT+CMGF=1"); //Configuramos el
módulo para trabajar con los SMS en modo texto
delay(100); //Pausa de 1 segundo
SIM800L.println("AT+CNMI=1,2,0,0,0");
//Configuramos el módulo , esto es necesario para
que pueda recibir el mensaje completo
delay(100);
NUMEROCEL = "AT+CMGS=\"+51" + CEL + "\"";
}
//
// F U N C I O
N L O O P
//
void loop(){
//EthernetClient crea un cliente que se puede
conectar a una direccion especifica de Internet IP
EthernetClient cliente=server.available();
// Escucha a los clientes..............
if(cliente) // Si cliente se conecta al
servidor:
{ boolean lineaEnBlanco=true; //
Marcado para enviar la respuesta ...........
while(cliente.connected()) // Repite
mientras existe clientes conectados.......
{ if(cliente.available())
{ char c=cliente.read();
if(readString.length()<30)
{ readString.
concat(c);
}
if(c=='\n' &&
lineaEnBlanco) // Si la peticion HTTP ha finalizado
{ int LED=readString.
indexOf("LED=");
if(readString.
substring(LED,LED+5)=="LED=T")
{
digitalWrite(PIN_LED,HIGH);
state="ON";
}
else if(readString.
substring(LED,LED+5)=="LED=F")
{
digitalWrite(PIN_LED,LOW);
state="OFF";
}
// Se procede a
colgar pagina web en HTML
// Cabecera HTTP
estandar
cliente.println("HTTP/1.1 200
OK"); // Enviar
encabezado.........
cliente.
println("Content-Type: text/html");
cliente.
println();
// Pagina web en HTML
cliente.
println("<html>");
cliente.
println("<head>");
// Inicio de cabecera
cliente.
println("<title>MONITOREO DE
ELECTROVALVULA</title>"); // Titulo
cliente.
println("</head>");
// Fin de cabecera
cliente.
println("<body width=100%
height=100%>"); // Inicio de cuerpo
cliente.
println("<center>");
cliente.
println("<font size=7>"); //Tamaño de letra
cliente.
println("<font color=Teal>"); //Color de letra
cliente.
println("<h1>MONITOREO DE
ELECTROVALVULA</h1>");
cliente.
println("<font
size=5>"); //
Tamaño de letra
cliente.
println("<font
color=BLUE>"); //
Color de letra
cliente.
println("<h1>* Electrovalvula Jeri - Loja
*</h1>"); // Mensaje 2
cliente.
println("<img
src=https://thumbs.gfycat.com/JampackedAdmirableBlue
gill-size_restricted.gif width=300>");
cliente.println("<br
/>");
cliente.println("<br
/>");
//Publicando el
estado de la electrovalvula
----------------------------------------------------
----------------
cliente.
println("<font size=8>");
cliente.
println("<font color=Silver>"); // Color de letra
cliente.
print("ElectroValvula:");
//if(state=="ON")
if(digitalRead(PIN_LED)==HIGH)
{ cliente.
println("<font color=Green>");
cliente.
print("ABIERTA");
cliente.
println("<br />");
Serial.
println("0");
digitalWrite(PIN_LED, HIGH);
}
//else
if(state=="OFF")
else
if(digitalRead(PIN_LED)==LOW)
{ cliente.
println("<font color=Red>");
cliente.
print("CERRADA");
cliente.
println("<br />");
Serial.
println("1");
digitalWrite(PIN_LED, LOW);
}
cliente.
println("<br>");
//BOTONES: OPCION 1
----INICIO
cliente.
println("<styletype=text/css>");
cliente.println(".
boton{"); //nombre del objeto
cliente.
println("font-size:40px;"); //Tamaño de la
letra de los botones
cliente.
println("font-family:Verdana,Helvetica;");
cliente.
println("font-weight:bold;");
cliente.
println("color:black;"); //Color de la
letra de los botones
cliente.
println("background:#638cb5;");
cliente.
println("border:0px;");
cliente.
println("width:300px;"); //Ancho del boton
cliente.
println("height:150px;"); //Alto del boton
cliente.println("}");
cliente.
println("</style>");
cliente.
println("<input type=submit value=CERRAR
class=botononclick=location.href='./?LED=F\'>");
cliente.
println("<input type=submit value=ABRIR class=boton
onclick=location.href='./?LED=T\'>");
cliente.
println("</center>");
cliente.
println("</body>");
cliente.
println("</html>"); //etiqueta html fin de
documento
cliente.stop();
//Cierro conexion con el cliente
readString="";
break;
}
}
}
delay(500);
cliente.stop();
}
//Preguntamos si hay algun mensaje disponible
en el SIM800L
if (SIM800L.available())
{
Serial.println("Mensaje Recibido");
MENSAJE_in = SIM800L.readString();
MENSAJE_in.remove(0,50); //Eliminamos los
primeros 50 caracteres
MENSAJE_in.remove(11,50); //Eliminamos
todo a partir del caracter 11. Es decir solo nos
quedamos con los primeros 11 caracteres
//Serial.println(MENSAJE_in);
Serial.println(MENSAJE_in);
//**************************************************
**************************************************
if((MENSAJE_in[0] =='A')&&(MENSAJE_in[1]
=='B')&&(MENSAJE_in[2] =='R')&&(MENSAJE_in[3]
=='I'))
{
//--------------------------------------------------
-------------------------------
SIM800L.println(NUMEROCEL);
delay(100); // Pequeña pausa
SIM800L.print("Valvula Abierta"); //
Definimos el cuerpo del mensaje
delay(500); // Pequeña pausa
SIM800L.print(char(26)); // Enviamos el
equivalente a Control+Z
delay(100); // Pequeña pausa
SIM800L.println(""); // Enviamos un fin
de linea
delay(100); // Pequeña pausa
digitalWrite(PIN_LED, HIGH);
state="ON";
//--------------------------------------------------
-------------------------------
//**************************************************
**************************************************
if((MENSAJE_in[0] =='C')&&(MENSAJE_in[1]
=='E')&&(MENSAJE_in[2] =='R')&&(MENSAJE_in[3]
=='R'))
{
//--------------------------------------------------
-------------------------------
SIM800L.println(NUMEROCEL);
delay(100); // Pequeña pausa
SIM800L.print("Valvula Cerrada"); //
Definimos el cuerpo del mensaje
delay(500); // Pequeña pausa
SIM800L.print(char(26)); // Enviamos el
equivalente a Control+Z
delay(100); // Pequeña pausa
SIM800L.println(""); // Enviamos un fin
de linea
delay(100); // Pequeña pausa
digitalWrite(PIN_LED, LOW);
state="OFF";
//--------------------------------------------------
-------------------------------
}