Configurando o Arduino Mega 2560 com Shield Gsm Icomsat 1.1 SIM900

Boa noite pessoal,

Estou com dificuldade para enviar um sms utilizando o shield gsm IcomSat 1.1 SIM900, no Arduino mega 2560.

Através do monitoramento da porta serial percebo que a msg retornada é a seguinte:

ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp

Meu código está da seguinte forma:

#include <SIM900.h>
#include <SoftwareSerial.h>
//Carrega a biblioteca SMS
#include <sms.h>
 
SMSGSM sms;
 
int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];
//sim900(4, 3);
 
void setup()
{
     //Inicializa a serial
     Serial.begin(9600);
     Serial.println("Testando GSM shield...");
     //Inicia a configuracao do Shield
     if (gsm.begin(2400))
     {
       Serial.println("SIM900 PRONTO...");
       Serial.println("\nstatus=READY");
       started=true;
     }
     else Serial.println("\nstatus=IDLE");
 
     if(started)
     {
       //Envia um SMS para o numero selecionado
       //Formato sms.SendSMS(<numero>,<mensagem>)
       if (sms.SendSMS("04796622071", "Arduino MEGA 2560,SMS"))
       Serial.println("\nSMS sent OK");
     }
}
 
void loop()
{
     if(started)
     {
       //Aguarda SMS e mostra o texto no serial monitor
       if(gsm.readSMS(smsbuffer, 160, n, 20))
       {
          Serial.println(n);
          Serial.println(smsbuffer);
          delay(5000);
       }
       delay(1000);
     }
}

E o código do Cpp fui olhar e está da seguinte forma:

....

/*
This is a Beta version.
last modified 18/08/2012.

This library is based on one developed by Arduino Labs
and it is modified to preserve the compability
with the Arduino's product.

The library is modified to use the GSM Shield,
developed by www.open-electronics.org
(http://www.open-electronics.org/arduino-gsm-shield/)
and based on SIM900 chip,
with the same commands of Arduino Shield,
based on QuectelM10 chip.
*/

#include "GSM.h"
#include "WideTextFinder.h"

//De-comment this two lines below if you have the
//first version of GSM GPRS Shield
//#define _GSM_TXPIN_ 4
//#define _GSM_RXPIN_ 5

//De-comment this two lines below if you have the
//second version og GSM GPRS Shield
#define _GSM_TXPIN_ 3
#define _GSM_RXPIN_ 4
//#define _GSM_TXPIN_ 0
//#define _GSM_RXPIN_ 1

#ifdef UNO
GSM::GSM():_cell(_GSM_TXPIN_,_GSM_RXPIN_),_tf(_cell, 10),_status(IDLE)
{
};
#endif
#ifdef MEGA


GSM::GSM()
{
     _cell.begin(9600);
};
#endif

OBS: Copiei só a parte que traz a definição das portas

Já tentei diversas configurações e ainda não consegui obter sucesso.

Abaixo segue as imagens do conjunto Arduino + shield

Exibições: 4018

Responder esta

Respostas a este tópico

Uma dica: ligue uma fonte externa ao Arduino quando for usar shield GSM. Essa fonte deve ter capacidade de mais de 1A. Pode ser isso.

Verdade mauro, é altamente necessário que utilize uma fonte externa no arduino para utililizar esse shield

Boa noite Mauro,

Vou fazer isto providenciar uma fonte externa para o Arduino.

Obrigado,

Vc está dando o power e os leds de status e Net estão respondendo tudo de boa ?

teste com esse meu código que só usa o software Serial

e coloque os jumpers em 2 e 3


#include <SoftwareSerial.h>

SoftwareSerial gsm(2, 3);

void setup()
{
  gsm.begin(9600);
  Serial.begin(9600);

  Serial.println("Digite 'a' e tecle enter para enviar o sms de teste");
  Serial.println("Obs. Digite somente a letra sem as aspas simples");
}

void loop() // run over and over
{
  char comando = Serial.read();

  if (comando == 'a') {
    enviaSMS();
  }

}

