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
Comentários