quinta-feira, 8 de março de 2018

Testando o módulo GPRS SIM800

    Este tutorial serve unicamente para prepara o módulo SIM800 para receber comandos AT e verificar se o mesmo está funcionando e se comunicando com a rede telefônica.

Materiais necessários:
1x Cartão SIM com crédito
1x Arduino de qualquer tipo
1x Modulo GPRS SIM800
1x jumpers
1x Fonte externa + regulador de tensão 5V

Passos:
1. Inserir o cartão SIM ao módulo
2. Conectar o modulo ao Arduino
3. Fazer o upload do código para o Arduino
4. Testar conexão entre Arduino e SIM800
5. Testar conexão entre SIM800 e rede de telefonia celular

1.Inserir o cartão SIM no módulo
    Insira o cartão SIM no módulo como na imagem a seguir:



2. Conectar o modulo ao Arduino usando o seguinte diagrama de pinos
Obs: A alimenção 5V  do modulo deve ser preferencialmente externa para evitar que o SIM800 reinicie quando conectar a rede de telefonia celular.
Obs2: Os pinos 10 e 11 serão utilizados pela biblioteca SoftwareSerial para simular os pinos TX e RX. Precisamos disso pois os pinos TX e RX do Arduino serão utilizados para enviar os comandos AT.
Diagrama de pinos
3. Fazer o upload do código para o Arduino
    Fazer o upload do seguinte código para o Arduino:

#include < SoftwareSerial.h >


#define TX_PIN 10
#define RX_PIN 11


SoftwareSerial softSerial(TX_PIN, RX_PIN);


void setup(){
  //Terminal para debug
  Serial.begin(9600);
  while (!Serial);


  //Comunicacao com o SIM800L
  softSerial.begin(4800);
  delay(1000);


  Serial.println("Debugging SIM800L!");
}


void loop(){
  //Print dos dados recebidos pelo modulo
  if (softSerial.available()){
    Serial.write(softSerial.read());
  }


  //Envio de comandos AT para o modulo
  if (Serial.available()){
    softSerial.write(Serial.read());
  }
}


4. Testar conexão entre Arduino e SIM800
    1. Abra o Terminal Monitor do Arduino IDE
    2. Seleciona a velocidade de Baud rate para 9600 e coloque o tipo de sufixo como "Nova linha"
    3. Digite AT na entrade de texto na parte superior do terminal e clique em Enviar (ou aperte enter)
    4. Se o modulo estiver dividamente conectado e alimentado será retornado a mensagem "OK"

5. Testar conexão entre SIM800 e rede de telefonia celular
    Para testar a conexão com a rede de telefonia celular insira os códigos da tabela a seguir e confirme se a resposta coincide com o esperado.
    Caso todos os códigos sejam executados sem erro e no final seja possível ver a string lida do servidor então a configuração do SIM800 com conexão com a internet está funcionando perfeitamente.

Comando AT Resposta Esperada Descrição
AT+SAPBR=3,1,"Contype","GPRS"OKDefine o tipo de conexão para GPRS
AT+SAPBR=3,1,"APN","claro.com.br"OKVai conectar com a rede de telefonia celular.
O APN depende da operadora.
CLARO:claro.com.br
TIM:timbrasil.br
VIVO:zap.vivo.com.br
OI:gprs.oi.com.br
AT+SAPBR =1,1OKAtiva o GPRS (Só precisa ser executado uma vez)
AT+SAPBR=2,1+SAPBR:1,1,"100.115.10.37"

OK
Consulte se a conexão for configurada corretamente, se o retorno for um endereço IP, então podemos prosseguir
AT+HTTPINITOKAtiva o modo HTTP (Só precisa ser executado uma vez)
AT+HTTPPARA="CID",1OKConfigura o identificador de perfil HTTP
AT+HTTPPARA="URL","http://api.thingspeak.com/channels/44232/feed/last.json"OKDefine a URL que iremos acessar
AT+HTTPACTION=0+HTTPACTION: 0,200,98