void enviaSMS() {
  gsm.print("AT+CMGF=1\r"); // define o sms como modo de texto
  delay(500);
  gsm.println("AT+CMGS=\"+559293884004\"\r"); // comando para envio + número do telefone destino
  delay(500);
  gsm.println("Teste arduino\r"); // texto para a mensagem
  delay(500);
  gsm.println((char)26);// finaliza os comandos e envia o sms
  delay(500);
  Serial.println("SMS enviado com sucesso");
}

Olá Eduardo, Boa noite,

Sim os leds acendem perfeitamente.

Vou testar o seu código e amanhã lhe digo se ficou blz ou não.

De qualquer forma obrigado pela atenção!

arduino mega não permite softserial no pino 2.

vc precisa jumpear os pinos 2 com o 10 (conecte um fiozinho para ligar diretamente esses 2 pinos citados, não precisa de resistor ok)

e la no sketch, ao invés de usar SoftwareSerial gsm(2, 3), use SoftwareSerial gsm(10, 3)

se o pino 10 estiver em uso, vc pode jumpear o 2 com 50 ou 2 com 53, e lembre de mudar no sketch qual pino vc jumpeou

Boa noite imhugo,

Vou tentar fazer este jumper que vc falou.

Só uma dúvida a contagem dos pinos ali começa no zero, é isso mesmo pelo que entendi no datasheet é isso mesmo né?

Obrigado,

isso mesmo, começa no zero. 

Mas pra vc não ficar com dúvidas, veja diretamente no arduino mega. Jumpeie o D2 com o D10 (terceiro furo do primeiro conjunto de headers com o terceiro furo do segundo conjunto de headers)

Eu aqui costumo pegar um fiozinho e desemcapo as duas pontas. Depois, uma das pontas eu enrolo naquele conector macho do shield que se encaixa sobre o pino D2 do arduino e a outra ponta eu enrolo naquele conector macho do shield que se encaixa sobre o pino D10 do arduino. Cuidado pra que esse fio que vc enrola no conector macho não encoste nos pinos vizinhos

Boa tarde imhungo

Estou usando o SIM 900 da EFcom junto com arduino mega, estou utilizando os pinos 50 e 51 para a comunicação do gsm com o arduino o problema que terei que utilizar um leitor de cartão sd o qual utiliza esses pinos, alguma sugestão de outra combinação de pinagem? posso utilizar o s pinos rx 18 e tx19?

Grato

Evandro

Oi Evandro, vc precisaria então usar algum outro pino do arduino Mega que permita interrupção. Existem vários, mas as D18 e D19 não.

Veja o que diz a página oficial ( https://www.arduino.cc/en/Reference.SoftwareSerial ):

Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

Portanto, apesar de vc já estar ocupando os pinos D50 e D51, lhe resta diversas outras portas, tente a D52 ou D53 por exemplo.

Faça da Seguinte forma:

E use esse código abaixo.

Obs: Acabei de testar e funcionou perfeitamente o envio e recebimento de SMS

#include <SoftwareSerial.h>

SoftwareSerial gsm(50, 3);

void setup()
{
  gsm.begin(9600);
  Serial.begin(9600);

  Serial.println("Digite 'a' e tecle enter para enviar o sms de teste");
  Serial.println("Obs. Digite somente a letra sem as aspas simples");
}

void loop() // run over and over
{
  char comando = Serial.read();

  if (comando == 'a') {
    enviaSMS();
  }

}

void enviaSMS() {
  gsm.print("AT+CMGF=1\r"); // define o sms como modo de texto
  delay(500);
  gsm.println("AT+CMGS=\"+559293884004\"\r"); // comando para envio + número do telefone destino
  delay(500);
  gsm.println("Teste arduino\r"); // texto para a mensagem
  delay(500);
  gsm.println((char)26);// finaliza os comandos e envia o sms
  delay(500);
  Serial.println("SMS enviado com sucesso");
}

interessante essa sua forma de conectar, Eduardo.

Eu venho fazendo de uma forma mais trabalhosa, que é enrolar um fio nos pinos machos do shield, mas desse jeito que vc explicou fica mais fácil. Basta pegar um fiozinho jumper macho/femea e espetar

valeu!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço