Reiniciar configurações Shield SIM900

Tenho uma shield SIM900 exatamente igual essa aqui: http://www.elecfreaks.com/wiki/index.php?title=EFCom_GPRS/GSM_Shield#Step_2:_Sending_a_text_message_.28SMS.29

Meu problema é que ela não funciona nada. Tudo que consta ai nesse manual não funciona, isso porque alterei o baud rate para um valor e ela nunca mais voltou a funcionar.

baud rate por padrão é 19200, mas mesmo alterando isso em minha serial os valores lidos são caracteres inválidos. Ela não faz mais ligação nem envia SMS. Alguém sabe como reiniciar essa shield para os valores padrões? Ou pelo menos configurar o mySerial.begin(19200); para o valor certo?

O exemplo abaixo mostra meu código que não funciona mais...

void setup()
{
  mySerial.begin(19200);               // the GPRS baud rate
  Serial.begin(19200);                 // the GPRS baud rate
  mySerial.print("\r");
  delay(1000); 
  mySerial.print("AT+CMGF=1\r"); 
  delay(1000);
  mySerial.print("AT+CMGS=\"+918446043032\"\r"); 
  delay(1000);
  mySerial.print("teste"); 
  delay(1000);
  mySerial.write(26);
}

void loop()
{
}

Tens algum conversor FTDI232 por ai?
O meu conselho e tu esqueceres agora o arduino e ligares o teu modem directamente usando o ftdi232, ligando ao putty por exemplo e testares a comunicação por la.Ao abrires o putty na Com certa de escreveres at e deres enter ele tem de te devolver um ok.
Se dizes que ele apenas devolve carateres estranhos e porque o baud esta errado.Com o putty basiscamente tentas em todos as velocidades ate achares o baud correcto
Se não tiveres um conversor separado usa o do próprio arduino, se o teu micro der para remover arranca o fora e usas os pinos RX e TX para ligar ao modem.
Outro problema que podes estar a ter é que essa board tem uns jumpers para assim poderes escolher qual sao os pinos que vais usar na NewsoftSerial.
Ja os confirmaste a ver se batem certo com o teu código

 mySerial.begin(19200);               // the GPRS baud rate

Em que pinos iniciaste a mySerial?

Meu código está na porta 2 e porta 3

SoftwareSerial mySerial(2, 3);

Esse procedimento que você disse, com relação a remover o microcontrolador (ATmega328), nunca realizei, sei que é possível remover pois tenho um arduino uno. Depois de remover devo ligar a placa normalmente? Basta encaixar ela, como uma shield, e testar via PuTTY todos os baud corretos?

Se tens um uno removes entao o microcontrolador com muito jeitinho para nao danificares os pinos e arruma-o.Depois encaixas o modem por cima do uno e configura os jumpers para usar os pinos TX e RX (ja nao colide com o AVR pois removeste-o).
Depois abres o putty e escolhes a porta serie que tambem era atribuida ao uno.
No baud vais testando.Ao fim de abrires a porta descreves AT e depois enter.Se tiveres o baud correcto deves receber um OK na janela do putty.Se o baud estiver mal tens de repetir ate achares o correcto.

Caramba, funcionou perfeitamente! Não sabia que isso era possível! Testei uns 15 códigos e no último aceitei o baud, hehe. Valeu mesmo a ajuda amigo, salvou meu dia.

Para aproveitar o tópico, essa shield não funciona no Arduino Mega 2560, de acordo com a documentação ele é compatível com esse modelo, porém não está funcionando. De acordo com o que achei na internet, pra ele funcionar preciso de lib e mudar os pinos RX e TX. Mas não é possível usando o código abaixo fazer funcionar no Mega? Só mudando o RX e TX?

#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(2, 3);
 
void setup()
{
  mySerial.begin(19200);               // the GPRS baud rate   
  Serial.begin(19200);                 // the GPRS baud rate   
}
 
void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());  
 
}

Óptimo fico feliz por ajudar.Se o teu objectivo é usar um mega nao necessitas de usar portas virtuais, pois o mega tem 3 Portas fisicas.
Basicamente sera so orientar os jumpers para usarem esses pinos.

Serial: 0 (RX) and 1 (TX); Serial 1: 19 (RX) and 18 (TX); Serial 2: 17 (RX) and 16 (TX); Serial 3: 15 (RX) and 14 (TX). Used to receive (RX) and transmit (TX) TTL serial data. Pins 0 and 1 are also connected to the corresponding pins of the ATmega16U2 USB-to-TTL Serial chip.

Vamos ver se entendi.Mudei os jumpers para 0 (RX) and 1 (TX) como na foto abaixo. Depois alterei o código para:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(0, 1);
 
void setup()
{
  mySerial.begin(19200);
  Serial.begin(19200); 
}
void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
   mySerial.write(Serial.read());  
}

