Boa noite pessoal,

Estou tentando ler um sms usando o shield SIM900 e o Arduino mega 2560.

Porém eu só recebo a seguinte msg:

.....

>>>>> Celular Shield Inicializado /p>

AT+CMGF=1

OK
AT+CNMI=3,3,0,0

OK

Acima msg antes de chegar o sms que enviei

Abaixo msg exibida no monitor serial após a chegada do sms que enviei

+CMTI: "SM",1

Alguém já teve esta situação antes que possa me ajudar??

Obrigado,

Exibições: 2922

Responder esta

Respostas a este tópico

pra ver as mensagens que estão armazenadas no chip, o comando é:
AT+CMGL="ALL"


exemplo de resultado esperado:

+CMGL: 1,"REC READ","+31628870634",,"11/01/09,10:26:26+04" This is text message 1
+CMGL: 2,"REC READ","+31628870634",,"11/01/09,10:26:49+04" This is text message 2
OK

Depois, se vc quiser apagar a mensagem 1, envie o comando:

AT+CMGD=1

Olá Imhugo,

Eu estou utilizando o ReceiveSMS da biblioteca SerialGsm.ha, se o retorno do método for verdadeiro então eu imprimo a message, chamando o método Message da biblioteca.

Desta maneira que vc está dizendo é efetuando uma comunicação direta é isso??

Obrigado,

isso mesmo, eu citei comandos para serem enviados diretamente pro shield via comandos AT

faça upload do seguinte sketch para ser possível enviar comandos AT:


#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); //informe corretamente as portas rx/tx

void setup()
{
mySerial.begin(9600); // velocidade do GPRS shield
Serial.begin(9600); // velocidade do serial monitor
Serial.println("ajuste o serial monitor em CARRIAGE RETURN");
}

void loop()
{
if (mySerial.available()) { Serial.write(mySerial.read()); }
if (Serial.available()) { mySerial.write(Serial.read()); }
}

Dessa forma não vai funcionar no arduino mega, o pino 2 não pode ser usado como RX, vc deve ligá-lo assim:

no seu código vc vai deixar assim:

SoftwareSerial gsm(50, 3);

isso mesmo, é por isso que eu coloquei no comentário "informe corretamente as portas rx/tx"

precisa também usar o comando correto, que seria:

 

SoftwareSerial mySerial(50, 3);

e não SoftwareSerial  gsm(50,3)

(isso se for usar a porta 50 realmente)

Boa tarde Pessoal,

Então efetuei estes testes, e a configuração que o Eduardo passou eu já havia feito,

Pois utilizo a mesma configuração de pinos para envio de sms, o que ocorre perfeitamente.

Já para leitura não consigo concluir sempre me ocorre a mensagem que citei, ou seja +CMTI: "SM",1

vc fez upload do sketch que te mostrei?

conseguiu enviar comandos AT pro seu shield através do serial monitor?

esquece por enquanto o sketch que usa a biblioteca SerialGsm.h

faça do jeito que estou falando, pois só assim vc conseguirá descobrir onde está o problema através de eliminação.

portanto, siga os passos:

1) envie o sketch que eu te falei, fazendo as devidas correções no trecho onde se informa o rx/tx

2) abra o serial monitor e envie um simples comando, como apenas AT e veja se o shield te responde com OK

3) assim que vc perceber que o shield está respondendo, envie o comando AT+CMGL="ALL" (serve para ver as mensagens que estão armazenadas no chip)

imhugo,

acredito que o buffer de sms do SIM dele está cheio, por isso não está mostrando a msg recebida.

OtyRS tente como o imhugo falou

Boa noite pessoal

Efetuei os testes,

Com a pinagem conforme a configuração que você mandou Eduardo, e passando os comandos que o Imhugo colocou ali em cima.

:( infelizmente ainda não consegui sucesso, consigo enviar sms mas não ler.

Enviei os comandos conforme instrução, mas o modem não responde nem OK  rs....:)

Segue abaixo a imagem dos pinos:

// testa com esse código:

#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(50, 3);

