viernes, 23 de septiembre de 2016

TUTORIAL ARDUINO MEGA CON GSM SIM800L RECIBIENDO Y ENVIANDO MENSAJE CON RELE





COMPONENTES:

ARDUINO MEGA
SIM 800L GSM
RELE











MONTAJE DE CONEXIONES





CODIGO ARDUINO

String mensaje;
String mensajeenviado;

void setup()
{
  pinMode(8,OUTPUT);                  //Iniciamos el pin 8 como salida para conectar el Rele
  Serial2.begin(19200);
  delay(9000);
  Serial2.println("AT+CMGF=1");   //Configuramos el módulo para trabajar con los SMS en modo texto
  delay(1000);
  Serial2.print("AT+CNMI=2,2,0,0,0\r");    //El módulo enviará los mensaje directamente al puerto serial del dispositivo
  delay(500);
}

void loop()
{
recibirmesanje();
}

void EnviaSMS(){            
Serial2.println("AT+CMGS=\"+346********\"");  // Definimos el numero del destinatario en formato internacional
delay(100);                                   // Pequeña pausa
Serial2.print( mensajeenviado);    // Ponemos las variable String para su envio
delay(500);                                   // Pequeña pausa
Serial2.print(char(26));                 // Enviamos el equivalente a Control+Z
delay(100);                                   // Pequeña pausa
Serial2.println("");                        // Enviamos un fin de linea
delay(100);                                   // Pequeña pausa
}

void recibirmesanje(){

if(Serial2.available()){
mensaje=Serial2.readString();
 delay(500);
}


  if(mensaje.indexOf("Encender")>=0) {

     digitalWrite(8,HIGH);
    mensaje = "";
    mensajeenviado="RELE ENCENDIDO";
    EnviaSMS();
  }

  if(mensaje.indexOf("Apagar")>=0) { //Si la variable mensaje contiene la palabra Apagar
 
    digitalWrite(8,LOW);                
    mensaje = "";
    mensajeenviado="RELE APAGADO";
    EnviaSMS();
  }
mensaje = "";

}



CÓDIGO ARDUINO COMPROBACIÓN MÓDULO GSM 800L Y DIFERENTES COMANDOS AT


void setup()
{
Serial.begin(9600);//INICAMOS EL PUERTO SERIE
Serial2.begin(9600);//INICIAMOS EL PUERTO GSM SIM 800L
delay(1000);
Serial.println("ESPERANDO COMANDOS AT");//MANDAMADOS UN MENSAJE AL PUERTO SERIE
}

void loop() {

if( Serial2.available()){
Serial.write(Serial2.read());
}
if(Serial.available()){   
Serial2.write(Serial.read());
  }
}

AT                              Sirve para verificar si el módulo SIM800 está funcionando                        adecuadamente
ATZ                            Resetear el módulo de fabrica.
AT+CGMI                   Veremos en nombre del fabricante
AT+COPS?                Nombre de la compañía telefónica
AT+CGSN                  Visualizar el IMEI del chip utilizado
AT+CMGF=1              Configuramos el módulo para trabajar con los SMS en modo texto
AT+CNMI=2,2,0,0,0   El módulo enviará los mensaje directamente al puerto serial del              dispositivo
AT+CSQ                     Este comando sirve para conocer la calidad de señal recibida
ATD6XXXXXXXX;      Hacer una llamada.
ATH                            Colgar llamada.      




