Go Down

Topic: Reiniciar configurações Shield SIM900 (Read 9016 times) previous topic - next topic

renatotavares

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

Code: [Select]

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()
{
}
Renato Tavares, Founder and Software Developer at Resolvendo
www.resolvendo.com

hugo007

#1
Jul 28, 2013, 12:05 pm Last Edit: Jul 28, 2013, 12:11 pm by HugoPT Reason: 1
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
Code: [Select]
mySerial.begin(19200);               // the GPRS baud rate
Em que pinos iniciaste a mySerial?
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

renatotavares

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

Code: [Select]
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?
Renato Tavares, Founder and Software Developer at Resolvendo
www.resolvendo.com

hugo007

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.
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

renatotavares

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?

Code: [Select]

#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()); 

}
Renato Tavares, Founder and Software Developer at Resolvendo
www.resolvendo.com

hugo007

#5
Jul 28, 2013, 06:26 pm Last Edit: Jul 28, 2013, 06:29 pm by HugoPT Reason: 1
Ó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.
Quote
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.


Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

renatotavares

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

Code: [Select]
#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 :( Me enganei com algo?


Renato Tavares, Founder and Software Developer at Resolvendo
www.resolvendo.com

hugo007

#7
Jul 28, 2013, 07:15 pm Last Edit: Jul 28, 2013, 07:31 pm by HugoPT Reason: 1
Quote
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

Code: [Select]
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?
Quote
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.
Quote
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
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

renatotavares

#8
Jul 28, 2013, 08:10 pm Last Edit: Jul 28, 2013, 08:35 pm by renatotavares Reason: 1
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:
Code: [Select]
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 :(

Usei também o 17 e 18
Renato Tavares, Founder and Software Developer at Resolvendo
www.resolvendo.com

hugo007

tenta assim
Code: [Select]
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
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

renatotavares

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.  :D
Renato Tavares, Founder and Software Developer at Resolvendo
www.resolvendo.com

hugo007

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
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

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:

Quote
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:

Code: [Select]
#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.
Renato Tavares, Founder and Software Developer at Resolvendo
www.resolvendo.com

hugo007

#13
Jul 31, 2013, 10:31 am Last Edit: Jul 31, 2013, 10:33 am by HugoPT Reason: 1
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.
Quote
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
Quote
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.

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

Leonardo Gazio

#14
Jul 31, 2013, 09:02 pm Last Edit: Jul 31, 2013, 09:54 pm by Leonardo Gazio Reason: 1
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.

Go Up