Sms masivos con Sim800l y Arduino

Imagen de Placa de modulo GSM
Imagen de placa SIM800




El módulo SIM800L es un dispositivo quad-band GSM/GPRS, trabaja en las frecuencias GSM850MHz, EGSM900MHz, DCS1800MHz y PCS1900MHz. Este módulo de telefonía celular que te permite añadir voz, texto, datos y SMS a tu proyecto en un pequeño paquete, contiene una cantidad sorprendente de la tecnología en este pequeño paquete. Esta versión cuenta con un conector uFL. Utiliza el mismo chip SIM800L que el módulo FONA de Adafruit, por lo que se pueden utilizar las mismas librerías.

Por sí solo, este módulo no puede hacer nada. Se requiere un microcontrolador para controlarlo por ejemplo un Arduino pero cualquier microcontrolador 3-5V con una UART puede enviar y recibir comandos a través de los pines RX/TX. También necesitarás un chip SIM 2G.





Pin OUT



Características técnicas

 

·   

·        Nivel Lógico de 3V a 5V

·       Voltaje de operación 3.3 a 4.4 VDC

·        Consumo de corriente (max): 500 mA

·        Consumo de corriente (sleep): 0.7 mA

·        Interfaz: Serial UART

·        Quad-band 850/900/1800/1900MHz – se conectan a cualquier red mundial GSM con cualquier SIM 2G

·        Trabaja solo con tecnología 2G (en Perú Movistar , Claro y Entel)

·        Hacer y recibir llamadas de voz usando un auricular o un altavoz de 8Ω externo + micrófono electret.

·        Enviar y recibir mensajes SMS

·        Enviar y recibir datos GPRS (TCP/IP, HTTP, etc)

·        Receptor FM

·        Controlado por Comandos AT (3GPP TS 27.007, 27.005 y SIMCOM enhanced AT Commands)

·        Interfaz de comandos AT con detección “automática” de velocidad de transmisión

·        Soporta A-GPS

·        Datos GPRS:

·        Velocidad máxima de transmisión 85.6 Kbps

·        Protocolo TCP/IP en chip

·        Codificacion: CS-1, CS-2, CS-3 y CS-4

·        Soporta USSD

·        Soporta Reloj en tiempo real (RTC)

·        Velocidades de transmisión serial desde 1200bps hasta 115200bps

·        Tamaño de la SIM: Micro SIM


Materiales:

1 X Arduino Nano

1 X Modulo Sim800L

1 X Capacitor 1000 Mf x 16v

2 X Diodo 1N4001


Conexiones:






Código




/******************************************************************************
*                                  Proyecto:                                  *
*                           ENVIO DE VARIOS MENSAJES DE TEXTO EN RED GSM                          *
*******************************************************************************
Este proyecto permite enviar varios mensaje de texto SMS a destinos agendados en un directorio,
utilizando el modulo SIM800
Dadas la funciones del modulo ,lo configura  poder recibir llamadas de voz .
******************************************************************************/

#include <SoftwareSerial.h> 

int timeout=0;
String NumSms ="";
String serialString="";
String inc_call="";
String Prefix ="+598"; // Codigo del pais
String cmd="";
// Numeros celulares tipo long para procesar
long Lg_Number_1 = 12345678;// Completar con los numero de celulares, ej si es 098123456 , completar 98123456
long Lg_Number_2 = 12345678;
long Lg_Number_3 = 12345678;
long Lg_Number_4 = 12345678;
long directory[]={Lg_Number_1,Lg_Number_2,Lg_Number_3,Lg_Number_4};// Define un Array de 4 numeros telefonicos

//TX de SIM800 es conectado en Arduino D8
#define SIM800_TX_PIN 8

//RX de SIM800 es conectado en Arduino D7
#define SIM800_RX_PIN 7
 
//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
/*************************************************************************************************************
                                              SETUP
************************************************************************************************************/
void setup()
{
  
  Serial.begin(9600);
 
  serialSIM800.begin(9600);
  delay(1000);
  
  LeerSerial();
  enviarAT("AT+IPR=9600\r"); // Setea velocidad de puerto serie de  SIM800 en 9600 baudios
  LeerSerial();
  enviarAT("AT+COPS?\r");  // Obtiene el numero de celda GSM en el cual se registro
  LeerSerial();
  enviarAT("AT+CNMI=2,1\r"); // Define formato de mensajes
  LeerSerial();
  enviarAT("AT+CMGD=1,4\r"); // eliminar todos los mensajes
  LeerSerial();
  enviarAT("AT+CMGL=\"ALL\",0\r");
  LeerSerial();
  enviarAT("AT+CMGF=1\r"); // Formato de texto string
  delay(200);
   LeerSerial();
   Send_SMS();// ejecuta una vez en forma de prueba
}
 
void loop()
{
//Colocar este comando en algun lugar del codigo 
//Send_SMS();

//Lee puerto serie
LeerSerial();

 
}
   
// Envia SMS a cada numero de la agenda telefónica
void Send_SMS(){
 char ctrz=26;
 String sms="";
  //Repite el procedimiento por n cantidad de numero agendados , en este ejemplo son 4 números en el directorio
   for(int i=0 ;i<=3;i++){
  NumSms=(String)directory[i];
  NumSms=Prefix+NumSms;
  enviarAT("AT+CMGS=\""+ NumSms+"\""+"\r");
  delay(1000);
  sms="Prueba  numero posicion: "+NumSms+ctrz;
 
  enviarAT(sms); 
  delay (100);
  Serial.flush();
  LeerSerial();
  delay(2000);
  }
  }

 
 // -Permite interactuar con el Monitor serial y el SIM800 
 // - Atiende llamadas de voz
 void LeerSerial()
{
 
     if(serialSIM800.available()>0){
        serialString= serialSIM800.readString();
        delay(100);
        if (serialString.indexOf("+CLIP")>-1){
            enviarAT("ATA\r"); 
        Serial.println("Llamada en curso");
        }
       Serial.println(serialString);
      }

     if (Serial.available()){
      while(Serial.available()) {
        inc_call=Serial.read();
         serialSIM800.write(Serial.read());
         


      }
    serialSIM800.println(); 
   }
     
 }
// Enviamos comando AT al puerto serie de SIM800
void enviarAT(String cmdAT){
  
    int str_len = cmdAT.length() + 1; 
    char char_array[str_len];
    cmdAT.toCharArray(char_array, str_len);
    serialSIM800.write(char_array);
    delay(100);
 
 }

Comentarios