Enviei o código e ele não funcionou :frowning: Me enganei com algo?


Mudei os jumpers para 0 (RX) and 1 (TX) como na foto abaixo

O teu pc para comunicar com a board usa a RX0 e a TX0, logo não a podes ocupar com o modem.Por este motivo e que estavas a virtualizar outra.Como tu tens um MEGA ele tem 3 portas dai nao necessitas de virtualizar portas podes logo usar as Fisicas adicionais

void setup()
{
  Serial2.begin(19200); //Vai usar a porta Seria2 na board do MEGA que fica nos pinos 17 e 18.Pois a tua board nao chega la quando encaixada, passa uns fiozitos ...
  Serial.begin(19200);  //Porta que o teu pc ocupa para falar com a board
}
void loop()
{
  if (Serial2.available())
    Serial.write(Serial2.read());
  if (Serial.available())
   Serial2.write(Serial.read());  
}

Qual e o objectivo deste codigo?

Para aproveitar o tópico, essa shield não funciona no Arduino Mega 2560, de acordo com a documentação ele é compatível com esse modelo, porém não está funcionando. De acordo com o que achei na internet, pra ele funcionar preciso de lib e mudar os pinos RX e TX. Mas não é possível usando o código abaixo fazer funcionar no Mega? Só mudando o RX e TX?

Esse modem nao da para usar o Softserial no MEGA devido aos pinos que teem interrupçoes estarem longe e nao previstos na board do modem.

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).

Assim sendo eu optava por pela TX2/RX2 passando uns fios para a board do modem

Objetivo do código é enviar comandos AT para a shield e enviar SMS e fazer ligações. A documentação da shield é essa: http://www.elecfreaks.com/wiki/index.php?title=EFCom_GPRS/GSM_Shield

Estou começando agora com Arduino e estou me familiarizando com os termos técnicos, por isso faço muita besteira. Mas seguindo a suas dicas eu fiz o seguinte:

Fiz o upload do código que você usou no exemplo:

void setup()
{
  Serial2.begin(19200); //Vai usar a porta Seria2 na board do MEGA que fica nos pinos 17 e 18.Pois a tua board nao chega la quando encaixada, passa uns fiozitos ...
  Serial.begin(19200);  //Porta que o teu pc ocupa para falar com a board
}
void loop()
{
  if (Serial2.available())
    Serial.write(Serial2.read());
  if (Serial.available())
   Serial2.write(Serial.read());  
}

Adicionei o TX2 (16) da placa no pino S_TX (D2) da shield, depois adicionei o RX2 (17) no S_RX (D3) da shield. A imagem abaixo mostra a ligação.


Porém ao acessar o código via COM4 e rodar os comandos AT para testar, nada é retornado, devo ter errado algo :frowning:

Usei também o 17 e 18

tenta assim

void setup()
{
  Serial.begin(19200);//Porta para o teu PC
  Serial2.begin(19200); //Modem 
  Serial2.print("\r");
  delay(1000);                    
  Serial2.print("AT+CMGF=1\r"); //Modo Texto
  delay(1000);

 
  Serial2.print("AT+CMGS=\"+9XXXXXXXX\"\r");    //Coloca o teu numero de destino da SMS
  delay(1000);
  Serial2.print("OLA sou o modem \r");   //Mensagem
  delay(1000);
  Serial2.write(0x26);  
}
 
void loop()
{
     //Este codigo deve te enviar uma SMS 
}

Caso nao dê tenta inverter os fios de RX e TX, podes te-los trocados

Obrigado Hugo pela atenção, realmente me ajudou muito no dia de hoje, parabéns pela iniciativa e boa vontade com os novatos.

Sobre enviar o SMS com o Arduino Mega, não funcionou. Mesmo usando código que era para enviar o SMS direto e testando diversas portas e combinações, não obtive sucesso. Estranho isso, era para funcionar. Vou mandar e-mail para a ElecFreaks perguntando sobre o problema.

Mais uma vez, obrigado pela atenção. :smiley:

Para despistar que o problema é no MEGA e nao no modem usa o putty e tenta enviar uma SMS por la
No putty podes ver o que vai acontecendo no modem , se da erro , sucesso ...
Depois quando tiveres sucesso salta para o arduino

Hugo, recebi a resposta dos fabricantes ao meu e-mail, porém ainda não consegui fazer! Realmente acho que sou muito burro, só pode ser essa a resposta. Confira primeiramente o e-mail que mandei para eles no link abaixo:

https://gist.github.com/renatotavares/6116147

Agora confira a resposta do e-mail:

Dear sir, really thanks for your effort. we have reviewed your photo and found out the problem.

At first, sorry for our mistake, the D18/D19 is hardward serial port 1(TX1/RX2) , there port you can not use software serial mode. If you want to use TX1/RX1 , you need change the define to Serial1 .

Second, keep the Software serial demo code, please change the Software serial port to D50/D51.
#define rxPin 50
#define txPin 51
At last, your AT commend code need add '\r\n' , not '\r'

Hope helpful !

Best Regards
Dany

Cara o que eu estou fazendo de errado? Não sei inglês mas pela tradução acredito que eles querem que eu mude para as portas 50 e 51 e depois adicione isso no programa, através do:

#define  rxPin  50
#define  txPin  51
SoftwareSerial mySerial(rxPin, txPin);

Porém eu mudei isso e mesmo assim não rolou. Olha as imagens do e-mail que enviei para eles quando você tiver tempo e olhe o código também, um par de olhos mais experientes pode ser o que me falta.

O que eles te responderam foi que que o mega nem todos os pinos suportam o SoftSerial e eles recomendaram te uns pinos que suportam.

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).

No entanto ja que tens sempre de passar um fio para esses pinos eu esquecia o softserial e usava a porta serie 1 nativa

Serial: 0 (RX) and 1 (TX); Serial 1: 19 (RX) and 18 (TX); Serial 2: 17 (RX) and 16 (TX); Serial 3: 15 (RX) and 14 (TX). Used to receive (RX) and transmit (TX) TTL serial data. Pins 0 and 1 are also connected to the corresponding pins of the FTDI USB-to-TTL Serial chip.

