Home › Tag Archives › GSM

Shield GSM GPRS baseado em SIM900

A finalidade deste shield é conectar o arduino (qualquer um, mas é preciso fazer uma pequena alteração para o Mega) à rede celular para enviar e receber mensagens (SMS) ou se conectar à internet (GPRS). Você teoricamente (isso eu nunca testei) também pode conectar um microfone e/ou alto falante aos respectivos conectores e “ligar” para o seu projeto e ouvir o que se passa ao redor.

Nota: é muito comum as pessoas (incluindo muitos vendedores) confundirem GPRS com GPS. São duas funcionalidades complementares mas completamente diferentes. Este shield não tem funcionalidade GPS e são raros os que tem, porque geralmente faz mais sentido comprar as duas coisas separadamente.

A documentação completa do shield é fornecida pela Elecfreaks. Na página você irá encontarar diagramas e diversas informações importantes, mas os exemplos não são muito bons. Use a biblioteca que eu sugiro mais adiante.

Este shield precisa de alimentação extra. Ele não vai funcionar direito, se chegar a funcionar, apenas com a alimentação recebida do computador pelo cabo USB. Use a fonte fornecida com o shield.

O SIM900 precisa ser “ligado” para funcionar. Neste shield isso é feito dando um pulso no pino D6 do Arduino. Mas você também pode fazer isso apertando o botão S_PWR no shield.

A princípio você pode achar isso incoveniente, mas tenha em mente que o consumo do módulo é elevado. Dessa forma você tem um controle e para poupar energia só precisará ligar o “celular” quando realmente for necessário. Se não quiser ter que ficar apertando o botão, simplesmente programe seu sketch para ativar D6.

Você não precisa do arduino para usar esse shield. Com alguns fios e um adaptador USB-TTL você pode conectar o shield diretamente a um computador e usar um terminal serial qualquer para enviar e receber comandos.

A melhor biblioteca que conheço para esse shield é a GSM Shield Library. Compatível com o IDE 1.x.

Para testar a comunicação com a internet, rode o exemplo GSMSHIELD->GSM_GPRSLibrary_AT. Esse exemplo traz o conteúdo da página em google.com.

Problemas com o Arduino Mega

Esta combinação funciona sem qualquer problema no Arduino UNO, mas para usar com o Arduino Mega é necessário mudar a porta usada para comunicação:

1)Escolha um pino livre qualquer no Mega. Neste exemplo eu vou usar o D53 (também funcionou com o D10);

2)Edite a linha em GSM.cpp, para que aponte para o novo pino:

#define _GSM_TXPIN_ 2

Minha linha ficou assim:
#define _GSM_TXPIN_ 53

3) Remova o jumper que conecta S_TX ao pino D2 e, com um fio, conecte S_TX ao pino escolhido

A foto abaixo mostra o pino 22 sendo usado, só para facilitar o enquadramento:

O problema é que por default o shield se comunica com o arduino através de uma porta serial virtual criada pela biblioteca SoftwareSerial nos pinos D2 e D3, porém por alguma razão o shield não consegue usar o pino D2 do Mega para isso. Note que o shield tem previsão para usar a porta serial “real” em D0 e D1, mas isso conflitaria com a comunicação do Arduino com a porta USB. Só dá para usar a porta serial real em situações bem controladas.

Procedimento básico de teste

  1. Coloque um cartão SIM no slot sob o shield;
  2. Encaixe o shield no Arduino;
  3. Conecte o plug de alimentação externa ao arduino;
  4. Aperte o botão S_PWR por um segundo. O LED STA deve acender e o LED NET comecará a piscar. Observe o ritmo das piscadas. Se estiver piscando uma vez a cada 3s, o shield está pronto para estabelecer comunicação com a rede celular;
  5. Supondo que você tenha acesso à internet pelo chip escolhido, rode o exemplo GSMSHIELD->GSM_GPRSLibrary_AT. Se o shield conseguir estabelecer comunicação GPRS, você verá algo assim na porta serial:

—————————-————————————————————-
GSM Shield testing.

status=READY
TEST
status=ATTACHED

189.119.98.144

Number of data received:
0

Data received:

HTTP/1.0 302 Found
Location: http://www.google.com.br/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=88974c4a4ce7d358:FF=0:TM=1356638512:LM=1356638512:S=7ZrafKBfjFkjdNiU; expires=Sat, 27-Dec-2014 20:01:52 GMT; path=/; domain=.google.com
Set-Cookie: NID=67=M3yKlvZcLBDQf7zPokAkH8yuKfs6g3sugEclhXF3xOXadcRkBrcIwYXLk_9iCdHZys6DcFwP20NDYU3VMzoidFGJJyP3cfirxhaw63ly4wdRWOOdfLi4fBUcCRYe8Ec5; expires=Fri, 28-Jun-2013 20:01:52 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP=”This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info.”
Date: Thu, 27 Dec 2012 20:01:52 GMT
Server: gws
Content-Length: 222
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

<HTML><HEAD><meta http-equiv=”content-type” content=”text/html;charset=utf-8″>
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF=”http://www.google.com.br/”>here</A>.
</BODY></HTML>

CLOSED

——————————————————————————–

Para enviar SMS

Cuidado! Certifique-se de usar um chip de uma operadora que cobre barato por SMS enviado, como o TIM Infinity. Durante os testes você pode acabar enviando, às vezes sem saber, muitas mensagens.

Rode o exemplo GSMSHIELD->GSM_GPRSLibrary_SMS. Nos meus testes só funcionou quando eu mudei a seguinte linha:

 if (gsm.begin(2400)){

para

 if (gsm.begin(4800)){

Por default, o sketch apenas vai listar as mensagens contidas no chip. Se você quiser enviar um SMS toda vez que o arduino for inicializado, descomente as seguintes linhas:

   // if (sms.SendSMS(“34567890”, “Arduino SMS”))
  //    Serial.println(“\nSMS sent OK”);

Trocando 34567890 pelo número do telefone que vai receber o SMS.

Display

O módulo suporta o encaixa direto de módulos display Nokia 5110 (vendido separadamente) que tenham o seguinte pinout:

  • 1 – VCC
  • 2 – GND
  • 3 – SCE
  • 4 – RST
  • 5 – D/C
  • 6 – DIN (MODI/MOSI)
  • 7 – SCLK
  • 8 – LED

A ordem dos pinos de 3 a 7 (destacados em verde) não é realmente importante, porque em geral você pode escolher isso no sketch. Mas a posição dos pinos 1, 2 e 8 precisa ser como indicado.

Notar que, para economizar pinos, o pino 8 é permanentemente conectado a +VCC, por isso o sketch não poderá controlar o acendimento do backlight. Por um lado isso gera um problema de consumo, mas por outro, supostamente o display só deve ser conectado quando você estiver debugando o projeto.

Você pode usar, entre outras, a biblioteca LCD5110_Graph

Outras fontes de informação

As páginas seguintes tratam de shields diferentes, mas cada uma delas tem informação interessante, que não encontrei na página oficial, incluindo exemplos GPRS