Paso 1: La GSM biblioteca
Esta es la documentación de la biblioteca de GSM_shield:
Aquí es una Biblioteca de GSM_shield destinados a Shield GSM por Futura Elettronica (www.futurashop.it).
Esta biblioteca se deriva GSM biblioteca http://www.hwkitchen.com de Hwkitchen e incluir la biblioteca de NewSoftSerial comunicarse con el pin 4 (RX) y 5 (TX).
También puede utilizar el pin 0 y 1 (RX y TX) pero usted debe desconectar el módulo para subir el boceto (por lo que no es muy agradable), y debe modificar la biblioteca.
Cómo instalar la librería de Arduino
Después de descargar de la biblioteca GSM_Shield descomprimir la carpeta GSM_Shield para Arduino
Folder\libraries\ (es. C:\Programs\arduino-0022\libraries\GSM_Shield)
En el GSM_Shield.zip usted puede encontrar la biblioteca para comunicarse con el módulo gsm y el archivo para utilizar el NewSoftSerial.
Descripción básica
Biblioteca de GSM_Shield se crea como clase estándar con los archivos de fuente de Gsm_Shield.cpp y Gsm_Shield.h. Clase de GSM_Shield se basa principalmente en la comunicación serial
la placa Arduino y el módulo GSM a GSM escudo. Hay estándar usado en los comandos para la comunicación con el módulo GSM.
La versión actual de biblioteca utiliza versión bloqueo de la comunicación.
Esto significa que el programa se bloquea hasta que termina la función de comunicación – así que hasta que los datos requeridos son enviados y necesaria se recibe respuesta. La ventaja de ese enfoque bloqueo es que es fácil de
entender el flujo del programa. Por otro lado también hay desventajas que no podemos usar los recursos de procesador en el tiempo cuando el programa sólo espera los datos entrantes.
Nota: Preste atención al modo de comunicación serial. Con el hardware de serie (pin 0 y 1) puede alcanzar la velocidad por defecto del módulo SIM900 (115200). Pero si utilizas el pin 4 y 5 que no es compatible con la biblioteca de NewSoftSerial (reciban) la velocidad de transmisión, por lo que debe elegir una velocidad en baudios inferior.
Con el comando TurnOn(baudrate) se enciende el módulo y fijar la velocidad de transmisión. por ejemplo, TurnOn(9600);
Métodos
Hay descritas funciones importantes para el usuario final de este documento.
La biblioteca de GSM_Shield contiene también algunas funciones que se utilizan internamente
y no se describen en el documento. También es posible utilizar estos
funciones por parte del usuario final claro como ellos se definen como públicos pero hay
es necesario para determinar el código de biblioteca con notas.
int LibVer(void)
Devuelve la versión de la biblioteca en formato XYY-significa X.YY (e.g. 100 significa vers 1.00).
Muestra: GSM_Shield_LibVer
void TurnOn(baud)
se enciende el módulo GSM módulo está apagado y envía algunos inicialización en los comandos que se pueden enviar antes de registro -> InitParam(PARAM_SET_0)
Debe utilizarse al principio del bosquejo en la función setup().
Establece también la velocidad de transmisión del módulo (Nota: Si utilizas el serial de hardware, no hay ningún límite a la velocidad de transmisión, 115200 es possibile. Pero utilizando el pin 4 y 5 de la NewSoftSerial debe ser el uso y el límite de velocidad es de 57600).
possibile valor de velocidad en baudios: 4800, 9600, 19200, 38400, 57600, 115200 (no uso con esta biblioteca que incluyen NewSoftSerial)
void setup()
{
GSM. TurnOn(9600);
}
Muestra: GSM_Shield_LibVer
void InitParam(byte group)
Envía los parámetros para la inicialización de módulo GSM
Grupo: 0 – parámetros del grupo 0-no es necesario estar registrado en el GSM
AT & F
1-parámetros del grupo 1 – es necesario estar registrado
AT + CLIP = 1
AT + CMEE = 0
AT + CMGF = 1
Muestra: GSM_Shield_LibVer
Eco vacío (estado bytes)
Función para activar o desactivar el eco
Echo (1) activar el modo de eco GSM
Echo(0) desactivar el modo eco GSM
Muestra: GSM_Shield_LibVer
byte CheckRegistration(void)
comprueba si el módulo GSM está inscrito en la red del G/M.
Este método se comunica directamente con el módulo GSM en contraste con el método IsRegistered() que dice la bandera de la module_status
(este indicador se encuentra dentro de este método)
debe llamarse regularmente en el lugar en el circuito del dibujo principal
(recomendación repetir tiempo es de 1 seg a 10 seg.)
valus de vuelta:
REG_NOT_REGISTERED-no registrado
REG_REGISTERED – módulo GSM está registrado
REG_NO_RESPONSE – GSM no respuesta
REG_COMM_LINE_BUSY – línea comm no es gratis
Muestra: GSM_Shield_Reg
byte IsRegistered(void)
Devuelve la bandera si el módulo GSM está registrado en la red del G/M
Este método no se comunica directamente con el módulo GSM,
sólo lee la bandera por lo que es muy rápido a diferencia de CheckRegistration()
que toma más de 20msec.
se recomienda utilizar esta función cada vez que es necesario utilizar alguna función GSM que necesita módulo GSM está registrado – comprobación de SMS entrante, control de llama etc..
valus de vuelta:
0 – no registrado
> 0 – módulo GSM está registrado
Muestra: GSM_Shield_Reg
byte CallStatus(void)
comprobaciones de estado de la llamada
valores devueltos:
CALL_NONE – ninguna llamada
CALL_INCOM_VOICE-llamada de voz entrante
CALL_ACTIVE_VOICE-llamada de voz activa
CALL_NO_RESPONSE – sin respuesta
Muestra: GSM_Shield_Call
byte CallStatusWithAuth (char * phone_number, first_authorized_pos bytes, last_authorized_pos bytes)
comprueba estado de llamada (entrante o activo) y hace de autorización con rango especificado de posiciones SIM
los parámetros y valores devueltos:
phone_number: un puntero donde se colocará la cadena Tel.: número de llamada actual por lo que debe reservarse el espacio para la cadena de número de teléfono
first_authorized_pos: inicial posición de agenda SIM donde comienza el proceso de autorización
last_authorized_pos: última posición de la agenda SIM donde termina el proceso de autorización
Note(Important):
================
En caso first_authorized_pos = 0 y last_authorized_pos = 0 el número de teléfono entrante recibida no está autorizado, por lo que se considera cada entrante autorizado (se devuelve CALL_INCOM_VOICE_NOT_AUTH)
retorno:
CALL_NONE – no hay actividad de llamadas
CALL_INCOM_VOICE_AUTH – voz entrante – autorizado
CALL_INCOM_VOICE_NOT_AUTH – voz entrante – no autorizado
CALL_ACTIVE_VOICE – voz activa
CALL_INCOM_DATA_AUTH-llamada de datos – autorizado
CALL_INCOM_DATA_NOT_AUTH-llamada de datos – no autorizado
CALL_ACTIVE_DATA-llamada de datos activa
CALL_NO_RESPONSE – no hay respuesta para el comando AT
CALL_COMM_LINE_BUSY – línea comm no es gratis
void PickUp(void)
recoge la llamada entrante
Muestra: GSM_Shield_Call
void HangUp(void)
cuelga la llamada (entrante o activo)
Muestra: GSM_Shield_Call
void Call(char *number_string)
llama al número específico
por ejemplo, gsm. Call("+390123456789″);
Convocatoria anulada (int sim_position)
llama al número almacenado en la posición especificada de la SIM
por ejemplo, gsm. Call(1); Llame al número almacenado en la posición de SIM 1
char SendSMS (char * number_str, char * message_str)
envía un SMS al número de teléfono específico
los parámetros y valores devueltos:
number_str: puntero a la cadena de número de teléfono
message_str: puntero a la cadena de texto SMS
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3 – módulo GSM ha respondido a la cadena "ERROR"
OK ret val:
———–
0 – no se envió el SMS
1 – SMS fue enviado 9/15
ejemplo de uso:
GSM. SendSMS ("00XXXYYYYYYYYY", "Texto");
char SendSMS (sim_phonebook_position byte, char * message_str)
envía SMS a la posición de agenda SIM
los parámetros y valores devueltos:
sim_phonebook_position: posición de la agenda SIM < 1..20 >
message_str: puntero a la cadena de texto SMS
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3 – especificadas la posición debe ser > 0
OK ret val:
———–
0 – no se envió el SMS
1-fue enviado SMS
un ejemplo de uso:
GSM gsm;
GSM. SendSMS (1, "Texto");
char IsSMSPresent(byte required_status)
Averigua si hay presentes al menos un SMS con estado especificado
Si hay nuevo SMS antes de ejecutar IsSMSPresent() este SMS tiene un estado de no leído y entonces después de llamar a estado de IsSMSPresent() método de SMS cambia automáticamente a modo de lectura
los parámetros y valores devueltos:
required_status:
SMS_UNREAD – nuevo SMS – no leer sin embargo
SMS_READ – ya leer SMS
SMS_ALL – todos almacenan SMS
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
OK ret val:
———–
0 – no hay ningún SMS con estado especificado
1..20 – posición donde se almacena el SMS
ejemplo de uso:
posición de Char;
phone_number Char [20]; matriz de la cadena de número de teléfono
char * sms_text;
posición = gsm. IsSMSPresent(SMS_UNREAD);
Si (posición) {/ / leer SMS nuevo
GSM. GetGSM (posición, tel_number y sms_text);
}
char GetSMS (posición de byte, char * phone_number, char * SMS_text, max_SMS_len bytes)
Lee los SMS de posición especificado memory(SIM)
los parámetros y valores devueltos:
posición: posición SMS < 1..20 >
phone_number: un puntero donde se colocará la cadena número de teléfono de SMS recibidos
así el espacio para la cadena de número de teléfono debe ser reservada – ver ejemplo
SMS_text: un puntero donde se colocará el texto
max_SMS_len: longitud máxima de SMS texto excepto string también terminación de carácter 0 × 00
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3 – especificadas la posición debe ser > 0
OK ret val:
———–
GETSMS_NO_SMS-no SMS fue encontrado en la posición especificada
GETSMS_UNREAD_SMS – SMS nuevo fue encontrado en la posición especificada
GETSMS_READ_SMS – ya leer SMS fue encontrado en la posición especificada
GETSMS_OTHER_SMS – otro tipo de SMS se encontró un ejemplo de uso:
GSM gsm;
posición de Char;
char phone_num [20]; matriz de la cadena de número de teléfono
char sms_text [100]; matriz de la cadena de texto SMS
posición = gsm. IsSMSPresent(SMS_UNREAD);
Si {} (posición)
hay nuevo SMS = > leer
GSM. GetGSM (posición, phone_num, sms_text, 100);
Serial.println ("número de teléfono SMS de depuración:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n de texto:", 0);
Serial.println (sms_text, 1);
}
char GetAuthorizedSMS (posición de byte, char * phone_number, char * SMS_text, max_SMS_len bytes, first_authorized_pos bytes, last_authorized_pos bytes)
Lee los SMS de memory(SIM) especificado posición y hace autorización-
significa número de teléfono SMS es en comparación con posiciones de agenda SIM especificado y se devuelve en caso de que los números coinciden con GETSMS_AUTH_SMS, de lo contrario se devuelve GETSMS_NOT_AUTH_SMS
los parámetros y valores devueltos:
posición: posición de SMS para leer < 1..20 >
phone_number: un puntero donde se colocará la cadena Tel.: número del SMS recibido por lo que debe reservarse el espacio para la cadena de número de teléfono – ver ejemplo
SMS_text: un puntero donde se colocará el texto
max_SMS_len: longitud máxima de texto excepto terminación 0 × 00 carácter
first_authorized_pos: inicial posición de agenda SIM donde comienza el proceso de autorización
last_authorized_pos: última posición de la agenda SIM donde termina el proceso de autorización
Note(Important):
================
En caso first_authorized_pos = 0 y last_authorized_pos = 0
el número de teléfono SMS recibido no está autorizado, por lo que cada
SMS es considerado como autorizado (se devuelve GETSMS_AUTH_SMS)
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3-la posición debe ser > 0
OK ret val:
———–
GETSMS_NO_SMS-no SMS fue encontrado en la posición especificada
GETSMS_NOT_AUTH_SMS – no autorizada SMS encontrados en la posición especificada
GETSMS_AUTH_SMS – SMS autorizado se encuentra en la posición especificada
un ejemplo de uso:
GSM gsm;
char phone_num [20]; matriz de la cadena de número de teléfono 12-15
char sms_text [100]; matriz de la cadena de texto SMS
autorizar SMS con SIM agenda posiciones 1.. 3
Si (GETSMS_AUTH_SMS == gsm. GetAuthorizedSMS(1, phone_num, sms_text, 100, 1, 3)) {}
nuevo SMS autorizado fue detectado en la posición de SMS 1
Serial.println ("número de teléfono SMS de depuración:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n de texto:", 0);
Serial.println (sms_text, 1);
}
no autorizar SMS con agenda de la SIM en todo
Si (GETSMS_AUTH_SMS == gsm. GetAuthorizedSMS(1, phone_num, sms_text, 100, 0, 0)) {}
nuevo SMS fue detectado en la posición de SMS 1
porque no se requiere autorización
SMS se considera autorizado
Serial.println ("número de teléfono SMS de depuración:", 0);
Serial.println (phone_num, 0);
Serial.println ("\r\n de texto:", 0);
Serial.println (sms_text, 1);
}
char DeleteSMS(byte position)
elimina SMS de la posición especificada de SMS
los parámetros y valores devueltos:
posición: posición SMS < 1..20 >
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3-la posición debe ser > 0
OK ret val:
———–
0 – no fue borrado SMS
1-se eliminó SMS
char GetPhoneNumber (posición de byte, char * phone_number)
Lee la cadena de número de la posición especificada del SIM del teléfono
los parámetros y valores devueltos:
posición: posición SMS < 1..20 >
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3-la posición debe ser > 0
phone_number es cadena vacía
OK ret val:
———–
0 – no hay ningún número de teléfono en la posición
1 – se encontró teléfono
phone_number es llenado por la cadena de número de teléfono terminada por 0 × 00
por lo que es necesario definir la cadena de al menos
15 bytes (incluyendo también el carácter de terminación 0 × 00)
un ejemplo de uso:
GSM gsm;
char phone_num [20]; matriz de la cadena de número de teléfono
Si (1 == gsm. GetPhoneNumber (1, phone_num)) {}
número de teléfono válido en pos SIM #1
cadena de número de teléfono se copia en la matriz de phone_num
Serial.println ("número de teléfono de depuración:", 0);
Serial.println (phone_num, 1);
}
Else {}
no hay número de teléfono válido en la posición SIM #1
Serial.println ("DEBUG allí no es ningún número de teléfono", 1);
}
char WritePhoneNumber (posición de byte, char * phone_number)
escribe cadena número de teléfono a la posición de SIM
los parámetros y valores devueltos:
posición: posición SMS < 1..20 >
phone_number: teléfono número cadena para la escritura
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3-la posición debe ser > 0
OK ret val:
———–
0 – no estaba escrito el número de teléfono
1-número de teléfono fue escrito 14/15
char DelPhoneNumber(byte position)
del número de teléfono de la posición de SIM
los parámetros y valores devueltos:
posición: posición SIM < 1..20 >
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3-la posición debe ser > 0
OK ret val:
———–
0 – no se eliminó el número de teléfono
1-se suprimió el número de teléfono
char ComparePhoneNumber (posición de byte, char * phone_number)
compara especificado cadena de número de teléfono con número de teléfono almacenado en la posición especificada de la SIM
los parámetros y valores devueltos:
posición: posición SMS < 1..20 >
phone_number: teléfono número cadena que debe ser compara
retorno:
ERROR RET. val:
—————
-1 – línea de comunicación con el módulo GSM no es gratis
-2 – módulo GSM no respondió en tiempo de espera
-3-la posición debe ser > 0
OK ret val:
———–
0 – números de teléfono son diferentes
1 – los números son iguales
un ejemplo de uso:
Si (1 == gsm.ComparePhoneNumber (1, "123456789″)) {}
el teléfono Nº "123456789″ se almacena en la posición SIM #1
cadena de número de teléfono se copia en la matriz de phone_num
Serial.println ("números de teléfono de depuración son los mismos", 1);
}
Else {}
Serial.println ("números de teléfono de depuración son distintos", 1);
}