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,
Tags:
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()); }
}
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)
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....:)
// 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 .
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por