Es un modulo Multi-banda WCDMA/GSM/GPRS/EDGE que soporta transferencias de datos WCDMA hasta 384 kbps. 

El modulo provee mucha flexibilidad con los protocolos TCP/UDP/FTP/HTTP/HTTPS/SMTP/POP3 y MMS. 

Esta es una tarjeta GPRS ultra compacta de comunicación inalámbrica. La tarjeta es compatible con todos los modelos de Arduino con el formato UNO, además puedes controlarla con

otros microcontroladores también. La tarjeta está basada en el módulo SIM900 4.

La tarjeta GPRS está configurada y controlada por vía UART usando comandos AT. Solo conecta la tarjeta al microcontrolador, Arduino, etc, y comienza a comunicarte a través de comandos AT. Ideal para sistemas remotos, comunicación recursiva, puntos de control, mandar mensajes de texto a celulares, etc.

ESPECIFICACIONES

  • Totalmente compatible con Arduino
  • Conexión con el puerto serial
  • Quad-Band 850/ 900/ 1800/ 1900 Mhz
  • GPRS multi-slot clase 10/8
  • GPRS mobile station clase B
  • Compatible GSM fase 2/2+
  • Clase 4 (2 W (AT) 850 / 900 MHz)
  • Clase 1 (1 W (AT) 1800 / 1900MHz)
  • TCP/UP  embebido
  • Soporta RTC
  • Consumo de 1.5 mA (suspensión)

Hoja de datos 1  : GSMSHIELD-1

Hoja de datos 2:   GSMSHIELD-2

Tabla de comandos:  sim900_at_command_set

CODIGO:

#include <SoftwareSerial.h>
SoftwareSerial SIM900(2, 3); // Configura el puerto serial para el SIM900
 
char incoming_char=0; //Variable que guarda los caracteres que envia el SIM900
int salir = 0;
void setup()
{
 SIM900.begin(19200); //Configura velocidad serial para el SIM900
 SIM900power(); //Encender el chip
 delay(25000); //Retardo para que encuentra a una RED
 Serial.begin(19200); //Configura velocidad serial para el Arduino
 Serial.println("OK"); //Mensaje OK en el arduino, para saber que todo va bien.
}
 
void SIM900power()
// Encendido por software del SIM900, es equivalente a precionar el boton de encendido
{
 digitalWrite(8, HIGH);
 delay(1000);
 digitalWrite(8, LOW);
 delay(5000);
}
 
void llamar()
// Función que permite llamar a un celular local
{
 // SIM900.println("ATD 10725275;"); //Numero local
 SIM900.println("ATD 3310725275;"); //Celular
 delay(100);
 SIM900.println();
 delay(30000); // wait for 30 seconds...
 SIM900.println("ATH"); // Cuelta el telefono
 delay(1000);
}
void mensaje_sms()
Funcion para mandar mensaje de texto
{
 
 SIM900.print("AT+CMGF=1\r"); // AT command to send SMS message
 delay(100);
 SIM900.println("AT + CMGS = \"3310725275\""); // recipient's mobile number, in international format
 delay(100);
 SIM900.println(analogRead(0)); // message to send
 delay(100);
 SIM900.println((char)26); // End AT command with a ^Z, ASCII code 26 //Comando de finalizacion
 delay(100);
 SIM900.println();
 delay(5000); // Tiempo para que se envie el mensaje
 
}
 
void espera_mensaje()
{
 salir = 1;
 while(salir==1)
 {
 if(SIM900.available() >0)
 {
 incoming_char=SIM900.read(); //Get the character from the cellular serial port.
 Serial.print(incoming_char); //Print the incoming character to the terminal.
 salir = 0;
 }
 }
}
void modo_recibe_mensaje()
{
 //Configura el modo texto para enviar o recibir mensajes
 SIM900.print("AT+CMGF=1\r"); // set SMS mode to text
 delay(100);
 SIM900.print("AT+CNMI=2,2,0,0,0\r");
 
 // blurt out contents of new SMS upon receipt to the GSM shield's serial out
 delay(1000);
}
void loop()
{
 llamar(); //Llama
 mensaje_sms(); //Envia mensaje
 modo_recibe_mensaje();
 for(;;)
 {
 if(SIM900.available() >0)
 {
 
 incoming_char=SIM900.read(); //Get the character from the cellular serial port.
 Serial.print(incoming_char); //Print the incoming character to the terminal.
 }
 if(Serial.available() > 0)
 {
 if(Serial.read() == 'A') break;
 }
 }
 Serial.println("OK-2");
 SIM900power();
 delay(100);
 SIM900.println();
 delay(30000);
 while(1); // Esperate por tiempo indefinido
 
}