segunda-feira, 24 de setembro de 2012

Review Arduino GPRS Shield - EFCom SIM900

Introdução:

  O GPRS Shield - EFCom é muito compacto e confiável como modulo sem fio. Esse modulo GPRS Shield é compatível com todas placas Arduino. EFCom é baseado no SIM900 GPRS Module, que entrega GSM/GPRS 850/900/1800/1900MHz, com voz, MS, dados e Fax, em uma placa muito pequena e que consome pouca corrente. SIM900 é compatível com GSM/GPRS é toda feita em SMT e tem um poderoso chip processador integrado AMR926EJ-S,

   Essa placa pode ser comprada do dealextreme, por um preço muito bom, que é difícil de achar em outras lojas, a qualidade da placa é muito boa e durável. Tudo funciona assim que sai do pacote sem muitas configurações, a embalagem protege os pinos e a antena, todas placas são testadas.




O bom de comprar no DX, é porque as placas vem com a fonte de 2A, que é de extrema importância, pois quando estão fazendo chamas, recebendo SMS a corrente tem picos muito alto, e para o funcionamento perfeito o ideal é ter uma fonte de 9V e 1A, 9V pois quando esta no pico de funcionamento tem um dropout de 3V, assim não causa problemas no funcionamento do Arduino, que precisa de 5V.

O Shield é configurado e controlado via comandos AT. A placa é boa pois conta com bloco de jumpers que permitem selecionar em qual canal USART vai se comunicar com microcontrolador(D0-D3, para serial via hardware e software).
Outra coisa muito boa é a presença de um super capacitor para RTC, o real time clock pode funcionar por 1 dia sendo alimentado pelo super capacitor.
EFcom pode ser ligada usando o botão físico de S_PWR, assim como o pino digital D6 para ligar/desligar e o pino D5 para reset.


O que esta integrado:


  • Totalmente compatível com Arduino / Freaduino e Mega.
  • Porta serial livre de conexão, você pode selecionar a porta serial do hardware (D0/D1) controle ou Software porta serial (D2/D3) controlá-lo.
  • Fornecimento de energia Super capacitor para o RTC.
  • Quad-Band 850/900/1800/1900 MHz
  • GPRS multi-slot classe 10/8
  • GPRS Classe de estação móvel B
  • Controle através de comandos AT (GSM 07.07, 07.05 e EFCOM mais Comandos AT)
  • SIM Toolkit aplicação
  • Tensão: 3.1 4.8V ...
  • Baixo consumo de energia: 1,5 mA (modo sleep)
  • Temperatura de operação: -40 ° C a +85 ° C
  • Dimensão: 68.33x53.09mm (mesma dimensão do Arduino placa principal)

Antes de ligar:

  • Usar carregador 9V para o fornecimento de energia para o seu Arduino e EFCom, o carregador de 9V vem com shield comprado no dealextreme EFCom Shild. 
  • Verifique se o seu cartão SIM está desbloqueado.
  • A configuração padrão de fábrica para o GPRS UART é 19200 bps 8-N-1. (Pode ser alterado usando comandos AT).

Analisando a placa:

Zoom nos fones de ouvido e microfone(tem que usar headset), e o super capacitor para RTC:


Mostrando os pinos de USART que podem ser modificados:


SIM900, um dos mais poderosos no mercado:


Antena que acompanha compra no DX:




Bandeja de cartão SIM:


Status do led:

LEDStateFunction
StatusOffPower Off
OnPower On
NetlightOffSIM900 não esta funcionando
64ms On/800ms OffSIM900 não tem rede
64ms On/3000ms OffSIM900 tem rede
64ms On/300ms OffGPRS cmunicando

Codigos e Exemplos:

Conversando entre Computador > Arduino > SIM900 e voltando dados SI900 > Arduino > Computador:



#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);
void setup() { mySerial.begin(19200); Serial.begin(19200); }   void loop() { if(Serial.available()) { mySerial.print((unsigned char)Serial.read()); } else if(mySerial.available()) { Serial.print((unsigned char)mySerial.read()); }   }

Com esse código você pode mandar todos comandos AT para seu SIM900, e receber a resposta, agora basta olhar a lista de todos comandos, e enviar um SMS, por exemplo:

void setup()
{
  Serial.begin(19200); 
  Serial.print("\r");
  delay(1000);                
  Serial.print("AT+CMGF=1\r");  
  delay(1000);
                         
  Serial.print("AT+CMGS=\"+NUMERO DE CELULAR\"\r");                                                                                         
  delay(1000);
  Serial.print("SIM900 and Arduino say Hi!\r"); 
  delay(1000);
  Serial.print(26,BYTE); 
}
 
