0% encontró este documento útil (0 votos)
51 vistas14 páginas

PROGRAMA

Este documento describe un programa de Arduino que se comunica con un módulo SIM800L para recibir y analizar mensajes SMS. El programa evalúa mensajes cortos que contienen las palabras "ABRIR" o "CERRAR" y activa o desactiva un LED conectado al pin 5 en consecuencia. Además, envía un mensaje de confirmación al número especificado cuando recibe uno de esos comandos. El programa también implementa un servidor web simple que muestra el estado actual del LED y permite cambiarlo a través de botones en la página web.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
51 vistas14 páginas

PROGRAMA

Este documento describe un programa de Arduino que se comunica con un módulo SIM800L para recibir y analizar mensajes SMS. El programa evalúa mensajes cortos que contienen las palabras "ABRIR" o "CERRAR" y activa o desactiva un LED conectado al pin 5 en consecuencia. Además, envía un mensaje de confirmación al número especificado cuando recibe uno de esos comandos. El programa también implementa un servidor web simple que muestra el estado actual del LED y permite cambiarlo a través de botones en la página web.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 14

//

//
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";

//--------------------------------------------------
-------------------------------
}

También podría gustarte