fbpx
ArduinoNovidade

Como enviar SMS para celular utilizando o módulo GSM GPRS SIM800L e Arduino

O módulo GSM GPRS SIM800L é um mini modem capaz de realizar comunicação de dados através da rede de telefonia móvel celular. Com este dispositivo é possível enviar mensagens SMS, fazer chamadas telefônicas e, até mesmo, conectar-se à Internet. Desta forma, pode ser usado para notificar o usuário sobre algum evento ou acontecimento pré-definido.

O módulo GSM GPRS SIM800L suportar redes GSM/GPRS quad-band, o que significa que funciona em todos os lugares que possuem sinal de celular. Essa forma de comunicação pode ser usada em vários projetos de automação, IOT e robótica, podendo ser controlador por diversos microcontroladores como o Arduino, ESP8266 e ESP32.

No geral, o módulo GSM GPRS SIM800L (Figura 1) é ideal para otimizar um projeto e poupar tempo de observação do utilizador.

a Figura mostra uma foto de módulo SIM800L em escala real
Figura 1 – Módulo GSM GPRS SIM800L

Para que o módulo funcione será necessário inserir um chip Micro SIM (chip celular) no soquete localizado na parte de trás. A direção correta para inserir o chip geralmente encontra-se desenhada na superfície do soquete.

A Figura mostra uma foto real tirada do soquete presente no módulo sim800l
Figura 2 – Soquete para conexão chip-Micro SIM

Apesar do seu pequeno tamanho, o módulo GSM GPRS SIM800L inclui vários recursos, como:

  • Suporte Quad-band: GSM850, EGSM900, DCS1800 e PCS1900;
  • Conexão com qualquer rede GSM com qualquer SIM 2G
  • Recebe e faz chamadas de voz (necessário a utilização de um alto-falante e microfone);
  • Envia e recebe mensagens SMS;
  • Enviar e receber dados GPRS (TCP/IP, HTTP, etc.);
  • Digitalizar e receber transmissões de rádio FM;
  • Comandos AT baseado em série.

O módulo GSM GPRS SIM800L acompanha uma antena helicoidal e pinos. A antena helicoidal pode ser saldada diretamente no módulo, conforme a Figura 3.

A figura foca em mostrar a conexão da antena com o módulo sim800l por meio de uma foto real
Figura 3 – Antena helicoidal do módulo SIM800L

O módulo GSM GPRS SIM800L possui um total de 12 pinos, ilustrados na Figura 4 e detalhados a seguir:

A Figura busca mostrar os pinos do módulo SIM800l, por meio de uma edição, a qual é nomeado os pinos e sua localização
Figura 4 – Pinos do módulo GSM GPRS SIM800L

Funcionalidade de cada pino:

NET: Pino onde soldaremos a antena helicoidal;
VCC: Pino de alimentação do módulo. Note que essa alimentação precisa estar entre 3,4V e 4,4 V de tensão. Desta forma, não é possível utilizar o 5V ou 3,3V do Arduino ou ESP. Para ligar o módulo, você pode usar um divisor de tensão ou um conversor DC-DC;
RST: Pino RESET para reinicialização do módulo. Para reiniciá-lo é necessário colocar esse pino em nível lógico baixo por 100ms;
RXD: Pino usado para receber comandos por meio da comunicação serial;
TXD: Pino usado para enviar dados ao microcontrolador por meio da comunicação serial;
GND: Pino de aterramento do módulo;
RING: Pino de interrupção do módulo. É configurado em nível alto por padrão e fica em nível baixo quando uma ligação ou SMS é recebida;
DTR: Pino que ativa e desativa o modo de hibernação do módulo (Nível alto = ativa a hibernação e nível baixo = desativa a hibernação);
MICP e MICN: Pinos de entrada para microfones;
SPKP e SPKN: Pinos de saída para alto-falantes;

Agora que já conhecemos o módulo GSM GPRS SIM800L, vamos ao projeto. A proposta é utilizar o módulo com o Arduino para enviar um SMS para um número pré-definido.


Materiais necessários

1 x Módulo GSM GPRS SIM800L;
1 x Placa Uno SMD R3 ATmega328;
1 x Cabo USB compatível com Arduino;
1 x Regulador de Tensão Step Down LM2596;
1 x Protoboard;
3 x Resistor 10 kΩ;
Jumpers macho-macho.


ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

Certifique-se que a sua placa UNO esteja desligada antes de montar o circuito da Figura 5.

IMPORTANTE: O módulo deve ser alimentado por uma tensão de 3.3V a 4.4V. Portanto, o módulo nunca deve ser conectado diretamente ao Arduino.

A imagem mostra um circuito esquemático de ligação feito no software fritizing para o projeto utilizando o módulo GSM GPRS SIM800L
Figura 5 – Circuito para projeto com o Módulo GSM GPRS SIM800L.

Ao montar seu circuito na protoboard, preste atenção nos seguintes pontos:

  • A alimentação do regulador de tensão deve ser feita por uma fonte externa;
  • Ajuste a tensão de saída do regulador de tensão entre 3.4V e 4.4V. Para se certificar use um multímetro;
  • Alimente o módulo com a saída do regulador de tensão;
  • A entrada negativa do regulador de tensão, o GND da fonte externa e o GND do Arduino devem ser conectados (terra comum);
  • Não podemos conectar o pino Rx do módulo diretamente ao pino digital do Arduino. Desta forma, faça um divisor de tensão. Conecte um resistor de 10kΩ entre o Rx do módulo e o pino D2 do Arduino e outros dois resistores de 10kΩ em série entre o Rx e o GND do módulo;
  • O pino Tx do módulo deve ser conectado diretamente ao pino TXD do Arduino.


