GSM Shield SIM900: Acione portas do Arduino por SMS e realize chamadas telefônicas

Faça chamadas, envie e receba SMS e até conecte a internet com o Arduino Shield GSM GPRS SIM900 EFCom. Com ele você pode monitorar a sua casa à distância, receber informações sobre sensores, enviar comandos para o Arduino via celular, e muito mais:

GSM GPRS Shield SIM900 EFCom

ArduinoGSM Shield SIM900 funciona com Arduino Uno e, com algumas alterações, também com o Arduino Mega. Ele é quad-band (850/900/1800/1900 MHz) e você pode ter serviços de chamadas, SMS, internet e fax, tudo controlado pelo Arduino por meio de comandos AT.

Os comandos AT já estão incorporados à biblioteca do Arduino que vamos utilizar, mas você pode verificar a lista completa dos comandos e também descobrir novas funções acessando este link.

Arduino GSM Shield SIM900 – Conexões

O shield é controlado pelo CI SIM900 (datasheet), localizado na parte central da placa. Na parte superior esquerda, temos os botões de Reset do ArduinoLiga/Desliga do shield e também o Reset do Shield.

Na parte superior temos um conector para ligação de um display Nokia 5100, mas fique atento às conexões, já que esse conector segue um padrão diferente do encontrado nos displays disponíveis no mercado.

Você pode ligar e resetar o shield via software, utilizando as portas D6 (liga/desliga) e D5 (reset) do Arduino. Vamos utilizar esse método nos programas apresentados neste post.

No lado direito superior temos os pinos de configuração da porta serial para comunicação com o Arduino, que pode ser feita pelos pinos 0 (RX) e 1 (TX), ou pelos pinos 2 e 3, usando a biblioteca SoftwareSerial do Arduino. É essa configuração que vamos usar nos testes deste post, com o pino digital 2 como TX (Transmissão), e o pino 3 como RX (Recepção) da serial:

A utilização dos pinos 2 e 3 é mais prática pois assim você pode monitorar a situação do shield SIM900 pelo serial monitor da IDE do Arduino.

Os leds indicadores mostram se o shield está ligado e também a situação da rede GSM/GPRS. O led NET, especificamente, pisca a intervalos específicos para mostrar o status da conexão:

Instalação do GSM shield no Arduino

Para que o shield GSM funcione corretamente, certifique-se de que o seu cartão SIM esteja desbloqueado, e com créditos suficientes para efetuar ligações, enviar SMS e se conectar à internet.

A instalação do cartão SIM é bem simples, bastando encaixar o cartão no slot na parte de baixo da placa:

Depois de encaixar o cartão SIM, rosqueie a antena e encaixe o shield no Arduino. Alimente o Arduino com uma fonte de pelo menos 9V e 1A. Se você não fizer isso, o shield não receberá alimentação adequada, causando desligamento aleatório, perdas de conexão, etc.

Usando o GSM Shield com Arduino Mega

Para utilizar o shield SIM900 no Arduino Mega, abra a pasta da biblioteca e edite o arquivo GSM.cpp. Nele, configure os pinos TX e RX como 50 e 51, conforme a imagem abaixo:

Retire também os jumpers de configuração da serial, e faça a ligação ao Arduino Mega seguindo o esquema abaixo:

A conexão do GSM Shield no Arduino Mega ficará assim:

Carregue normalmente os programas a seguir. Nenhuma outra alteração é necessária.

Fazendo ligações com o GSM Shield SIM900

Para utilizar os programas deste post, faça o download da biblioteca GSM-GPRS-GPS-Shield, disponível neste link. Descompacte a biblioteca, renomeie a pasta para GSM_Shield e coloque-a dentro da pasta LIBRARIES da IDE do Arduino.

Vamos começar os testes pela função mais básica do shield, que é o de fazer uma ligação/chamada telefônica. A própria biblioteca já tem uma função para isso.

O programa abaixo liga automaticamente o shield, por meio da subrotina liga_desliga_GSMShield(). Para que o programa funcione corretamente, apenas o led PWR do shield deve estar ligado. Os leds STA e NET serão acionados automaticamente assim que o programa iniciar. Se o shield não estiver nessa configuração, aperte o botão LIGA/Desliga Shield por alguns segundos.

//Progama: Chamada telefonica usando o GSM Shield SIM900
//Autor: Arduino e Cia

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "call.h"

CallGSM call;

void setup()
{
  Serial.begin(9600);
  Serial.print("Ligando shield GSM SIM900. ");
  liga_desliga_GSMShield();
  Serial.println("Testando GSM Shield...");
  //Comunicacao com o Shield GSM a 2400 bauds
  if (gsm.begin(2400))
    Serial.println("nstatus=READY");
  else Serial.println("nstatus=IDLE");
}

void loop()
{
  Serial.println("Discando....");
  //Efetua a chamada formato call.Call(<numero a ser chamado>)
  call.Call("987654321");
  Serial.println("Ligacao Efetuada!");
  delay(20000);
  Serial.println("Encerrando a ligacao...");
  call.HangUp();
  Serial.print("Desligando shield GSM SIM900. ");
  liga_desliga_GSMShield();

  do {} while (1); //Loop parando o programa
}

void liga_desliga_GSMShield()
{
  Serial.print(F("Aguarde..."));
  pinMode(6, OUTPUT);
  digitalWrite(6, LOW);
  delay(1000);
  digitalWrite(6, HIGH);
  delay(1000);
  Serial.println(F("OK!"));
  digitalWrite(6, LOW);
  delay(500);
}

