Teste simples para o sim900

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Teste simples para o sim900

Mensagem  Admin em Qui 22 Nov - 15:49

Pessoal esse é um teste simples para o sim900 mas pode ser bastante util pois mostra como fazer o básico no arduino

ATENÇÃO VC que não gosta de LER
O Código só funciona na IDE 1.0 não funciona eu Disse não funciona na 1.01, na 1.01 ele não consegue enviar SMS pelo fato de eu não ter conseguido fazer ele dar o comando CTRL+Z

O codigo funciona da seguinte forma se vc escreve dispara no terminal ele manda um sms para o numero que vc configurou no codigo, se vc escreve disca ele disca, cancela ele cancela a chamada em curso e conecta ele conecta na rede GPRS

Só pra mostra mesmo com funciona.

ATENÇÃO VC que não gosta de LER
O terminal do arduino deve estar em NO LINE ENDING

Código:

#include <SoftwareSerial.h>


SoftwareSerial mySerial(2, 3); //RX, TX


//ligar pino 1 (placa GSM) no pino 3 ARDUINO
int powerkey =  5;
int statuspin = 6;
int pinState = 0;

String readString = String(128);
char  serIn;

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(powerkey, OUTPUT);
  pinMode(statuspin, INPUT);
 
}

void loop () {
 
  pinState = digitalRead(statuspin);
  if(pinState==LOW){
  digitalWrite(powerkey, HIGH);  // set the LED on
  delay(2000);
  digitalWrite(powerkey, LOW);
  }
leserial();
 
  if(readString == "dispara")//replaces if(readString.contains("L=1"))
          {
            mySerial.println("AT+CMGF=1");  //    Because we want to send the SMS in text mode
              Serial.println("Enviando SMS");
              delay(1000);
              mySerial.println("AT+CMGS=\"924018xx\"");  // Aqui vc coloca o numero para o qual quer enviar SMS
              delay(2000);   
              mySerial.print("O alarme disparou");
              delay(2000);           
              mySerial.write(26); //CTRL+Z
             
          }
         
  if(readString == "Conecta"){
        Serial.println("conectando");
        mySerial.println("AT+CSTT=\"claro.com.br\",\"claro\",\"claro\""); // Aqui vc configura o seu Chip
        delay(2000);
        Serial.println("Carregando Pilha TCP");
        mySerial.println("AT+CIICR");
        delay(2000);
        Serial.println("Buscando IP");
        mySerial.println("AT+CIFSR");
       
       
        }
       
  if(readString == "disca"){
        Serial.println("Discando");
        mySerial.println("ATD924018;"); //Aqui vc troca o numero do telefone
       
        }
    if(readString == "cancela"){
        Serial.println("cancelando");
        mySerial.println("ATH");
       
        }     
  readString="";     
}

void leserial(){
  // only if there are bytes in the serial buffer execute the following code
  if(Serial.available()) {   
    //inform that Arduino heard you saying something
    Serial.print("Comando: ");
   
    //keep reading and printing from serial untill there are bytes in the serial buffer
    while (Serial.available()>0){
        serIn = Serial.read();   //read Serial       
        readString += serIn;    //prints the character just read
        delay(1);
    }
   
    //the serial buffer is over just go to the line (or pass your favorite stop char)             
    Serial.print(readString);
    Serial.println();
}
}
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 36
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

duvida sobre serial monitor

Mensagem  hi1975 em Sab 1 Fev - 6:33

Olá, eu testei o codigo deste topico e funcionou no meu shield SIM900d + Arduino Leonardo.

Agora minha dúvida é a seguinte: como faço para eu mesmo digitar no serial monitor um comando, por exemplo comando AT e ler a resposta?

Gostaria de fazer uns testes com alguns comandos AT

Que codigo devo enviar pro arduino? Como devo configurar os jumpers do shield?

obrigado


hi1975

Mensagens : 16
Data de inscrição : 30/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  Admin em Sab 1 Fev - 9:29

oSerial monitor tem que estar em carriege return
Código:
#include <SoftwareSerial.h>
//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

SoftwareSerial mySerial(2, 3); //RX, TX

//ligar pino 1 (placa GSM) no pino 3 ARDUINO
int powerkey =  5;
int statuspin = 6;
int pinState = 0;
 
void setup()
{
 
  pinMode(powerkey, OUTPUT);
  pinMode(statuspin, INPUT);
  mySerial.begin(9600);              // the GPRS baud rate 
  Serial.begin(9600);                // the GPRS baud rate
}
 