void loop()
{
     
}

No próximo post, vou colocar códigos comentados, explicando tudo!!



32 comentários:

  1. parabens amigo.. foi o melhor post que vi até agora sobre esse shield.. que inclusive é igual ao meu (comprado no dx hehe).. também comprei um lcd e o arduino uno.. perfeito.. parabens

    ResponderExcluir
  2. CARA vê se você pode me ajuda quero acionar cargas elétricas via sms, comprei o kit de desenvolvimento eZ430-RF2500 é uma ferramenta baseada no emulador USB para o microcontrolador MSP430, falta o modem GPRS e acho que o ideal seria GPRS SHIELD SIM900 você pode me ajudar a saber se realmente vai funciona ???
    Obrigado!

    ResponderExcluir
    Respostas
    1. Olá Tulio. Essa sua ferramente tem suporte a USART(comunicação serial RS-232)? ou então pode emular uma?
      Se seu modulo consegue comunicar via serial, ele funciona com o modem GPRS.

      abs

      Excluir
  3. Vinicius meu caso é o seguinte, comprei esse EZ430-RF2500 da texas por 200 reais, preciso fazer um projeto onde aciono cargas residenciais (uma lampada no caso) via sms, e no caso eu ia precisar compra o modem que é mais 150 reais, estou pensando em mudar e comprar o Arduíno que para ser mais simples, o que você me indica ? pode me dar uma força com este projeto ? abraços!

    ResponderExcluir
    Respostas
    1. Tulio, eu nunca tive contato com esse modulo de desenvolvimento da Texas, teoricamente se o modulo tem pinos dedicados a comunicação USART(serial) da pra fazer.

      Esses módulos GPRS usam comandos AT, o que facilita usar em diversas plataformas.

      No Arduino eu sei que da pra fazer, porque já desenvolvi aplicações em cima disso. E claro posso te ajudar sim a colocar isso pra funcionar no Arduino.

      abs!

      Excluir
    2. VINICIUS OBRIGADO!
      No caso se eu mudar para o Arduíno eu também vou precisar de um modem para se comunicar certo? no caso eu vi este modem G24 da Motorola.
      Ou você tem outra sugestão ?

      Excluir
    3. Tulio, esse modem da Motorola me parece ser um produto já bem definido e sem muita opção de modificação. Não parece ser o ideal para protótipo e desenvolvimento.

      Eu te recomendaria usar um modulo GPRS, um shield, pode ser qualquer um genérico, exemplos:

      http://www.webtronico.com/gsm-gprs-shield-sim900-arduino.html

      http://dx.com/p/gsm-gprs-sim900-module-icomsat-expansion-board-w-antenna-cable-for-arduino-blue-black-220631

      http://dx.com/p/arduino-compatible-gsm-gprs-shield-wireless-extension-board-module-w-antenna-adapter-144865

      http://produto.mercadolivre.com.br/MLB-496540603-modulo-gprs-gsm-shield-efcom-celular-para-arduino-_JM

      Excluir
    4. Entendi Vinicius, no caso estou meio por fora desse shield efcom mais no caso quando eu enviar um sms ele tem que estar conectado a internet ?
      Para o projeto via sms com este shield vou precisar do shield GSM, arduino MEGA e algo mais ?

      Excluir
    5. O serviço de SMS é independente da internet, não tem necessidade de estar conectado para enviar/receber SMS.

      Para o projeto é necessário um Arduino, pode ser o UNO mesmo, e o Shield GSM. Geralmente esse shield acompanha uma fonte de 9V 1A, que é o ideal, pois quando o modulo esta transmitindo ele consome muita corrente, e quando está idle o consumo é baixíssimo.

      Abs!

      Excluir
    6. Vinicius estou comprando o Arduíno e o Shild GSM, estou ansioso para começar a mexer no Arduíno e montar o projeto rs Agradeço muito pelo seu auxilio obrigado.

      Excluir
    7. Bacana!
      Estou montando um post aqui sobre o que vc quer fazer, talvez te ajude ;)

      Excluir
    8. Fala Vinicius,
      Cara esse post vai me ajuda e vai ajudar a tirar duvida de muita gente,
      Vai ser muito interessante pois é muito difícil achar algo na net sobre isso.Abraços

      Excluir
  4. Fala Vinicius beleza ?
    Cara comprei os componente para o projeto,
    Shild GSM / GPRS SIM 900 e o Arduino R3..
    Comprei também uma protobord novinha de 830 pontos..
    o chip que vai no modulo GSM/GPRS posso usar qual quer um ?
    Uma duvida que fiquei foi na programação, será que vai ser difícil de entender e projetar ?
    abraços

    ResponderExcluir
  5. Oi!

    Pode usar qualquer CHIP, tem que estar ativado e sem PIN, postei um codigo pesado, vou enviar um mais facil aqu pra vc para testar os comandos AT


    //Serial Relay - Arduino will patch a
    //serial link between the computer and the GPRS Shield
    //at 19200 bps 8-N-1
    //Computer is connected to Hardware UART
    //GPRS Shield is connected to the Software UART
    #include
    SoftwareSerial mySerial(2, 3);
    void setup()
    {
    mySerial.begin(19200); // the GPRS baud rate
    Serial.begin(19200); // the GPRS baud rate
    }
    void loop()
    {
    if (mySerial.available())
    Serial.write(mySerial.read());
    if (Serial.available())
    mySerial.write(Serial.read());
    }

    ResponderExcluir
  6. boa tarde vinicius, estou com problemas com a programação, precisava enviar uma mensagem ao modulo, interpreta-lá e executar a função correspondente, voce tem um programa de exemplo para este caso ?

    ResponderExcluir
    Respostas
    1. Olá Jefferson,

      esse tópico é basicamente o que você deseja:

      http://microembarcado.blogspot.com.br/2013/08/arduino-gprs-sim900-projeto-aplicado.html

      Esse final de semana vou complementar com a parte de executar uma ação, dependendo do SMS recebido.

      Excluir
  7. Vinicius bom dia,

    Qual é o programa que você esta usando para rodar essas programações ?
    Qual o significado do /n ou "" no seu outro post ?http://microembarcado.blogspot.com.br/2013/08/arduino-gprs-sim900-projeto-aplicado.html
    Valeu Abraços!!

    ResponderExcluir
    Respostas
    1. Bom dia Tulio, estou usando o próprio IDE do Arduino: http://arduino.cc/en/Main/Software

      '\n' é o carácter que significa nova linha
      ouse ja se imprimir em C++:

      cout << "oi\ntulio\nbeleza";
      a saída vai ser:
      oi
      tulio
      beleza


      O "" atribui um valor vazio para string, limpa ela, apagando dado anterior.

      flw!


      Excluir
  8. Este comentário foi removido pelo autor.

    ResponderExcluir
  9. Olá Vinícius Rodrigues.
    Muito bom seu blog. Parabéns!
    Envio SMS através de um shield GSM EFCom V1.2 e gostaria de implementar uma validação do envio. Ou seja se enviar corretamente faz uma ação e se der erro faz outra. Será que vc pode me ajudar?
    Uso esse código como base para testes:

    #include

    SoftwareSerial mySerial(2, 3); // RX, TX do Arduíno

    #define BUF_LEN 84

    char comm_buf[256];

    void setup()
    {
    mySerial.begin(19200); // the GPRS baud rate
    Serial.begin(19200); // the GPRS baud rate
    delay(2000);
    mySerial.println("AT+CMGF=1");
    delay(2000);
    Serial.println("----------------------------- ENVIA SMS ----------------------------");
    mySerial.println("AT+CMGS=\"+5527xxxxxx\"\r"); //nº do celular
    delay(1000);
    mySerial.println("TESTE linha 1"); // mensagem a ser enviada
    mySerial.println("linha 2"); // mensagem a ser enviada
    mySerial.println("linha 3"); // mensagem a ser enviada
    delay(1000);
    mySerial.write(byte(26));
    Serial.println(comm_buf);
    memset(comm_buf,'\0',BUF_LEN);
    mySerial.flush();
    delay(5000);
    Serial.println("---------------------------- F I M ----------------------------");
    }
    void loop()
    {
    }

    Obrigado!

    ResponderExcluir
    Respostas
    1. Fala rocborges!

      Na realidade é bem simples saber se o envio falhou ou não.

      Se você olhar na pagina 105 item 4.4.5, existe uma parte que mostra as resposta(+CMGS:) possíveis para o comando de enviar SMS, e s~~ao apenas duas:

      +CMGS: OK (ENVIO DE SMS OK)
      +CMS ERROR: (ENVIO FALHOU)

      O próprio modem te da a resposta se OK ou NOK. O que voce tem que fazer é logo apos enviar o comando de SMS, fazer a leitura da resposta do modem e tratar os dados.

      Espero ter ajudado!

      Excluir
  10. Olá
    Vinícius Rodrigues, Primeiramente gostaria de lhe parabenizar pelo blog.
    Estou tentando desenvolver um projeto que ao enviar uma sms para um shield gsm sim900 efcon v1.2 ele a execute; por exemplo: ligar lampada, porem estou começando agora com arduinos e não tenho tanto conhecimento com programações, estou utilizando este exemplo da internet.
    (http://labdegaragem.com/profiles/blogs/tutorial-como-fazer-acionamentos-com-o-celular-shield-via-sms)
    Pois não estou conseguindo modifica-lo para o meu shield, vc teria alguma sugestão? Obrigado.

    ResponderExcluir
    Respostas
    1. Olá Joanderson, obrigado fico feliz que tenha gostado do blog.

      Sobre seu problema, eu fiz alguns posts passo a passo como comunicar com SIM900, esta bem explicativo e facil de seguir, de uma olhada:

      http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-introducao-i.html

      e

      http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-mandando-sms.html


      abs!

      Excluir
  11. Vinicius.. eu rodei o primeiro código que voce postou ali.. tive um retorno de varios zeros no serial monitor.. tenho a impressao que isso seja algo bom hehe.. foram em torno de 10 zeros..
    ai quando coloquei pra rodar o codigo de baixo, nao consegui enviar o sms hehe
    void setup()
    {
    Serial.begin(19200);
    Serial.print("\r");
    delay(1000);
    Serial.print("AT+CMGF=1\r");
    delay(1000);

    Serial.print("AT+CMGS=\"14997xxxxxxx5\"\r");
    delay(1000);
    Serial.print("SIM900 and Arduino say Hi!\r");
    delay(1000);
    Serial.print(26);
    }

    void loop()
    {

    }

    alguma luz pra me dar? hehe

    ResponderExcluir
    Respostas
    1. Oi Vanderlei, verifique baud rate do seu Serial Monitor e baud rate em que sua placa GSM trabalha. Esse erro acontece por estar com velocidade diferente, gerando espúrios.

      Att,

      Excluir
  12. Vinicius.. coloquei baud 19200 no serial monitor e foi definido no código o serial.begin e o myserial.begin por 19200.
    após isso, rodei o código, após dar o upload cliquei para ligar a placa e tive o retorno 2552552552552552552552550
    o numero 0 aparece 1 segundo após todos os 255.. os 255 aparecem de uma só vez.. acredito que os 255 seja a condição print do IF e o numero 0 é o print da condição ELSE.

    ResponderExcluir
    Respostas
    1. Talvez, isso vai depender do que seu programa esta fazendo, sobre as taxas esse GSM descrito acima funciona com 19200 por padrão, o arduino voce pode colocar a velocidade que bem entender, basta modificar tb no serial monitor.

      Verifique os jumpers da placa que selecionam qual porta vai ser TX/RX e verifique tb no programa do arduino se esta compatível SoftwareSerial mySerial(2,3); os pinos da placa devem estar assim:

      http://2.bp.blogspot.com/-QFbFkbIRHg8/UjJ4oRiSbdI/AAAAAAAAErA/ncFjqlFePh0/s320/foto+(2).JPG

      Esse post é mais ocmpleto:

      http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-introducao-i.html

      Excluir
    2. pior que eu ja fiz e desfiz de tudo que é jeito aqui hehe.. relacionado a todos seus posts.. quando coloco para ver se esta disponivel aparece os yyyyyyy, mas não consigo transmitir o sms..
      hehe.. ta dificill hehe
      os pinos TX/RX estao conforme a print.. testo o chip no celular e da certo.. nao ta com o pin bloqueado.. =/

      Excluir
  13. fala parceiro,

    se esta aparecendo yyyyyyy é um bom sinal. Tente enviar outros comandos para modem, exemplo, AT+CSQ, ou somente AT e veja as respsotas

    ResponderExcluir
    Respostas
    1. Vinicius.. conversei com um professor meu e ele disse que a velocidade da comunicação também pode influenciar.. por ser comunicação serial ele me disse para tentar baixar esta velocidade para o baud 9600 ou até menor..
      isso realmente pode fazer a diferença?
      definindo
      Serial.begin(9600);
      mySerial.begin(9600);
      e usando o 9600 no monitor?

      Excluir
    2. No Serial Monitor do Arduino não faz diferença nenhuma, pode ser qualquer velocidade, por usar CDC e ter um chip dedicado pra isso(16U).

      O que realmente importa é a velocidade do seu modem GSM, eu já peguei vários modens de varias marcas diferentes, e o baud rate padrão do SIM900 variava, a minha sugestão é a seguinte, teste o mySerial com 2400, 4800, 9600, 19200, 38400.

      Para mudar baud rate do seu modem existe o seguinte comando:

      AT+IPR=BAUD_RATE
      Logo depois envia comando "Enter" ou "0x0D"

      Porem ele so funciona se você já estiver estabelecido uma conexão(já conseguir enviar comandos e ser interpretado)

      Excluir