Você pode monitorar o andamento da ligação utilizando um fone de ouvido ligado à saída de áudio do shield. Os comandos AT que são enviados à placa são mostrados no Serial Monitor, assim como algumas mensagens de aviso que inserimos no programa:

A princípio o programa efetua a ligação, e desliga depois de 20 segundos. Você pode configurar o programa para fazer esse desligamento manualmente, e utilizar um microfone ligado ao shield para realizar uma chamada.

Enviando SMS pelo Arduino

Enviar um SMS pelo GSM Shield SIM900 também é bem simples utilizando as funções da própria biblioteca. O programa abaixo envia um SMS com o texto Arduino e Cia GSM Shield para o número de telefone especificado na linha 11 do programa. A mensagem a ser enviada pode ser alterada na linha 12:

//Progama : Envio de SMS com o GSM Shield SIM900
//Autor: Arduino e Cia

#include "SIM900.h"
#include <SoftwareSerial.h>
//Carrega a biblioteca SMS
#include "sms.h"

SMSGSM sms;

char numero[20] = "987654321";
char mensagem[30] = "Arduino e Cia GSM Shield";

boolean started = false;

void setup()
{
  //Inicializa a serial
  Serial.begin(9600);
  Serial.print("Ligando shield GSM SIM900. ");
  liga_desliga_GSMShield();
  Serial.println("Testando GSM shield...");
  //Comunicacao com o Shield GSM a 2400 bauds
  if (gsm.begin(2400))
  {
    Serial.println("nstatus=READY");
    started = true;
  }
  else Serial.println("nstatus=IDLE");

  if (started)
  {
    //Envia um SMS para o numero selecionado
    if (sms.SendSMS(numero, mensagem))
      Serial.println("nSMS enviado!");
  }
  Serial.print("Desligando shield GSM SIM900. ");
  liga_desliga_GSMShield();

}
void loop()
{}

void liga_desliga_GSMShield()
{
  Serial.print(F("Aguarde..."));
  pinMode(6, OUTPUT);
  digitalWrite(6, LOW);
  delay(1000);
  digitalWrite(6, HIGH);
  delay(1000);
  Serial.println(F("OK!"));
  digitalWrite(6, LOW);
  delay(500);
}

O programa não tem muito segredo: ele inicializa o shield, chama a função sms.SendSMS() que envia a mensagem, e depois desliga o shield.

Acionando portas do Arduino por SMS

Esse programa utiliza a mesma rotina para ligar o shield, mas não tem uma função de desligar. O loop fica executando uma rotina que verifica se algum SMS foi recebido. Caso isso aconteça, o número do celular de quem enviou é mostrado no serial monitor, assim como a mensagem de texto recebida.

//Progama: Aciona porta por SMS com o GSM Shield SIM900
//Autor: Arduino e Cia

#include "SIM900.h"
#include <SoftwareSerial.h>
//Carrega a biblioteca SMS
#include "sms.h"

SMSGSM sms;

boolean started = false;
char smsbuffer[160];
char n[20];

boolean estado = LOW;
String msg_esperada("Liga 13");

void setup()
{
  //Inicializa a serial
  Serial.begin(9600);
  //Define a porta 13 como saida
  pinMode(13, OUTPUT);
  Serial.print("Ligando shield GSM SIM900. ");
  liga_desliga_GSMShield();
  Serial.println("Testando GSM shield...");
  //Comunicacao com o Shield GSM a 2400 bauds
  if (gsm.begin(2400))
  {
    Serial.println("nstatus=READY");
    started = true;
  }
  else Serial.println("nstatus=IDLE");
}

void loop()
{
  if (started)
  {
    //Aguarda SMS
    Serial.println("Aguardando SMS...");
    if (gsm.readSMS(smsbuffer, 160, n, 20))
    {
      String msg_recebida(smsbuffer);
      msg_recebida.trim();
      msg_esperada.trim();
      if (msg_recebida == msg_esperada)
      {
        estado = !estado;
        Serial.println("SMS Recebido! Alterando estado da porta 13....");
        digitalWrite(13, estado);
        delay(50000);
      }
      delay(5000);
    }
  }
}

void liga_desliga_GSMShield()
{
  Serial.print(F("Aguarde..."));
  pinMode(6, OUTPUT);
  digitalWrite(6, LOW);
  delay(1000);
  digitalWrite(6, HIGH);
  delay(1000);
  Serial.println(F("OK!"));
  digitalWrite(6, LOW);
  delay(500);
}

Caso seja recebido o texto “Liga 13” (sem as aspas), o estado do led ligado à porta 13 será alterado (ligado/desligado). Uma mensagem também é enviada para o serial monitor. 

Você pode mudar esse texto de ativação da porta na linha 16 do programa e colocar a string de sua preferência.

Se você precisa acessar a internet e gravar informações do Arduino em uma página web usando esse GSM Shield, não perca o post Como acessar a internet com o Arduino GSM Shield SIM900. Até lá!

Avalie este post!

Related posts

Como usar o Servo Motor Shield 16 canais Adafruit

by Arduino e Cia
9 anos ago

NodeJS com Socket.io e Arduino

by Arduino e Cia
9 anos ago

Como conectar dois displays LCD I2C no Arduino

by Arduino e Cia
7 anos ago
Sair da versão mobile