Olá pessoal, vejo que muita gente teve curiosidade sobre a
comunicação de módulos GSM (celular) com microcontroladores. Esse post será
dedicado a esclarecer algumas outras informações e mostrar um projeto bem
legal.
É o seguinte, todos esses módulos possuem um controlador, esse controlador responde aos comandos AT, esses comandos traduzem alguma tarefa que o modem tem que executar, alguns modems possuem comandos do fabricante, ou seja, funcionam apenas neles.
É o seguinte, todos esses módulos possuem um controlador, esse controlador responde aos comandos AT, esses comandos traduzem alguma tarefa que o modem tem que executar, alguns modems possuem comandos do fabricante, ou seja, funcionam apenas neles.
Os comandos AT são enviados via dados seriais, assim fica
fácil de interfacear
- #include <SoftwareSerial.h>
- SoftwareSerial mySerial(2, 3);
- String linhaAtual = "";
- String sms = "";
- String smsAnterior = "";
- boolean lendoSMS = false;
- void setup()
- {
- mySerial.begin(19200);
- Serial.begin(19200);
- ligandoModulo();
- Serial.println("Configurando SMS modo texto");
- mySerial.println("AT+CMGF=1");
- mostraDadosSerial();
- }
- void loop()
- {
- //Serial.println("Fazendo leitura do 1 SMS");
- mySerial.println("AT+CMGR=1");
- mostraDadosSerial();
- delay(1000);
- while (mySerial.available()>0)
- {
- char inChar = mySerial.read();
- linhaAtual += inChar;
- if (inChar == '\n')
- {
- linhaAtual = "";
- }
- if (linhaAtual.endsWith("@"))
- {
- lendoSMS = true;
- sms = "";
- }
- if (lendoSMS)
- {
- if (inChar != '<')
- {
- sms += inChar;
- }
- else
- {
- lendoSMS = false;
- Serial.println(sms);
- if(sms == smsAnterior)
- {
- mySerial.println("AT+CMGD=1");
- sms="";
- }
- smsAnterior=sms;
- }
- }
- }
- mySerial.println("");
- }
- void ligandoModulo()
- {
- Serial.println("Ligando/Reiniciando Modulo GSM...");
- if(digitalRead(6)==LOW)
- {
- digitalWrite(6,LOW);
- delay(300);
- digitalWrite(6,HIGH);
- delay(15000);
- }
- Serial.println("Modulo Ligado!");
- }
- void mostraDadosSerial()
- {
- while(mySerial.available()!=0)
- {
- Serial.write(mySerial.read());
- }
- }
Logo mais completo esse tópico com videos e tudo mais!
Vinícius parabéns pelo blog!
ResponderExcluirGostaria de um auxílio seu, adquiri uma placa arduíno que vem com o chip SIM900 e comunicação XBee também. A placa é a GBoard (uma Duemilanove atmega328). Estou com dificuldades para testar os comandos AT. Teria algo que possa me auxiliar?
Obrigado
Olá Abraão, de uma olhada nesse novo post:
Excluirhttp://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-introducao-i.html
Vinícius ajudou bastante, consegui com que o SIM900 responda os comandos AT, mas ainda tenho um problema, a biblioteca que veio com a minha placa só funciona com o compilador 0022, quando eu coloco o seu código nesse compilador ele da erro.
ExcluirPara fazer seu código funcionar usei a versão 1.05, porém com ela não consigo usar a biblioteca da minha placa.
Dei um print na tela do compilador mostrando o erro
http://img32.imageshack.us/img32/7548/0lzp.gif
Pela pesquisa que fiz aqui a biblioteca de softwareSerial não funciona nos compiladores 0022 e 0023
Excluir( http://www.pjrc.com/teensy/td_libs_SoftwareSerial.html)
Talvez seja mais fácil adaptar a sua biblioteca da placa ao compilador mais novo 1.05, eu recomendo testar no compilador 1.00 e 1.03.
Tem como fazer softwareSerial "na mão", é bem chato e complicado eu não recomendaria.
Não tive sucesso com o 1.0, da incompatibilidade também. Procurei como poderia converter a biblioteca para um compilador mais atual, mas não consegui.
ExcluirPelo que vi na net é muito raro encontrar o pessoal usando placas pro compilador 0022. Você acredita ser mais viável adquirir uma placa e um shield mais atuais? (para desenvolver uma aplicação)
Obrigado pela ajuda.
e ai Vinicius tranquilo? sou novo nessa area de arduino e estou montando meu tcc nessa area hehe..
ResponderExcluirtenho um projeto de fazer com que o arduino com o shield sim900 envie uma mensagem ao meu celular após algumas verificações.
tipo..
if (condicao == true)
manda sms
peguei os códigos que voce disponibilizou naquele outro post e nesse tbm.. mas nao consegui fazer o negocio funcionar.. acho que é pq ainda nao peguei o jeito da coisa ainda hehe..
pra te falar a verdade, fico perdido até quando voce fala em "comandos AT". esses comandos at eu tenho que enviar a partir de algum outro programa, certo? qual é o mais utilizado pelo pessoal?
com esse seu comando acima eu fiz o upload mas ele nao me deu nenhuma resposta.. enviei mensagem ao chip que pluguei no shield, mas tbm nao consegui resposta..
vc tem alguma sujestao de como posso fazer?
eu tenho tambem um shield LCD com keypad (comprado no dx) e através de uma protoboard, queria ligar os 2 shields ao mesmo tempo.. e validar um esquema tipo. Cliquei o botao 1 do keypad, envia um tipo de mensagem.. cliquei no botao 2, envia outra msg.. assim vai..
valeu Vinicius..
Oi Vanderlei, fiz um post sobre a comunicação, de uma olhada em: http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-introducao-i.html
Excluirtudo bom vinicius.. muito bom esse seu blogue, tem várias coisas que estão me ajudando!!!
ResponderExcluirAchei muito interessante esse seu programa, mas não estou conseguindo fazer ele rodar, quando ele vai pra void mostraDadosSerial(), ele fica ai, o que tenho que fazer pra ele sair dai ??
meu objetivo é receber uma sms, se essa sms conter a palavra desejada, ela me retornar uma sms dizendo ok, pra falar que relmente recebeu minha sms!!! Se vc puder me ajudar com isso, dar alguma dica ficaria muito agradecido... obrigado
Fala parceiro, fico feliz que tenha gostado do blog :)
ExcluirSobre seu problema é o seguinte, primeiramente tenha certeza que seu arduino esta comunicando corretamente com o modulo GSM, nesse topico voce encontra o passo a passo:
http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-introducao-i.html
Envia assim os comandos separadamente e veja se tudo esta OK, depois tente fazer esse outro tutorial http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-mandando-sms.html
Ai sim passa para o dessa pagina que é mais dificil.
A primeira coisa a se fazer é ter certeza que a comunicação Arduino <-> GSM esta funcionando, para depois tentar fazer outros programas.
Espero que tenha ajudado, abs!