Skip to main content

GPRS Shield V2.0

¡Conecta tu Arduino a la red de telefonía celular GSM/GPRS con el shield GPRS! Ahora puedes usar tu Arduino/Seeeduino u otras placas principales para marcar un número de teléfono o enviar un mensaje de texto a tu amigo mediante comandos AT fáciles de usar. Esta nueva versión cuenta con un módulo GSM/GPRS SIM900 de cuatro bandas y bajo consumo de energía, así como una antena PCB compacta. Mientras tanto, se han realizado mejoras en las interfaces y el circuito básico para hacerlo más conciso y confiable. Y tienes dos opciones para comunicar el shield GPRS con la placa principal: UART o SoftwareSerial.

Versión


RevisiónDescripcionesLanzamiento
v0.9bLanzamiento público inicial (beta)3 Mar 2011
v1.2Agregado puerto de software para encender/apagar el SIM902 Dic 2011
v1.4Rediseño del circuito de fuente de alimentación, nueva disposición del PCB30 Ago 2012
v2.0Soporte de cuatro bandas y rediseño de la antena PCB3 Feb 2013
v3.0Cambio del socket de Arduino al estándar más reciente de Arduino Uno20 Mar 2015

¿Cuál es la diferencia entre V2.0 y la versión anterior?

  • Cambio de Apariencia

    • V2.0 adopta un contorno de shield estándar así como una carcasa protectora;
    • La antena tipo pato es reemplazada por una antena PCB compacta;
    • Las interfaces de micrófono y auriculares son reemplazadas por un conector de auriculares 2 en 1 en V2.0.
  • Cambio en el Circuito de Alimentación

    • Reemplaza el circuito LDO original con circuito DC-DC. La disipación de calor se reduce y la eficiencia aumenta hasta 80%+. Mientras tanto, el conector EXT_PWR en V1.0 fue removido. V2.0 puede tomar corriente directamente del Arduino ahora sin adaptador de 5V adicional.
  • Circuito de Arranque Suave

    • Se agrega un circuito de arranque suave en la nueva versión para suavizar el choque de energía en el momento en que el shield se enciende, previniendo que el shield tenga problemas de reinicio inesperado.
  • Revisión de la Antena

    • La potencia máxima de transmisión del SIM900 es 30dBm(1w). Sin embargo, la potencia de salida de V1.0 es solo 0.4W. En esta nueva versión, la potencia de transmisión se incrementa a 29dBm o más(0.8w+), brindándote una transmisión de señal más confiable y firme.

Especificaciones


ElementoValor
CompatibleArduino UNO/Seeeduino directamente ; Otras placas principales vía jumpers
Interfaz seleccionableUART, Software serial
Soporte cuádruple banda850/900/1800/1900MHz
Soporte de comunicaciónEstándar - GSM 07.07 & 07.05 y Mejorado - Comandos AT SIMCOM
Temperatura de operación-40°C a +85 °C
Soporte de protocoloProtocolo 0710 MUX, protocolo TCP/UDP embebido, FTP/HTTP, FOTA, MMS, AT embebido
Certificación de SIM900CE, IC, FCC, ROHS, PTCRB, GCF, ICASA, REACH, AT&T
Dimensiones68.58 * 53.34mm
Fuente de alimentación5v vía pin 5V, 6.5~12v vía pin Vin

Precauciones


  • Asegúrate de que tu tarjeta SIM esté activada.
  • El GPRS Shield no viene con precauciones ESD. Ten especial cuidado al manipularlo en clima seco.

Descripción General del Hardware


  • La configuración predeterminada de fábrica para el UART del GPRS Shield es 19200 bps 8-N-1. (Se puede cambiar usando comandos AT).

  • Selección de puerto serie

    • Hay dos opciones para comunicar el GPRS shield con la placa principal mientras conectas los dos jumpers en las posiciones SWserial o HWserial. Si usas SWserial, D7 y D8 serán utilizados por el SIM900 del GPRS Shield; si usas HWserial, D0 (RX) y D1 (TX) serán utilizados.

  • Encendido/apagado por D9

    • Pad JP desoldado por defecto. Suéldalo si quieres usar software para encender/apagar el GPRS shield. Establece D9 a un nivel alto, significa que el botón está siendo presionado. El pad de JP está al lado del puerto ISP.
  • Breakout del SIM900

    • Algunos pines del SIM900 están disponibles al lado del puerto ISP, están LINEIN_R, LINEIN_L, ADC, PWM1, PWM2, GPIO1~GPIO6, GND, FW_update (DISP_CLK, DISP_DATA, DISP_D/C, DISP_CS), RI, DCD, DSR, CTS, VDD_EXT, LDTR, LRTS. Y esos pines están conectados desde el SIM900 sin ninguna configuración.

  • Soporte de batería RTC

    • Puede proporcionar 3v voltios al VRTC del SIM900 desde una batería CR1220.
  • Alimentación

    • Reemplaza el circuito LDO original con circuito DC-DC -- TD1410. La disipación de calor es menor y la eficiencia es mayor hasta 80%+. Mientras tanto, la salida puede llegar hasta 4.15V/2A. Y hay dos entradas de fuente de alimentación: Pin 5v: Se añade circuito de arranque suave en la nueva versión para suavizar el choque de energía en el momento que el shield se enciende, previniendo el problema de reinicio inesperado del shield. Más cambios detallados por favor consulta Lectura Relacionada : Versión
    • Pin Vin: El rango de voltaje de entrada está entre 6.5v a 12v.
  • Antena

  • Descripción del Estado de LEDs

    LEDEstadoFunción
    Indicador de encendido(Verde)ApagadoLa alimentación del GPRS Shield está apagada
    EncendidoLa alimentación del GPRS Shield está encendida
    Indicador de Estado(Rojo)ApagadoApagado
    EncendidoEncendido
    Indicador de Red(Verde)ApagadoSIM900 no está funcionando
    64ms Encendido/800ms ApagadoSIM900 no encuentra la red
    64ms Encendido/3000ms ApagadoSIM900 encuentra la red
    64ms Encendido/300ms ApagadoComunicación GPRS

Comenzando


Divirtiéndose con Comandos AT

Al recibir el GPRS Shield, ¿cuál sería lo primero que querrías hacer con él? ¿Enviar un mensaje de texto (SMS)? ¿O llamar a alguien (se requieren auriculares)? Puedes hacer todo esto hablando con el GPRS Shield usando Comandos AT - un lenguaje especial que entiende.

Los Comandos AT son comandos textuales simples enviados al módem GPRS a través de su interfaz serie (UART), por lo que puedes usar cualquier software de terminal serie para comunicarte con él.

Instalación del hardware

  • Inserta una tarjeta SIM activada en el Soporte de Tarjeta SIM - Soporte de 6 pines para tarjetas SIM. Tanto las tarjetas SIM de 1.8 voltios como las de 3.0 voltios son compatibles con el SIM900 - el tipo de voltaje de la tarjeta SIM se detecta automáticamente.

    • Inserta la tarjeta SIM en el soporte
    • Bloquea el Soporte de Tarjeta SIM
  • Asegúrate de que la almohadilla de la antena esté abrochada correctamente

  • Configuración del puerto de comunicación El shield GPRS puede ser controlado a través del puerto serie por hardware o puerto serie por software de Arduino. Aquí usamos el puerto serie por software como predeterminado. Elígelo insertando tapas de puente como se muestra a continuación.

  • Conectar a Arduino - El GPRS Shield, como cualquier otro shield bien diseñado, es apilable.

  • Encender Arduino - Enciende Arduino mediante cable USB o conector DC. El LED indicador de encendido debería iluminarse una vez conectado.

Software

Divirtámonos controlando el shield GPRS con comandos AT.

El GPRS Shield viene con todos los accesorios que necesitas para comenzar a enviar datos a través de la red GSM excepto una placa Arduino y una tarjeta SIM GSM. Si quieres hacer llamadas de voz, también necesitarías auriculares con micrófono.

Paso 1: Creando una configuración de prueba para el GPRS Shield

note

Casi todos los comandos AT deben enviarse seguidos de retorno de carro y necesitas seleccionar la opción "+CR" en el terminal del puerto serie.

Para experimentar con comandos AT, necesitarías una forma de encender y comunicarte con tu GPRS Shield. La mejor manera de hacer esto usando una placa Arduino Duemilanove se describe a continuación. Los mismos pasos son aplicables para Seeeduino o Seeeduino Stalker.

  • Sigue los pasos de instalación de hardware anteriores para configurar el sistema de hardware;
  • Asegúrate de que los puentes GPRS_TX & GPRS_RX en el GPRS Shield estén montados en la posición SWSerial - así GPRS_TX se conectará a D7(RX) y GPRS_RX a D8(TX).
  • Conecta el Arduino Duemilanove (o Seeeduino) a tu computadora mediante un cable USB.
  • El microcontrolador ATmega328P en la placa Duemilanove tiene solo una UART que se usa para comunicarse con la PC. Lo que necesitamos es un Sketch de Arduino ejecutándose dentro del ATmega328P que emule un segundo puerto serie (UART) usando serie por software en los pines digitales D8 y D7. Toda la comunicación pasará a través del puerto serie por software y el puerto serie por hardware real. Al hacer esto, todos los datos provenientes de la computadora (conectada a la UART por hardware real) serían enrutados al GPRS Shield (conectado a la UART por software). Entonces podríamos emitir comandos AT para controlar el GPRS Shield. El diagrama de bloques que describe este esquema se muestra a continuación.

Para desarrollar tal programa, necesitamos usar la biblioteca SoftwareSerial. Aquí está el código de demostración.

//Serial Relay - Arduino will patch a
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART

#include <SoftwareSerial.h>

SoftwareSerial GPRS(7, 8);
unsigned char buffer[64]; // buffer array for data recieve over serial port
int count=0; // counter for buffer array
void setup()
{
GPRS.begin(19200); // the GPRS baud rate
Serial.begin(19200); // the Serial port of Arduino baud rate.

}

void loop()
{
if (GPRS.available()) // if date is comming from softwareserial port ==> data is comming from gprs shield
{
while(GPRS.available()) // reading data into char array
{
buffer[count++]=GPRS.read(); // writing data into array
if(count == 64)break;
}
Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port
clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array
count = 0; // set counter of while loop to zero


}
if (Serial.available()) // if data is available on hardwareserial port ==> data is comming from PC or notebook
GPRS.write(Serial.read()); // write it to the GPRS shield
}
void clearBufferArray() // function to clear buffer array
{
for (int i=0; i<count;i++)
{ buffer[i]=NULL;} // clear all index of array with command NULL
}
  • Sube el sketch a la placa Arduino. Si no sabes cómo subir el código, por favor sigue las instrucciones.
  • Descarga y ejecuta la herramienta serial si no tienes una. Elige el puerto COM correcto para Arduino, y configúralo para operar a 19200 8-N-1 y luego haz clic en "Open COM". También puedes usar AT Command Tester para enviar comandos AT. Por favor haz clic aquí si te interesa.
  • Enciende el SIM900 presionando el botón de encendido durante aproximadamente 2 segundos. El LED rojo se encenderá. El verde al lado parpadeará. Si el shield se une a la red exitosamente, el LED verde parpadeará cada 3 segundos.
  • Deberías encontrar el mensaje en el monitor serial como se muestra a continuación, el cual es enviado por el SIM900 para informarte que se ha unido a la red.
RDY

+CFUN: 1

+CPIN: READY

Call Ready

Si no puedes ver los mensajes en el monitor serie, debes hacer clic en la opción "send new" que añadirá un retorno de carro al final del comando AT y luego enviar el comando AT "AT+IPR=19200" para establecer la velocidad de baudios del SIM900.

Paso 2: Enviar un mensaje de texto (SMS)

Ahora que nuestra configuración de prueba está lista, juguemos con algunos comandos AT manualmente antes de pasar a programar el Arduino para hacer esto. Intentemos enviar un SMS para empezar.

  • Crea la configuración como se describe en el Paso 1 anterior.

  • A través de tu software de terminal serie, envía AT+CMGF=1 y presiona la tecla Enter. El GPRS Shield puede enviar SMS en dos modos: modo Texto y modo PDU (o binario). Como queremos enviar un mensaje legible para humanos, seleccionaremos el modo texto. El GPRS Shield responderá con un OK.

  • Haz clic en la opción "send new" y envía AT+CMGS="+18888888888". Esto instruirá al GPRS Shield para que comience a aceptar texto para un nuevo mensaje, los números significan el número de teléfono especificado (reemplaza el número con el número de teléfono del teléfono objetivo). El GPRS Shield enviará un '>' para recordarte que escribas el mensaje. Ten en cuenta que los números de teléfono en cualquier comando AT deben seguir el formato E.123.

  • Comienza a escribir tu mensaje, después de terminar de escribir, haz clic en la opción "send hex" y luego envía un hex: 1A. El módem aceptará el mensaje y responderá con un OK. Unos momentos después, el mensaje debería ser recibido en el teléfono cuyo número habías especificado. Yo envié "How are you ?". Puedes verificar el historial haciendo clic en "EXT". El historial de comandos se lista debajo de "Set Multi Char".

note

Si, a pesar de seguir los pasos como se especifica arriba, no puedes recibir el mensaje en el teléfono objetivo, podrías necesitar establecer el número del Centro de Mensajes SMS. Envía el siguiente comando entre los comandos AT+CMGF y AT+CMGS: AT+CSCA="+18888888888". Reemplaza el número de teléfono especificado con el número del Centro SMS de tu Proveedor de Servicios GSM. El número del centro de mensajes es específico para cada proveedor de servicios. Puedes obtener el número del centro de mensajes llamando al centro de atención al cliente del Proveedor de Servicios GSM y preguntándoles por él.

Paso 3: Hacer una llamada telefónica con los comandos AT

  • Reinicia el SIM900 si cambias de enviar textos a hacer llamadas telefónicas.
  • Reemplaza el número de teléfono con tu número objetivo en el comando "ATD18888888888;" (sin las comillas) y presiona la tecla Enter para enviarlo. Si tiene éxito, aparecerá un mensaje "ATH OK" como se muestra en la imagen de abajo. De lo contrario, aparecerá "No CRRLIER" en su lugar. La razón podría ser un número de teléfono inexistente o un formato de comando incorrecto.

Paso 4: Explorando más

Ahora que has probado cómo funcionan los comandos AT, puedes probar otros comandos antes de pasar a desarrollar sketches para Arduino usando el GPRS Shield.

Esto implica crear un sketch para enviar esta misma secuencia de comandos AT (en tu nombre) por el puerto serie al GPRS Shield para realizar la misma tarea de enviar un SMS, hacer una llamada o enviar datos a través de una conexión GPRS.

Puedes revisar el manual de referencia de comandos AT para descubrir la secuencia de comandos. Si desarrollas un sketch de Arduino, encuentras que el GPRS Shield no actúa como esperas, entonces necesitarás verificar tus comandos AT y su secuencia. Para hacer esto, recarga el sketch de relé serie adjunto arriba en la sección de inicio en el ATmega328P y escribe los comandos AT manualmente y verifica la salida. Las respuestas enviadas de vuelta por el GPRS Shield te ayudarán a depurar la secuencia de comandos AT.

note

Un programa en C para realizar la misma tarea también ha sido desarrollado y adjuntado: Softuart relay atmega328p.zip.

El programa fue desarrollado en una PC con Windows. AVRStudio4 fue usado como el IDE y WinAVR fue usado como el compilador. El archivo ZIP contiene un Proyecto de AVRStudio4. El compilador de C (WinAVR) generará un Intel Hex (.hex). Para subir este archivo .hex a una placa Arduino fuera del IDE de Arduino requeriría un programa que sea capaz de comunicarse con el bootloader de la placa Arduino. XLoader es tal programa que funciona en Windows y puede subir archivos .hex generados por varios compiladores a una Placa Arduino.

Notas de la librería SoftwareSerial

Con Arduino deberías poder usar la librería SoftwareSerial incluida con la distribución (en lugar de NewSoftSerial). Sin embargo, debes estar consciente de que el buffer reservado para mensajes entrantes está codificado de forma fija a 64 bytes en el encabezado de la librería, "SoftwareSerial.h":

 define _SS_MAX_RX_BUFF 64 // RX buffer size

Esto significa que si el módulo GPRS recibe más datos que el buffer, es probable que los pierdas con un desbordamiento del buffer! Por ejemplo, al leer un SMS del módulo con "AT+CMGR=xx" (xx es el índice del mensaje), puede que ni siquiera veas la parte del mensaje porque la información de encabezado precedente (como el número de teléfono y la hora) ocupa mucho espacio. La solución parece ser cambiar manualmente _SS_MAX_RX_BUFF a un valor más alto (¡pero razonable para que no uses toda tu memoria!)

La biblioteca Softwareserial tiene las siguientes limitaciones (tomadas de la página de arduino). Si usas múltiples puertos serie por software, solo uno puede recibir datos a la vez. Esto significa que si intentas agregar otro dispositivo serie como el LCD serie grove, puedes obtener errores de comunicación a menos que elabores tu código cuidadosamente.

Cómo Enviar un Mensaje de Texto o Marcar un Número de Teléfono Usando Comandos AT

En este ejemplo crearemos un sketch de Arduino para permitirte enviar un mensaje de texto o marcar un número de teléfono para una llamada de voz cuando escribas 't' o 'd' respectivamente en la ventana de comunicación serie de Arduino.

Comandos AT Para Enviar un Mensaje de Texto

Mirando el Conjunto de Comandos SIM900 podemos ver que para enviar un mensaje de texto primero tenemos que establecer el formato SMS, esto se hace usando el comando AT+CMGF.

El comando AT+CMGF puede ser uno de dos valores: 0, o 1 para "modo PDU" y "modo texto" respectivamente. En "modo texto", los mensajes SMS se representan como texto legible. En "modo PDU", los mensajes SMS se representan como cadenas binarias codificadas en caracteres hexadecimales. Usaremos "modo texto" en este ejemplo, así que el comando que necesitamos enviar al shield GPRS es:

AT+CMGF=1\r

Ahora que hemos establecido el formato SMS podemos proceder a enviar el mensaje de texto. Para enviar el mensaje de texto usamos el comando AT+CMGS. Según el Conjunto de Comandos AT SIM900, el comando CMGS sigue este formato:

AT+CMGS=<da>[,<toda>]<CR>

donde <da> es la dirección de destino (número de teléfono), <toda> es el tipo opcional de dirección de destino, y <CR> es el carácter de retorno de carro '\r'. Una vez que hayamos enviado este comando, el shield GPRS responderá con el carácter '>' señalándonos que ingresemos el mensaje actual.

note

El número de teléfono debe incluir el código de país, por ejemplo, para un número de teléfono de EE.UU. (555)123-4567 el valor <da> debe ser +15551234567

Comando(s) Para una Llamada de Voz

Según la hoja del Conjunto de Comandos AT SIM900, el comando usado para marcar un número para una llamada de voz es "ATD+xxxxxxxxxx;" donde "xxxxxxxxxxx" es el número de teléfono con código de país incluido. Se debe enviar un punto y coma para establecer una llamada de voz, omitirlo establecerá una llamada de datos o fax.

El código de Arduino para enviar un mensaje de texto simple o marcar una llamada de voz se muestra a continuación. No olvides cambiar el número de teléfono "xxxxxxxxxx" y el mensaje "How are you today?" por tus propios valores.

Código de Arduino
  #include <SoftwareSerial.h>


SoftwareSerial gprsSerial(7,8);

void setup()
{
gprsSerial.begin(19200); // GPRS shield baud rate
Serial.begin(19200);
delay(500);
}

void loop()
{

if (Serial.available()) // if there is incoming serial data
switch(Serial.read()) // read the character
{
case 't': // if the character is 't'
SendTextMessage(); // send the text message
break;
case 'd': // if the character is 'd'
DialVoiceCall(); // dial a number
break;

}

if (gprsSerial.available()){ // if the shield has something to say
Serial.write(gprsSerial.read()); // display the output of the shield
}
}

/*
* Name: SendTextMessage
* Description: Send a text message to a number
*/
void SendTextMessage()
{
Serial.println("Sending Text...");
gprsSerial.print("AT+CMGF=1\r"); // Set the shield to SMS mode
delay(100);
// send sms message, the phone number needs to include the country code e.g. if a U.S. phone number such as (540) 898-5543 then the string must be:
// +15408985543
gprsSerial.println("AT+CMGS = \"+xxxxxxxxxx\"");
delay(100);
gprsSerial.println("How are you today?"); //the content of the message
delay(100);
gprsSerial.print((char)26);//the ASCII code of the ctrl+z is 26 (required according to the datasheet)
delay(100);
gprsSerial.println();
Serial.println("Text Sent.");
}

/*
* Name: DialVoiceCall()
* Description: Can call/dial a phone number
*/
void DialVoiceCall()
{
gprsSerial.println("ATD+xxxxxxxxxx;");//dial the number, must include country code
delay(100);
gprsSerial.println();
}

FAQ

Aquí está el FAQ del GPRS Shield que lista las preguntas frecuentes, por favor léelo antes de usar:

  • ¿Por qué el GPRS Shield no puede funcionar con Stalker v2.1/2.0 a través del puerto serie por software (D7/D8)?

    Stalker v2.1/2.0 ha usado los Pines Digitales (D7/D8), necesitas conectar GPRS_TX/GPRS_RX a otros Pines Digitales como puerto serie por software. Y este problema fue resuelto en la versión Stalker 2.2.

  • ¿Por qué el I2C no se puede usar cuando ensamblo el GPRS Shield al Stalker u otras placas Arduino?

    Porque el GPRS Shield entra en conflicto con otros módulos a través de I2C. El GPRS Shield no usa puerto I2C, puedes desconectar la conexión del puerto I2C del SIM900 a A4/A5.

Proyectos Relacionados


Esta es una demostración hecha con GPRS Shield V2.0.

Con esta demostración, hacemos un teléfono móvil llamado Arduino Phone usando Arduino, shield GPRS Shield y otros módulos.

Esta es una demostración hecha con GPRS Shield V2.0.

Con esta demostración, podemos recibir SMS cuando hay fuga de gas en casa.

Visor de Esquemático en Línea

Recursos

Soporte Técnico y Discusión de Productos

¡Gracias por elegir nuestros productos! Estamos aquí para proporcionarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para atender diferentes preferencias y necesidades.

Loading Comments...