Enviar SMS Con Arduino y Módulo GSM SIM800L
Enviar SMS Con Arduino y Módulo GSM SIM800L
Enviar SMS Con Arduino y Módulo GSM SIM800L
SIM800L
by Admin | Jul 15, 2018 | Tutoriales Arduino | 3 comments
Los celulares y la telefonía móvil son tendencia en la actualidad, por eso
en esta página vamos a enseñarte como utilizar el módulo GSM SIM800L
de SIMCOM para enviar SMS con Arduino. Los mensajes de texto pueden
ser de gran utilidad en diversos proyectos, por ejemplo: para alertarnos de
situaciones de alarma en equipos remotos, para alertarnos de intrusiones en un
sistema de seguridad casero, enviar datos de telemetría, crear un localizador
GPS que se comunique mediante mensajes de texto SMS, creación de alarmas
vecinales, etc.
El módulo SIM800L es el componente principal de las tarjetas FONA 800 de
Adafruit, por lo que podemos utilizar la librería realizada para estas
tarjetas con los módulos económicos que montan el SIM800L, como el que
tenemos a la venta en nuestra tienda virtual. En este tutorial nos enfocamos en
el uso de la librería de Adafruit, pero también mostramos como puede
realizarse el envío de mensajes de texto enviando comandos AT directamente
al módulo GSM, esto ultimo es principalmente con fines didácticos, ya que el
método preferido será el uso de una librería.
En la foto principal de este artículo vemos el circuito que hemos armado
para las pruebas de envío de SMS con arduino. También se observan los
equipos que alimentan el experimento.
1
/**
2
GeekFactory - "INNOVATING TOGETHER"
3
Distribucion de materiales para el desarrollo e innovacion tecnologica
4
www.geekfactory.mx
5
6
SKETCH PARA ENVIAR SMS CON ARDUINO UTILIZANDO LA LIBRERIA DE ADAFRUIT
7
FONA.
8
ESTE SKETCH SIMULA UNA ALARMA EN LA CUAL AL OPRIMIR UN BOTON SE ENVIA UN
9
MENSAJE SMS
10
ALERTANDO DE UNA INTRUSION. PODEMOS SUSTITUIR EL BOTON POR UN SENSOR
11
MAGNETICO PARA
12
PUERTAS Y VENTANAS, DE FORMA QUE ESTE EJEMPLO PUEDE VOLVERSE UNA
13
ALARMA FUNCIONAL.
14
*/
15
#include <SoftwareSerial.h>
16
#include "Adafruit_FONA.h"
17
18
// CONFIGURACION DE UART GSM
19
#define CONFIG_GSM_RXPIN 4
20
#define CONFIG_GSM_TXPIN 3
21
#define CONFIG_GSM_BAUDRATE 9600
22
23
// CONFIGURACION DEL NUMERO DESTINO DEL MENSAJE SMS
24
#define CONFIG_GSM_SMS_DESTINATION "+52155XXXXXXXX"
25
26
// PIN UTILIZADO COMO ENTRADA PARA DESENCADENAR EL ENVIO DE UN MENSAJE
27
#define CONFIG_ALARM_PIN 5
28
29
// PUERTO SERIE EMULADO: EL ARDUINO UNO TIENE SOLO 1 UART
30
// EN EL CONSTRUCTOR DE SOFTWARESERIAL SE ESPECIFICAN LOS PINES PARA RX Y TX
31
SoftwareSerial swseri = SoftwareSerial(CONFIG_GSM_RXPIN, CONFIG_GSM_TXPIN);
32
33
// OBJETO ADAFRUIT_FONA USADO PARA COMUNICARSE CON EL SIM800L
34
Adafruit_FONA fona = Adafruit_FONA(10);
35
36
void setup() {
37
// PREPARAR PINES IO
38
pinMode(CONFIG_ALARM_PIN, INPUT_PULLUP);
39
40
// PREPARAR LOS PUERTOS SERIALES A LA VELOCIDAD CONFIGURADA
41
swseri.begin(CONFIG_GSM_BAUDRATE);
42
Serial.begin(CONFIG_GSM_BAUDRATE);
43
44
// IMPRIMIR EL ENCABEZADO INCIAL
45
Serial.println(F("----------------------------------------------------"));
46
Serial.println(F(" EJEMPLO ALARMA CONTRA INTRUSOS CON ALERTA SMS "));
47
Serial.println(F(" http://www.geekfactory.mx "));
48
Serial.println(F("----------------------------------------------------"));
49
50
// INICIAR LA COMUNICACION CON EL MODULO GSM
51
52 // PASAMOS REFERENCIA AL PUERTO SERIE USADO PARA LA COMUNICACION CON EL
53 MODEM
54 if (fona.begin(swseri))
55 Serial.println(F("MODULO GSM OK"));
56 else
57 {
58 // BLOQUEAR LA EJECUCIÓN EN ESTE PUNTO SI NO SE ENCUENTRA MODULO GSM O
59 FALLA LA COMUNICACIÓN CON ESTE
60 Serial.println(F("NO SE ENCUENTRA MODULO GSM"));
61 while (1);
62 }
63
64 // AQUI SE REALIZA EL ENVIO DEL MENSAJE SMS
65 // INDICAMOS EL NUMERO DESTINO Y EL CUERPO DEL MENSAJE
66 if (!fona.sendSMS(CONFIG_GSM_SMS_DESTINATION, "Alarma SMS encendiendo!!!")) {
67 Serial.println(F("ERROR"));
68 } else {
69 Serial.println(F("ENVIADO"));
70 }
71 }
72
73 void loop() {
74 // ESPERAR CAMBIO DE ESTADO EN EL PIN
75 if (!digitalRead(CONFIG_ALARM_PIN))
76 {
77 // RETARDO PARA LIDIAR CON REBOTES Y RUIDO
78 delay(100);
79 // VOLVEMOS A REVISAR EL ESTADO DEL PIN
80 if (!digitalRead(CONFIG_ALARM_PIN))
81 {
82 if (!fona.sendSMS(CONFIG_GSM_SMS_DESTINATION, "MENSAJE DE ALERTA DEL
83 SISTEMA DE ALARMA DOMESTICA!!!")) {
84 Serial.println(F("ERROR AL ENVIAR MENSAJE DE ALARMA"));
} else {
Serial.println(F("MENSAJE DE ALARMA ENVIADO"));
}
// PARA NO ENVIAR DEMASIADOS MENSAJES SEGUIDOS
delay(5000);
}
}
}
1 /**
2 GeekFactory - "INNOVATING TOGETHER"
3 Distribucion de materiales para el desarrollo e innovacion tecnologica
4 www.geekfactory.mx
5
6 SKETCH PARA ENVIAR SMS CON ARDUINO TRAVÉS DE MODEM GSM SIM800L. AL
7 MOMENTO
8 DE ARRANCAR EL SKETCH SE ENVÍA EL MENSAJE DE TEXTO, LUEGO EL ARDUINO
9 QUEDA EN MODO DE
10 PUENTE USB-UART PARA PODER SEGUIR ENVIANDO COMANDOS AT AL MODULO GSM.
11
12 ESTE SKETCH CREA UN UART EMULADO POR SOFTWARE EN LOS PINES INDICADOS Y
13 REDIRIGE
14 LOS DATOS DESDE Y HACIA EL UART POR HARDWARE EN LOS PINES 0 Y 1 DEL
15 ARDUINO UNO.
16 ESTA DISEÑADO PENSANDO EN LA TARJETA UNO, YA QUE EL MEGA SI DISPONE DE
17 VARIOS
18 UART POR HARDWARE Y PODRIA REALIZARSE SIN RECURRIR A SOFTWARESERIAL.
19
20 */
21 #include <SoftwareSerial.h>
22
23 // CONFIGURACION DE UART GSM
24 #define CONFIG_GSM_RXPIN 4
25 #define CONFIG_GSM_TXPIN 3
26 #define CONFIG_GSM_BAUDRATE 9600
27
28 // PUERTO SERIE EMULADO: EL ARDUINO UNO TIENE SOLO 1 UART
29 // EN EL CONSTRUCTOR DE SOFTWARESERIAL SE ESPECIFICAN LOS PINES PARA RX Y TX
30 SoftwareSerial swseri = SoftwareSerial(CONFIG_GSM_RXPIN, CONFIG_GSM_TXPIN);
31
32 void setup()
33 {
34 // PREPARAR LOS PUERTOS SERIALES A LA VELOCIDAD CONFIGURADA
35 swseri.begin(CONFIG_GSM_BAUDRATE);
36 Serial.begin(CONFIG_GSM_BAUDRATE);
37
38 // IMPRIMIR EL ENCABEZADO INCIAL
39 Serial.println(F("----------------------------------------------------"));
40 Serial.println(F(" EJEMPLO PARA ENVIAR SMS CON ARDUINO Y MODULO GSM "));
41 Serial.println(F(" http://www.geekfactory.mx "));
42 Serial.println(F("----------------------------------------------------"));
43
44 // ENVIAR LOS COMANDOS AT AL MODEM PARA EL ENVIO DEL MENSAJE SMS
45 // CONFIGURAR EL MODULO PARA ENVIO DE MENSAJES EN MODO TEXTO (OTRA
46 OPCION ES EL MODO PDU)
47 swseri.println("AT+CMGF=1");
48 delay(100);
49
50 // ENVIAR EL COMANDO DE ENVIO DE SMS INCLUYENDO EL DESTINATARIO DEL
51 MENSAJE
52 swseri.println("AT+CMGS=\"+521XXXXXXXXX\"");
53 delay(100);
54
55 // ENVIAR EL CUERPO DEL MENSAJE
56 swseri.print("HOLA MUNDO SMS DESDE ARDUINO!");
57 delay(500);
58
59 // ENVIAR EL CARACTER DE CONTROL ASCII 26 (SUB) 0X1A INDICANDO EL FINAL DEL
60 CUERPO DEL MENSAJE
61 swseri.print(char(0x1A));
62 delay(2000);
63 }
64
65 void loop()
66 {
67 // SI HAY DATOS EN LA INTERFAZ SERIAL POR SOFTWARE, ESCRIBIRLOS EN EL UART
68 FISICO
69 if (swseri.available())
70 {
Serial.write(swseri.read());
}
En este programa no hacemos caso a las respuestas del módulo GSM, por lo
tanto, no hay una manera sencilla de determinar si algo salio mal al momento
de enviar el mensaje, sin embargo, este programa se deja a disposición de los
lectores para fines didácticos.
Conclusión y repaso
En este tutorial aprendimos como dar alimentación al módulo SIM800L y las
conexiones básicas entre este y el arduino.
Aprendimos a utilizar la librería FONA de Adafruit para controlar el SIM800L y
mandar mensajes SMS.
Aprendimos a realizar el envío de mensajes SMS utilizando comandos AT
desde arduino en caso de no querer utilizar una librería externa.
Este tutorial funciona como introducción a los módulos SIM800 y shields FONA
de Adafruit que funcionan gracias al SIM800L.
Aprendimos que este programa puede funcionar con otros módulos GSM, ya
que los comandos para enviar mensajes de texto son estándar entre los
fabricantes.
3 Comments
1.
claudio on 23 noviembre, 2018 at 17:16
2.
Herminio on 21 agosto, 2018 at 10:39
Hola, buenos dias… Escribo porque tengo una duda, como haria con
comandos AT para Reenviar un sms? Ya tengo el numero de mensaje
almacenado en un String, pero no se como hacer para usar esa variable dentro
del swseri.println(“AT+CMGS=\”+521XXXXXXXXX\””);… Me explico?
Reply
Admin on 2 septiembre, 2018 at 20:01