ELABORAÇÃO DO CÓDIGO

Após a montagem do circuito, vamos a programação do Sketch. A proposta desse código é utilizar o módulo com o Arduino para enviar um SMS para um número pré-definido. Para isso, acompanhe a lógica de programação deste projeto com os seguintes pontos:

1.Incluir a biblioteca “SoftwareSerial.h”

Esta biblioteca permite a comunicação serial em outros pinos digitais do Arduino, utilizando um software para replicar a funcionalidade.

2.Criar objeto Software Serial para comunicação com o SIM800L

Será necessário criar um objeto do tipo software serial para comunicação do módulo SIM800L passando como parâmetro as portas digitais 3 e 2 do Arduino.

3.Configurações iniciais

Na função setup() inicializamos a comunicação serial por meio do comando “Serial.Begin(9600)” e a comunicação entre o Arduino e módulo SIM800L através do comando “MySerial.begin(9600)”.

Em seguida, usaremos os comandos AT para nos comunicar com o módulo.

O comando “mySerial.println(“AT”);”testa a comunicação e retorna a mensagem OK se tudo estiver funcionando bem.

Logo em seguida, configuramos o SMS que será enviado. O comando “mySerial.println(“AT+CMGF=1”)” define o módulo no modo SMS Text.

O comando mySerial.println(“AT+CMGS=\”+ZZXXXXXXXXXXX\””)” será usado para configurar o número de telefone ao qual queremos enviar que a mensagem, vale lembrar que “ZZ” corresponde ao código telefônico do país e “XXXXXXXXXXX” corresponde ao número de telefone com o DDD.

Por fim, basta escrever a mensagem que será enviada por meio do comando “mySerial.print(“Tutorial Blog da Robótica “)”. A mensagem deve estar entre parênteses.

Além disso, chamamos a função “updateSerial()” .

4. Criar função updateSerial()

A função updateSerial() será responsável por verificar se a comunicação serial está disponível e realizar a leitura dos dados seriais de entrada do Arduino.

Ao final, o Sketch deste projeto ficará da seguinte maneira:

/*
  -     ENVIAR SMS COM MÓDULO GSM GPRS SIM800L    -
  =================================================
  === BLOG DA ROBOTICA - www.blogdarobotica.com ===
  =================================================
  Autor: Jonas Souza
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  =================================================
  === CASA DA ROBOTICA - www.casadarobotica.com ===
  =================================================
  Facebook: facebook.com/casadaroboticaoficial
  Instagram:@casadarobotica
  ==================================================
*/
#include <SoftwareSerial.h> //Adiciona da biblioteca SoftwareSerial.h

SoftwareSerial mySerial(3, 2); //Cria objeto mySerial passando como parâmetro as portas digitais 3 e 2

void setup(){
  Serial.begin(9600); //Inicializa a comunicação serial

  mySerial.begin(9600); //Inicializa comunicação entre o SIM800L e o Arduino

  delay(1000);  //Intervalo de 1 segundo

  mySerial.println("AT"); //Teste de conexão 
  updateSerial(); //Chamada da função updateSerial()
  
  mySerial.println("AT+CMGF=1"); //Configuração do modo SMS text
  updateSerial(); //Chamada da função updateSerial()
  
  mySerial.println("AT+CMGS=\"+5577998077522\""); //Número de telefone que irá receber a mensagem, “ZZ” corresponde ao código telefônico do pais e “XXXXXXXXXXX” corresponde ao número de telefone com o DDD
  updateSerial(); //Chamada da função updateSerial()
  
  mySerial.print("Tutorial Blog da Robotica"); //Texto que será enviado para o usúario
  updateSerial(); //Chamada da função updateSerial()
  
  mySerial.write(26); //confirmação das configurações e envio dos dados para comunicação serial.
}

void loop(){
}

void updateSerial() {
  
  while (mySerial.available()) //Verifica se a comunicação serial está disponível
  {
    Serial.write(mySerial.read()); //Realiza leitura serial dos dados de entrada Arduino
  }
  delay(500); //Intervalo de 0,5 segundos
}


APÓS COMPILAÇÃO DO CÓDIGO

Com o código pronto, faça o upload do código para o Arduino e, em seguida, abra o monitor serial.

Com o monitor aberto, aguarde a mensagem de confirmação que o SMS foi enviado para o número desejado, conforme a Figura 6.

A figura mostrar uma captura de tela retirada da Arduino IDE mostrando o módulo Sim800l funcionando com sucesso
Figura 6 – Confirmação do envio da mensagem.

Depois de alguns segundos teremos o recebimento da mensagem no celular, conforme mostrado no Vídeo 1.

Vídeo 1: Envio de mensagem SMS usando o Módulo GSM GPRS SIM800L.

LED INDICATIVO

No canto superior direito do Módulo GSM GPRS SIM800L existe um LED indicativo (Figura 7) que sinaliza o status da sua rede celular, piscando em diferentes faixas, dependendo do estado:

A figura mostra uma foto real que indica onde se localiza o led do módulo Sim800l
Figura 7 – LED indicativo
  • Piscar a cada 1 segundo: O módulo está em execução, mas a conexão com a rede ainda não foi estabelecida;
  • Piscar a cada 2 segundos: A conexão de dados GPRS solicitada está ativa;
  • Piscar a cada 3 segundos: O módulo está comunicando com a rede celular e pode enviar e receber chamadas de voz e SMS.

Espero ter ajudado,

Obrigado a todos e em caso de dúvidas deixe seu comentário abaixo!

Dúvidas? Deixe seu comentário

Graduando em Engenharia Elétrica.

Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.

Deixe uma pergunta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.