En este post explicaremos como
desarrollar con una placa ARDUINO un sistema que nos envíe la información
meteorológica capturada por un sensor mediante
un mensaje texto a nuestro
teléfono móvil.
Usaremos para este proyecto una
placa ARDUINO MEGA donde conectaremos dos elementos cuyas imágenes pueden verse
en la figura 1
–
Un sensor BME280 de ADAFRUIT (que medirá
temperatura, presión y humedad relativa)
–
La placa SIM800H de ADAFRUIT (que albergará la tarjeta
SIM telefónica con la que realizaremos nuestras comunicaciones) con su
respectiva antena
Figura 1. Sensor
BME280 (izquierda) y placa SIM800H
(derecha)
El sensor BME280 puede conectarse
a la placa Arduino a través de la interface
I2C. De esta manera deberemos realizar las siguientes conexiones pare la caso
de un ARDUINO MEGA (https://learn.adafruit.com/adafruit-bme280-humidity-barometric-pressure-temperature-sensor-breakout/arduino-test)
– Conectamos el pin VIN del sensor a 5V en la
placa ARDUINO y GND al GND de la placa ARDUINO
– Conectamos el pin SCK del sensor al pin digital 21 del placa ARDUINO
y el pin SDI al pin digital 20
La placa SIM800H la hemos conectado de la siguiente manera (https://learn.adafruit.com/adafruit-fona-mini-gsm-gprs-cellular-phone-module
)
–
La toma Vin
de la placa SIM800H a 5V de la
placa ARDUINO MEGA y su GND al GND del ARDUINO MEGA
–
Las conexiones TX y RX del SIM800H se han
conectado respectivamente al RX y TX del Serial3 de la placa ARDUINO MEGA
(pines 14 y 15 marcados en la placa ARDUINO como TX3 y RX3 respectivamente )
Se ha conectado así mismo un batería de 3,7 voltios
(del mismo tipo de las que usan en
un teléfono móvil) a la toma marcada
como TOMA 1 en la figura 1. Esta batería se puede recargar mediante el conector
micro-USB de la misma placa (TOMA 2 de la figura 1)
Antes de empezar a funcionar con
el prototipo (Figura 2) debemos verificar el correcto
funcionamiento del SIM800H en dos pasos.
Figura 2. Fotografía del prototipo conectado
En un primer paso verificaremos que la placa SIM800H responde
adecuadamente tras instalar en ella una tarjeta SIM de un teléfono móvil
mediante el siguiente software que
subiremos a la placa Arduino:
void setup() {
//Begin serial comunication with Arduino and
Arduino IDE (Serial Monitor)
Serial.begin(9600);
Serial3.begin(9600);
delay(1000);
Serial.println(“Setup Complete!”);
}
void loop() {
//Read SIM800 output (if available) and print
it in Arduino IDE Serial Monitor
if(Serial3.available()){
Serial.write(Serial3.read());
}
//Read Arduino IDE Serial Monitor inputs (if
available) and send them to SIM800
if(Serial.available()){
Serial3.write(Serial.read());
}
}
Mediante este sencillo sketch
estaremos en condiciones de comunicarnos con la placa SIM800H a través del
monitor serie del IDE de ARDUINO utilizando los comandos AT (http://zonabot.com/index.php/es/2-uncategorised/28-comandos-at-para-telefonos-moviles
) ,básicamente deberemos verificar que el sistema responde , responderá OK al envío de un comando simple AT, y de que el sistema está conectado a alguna
red telefónica mediante el comando AT+COPS?
, al que contestará indicando a qué red de telefonía móvil está el sistema conectado.
Una segunda verificación que
debemos hacer es la comprobación de que nuestro sistema puede enviar mensajes
SMS de texto. Para ello instalaremos el siguiente sketch en la placa Arduino:
void setup()
{
//Being serial
communication with Arduino and SIM800
Serial.begin(9600);
Serial3.begin(9600);
delay(1000);
Serial.println(“Setup Complete!”);
Serial.println(“Sending SMS…”);
//Set SMS format to ASCII
Serial3.write(“AT+CMGF=1\r\n”);
delay(1000);
//Send new SMS command and message number
Serial3.write(“AT+CMGS=\”606******\”\r\n”);
delay(1000);
//Send SMS content
Serial3.write(“TEST”);
delay(1000);
//Send Ctrl+Z / ESC to denote SMS message is
complete
Serial3.write((char)26);
delay(1000);
Serial.println(“SMS Sent!”);
}
void loop()
{
}
En el teléfono móvil indicado en la instrucción – Serial3.write(“AT+CMGS=\”606******\”\r\n”);
– deberemos recibir un mensaje con
el contenido TEST . Una posible causa de que no recibamos el mensaje es que el
número de teléfono del centro de mensajes no está previamente inscrito en la
tarjeta SIM instalada en la placa SIM800H. Si no lo estuviera, recurriríamos al
comando AT correspondiente usando el script
anterior. Debemos señalar que ADAFRUIT tiene una librería para manejar esta
placa SIM800H , pero de ella nos ocuparemos más adelante.
Si toda ha funcionado correctamente estaremos en condiciones de poder subir
a nuestra placa ARDUINO el código del software que nos permite recibir en
nuestro teléfono móvil un mensaje de
texto con los datos meteorológicos capturados mediante el sensor BME280. Este
sketch lo podéis obtener e la dirección: http://e-ao.org/Apuntes/sim800_sms_f.ino o http://e-ao.org/Apuntes/sim800_sms_f.txt
. Recordar que para hacer funcionar este script deberemos incluir las librerías
<SPI.h> , <Adafruit_Sensor.h> y <Adafruit_BME280.h>. Este
programa simplemente lo que hace es leer los datos meteorológicos y escuchar en
la puerta SERIE- 3 de la placa ARDUINO MEGA si hay una llamada entrante desde un número de
teléfono concreto (el teléfono 606******). Al leerse la puerta, se busca
si el número en cuestión ha llamado, mediante la instrucción
– if
((comando.indexOf(“606******”)>0)) –
Si esa
condición se cumple, inmediatamente se
ejecuta la opción de enviar un mensaje de texto a dicho teléfono.