Como receber SMS usando módulo GSM com Arduino- (Parte 47/49)

Em certas aplicações, os sistemas baseados em microcontroladores têm de estar ligados à rede GSM, o que permitirá ao utilizador controlar o sistema enviando mensagens ou fazendo uma chamada. A vantagem de usar uma comunicação GSM com um sistema ou dispositivo é que o usuário pode controlar o sistema sem fio, independentemente da distância em comparação com qualquer outra comunicação sem fio, desde que tanto o usuário quanto o dispositivo estejam em uma área de cobertura celular. .

Os telefones celulares possuem módulos GSM integrados que podem ser utilizados pelo processador interno do telefone para fazer uma chamada, enviar ou receber mensagens ou até mesmo conectar-se à rede GPRS. Quando se trata de um sistema baseado em microcontrolador, um módulo GSM separado é usado em vez de um telefone celular propriamente dito. Existem módulos GSM disponíveis que podem fazer comunicação serial com sistemas baseados em microcontroladores. A comunicação é feita através do envio ou recebimento de comandos AT com o módulo GSM. Este projeto específico demonstra como fazer interface com um módulo GSM e ler e exibir SMS no LCD 16*2.

Qualquer placa baseada em microcontrolador AVR que siga o esquema padrão do Arduino e seja atualizada com o bootloader Arduino pode ser chamada de placa Arduino. O Arduino é conhecido como hardware de código aberto e o Arduino IDE também é de código aberto e qualquer pessoa pode contribuir com suas bibliotecas para o Arduino. Todas as placas Arduino devem ser compatíveis com o Arduino IDE, que pode ser usado para programar as placas Arduino.

O funcionamento deste projeto é explicado com base na placa Arduino pro-mini e no IDE versão 1.0.3 para windows. A vantagem desta placa é que ela vem em tamanho muito pequeno; qualquer tipo de conector pode ser soldado em sua periferia de acordo com nossas necessidades. É muito compatível com protoboard e ocupa muito menos espaço de uma protoboard típica.

A imagem da placa Arduino pro-mini e do Arduino IDE é mostrada abaixo:

Fig. 2: Placa Arduino Pro-Mini típica

Fig. 3: Janela do software Arduino IDE

Como a placa Arduino pro-mini não possui circuito para interface com a porta serial ou a porta USB do PC, uma placa conversora USB para TTL externa é necessária para conectá-la ao PC. Este hardware auxilia na programação da placa Arduino e também auxilia na comunicação serial com a porta USB do PC.

4: Placa conversora USB para TTL externa para programação Arduino e comunicação serial

Presume-se que o leitor tenha passado pelo projeto como começar com o Arduino e experimentei todas as coisas discutidas lá. O módulo GSM utilizado neste projeto é um módulo baseado em SIM900 que pode se comunicar com outros dispositivos usando a porta de comunicação serial RS232. Funciona em 9V fonte de alimentação e a imagem da mesma é fornecida abaixo:

Fig. 5: Módulo GSM SIM900 conectado ao pino Tx do módulo da placa Arduino através de max232

O módulo GSM é conectado à placa Arduino usando a porta de comunicação serial. Como o módulo possui porta RS232 e o Arduino pro-mini pode se comunicar usando níveis lógicos TTL, um IC max232 é usado para fazer uma conversão bidirecional entre os níveis lógicos RS232 e TTL. O pino Tx da placa Arduino é conectado ao pino Rx do módulo GSM através do max232 e o pino Rx do Arduino é conectado ao pino Tx do módulo GSM usando o próprio max232.

O código escrito no Arduino é capaz de se comunicar com o módulo GSM usando Comandos AT. O Comandos AT são enviados ou recebidos do módulo usando as funções de comunicação serial fornecidas pela biblioteca Arduino. As funções como Serial.begin que ajuda a inicializar a porta serial com uma determinada taxa de transmissão, Serial.write para enviar dados para a porta serial, funções Serial.available e Serial.read para ler dados da porta serial são utilizados neste projeto e já foram discutidos em projetos anteriores em como fazer comunicação serial com o Arduino, como enviar e receber dados seriais usando arduino e como fazer depuração serial com o Arduino.

Os módulos GSM respondem “OK” quando recebem o comando “AT” e é a melhor forma de verificar a comunicação entre o módulo e o microcontrolador.

+CMGF – Este comando é usado para definir o modo SMS. O modo texto ou PDU pode ser selecionado atribuindo 1 ou 0 no comando.

Sintaxe: AT+CMGF=

0: para modo PDU

1: para modo texto

Por exemplo,

AT+CMGF=1

+CNMI- Este comando AT é usado para especificar como as mensagens SMS recém-chegadas devem ser tratadas. Ele pode ser usado para configurar o modem GSM/GPRS ou telefone celular para rotear mensagens SMS recebidas diretamente para a porta serial ou para salvá-las no armazenamento de mensagens e depois notificar o dispositivo host enviando uma string através da porta serial.