Como vais necessitar da TX0 e RX0 para tu comunicares com a board via PC optas pela Serial1 -->Serial 1: 19 (RX) and 18 (TX)
Ja reparaste que a tua board tem 3 boto?s em que um deles e o de start ao modem.Eu nao tenho esse modem tenho um Siemens mc35i mas o funcionamento é igual e o meu tambem tem um pino que quando o alimento tenho de lhe tocar.Estas a iniciar o teu modem quando o ligas? Será apenas este o teu problema?
Um teste rapido que podes fazer para veres se o modem esta "vivo" e ligares para o numero do cartao SIM que la colocaste.Se ele chamar é porque o modem esta activo e funcional.
No meu caso se eu nao tocar no pino de startup (no teu caso sera o pino(power key) ele nao arranca e se ligar para o modem da como se o SIM esteja desligado.A inicializaçao do meu demora cerca de 5 segundos.
No teu modem esse switch tambem suporta soft-start ou seja, podes usar um pino digital no arduino para o fazer arrancar sem tu teres de ir carregar com o dedo na board.(Estao no pino D6 para o soft-start e o D5 para pino de reset ao modem via software)
Ve o esquema do modem ou este pequeno excerto que la tirei.

Cara algumas considerações;

1- Você tá usando a velocidade errada. A velocidade da serial do SIM900 é 9600.
2- Você não precisa da SoftwareSerial no Mega2560.
3- No seu código eu vejo os comandos que você usou, você não usou nenhum comando ali que grave qualquer alteração no SIM900, sendo assim você não precisa resetar configuração dele como você pretende.

4- Você tá usando 2 portas serial no Arduino, pra que duas?

5- Antes de testar programação e comandos, você precisa certificar de que o shield está de fato ligado, se ele estiver ligado e com sinal GSM, um led azul do lado do vermelho, vai dar uma piscadinha a cada 3 segundos. Mas pra ter mais certeza ainda, pega um telefone qualquer e LIGA pro número do chip que tá no shield, se chamar, tá funcionando e com sinal.

6- Siga o conselho do colega aí no tópico, antes de testar o shield pelo arduino, faça a ligação dele fora da placa e ligue a serial dele num conversor de nível TTL/RS-232, ligue com a serial do PC e use o terminal do PC pra testar.

7- Arduino é engenharia eletrônica, logo você uma hora VAI ter que colocar a mão na massa, ou seja, usar um ferro de solda por exemplo, nem sempre você vai se resolver só com pinos e jumpers. Faça a ligação conforme eu te expliquei no post do Facebook que você VAI conseguir fazer ela funcionar. Faz a ligação, depois você faz todos os testes acima na ordem, sem ignorar nenhum deles.

8- Pra finalizar eu recomendo FORTEMENTE você olhar com atenção o datasheet do SIM900, lá você vê velocidade de trabalho da serial, tensão de alimentação pra você alimentar direto pelo VBAT ou VIN. Não tem que ler o datasheet todo, mas ali tem muita informação que você precisa ler antes de partir pro teste.

IMPORTANTE: Se os testes acima não funcionarem, troca de chip de preferência pra outra operadora e testa, um exemplo clássico dos problemas queeu vejo acontecer é a tensão dada do pino SIM_VDD do SIM900 pra alimentar o chip, alguns chips precisam de um pouquinho mais de tensão pra trabalhar, como acontece com os chips novos da TIM e da Claro por exemplo, então alguns shields podem ter esse erro no cálculo do resistor que fica nesse pino, no meu caso aqui eu dei o teste com um Chip da VIVO e funcionou e enviei um SMS de teste numa boa, o da Claro NÃO funcionou e não pegou sinal de jeito nenhum.

renatotavares:
Hugo, recebi a resposta dos fabricantes ao meu e-mail, porém ainda não consegui fazer! Realmente acho que sou muito burro, só pode ser essa a resposta. Confira primeiramente o e-mail que mandei para eles no link abaixo:

https://gist.github.com/renatotavares/6116147

Agora confira a resposta do e-mail:

Dear sir, really thanks for your effort. we have reviewed your photo and found out the problem.

At first, sorry for our mistake, the D18/D19 is hardward serial port 1(TX1/RX2) , there port you can not use software serial mode. If you want to use TX1/RX1 , you need change the define to Serial1 .

Second, keep the Software serial demo code, please change the Software serial port to D50/D51.
#define rxPin 50
#define txPin 51
At last, your AT commend code need add '\r\n' , not '\r'

Hope helpful !

Best Regards
Dany

Cara o que eu estou fazendo de errado? Não sei inglês mas pela tradução acredito que eles querem que eu mude para as portas 50 e 51 e depois adicione isso no programa, através do:

#define  rxPin  50

#define  txPin  51
SoftwareSerial mySerial(rxPin, txPin);




Porém eu mudei isso e mesmo assim não rolou. Olha as imagens do e-mail que enviei para eles quando você tiver tempo e olhe o código também, um par de olhos mais experientes pode ser o que me falta.

Bom, ali você diz que não entende o cara, então segue a tradução e dando uma incrementada na explicação do cara;

Ele disse que primeiro viu a foto e pediu desculpas pelo erro dele, os pinos D18 e 19 são porta serial fisica, sendo assim você não pode tentar usar esses dois pinos com a SoftSerial pois eles já são dedicados à uma das seriais físicas do uC. No Arduino basta você usar Serial1.begin(velocidade); e depois usar assim, se fosse usar os pinos 16 e 17, você trocaria o Serial1 por Serial2 e os pinos 14/15 por Serial3...

Segundo, ele disse pra mudar os pinos da SoftwareSerial pros pinos digitais 50 e 51.

#define rxPin 50
#define txPin 51

E pra terminar, os seus comandos AT, todos devem terminar com "\r\n", ou seja, o \r é só o carriage return, o cursor vai voltar pro início da linha, e nada mais vai acontecer, o \n é como se você desse um enter. Resumindo; no final de cada comando AT você tem que concatenar "\r\n" cara, se não você não envia os comandos pro modem.

Opa Leonardo obrigado pela resposta!

Algumas considerações:

  • O datasheet não fala sobre a velocidade de comunicação do componente. Releia-o novamente e confirme isso. Aliás, o site oficial do fabricante possui um "datasheet" onde deixam claro que a velocidade do componente pode ser a que eu bem desejar, porém recomendam 19200. Confira http://www.elecfreaks.com/wiki/index.php?title=EFCom_GPRS/GSM_Shield
  • Correto, não é necessário o SoftwareSerial no Mega, porém nenhum exemplo de código sem ele funcionou. Então por falta de experiência e conhecimento técnico optei por usar o SoftwareSerial.
  • O tópico inicialmente foi feito por ter usado o software Serial Tool (http://elecfreaks.com/store/download/datasheet/Bluetooth/Serial_Port_Test.zip) para alterar a velocidade do componente, como o Hugo acima falou e o suporte técnico da shield confirmou, foi necessário reconfigurar o componente através do FTDI232. Isso me assustou muito!
  • Seguindo exemplo da documentação http://www.elecfreaks.com/wiki/index.php?title=EFCom_GPRS/GSM_Shield
  • Tenho outras placas dessas e tenho experiência nela com o Arduino Uno, garanto que ela esta ligada, piscando led azul a cada três segundos e sendo alimentada com a fonte extra de energia.
  • Sim, se ligar qualquer uma das placas no diretamente no PC ou usar um Arduino Uno tudo funciona perfeitamente. Somente no Mega que não :frowning:
  • Realmente fui alterando os pinos e realizando todas as permutações possíveis e recebi um SMS, agora é tentar descobrir qual a combinação de pinos certa, pois o SMS chegou um atraso GIGANTE.
  • Sim, imprimi o datasheet aqui e esto de olho nele.
  • Todos os chips do sistema que uso funcionam bem no Arduino Uno.

Estou mantendo contato direto com o Dany do ElecFreaks, os caras são malucos pois não dão a resposta diretamente, ou notaram que a placa não funciona mesmo com o Arduino Mega.