sábado, 7 de setembro de 2013

Arduino GPRS - SIM900, Introdução I

Olá pessoal!

Bom, pelo que eu vi, comecei errado os estudos sobre o shield Arduino GPRS - SIM900, vou começar do básico do básico, fazer a comunicação Arduino <-> SIM9000. Depois disso vou dar seguimento em outros tópicos simples, que juntos formam uma aplicação complexa e poderosa.

Esse primeiro tópico mostra a comunicação com o modulo, isso deve ser feito serialmente, não importa forma, pode ser via bluetooth, computador ou usar o arduino para fazer essa conversa. O que acontece é o seguinte, o Atmega328, que é o microcontrolador usado na placa do Arduino UNO desse exemplo, possui porta serial já implementada por hardware, ou seja essa portas tem essa opção, alem de funcionar também como entrada/saída.
Dessa forma enviamos uma mensagem serial do computador ao Arduino, que interpreta essa leitura e envia para o modulo SIM900, o modulo SIM900 responde e envia ao Arduino, que por sua vez envia a nossa tela no computador. Para ficar mais claro la vai um esquema!




Dessa forma vamos usar o seguinte programa:



  1. #include <SoftwareSerial.h> //inicia biblioteca serial via software
  2. SoftwareSerial mySerial(23); // atribui os pinos 2 e 3 como tx rx respectivamente
  3. void setup()
  4. {
  5. mySerial.begin(19200); // taxa de comm. com SIM900
  6. Serial.begin(19200); // taxa de comm. com Arduino-PC
  7. }
  8. void loop()
  9. {
  10. if (mySerial.available()) // serial do SIM900 disponivel?
  11. Serial.write(mySerial.read()); // escrevo o que recebi do Arduino-PC no SIM900
  12. if (Serial.available()) // porta serial do Arduino-PC disponivel?
  13. mySerial.write(Serial.read()); // escrevo o que recebi do SIM900 no  Arduino-PC
  14. }

Isso gravano no Arduino vamos aos testes. Minha placa SIM900 requer que eu precione o botão PWR(liga) ou então envie o comendo de ligar via serial. Nesse caso estamos fazendo o mais simples possível, ligando o modulo na mão mesmo apertando o botão.

Feito isso, continuando na parte mais cru que depois pode ser melhorada via software vamos mudar as configuração da comunicação serial do programa do arduino com a placa:





Modificar taxa de comunicação entre Arduino-PC para 19200, a da placa SIM900 é de fabrica 19200, o que pode ser mudado via comandos AT se necessário. Ativar NL(newline) e CR(carriage return) ou ambos como na imagem.

Ótimo! estamos prontos para conversar com modulo SIM900!
Vamos testar com um comando AT+CSQ , esse comando mostra taxa do sinal de rede, mais informações sobre todos comandos



Enviando o comando via serial:





Perfeito, estamos comunicando com nosso modulo !
Existem milhares e milhares de comando AT, é uma boa olhar o PDF e ver como funciona a sintaxe de comunicação, e com esse programa podemos testar os comandos cru, enviando ao modem e vendo a resposta no computador.

IMPORTANTE: alimente seu modulo com 9V/12V e uma fonte capas de fornecer 1A-1.5A no MINIMO, o modulo consome baixa corrente em modo standby POREM ao comunicar com a rede o pico de corrente pode chegar a 1A!!



Bom é isso ai, partindo do simples, e básico, daqui a pouco vem pedreira: ler pagina na web e executar ação, fazer/receber chamadas e SMS...
Podem deixar dicas e perguntas que tento responder nos próximos posts!