OK
Inicia o download de dados via HTTP GET
AT+HTTPREAD+HTTPREAD: 98
{"field1":"2380.4797000000","field2":"14072","created_at":"2015-10-08T12:37:08Z","entry_id":55492}

OK
Printa os dados lidos da via HTTP GET


Código para fazer teste de conexão automatizado (OPCIONAL)
    Para executar a inicialização automática digite * e tecle enter no terminal monitor.

#include < SoftwareSerial.h >

#define TX_PIN 11
#define RX_PIN 10
#define TIMEOUT 5000

SoftwareSerial softSerial(TX_PIN, RX_PIN);

int timeout(long _delay){
 int flag = 0;//marca se o modulo respondeu antes do timeout Acabar
 _delay = _delay/50;
 for(int i = 0; i<50 font="" i="">
  if(!softSerial.available())delay(_delay);
  else flag = 1;
  Serial.print('.');
 }
 Serial.print('\n');
 return flag;
}

void sendAtCmd(char* str){
  int i = 0;
 softSerial.println(str);

 //aguarda a resposta do modulo
 while (!softSerial.available()){
    delay(500);
    i++;
    if(i>=TIMEOUT/500){
      Serial.print(str);
      Serial.println(" REACHED TIMEOUT!");
      break;
    }
 }

 Serial.print(">>");
 while (softSerial.available()){
    Serial.write(softSerial.read());
 }
}

void initSim800(){
  Serial.println("Sim800L Auto Test Running...");
  sendAtCmd("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
  sendAtCmd("AT+SAPBR=3,1,\"APN\",\"claro.com.br\"");
  sendAtCmd("AT+SAPBR=1,1");
  timeout(2000);
  sendAtCmd("AT+SAPBR=2,1");
  timeout(2000);
  sendAtCmd("AT+HTTPINIT");
  sendAtCmd("AT+HTTPPARA=\"CID\",1");
  sendAtCmd("AT+HTTPPARA=\"URL\",\"http://date.jsontest.com\"");
  sendAtCmd("AT+HTTPACTION=0");
  timeout(15000);
  sendAtCmd("AT+HTTPREAD");
  timeout(2000);
  Serial.println("Sim800L Auto Test Done!");
}

void setup(){
  //Terminal para debug
  Serial.begin(9600);
  while (!Serial);

  //Comunicacao com o SIM800L
  softSerial.begin(4800);
  delay(1000);

  Serial.println("Debugging SIM800L!");
}

void loop(){
  //Print dos dados recebidos pelo modulo
  if (softSerial.available()){
    Serial.write(softSerial.read());
  }

  //Envio de comandos AT para o modulo
  if (Serial.available()){
    char ch = Serial.read();
    if(ch == '*'){
        initSim800();
    }
    else softSerial.write(ch);
  }
}


Possíveis problemas:
1. O comando AT não retorna nada e os comandos estão se acumulando exemplo de saída: ATatatAT.
Solução: Provavelmente o tipo de sulfixo está selecionado como "Nenhum fim-de-linha". Confirme se o tipo de sulfixo esta em "Nova linha". Os outros tipos também funcionam.

Fontes:
[Manual SIM800]
http://img.filipeflop.com/files/download/SIM800+Series_AT+Command+Manual_V1.09.pdf
[Conexão GPRS com HTML]
http://www.raviyp.com/embedded/194-sim900-gprs-http-at-commands
[APNs do Brasil]
https://www.arduinoecia.com.br/2015/11/acessar-internet-arduino-gsm-shield-sim900.html
[Como ter acesso a internet com módulo GPRSSIM900]
https://www.arduinoecia.com.br/2015/11/acessar-internet-arduino-gsm-shield-sim900.html

2 comentários:

  1. ola, vc tem um codigo para que o sim800l conecte com a internet e envie dados pelo metodo get para um index.php?

    ResponderExcluir