24 comentarios:


  1. Hola, buenas tardes, mi nombre es Wellington y estoy en Brasil. Como Intendo no mucho de Arduino, pero me gustó mucho, me gustaría hacer este proyecto y me gustaría saber qué código de pulso en el Arduino, la parte superior o la parte inferior. Lo que necesita cambiar el código, es sólo el número de teléfono? Gracias. spxjulio@hotmail.com

    ResponderEliminar
  2. Buenas tardes, sería el código de arriba, el código de abajo es para probar que el módulo gsm funciona correctamente . Primero comprobaría con el código de abajo que funciona correctamente el modulo gsm luego pondría el código de arriba y debería funcionar para cualquier duda me tienes a tu disposión

    ResponderEliminar
  3. Buenas tardes
    Me podría decir por favor en que pines del Arduino Mega es colocado el Reset, TX y el RX

    ResponderEliminar
  4. Buenas tardes el TXD del GSM al RX2 del arduino mega y el RXD del GSM al TX2 del arduino

    ResponderEliminar
  5. Me parece muy interesante. Se podría hacer para que se activaran dos relés uno después del otro y que el segundo se desconectara tras unos segundos? Gracias!!!

    ResponderEliminar
  6. Buenas Tardes, si el código a poner es muy sencillo

    ResponderEliminar
  7. Muchas gracias Santiago. voy a ver si ya para después de las fiestas de navidad me pongo con ello si necesito un cable te iré preguntando.

    ResponderEliminar
  8. Yo tengo el proyecto terminado, con gusto puedo apoyarlos

    ResponderEliminar
    Respuestas
    1. ME PODRIAS FACILITAR EL CODIGO? das_audio@hotmail.com

      Eliminar
    2. Buenas tardes que código te hace falta, para el arduino uno

      Eliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  10. Un saludos y gracias por tu aporte.

    Pero tengo un problema y es que no puedo COMUNICAR LA SIM800L CON el arduino mega, es como si no se comunicaran a travez del puerto serial he verificado las conexiones y todo bien, pero al escribir el comando "AT" aunque me sale en pantalla no me arroja ninguna respuesta.

    MI pregunta es, ¿usaste algún convertidor para conectar el arduino mega con la sim800l?

    ResponderEliminar
    Respuestas
    1. Con este código tiene que conectarlo en el Serial 2, el arduino Mega tiene tres. El TX2 del arduino al RX del SIM800L, y el RX2 del arduino a TX SIM800L.

      void setup()
      {
      Serial.begin(9600);//INICAMOS EL PUERTO SERIE
      Serial2.begin(9600);//INICIAMOS EL PUERTO GSM SIM 800L
      delay(1000);
      Serial.println("ESPERANDO COMANDOS AT");//MANDAMADOS UN MENSAJE AL PUERTO SERIE
      }

      void loop() {

      if( Serial2.available()){
      Serial.write(Serial2.read());
      }
      if(Serial.available()){
      Serial2.write(Serial.read());
      }
      }
      Para cualquier duda estoy por aqui

      Eliminar
  11. Con este código tiene que conectarlo en el Serial 2, el arduino Mega tiene tres. El TX2 del arduino al RX del SIM800L, y el RX2 del arduino a TX SIM800L.

    void setup()
    {
    Serial.begin(9600);//INICAMOS EL PUERTO SERIE
    Serial2.begin(9600);//INICIAMOS EL PUERTO GSM SIM 800L
    delay(1000);
    Serial.println("ESPERANDO COMANDOS AT");//MANDAMADOS UN MENSAJE AL PUERTO SERIE
    }

    void loop() {

    if( Serial2.available()){
    Serial.write(Serial2.read());
    }
    if(Serial.available()){
    Serial2.write(Serial.read());
    }
    }
    Para cualquier duda estoy por aqui

    ResponderEliminar
    Respuestas
    1. Utilizo este codigo y conecto los cables segun indicas pero el modulo no me devuelve respuesta

      Eliminar
  12. buenas como esata
    me explicas porfa esta linea
    if(mensaje.indexOf("6********")>=0){

    ResponderEliminar
  13. es un codigo o un numero de telefono

    ResponderEliminar
  14. Buenas tardes es un error lo modifico. Eso lo utilizaba para verificar el número de móvil de donde se envía el mensaje pero le falta código.

    ResponderEliminar
  15. cordial saudo espero estes bien.
    te esplico mi caso llevo mese buscando que funcione este modulo sim800l pero sin tener el cable usba conectado al pc, meintras lo tengo los mendajes entran bien y me funciona, pero mientras lo desconecto no funcionan, alimento el modulo con una fuente de 4.2 se qu e funciona porque me manda mensajes sin estar conectado la pc pero, se que los resive pues cuando los mando desde mi celular o movil parpadea el les mas rapido. he eliminado tosos los serial y dejo solo los serial2 y nada mi arduino es un mega y esta conectado asi como dices, me puedes colaborar te agradesco

    ResponderEliminar
    Respuestas
    1. Buenos días, prueba a alimentar el sim800L con una fuente aparte solo para SIM800L y le conectas GND al arduino. Si no se soluciona me envias un mensaje privado a domoticamayca@gmail.com para tener un dia un Skype y solucionar el problema.

      Eliminar
  16. Buenas a todos,
    Estoy probando el código de arriba y me establece la conecxion, pero antes de que pueda mandar algún comando AT en el terminal empiezan a aparecer espacios en blanco por el loop y no para.
    ¿Alguien sabe por que puede pasar?
    Gracias de antemano.
    Un saludo

    ResponderEliminar
  17. El codigo lo hago tal cual pero mando at y no me parece nada, otros codigos si pero en pantalla no me arroja respuesta aparte no se si la conexion va al arduino o fte externa me podrias enviar el diagrama de conexion mi correo es jdavid17t@gmail.com

    ResponderEliminar