Introducción
En este post vamos a ver cómo introducirnos a la programación GPRS en el IDE de Arduino, destacando los primeros pasos a realizar para configurarlo y utilizarlo de forma adecuada y funcional en este módulo.
Primeros pasos para programar el módulo GPRS con Arduino IDE
1. Introduce la tarjeta SIM
Procederemos a depositar correctamente la tarjeta SIM en el PLC. Para hacer esto, primero debes ubicar la entrada de la tarjeta SIM del PLC, que se encuentra en la tapa superior del dispositivo. Podrás ver el símbolo de la tarjeta SIM en la serigrafía; la entrada está justo debajo. Para ingresar la tarjeta, debes hacerlo como se muestra en las siguientes imágenes:
2. Configuración del software
Debemos seguir estos puntos para asegurar un funcionamiento correcto del GPRS:
1.- Selecciona la familia y modelos adecuados para las Boards (la familia y modelo GPRS que tengas).
GPRS
2.- Asegúrate de importar el header GPRS.h, el cual esta incluido en nuestras Boards y ha sido desarrollado por nuestros programadores.
#include <GPRS.h>
Aquí tienes el post sobre cómo instalar nuestras Boards:
3.- Es muy importante implementar ciertas funciones como la que se usa para activar el módulo si son necesarias en su programa:
GPRS.enableGPRS(APN, USERNAME, PASSWORD)
Si quieres ver todas las funciones GPRS disponibles, puedes consultar el documento pertinente cuando te descargues las Boards.
Ejemplos de uso del módulo GPRS
Ahora que ya sabemos los principales pasos, vamos a ver dos ejemplos sobre cómo utilizar el Módulo GPRS. Puedes encontrar los dos en los ejemplos de GPRS de las Boards de Arduino IDE:
Servidor
Antes de nada, debes definir los parámetros de tu tarjeta SIM (PIN, APN, USERNAME, PASSWORD). Estos dependen de la compañía de la tarjeta, puedes encontrarlos en Internet o contactando directamente con la compañía si no los tienes. Este programa es un simple ejemplo de un servidor. En el bloque del setup, este mira si se requiere el número PIN y, si es así, comprueba si es correcto y desbloquea la SIM. En el bloque del loop, el programa reproduce cada 3 segundos los siguientes parámetros; comprueba si NetworkStatus es 1 (Registered(home)) o 5 (Registered(roaming)), si es uno de estos dos, activa el GPRS (si todavía no estaba activado) y, si un cliente está disponible lo que significa conectado al servidor, escribe en el Puerto Serie (Serial Monitor) el mensaje que el cliente ha enviado.
Aquí tienes el código:
// GPRS library example
// by Industrial Shields
#include <GPRS.h>
#define PIN ""
#define APN ""
#define USERNAME ""
#define PASSWORD ""
uint8_t buffer[1024];
int networkStatus = -1;
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(9600UL);
if (!GPRS.begin(80)) {
Serial.println("Impossible to begin GPRS");
while(true);
}
int pinRequired = GPRS.isPINRequired();
if (pinRequired == 1) {
if (!GPRS.unlockSIM(PIN)) {
Serial.println("Invalid PIN");
while (true);
}
}
else if (pinRequired != 0) {
Serial.println("Blocked SIM");
while (true);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
static uint32_t lastStatusRead = millis();
if (millis() - lastStatusRead > 3000) {
networkStatus = GPRS.getNetworkStatus();
lastStatusRead = millis();
if (networkStatus == 1 || networkStatus==5) {
if (!GPRS.enableGPRS(APN, USERNAME, PASSWORD)){
GPRS.enableGPRS(APN, USERNAME, PASSWORD);
}
else{
GPRSClient client = GPRS.available();
if (client) {
size_t len = client.available();
if (len > 0) {
client.read(buffer, len);
Serial.write(buffer, len);
}
}
}
}
}
switch (networkStatus) {
case 0:
Serial.println("Not registered");
break;
case 1:
Serial.println("Registered (home)");
break;
case 2:
Serial.println("Not registered (searching)");
break;
case 3:
Serial.println("Denied");
break;
case 4:
Serial.println("Unknown");
break;
case 5:
Serial.println("Registered (roaming)");
break;
}
}
Servidor
Antes de nada, debes definir los parámetros de tu tarjeta SIM (PIN, APN, USERNAME, PASSWORD). Estos dependen de la compañía de la tarjeta, puedes encontrarlos en Internet o contactando directamente con la compañía si no los tienes. Este programa es un simple ejemplo de un servidor. En el bloque del setup, este mira si se requiere el número PIN y, si es así, comprueba si es correcto y desbloquea la SIM. En el bloque del loop, el programa reproduce cada 3 segundos los siguientes parámetros; comprueba si NetworkStatus es 1 (Registered(home)) o 5 (Registered(roaming)), si es uno de estos dos, este procede a comprobar GPRSStatus, si es 1(GPRS conectado) comprueba si el cliente esta conectado y envía diversos mensajes al servidor. Después de esto, si el cliente está disponible, el programa escribe los mensajes previos en el Puerto Serie (Serial Monitor) con el fin de comprobarlos.
Aquí tienes el código:
// GPRS library example // by Industrial Shields #include <GPRS.h> #define PIN "" #define APN "" #define USERNAME "" #define PASSWORD "" GPRSClient client; uint8_t buffer[1024]; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600UL); if (!GPRS.begin()) { Serial.println("Impossible to begin GPRS"); while(true); } int pinRequired = GPRS.isPINRequired(); if (pinRequired == 1) { if (!GPRS.unlockSIM(PIN)) { Serial.println("Invalid PIN"); while (true); } } else if (pinRequired != 0) { Serial.println("Blocked SIM"); while (true); } } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { static uint32_t lastStatusTime = millis(); if (millis() - lastStatusTime > 2000) { uint8_t networkStatus = GPRS.getNetworkStatus(); Serial.print("Status: "); Serial.println(networkStatus); lastStatusTime = millis(); if ((networkStatus == 1) || (networkStatus == 5)) { int GPRSStatus = GPRS.getGPRSStatus(); if (GPRSStatus == 0) { if (!GPRS.enableGPRS(APN, USERNAME, PASSWORD)) { Serial.println("GPRS not enabled"); } } else if (GPRSStatus == 1) { if (GPRS.connected()) { if (!client.connected()) { static bool requestDone = false; if (!requestDone) { if (!client.connect("www.industrialshields.com", 80)) { Serial.println("Error connecting to web"); } else { client.println("GET /index.html HTTP/1.1"); client.println("Host: www.industrialshields.com"); client.println("User-Agent: GPRS-PLC"); client.println(); Serial.println("Connected"); Serial.println("Data sent"); requestDone = true; } } } else if (client.available()) { Serial.println("HTTP response:"); size_t len = client.read(buffer, sizeof(buffer)); Serial.write(buffer, len); client.stop(); } } } } } }