void loop()
{
 
  pinState = digitalRead(statuspin);
  if(pinState==LOW){
  digitalWrite(powerkey, HIGH);  // set the LED on
  delay(2000);
  digitalWrite(powerkey, LOW);
  }
    if(Serial.available())
    {
      mySerial.write(Serial.read());
    } 
    else  if(mySerial.available())
    {
      Serial.write(mySerial.read());
    } 
http://mySerial.println("AT");
//delay(500);
http://mySerial.println("AT+IPR=9600");
//delay(100);
http://mySerial.println("AT&W0");
//delay(100);
}
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 36
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  hi1975 em Dom 2 Fev - 21:10

Amigo, eu tentei rodar o codigo sugerido por vc e o upload não vai, pois ocorre erro por causa dessas linhas abaixo:

Código:
agá te te pe: http://mySerial.println("AT");
//delay(500);
agá te te pe: http://mySerial.println("AT+IPR=9600");
//delay(100);
agá te te pe: http://mySerial.println("AT&W0");
//delay(100);

(ao invés de h t t p eu coloquei agá te te pe pois eu não estava conseguindo postar aqui no forum, mas no codigo que tentei enviar pro arduino, eu coloquei corretamente de acordo com o codigo postado pelo Tiago)

O erro que aparece aqui:

sketch_feb03a.ino: In function 'void loop()':
sketch_feb03a:43: error: duplicate label 'agá te te pe'
sketch_feb03a:45: error: duplicate label 'agá te te pe'
sketch_feb03a:47: error: expected primary-expression before '}' token
sketch_feb03a:47: error: expected `;' before '}' token


Estou usando arduino leonardo + GSM Shield SIM900d (ambos comprados aqui no projetoarduino). A IDE que estou usando é a 1.0.5

Alguma luz?

hi1975

Mensagens : 16
Data de inscrição : 30/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  Admin em Seg 3 Fev - 5:20

O forum tenta completar oq está com // comentado, com http://

Apague essas linha que estão dando erro ou simplesmente comente
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 36
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  hi1975 em Seg 3 Fev - 10:07

Olá, não estou conseguindo. Comentei / Retirei aqueles agá te te pê e nada.

Eu enviei o codigo sugerido pela IDE 1.0.5 do arduino Leonardo. O upload ocorreu com sucesso.

Abro o serial monitor em 9600 baud e carriage return

Digito ali no campo de texto o comando AT e envio. Não vejo nada de retorno.

Tento digitar outros comandos AT+alguma outra coisa e não vejo nada de retorno também

Os jumpers do shield SIM900d estão em 0~1 jumpeado e 4~5 jumpeado.

O led azul fica piscando a cada 4 segundos.

O que eu preciso é digitar eu mesmo o comando AT e ler na tela qual resposta retornou do shield. Será que meu shield veio com defeito?
Como faço isso que pretendo?


hi1975

Mensagens : 16
Data de inscrição : 30/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  Admin em Seg 3 Fev - 12:51

teste esse daqui

Código:
#include <SoftwareSerial.h>
//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

SoftwareSerial mySerial(2, 3); //RX, TX

//ligar pino 1 (placa GSM) no pino 3 ARDUINO
int powerkey =  5;
int statuspin = 6;
int pinState = 0;
 
void setup()
{
 
  pinMode(powerkey, OUTPUT);
  pinMode(statuspin, INPUT);
  mySerial.begin(9600);              // the GPRS baud rate 
  Serial.begin(9600);                // the GPRS baud rate
}
 
void loop()
{
 
  pinState = digitalRead(statuspin);
  if(pinState==LOW){
  digitalWrite(powerkey, HIGH);  // set the LED on
  delay(2000);
  digitalWrite(powerkey, LOW);
  }
    if(Serial.available())
    {
      mySerial.write(Serial.read());
    } 
    else  if(mySerial.available())
    {
      Serial.write(mySerial.read());
    } 

}
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 36
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  hi1975 em Seg 3 Fev - 13:13

Também não funcionou com esse codigo.

O serial monitor continua não retornando nenhuma resposta após eu digitar algum comando AT

Vou tentar esclarecer minha necessidade (por que eu preciso que seja retornado pra mim o resultado dos envios de comando): ao fazer upload do primeiro codigo desse topico, após eu digitar por exemplo "dispara", um SMS é enviado. Portanto, o chip SIM funciona, a fonte que uso é de 12V (2amp). Tentei usar também com 12v (5amp) e continua do mesmo jeito. Então não creio ser problema de alimentação, pois senão acho que nem enviaria um sms através do código postado no inicio do topico.

No entanto, eu vi que no codigo original é usada a função delay entre os comandos AT e julgo não ser correto dessa maneira, pois não teremos como saber se em algum momento o comando AT falhou. Poderá ocorrer também daquele delay ser insuficiente para o shield retornar um OK, talvez tenha que esperar mais para o proximo comando AT. Por outro lado, não convém elevar demais o delay "para garantir" que se dê tempo e minimizar o problema de erro. Isso é especialmente ruim caso porque num cenário onde esse sistema fosse utilizado para enviar SMS em massa o tempo seria fator crucial para o bom desempenho. Entende? Não pode ser nem muito rápido a ponto de abortar o envio do SMS por causa da rapidez no envio de comandos, nem muito lento a ponto de prejudicar a velocidade de envio de vários SMS em sequencia.

O melhor seria enviar um comando AT e, de acordo com o retorno, dar o devido tratamento (repetir o comando no caso de insucesso, ou prosseguir no caso de sucesso, por exemplo).

Porém, já que não estou sendo capaz de obter o retorno do comando AT, fico impossibilitado de de dar o devido tratamento de acordo com o retorno obtido após o comando AT,

hi1975

Mensagens : 16
Data de inscrição : 30/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  Admin em Seg 3 Fev - 13:36

pode ser que a softserial se comporte diferente no leonardo teste em um arduino uno comum
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 36
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  hi1975 em Seg 3 Fev - 13:40

vc poderia testar aí no seu laboratório usando um leonardo?

Aqui eu só comprei o seu kit que contém leonardo. Se funcionar num uno, compro de vc um.

hi1975

Mensagens : 16
Data de inscrição : 30/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  hi1975 em Seg 3 Fev - 13:59

Amigo, vc me deu uma luz ao dizer que desconfiava que o leonardo talvez se comportasse diferentemente.

Entrei no site oficial do arduino e fui na pagina do gsm shield oficial deles. Ali ele indica um link para quem tem o leonardo ou o mega.

veja: arduino.cc/en/Guide/GSMShieldLeonardoMega

No leonardo e mega, o pino 2 digital não possui capacidade de interrupção. E como o softserial na programação tenta usar o pino 2 para RX, fica impossível do leonardo receber a resposta dos comandos.

Lá na pagina oficial fala pra jumpear os pinos 2 e 8 do shield. Fiz isso no meu shield SIM900d

e no programa, eu alterei a linha: SoftwareSerial mySerial(2, 3); //RX, TX

para: SoftwareSerial mySerial(8, 3); //RX, TX

E dessa forma, tudo se resolveu. Agora consigo obter respostas ao enviar comandos AT via serial monitor

Existe alguma forma de "jumpear via software" os pinos 2 e 8 do shield sim900d ou do arduino? Isto é, há alguma maneira de fazer isso via codigo?

hi1975

Mensagens : 16
Data de inscrição : 30/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  Admin em Ter 4 Fev - 5:09

Amigo o leonardo tem 2 seriais o certo serial jumpear o shield para hardserial e usa-la para comunicar o arduino com o shield, pois a usb do leonardo é nativa e a comunicação com o pc se daria por ela.

Logico que também implicaria na mudança do código
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 36
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  hi1975 em Ter 4 Fev - 8:09

Meu nível de conhecimento ainda não me permite fazer isso. Estou mexendo nisso a apenas uma semana. Por hora, vou deixar o fiozinho interligando os pinos D2 e D8 porque assim posso aproveitar a grande maioria dos códigos exemplos disponíveis aqui no fórum ou por aí na internet. Eu mesmo ainda não vi nenhum exemplo de código que usasse a hardserial. Meu projeto prevê o uso de vários componentes e agora que já desembaracei o shield SIM900d, vou pra próxima etapa. Quando tudo estiver rodando como o projeto foi concebido, voltarei ao shield e tentarei lapidar aquilo que ficou mais ou menos. Aí sim vou tratar de ver como se faz pela hardserial. Obrigado amigo!

hi1975

Mensagens : 16
Data de inscrição : 30/01/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Teste simples para o sim900

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum