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
}