12 comentários:

  1. Vinicius.. copiei o seu código.. liguei a placa, ela da umas piscadinhas em azul nos leds NET e STA, acima do power.. mas depois de piscar, somente a luz do power fica acesa.. tento enviar o comando AT+CSQ mas nao obteho nenhuma resposta.. tem uns outros códigos que voce disponibilizou aqui no blog em posts anteriores e ele responde..
    sera que estou fazendo algo errado?
    se eu clico novamente o botao s_pwr para ligar, aparece esses caracteres: ÿÿÿÿÿÿÿÿ
    abraço

    ResponderExcluir
    Respostas
    1. Se esta aparecendo os caracteres ÿÿÿÿÿÿÿÿ é bom, pois isso mostra o inicio da conexão d SIM900.

      Acho que vale a pena ver quais portas esta usando como TX e RX pra comunicar com o SIM900 no meu caso estou usando DO e D1.

      Sobre os LEDs, é isso mesmo, cada intervalo que pisca tem um significado:

      busque por "Status do led"
      http://microembarcado.blogspot.com.br/2012/09/review-arduino-gprs-shield-efcom-sim900.html

      É bom olhar se o chip usado esta funcionando e não possui PIN e olhar a taxa de transferência (baudrate) da comunicação serial, o padrão é 19200

      Excluir
    2. pra te falar a verdade eu comprei o chip e nem testei.. peguei o numero, coloquei credito e nem me atentei para ver se realmente esta funcionando.. vou fazer esse teste..
      quanto ao TX RX, acho que o meu fica igual ao seu.. é o mesmo arduino e o mesmo shield gprs (se ainda for aquele da postagem de 2012 que voce fez.. comprado no deal extreme).
      Se não for definido por código, acredito que seja padrão para as placas, ou nao? hehe
      no caso do LED, ele só pisca assim que eu clico para ligar o shield.. ai ele pisca o netlight e depois para.. fica somente o led power ligado..
      se eu clicar para ligar novamente ai aparece os y la e pisca de novo, mas ai ja para de piscar..
      ele nao fica aceso e nem pisca mais.. =/

      Excluir
    3. TX e RX da pra escolher pelos pinos DO D1 D2 D3 D4 que estão na placa GSM, são pinos físicos, jumpers(amarelos) que podem ser interligados.

      Ao ligar o modulo é isso mesmo que acontece com os leds

      Excluir
    4. agora encontrei o TX DX, coloquei como TX o D0 e o RX como D1.. agora preciso tirar o PIN do chip que eu acho que eh por isso que eu ainda nao consegui mandar o sms.. no serial monitor aparece os print certinho dos comandos e tal.. mas nada de enviar o sms..

      Excluir
  2. eu consigo enviar fotos para meu celular através do sim 900?

    ResponderExcluir
    Respostas
    1. Oi,

      Teoricamente você consegue enviar qualquer tipo de arquivo. Visto que o SIM900 nos comandos AT existe uma parte especifica para envio de dados via FTP e HTTP.

      Excluir
  3. Eu de novo Vinicius.... kkkk

    Eu ligo meu arduino e o sim900 pelo USB, copio esse codigo de programacao , altero o baud, e coloco as jumpers do sim900 em S_RX D1 e o S_TX em D0...

    e mesmo assim nao acontece nada ele nao responde pelo monitor serial nem nada ... sabe o que pode ser?

    Obrigado

    ResponderExcluir
    Respostas
    1. Assim é a posição dos jumpers:

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

      A placa que esta usando qual é? o baud rate pode variar de modelos para modelos.

      Excluir
    2. Vale a pena verifica o par TX/RX se esta conectado corretamente tb, alem da definição no codigo para SoftwareSerial

      Excluir
  4. Vinicius agora esta me aparecendo este erro quando colo este codigo

    avrdude: stk500_getsync(): not in sync: resp=0x00

    o que pode ser ?

    ResponderExcluir
  5. Olá, Vinicius, eu fiz uma adaptação ao seu código:
    #include
    SoftwareSerial mySerial(2,3);


    void setup()
    {
    mySerial.begin(19200);
    Serial.begin(19200);
    Serial.println("configurou");
    }

    void loop()
    {
    if(Serial.available())
    {
    mySerial.print((unsigned char)Serial.read());
    Serial.println("recebeu comando");
    }
    else if(mySerial.available())
    {
    Serial.print((unsigned char)mySerial.read());
    Serial.println("Enviou comando para arduino");
    }

    }
    eu envio o comando "AT" ele me responde 4 vezes "recebeu comando", porem não me retorna nada mais do que isso, os pinos do tx e rx estão ligados corretamente, a caixa serial do arduino esta configurada igual vc colocou, o que pode ser?
    só não consigo me comunicar via serial com ele, mais ele me envia sms normalmente!

    ResponderExcluir