SINTAXE: AT+CNMI=

Por exemplo, para rotear a sequência de mensagens recebidas para a porta serial do dispositivo, o código escrito para este projeto usa o seguinte comando;

AT+CNMI=2,2,0,0,0

Assim que um SMS é recebido, o módulo GSM envia uma longa string para a placa Arduino que consiste em muitos detalhes sobre a mensagem e também inclui o texto original. O código é escrito de forma que irá esperar até que algum caractere seja recebido pela porta serial e assim que começar a receber irá verificar a ocorrência do quarto ' ” ' e escrever o restante dos caracteres diretamente no LCD 16 * 2 . Os caracteres após o quarto ' “ ' na string recebida serão o texto original e o restante dos caracteres são ignorados no código usando as linhas a seguir;

fazer

{

enquanto ( !Serial.available );

} while ( '”' != Serial.read );

fazer

{

enquanto ( !Serial.available );

} while ( '”' != Serial.read );

fazer

{

enquanto ( !Serial.available );

} while ( '”' != Serial.read );

fazer

{

enquanto ( !Serial.available );

} while ( '”' != Serial.read );

O texto SMS é gravado no LCD 16*2 usando as funções da biblioteca que pode ser usada para fazer a interface de um módulo LCD externo com a placa Arduino. As funções que podem ser utilizadas para acessar o LCD já foram discutidas em projetos anteriores em como fazer interface com um LCD, como exibir o valor do sensor no LCD, como conectar o LCD ao PC e como fazer um display LCD de rolagem.

Pode-se verificar e fazer upload do código que pode enviar os mesmos comandos para a placa Arduino conforme explicado no projeto como começar com o Arduino. Certifique-se de que o módulo GSM foi ligado pelo menos 2 minutos antes da placa Arduino começar a enviar os comandos para que o GSM possa estabelecer comunicação com a rede celular correspondente ao cartão SIM nele inserido.

Código fonte do projeto

###




/*============================ EG LABS ===================================//

 Demonstration on how to receive an SMS using GSM module


 The circuit:

 LCD:

 * LCD RS pin to digital pin 12

 * LCD Enable pin to digital pin 11

 * LCD D4 pin to digital pin 7

 * LCD D5 pin to digital pin 6

 * LCD D6 pin to digital pin 5

 * LCD D7 pin to digital pin 4

 * LCD R/W pin to ground

 * 10K resistor:

 * ends to +5V and ground

 * wiper to LCD pin 3

 * LED anode attached to digital output 9

 * LED cathode attached to ground through a 1K resistor


 GSM:

 RX PIN OF GSM TO TX0 PIN OF ARDUINO 

 SHORT THE GROUND PINS OF ARDUINO AND XBEE

============================== EG LABS ===================================*/



#include 

// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(12, 11, 7, 6, 5, 4);


// give the pin a name:

int led = 9;

// incoming serial byte

int inByte = 0;         


void setup 

{

  pinMode(9, OUTPUT);     

  lcd.begin(16, 2);

  lcd.print("ENGINEERS GARAGE");

  lcd.setCursor(0, 1);

  lcd.print("   GSM SMS  ");

  delay(1000);

  

  // initialize the led pin as an output.

  pinMode(led, OUTPUT);  

  // start serial port at 9600 bps

  Serial.begin(9600);

  // wait for a while till the serial port is ready

  delay(100);


// send the initial data once //    

  Serial.print("AT+CMGF=1nr");

  delay(500);

  Serial.print("AT+CNMI=2,2,0,0,0nr");

  delay(2000);

  

  digitalWrite(led, HIGH);       

}


void loop 

{

    do

    {

        while ( !Serial.available  );    

    } while ( '"' != Serial.read  );

  

    do

    {

        while ( !Serial.available  );    

    } while ( '"' != Serial.read  );

  

    do

    {

        while ( !Serial.available  );    

    } while ( '"' != Serial.read  );

    

    do

    {

        while ( !Serial.available  );    

    } while ( '"' != Serial.read  );

    

    while ( !Serial.available  );

    inByte = Serial.read ;     

    while ( !Serial.available  );

    inByte = Serial.read ;

    

    lcd.clear ;

    while(1)

    {

        while ( !Serial.available  ); 

        inByte = Serial.read ;

        

        if ( inByte == 'r' )

          break;

        else;

        

        lcd.write ( inByte );

    }

}

###

Diagramas de circuito

Diagrama de circuito-recebimento de SMS usando módulo GSM-Arduino

Componentes do Projeto

  • Arduino ProMini
  • Capacitor
  • LCD
  • LIDERADO
  • MÁX232
  • Potenciômetro
  • Resistor

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.