// buffer de string para a mensagem do GPRS
String msg = String("");
// Defina a 1 quando o próximo GPRS contém a mensagem de SMS
int SmsContentFlag = 0;

// Pin do LED para ligar ou desligar dependendo da mensagem recebida
int ledPin = 13;
 
void setup()
{
  mySerial.begin(9600);     
  Serial.begin(9600);                

  pinMode( ledPin, OUTPUT );
  digitalWrite( ledPin, LOW );
}
 
void loop()
{
    char SerialInByte;
     
    if(Serial.available())
    {
       mySerial.print((unsigned char)Serial.read());
     }  
    else  if(mySerial.available())
    {
        char SerialInByte;
        SerialInByte = (unsigned char)mySerial.read();
        
        //Para Arduino IDE monitor
        Serial.print( SerialInByte );
        // Se a mensagem termina com <CR> então processar a mensagem
        if( SerialInByte == 13 ){
          // Armazenar o char para o buffer de mensagem
          ProcessGprsMsg();
         }
         if( SerialInByte == 10 ){
            // Skip Line feed
         }
         else {
           // armazenar o caractere atual no buffer de string de mensagem
           msg += String(SerialInByte);
         }
     }   
}
void ProcessSms( String sms ){
  Serial.print( "ProcessSms for [" );
  Serial.print( sms );
  Serial.println( "]" );
 
  if( sms.indexOf("Liga") >= 0 ){
    digitalWrite( ledPin, HIGH );
   // Serial.println( "LED IS ON" );
   // return;
  }
  if( sms.indexOf("Desliga") >= 0 ){
    digitalWrite( ledPin, LOW );
  //  Serial.println( "LED IS OFF" );
  //  return;
  }
}
// Definindo modo de texto para as mensagens
void GprsTextModeSMS(){
  mySerial.println( "AT+CMGF=1" );
}

void GprsReadSmsStore( String SmsStorePos ){
  // Serial.print( "GprsReadSmsStore for storePos " );
  // Serial.println( SmsStorePos );
  mySerial.print( "AT+CMGR=" );
  mySerial.println( SmsStorePos );
}

// Limpar o buffer de mensagem do GPRS
void ClearGprsMsg(){
  msg = "";
}

// Interpretar a mensagem do GPRS e agir de forma adequada
void ProcessGprsMsg() {
  Serial.println("");
  Serial.print( "GPRS Message: [" );
  Serial.print( msg );
  Serial.println( "]" );
  ProcessSms( msg );
  ClearGprsMsg();
  SmsContentFlag = 0;
}

Opa Eduardo, boa noite,

Então rodei o código carreguei para o Arduino mega,

e os resultados seguem abaixo:


ÿÿÿÿÿÿÿÿ
GPRS Message: [ÿÿÿÿÿÿÿÿ]
ProcessSms for [ÿÿÿÿÿÿÿÿ]

RDY
GPRS Message: [ RDY]
ProcessSms for [ RDY]


GPRS Message: [ ]
ProcessSms for [ ]

+CFUN: 1
GPRS Message: [ +CFUN: 1]
ProcessSms for [ +CFUN: 1]


GPRS Message: [ ]
ProcessSms for [ ]

+CPIN: READY
GPRS Message: [ +CPIN: READY]
ProcessSms for [ +CPIN: READY]


GPRS Message: [ ]
ProcessSms for [ ]

Call Ready
GPRS Message: [ Call Ready]
ProcessSms for [ Call Ready]


GPRS Message: [ ]
ProcessSms for [ ]

+CMTI: "SM",5
GPRS Message: [ +CMTI: "SM",5]
ProcessSms for [ +CMTI: "SM",5]

Tem um detalhe que talvez vale ressaltar é que não estou utilizando fonte externa para energisar o shield nem o Arduino, estou energizando ambos com a alimentação via USB, ou seja o mesmo cabo que estou utilizando para comunicar com o notebook.

Observei nas últimas mensagens que ao que me parece há 5 mensagens armazenadas no chip, pois anteriormente a mensagem de retorno, era +CMTI: "SM",1 e agora é +CMTI: "SM",5 .

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço