sexta-feira, 30 de agosto de 2013

Arduino GPRS - SIM900, projeto aplicado lendo SMS

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.
Os comandos AT são enviados via dados seriais, assim fica fácil de interfacear 



Esse é um ótimo exemplo de programa, faz a leitura de um SMS que segue o padrão @ SUA SMS <
Pode ser modificado pra receber uma SMS e executar uma ação.



  1. #include <SoftwareSerial.h>
  2. SoftwareSerial mySerial(2, 3);
  3. String  linhaAtual = "";              
  4. String  sms = "";  
  5. String  smsAnterior = "";  
  6. boolean lendoSMS = false;
  7. void setup()
  8. {
  9. mySerial.begin(19200);
  10. Serial.begin(19200);
  11. ligandoModulo();
  12. Serial.println("Configurando SMS modo texto");
  13. mySerial.println("AT+CMGF=1");
  14. mostraDadosSerial();
  15. }
  16. void loop()
  17. {
  18.   //Serial.println("Fazendo leitura do 1 SMS");
  19.   mySerial.println("AT+CMGR=1");
  20.   mostraDadosSerial();
  21.   delay(1000);
  22.   while (mySerial.available()>0)
  23.      {
  24.       char inChar = mySerial.read();
  25.       linhaAtual += inChar;
  26.         if (inChar == '\n')
  27.           {
  28.             linhaAtual = "";
  29.           }
  30.         if (linhaAtual.endsWith("@"))
  31.           {
  32.             lendoSMS = true;
  33.             sms = "";
  34.           }
  35.         if (lendoSMS)
  36.           {
  37.           if (inChar != '<')
  38.             {
  39.               sms += inChar;
  40.             }
  41.           else
  42.             {
  43.             lendoSMS = false;
  44.             Serial.println(sms);
  45.               if(sms == smsAnterior)
  46.                 {
  47.                   mySerial.println("AT+CMGD=1");
  48.                   sms="";
  49.                 }    
  50.              smsAnterior=sms;
  51.             }
  52.           }
  53.     }
  54.     mySerial.println("");
  55. }
  56. void ligandoModulo()
  57. {
  58.   Serial.println("Ligando/Reiniciando Modulo GSM...");
  59.   if(digitalRead(6)==LOW)
  60.     {
  61.       digitalWrite(6,LOW);
  62.       delay(300);
  63.       digitalWrite(6,HIGH);
  64.       delay(15000);
  65.     }
  66.   Serial.println("Modulo Ligado!");
  67. }
  68. void mostraDadosSerial()
  69. {
  70.   while(mySerial.available()!=0)
  71.   {
  72.     Serial.write(mySerial.read());
  73.   }
  74. }




Logo mais completo esse tópico com videos e tudo mais!