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
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
- Coloque um cartão SIM no slot sob o shield;
- Encaixe o shield no Arduino;
- Conecte o plug de alimentação externa ao arduino;
- 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;
- 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
Muito obrigado pela sua ajuda.
Me ajudou muito em um projeto importante, eu estava quebrando a cabeça com isso, Deus continue te abençoando.