0

Receber SMS com Arduino e SIM800L

Neste tutorial vamos aprender como controlar o Arduino enviando instruções por SMS, concretamente, o que faremos será acender e apagar um LED enviando um SMS com las palavras ON e OFF.

Montagem e ligações

Os pinos 8 e 9 do Arduino atuam como pinos TX/RX, alimentamos o módulo SIM800L com uma tensão entre 3.4v a 4.4v e colocamos um GND comum entre este e o Arduino, para acabar ligamos um LED com uma resistência de 200 Ohms entre o pino digital 3 do Arduino e um pino GND. Um esquema de referência:

Sketch de ensaio

Para este sketch usamos a livraria SoftwareSerial que nos permite gerar uma segunda comunicação série no Arduino. Vamos usar o comando AT+CNMI=1,2,0,0,0, com este comando vamos configurar o módulo para que cada vez que receba um SMS apareça-nos na porta serial assim:

+CMT : “+351xxxxxxxxx” , , “2017/08/30,22:30:00+40”
Este é o texto de SMS recebido

Vamos guardar o texto da mensagem numa variável de tipo string e procuramos dentro do texto o comando ON ou o comando OFF para saber se temos que acender ou apagar o LED. Em baixo, está o código comentado linha a linha para que seja fácil de entender:

#include <SoftwareSerial.h> //Incluimos a livraria SoftwareSerial
SoftwareSerial SIM800L(8, 9); //Declaramos os pinos RX(8) e TX(9) que vamos usar

String Comando; //Declaramos uma variavel de tipo String para armazenar o texto do SMS recebido
int LED = 3; //Definimos o pino onde esta conectado o LED (Digital 3)

void setup(){
Serial.begin(9600); //Iniciamos a comunicação serie
SIM800L.begin(9600); //Iniciamos una instância da livraria SoftwareSerial
SIM800L.println("AT+CMGF=1"); //Configuramos o módulo para trabalhar com os SMS em modo texto
delay(1000); //Pausa de 1 segundo
SIM800L.println("AT+CNMI=1,2,0,0,0"); //Configuramos o módulo para que nos mostre os SMS recebidos por comunicação serie
pinMode(LED, OUTPUT); //Definimos o pino onde esta ligado o LED como saida
}

void loop(){
if (SIM800L.available()){ //Se há dados disponiveis
Comando = SIM800L.readString(); //Armazenamo-los na variavel Comandos
Serial.println("NOVO SMS ENTRADA: " + Comando); //Obtemo-los por comunicação série
}

if(Comando.indexOf("On")>=0){ //Se a variável Comando contem a palavra ON
Serial.println("Acender o LED"); //Avisamos por comunicação serie
digitalWrite(LED, HIGH); //Activamos o LED
Comando = ""; //Esvaziamos a variavel
}

if(Comando.indexOf("Off")>=0){ //Se a variavel Comando contem a palavra OFF
Serial.println("Apagar o LED"); //Avisamos por comunicação serie
digitalWrite(LED, LOW); //Desactivamos o LED
Comando = ""; //Esvaziamos a variavel
}
}

Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.

Gostaram deste artigo? Deixem o vosso comentário no formulário a baixo e partilhem com os vossos amigos.

Não se esqueçam de fazer like na nossa Página no Facebook.

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?

 

Comments

Comentários

Jaime Mota

Deixar uma resposta