GSM Web Client

Este programa conecta una placa Arduino o Genuino con la página de Arduino, http://arduino.cc , por medio del escudo GSM. A continuación, imprime el contenido de la página en el monitor serie del software de Arduino (IDE).


Hardware necesario


Circuito



Código

En primer lugar, importar la biblioteca de GSM

# include <GSM.h>


Las tarjetas SIM pueden tener un número PIN que permite su funcionalidad. Definir el PIN de su tarjeta SIM. Si su tarjeta SIM no tiene PIN, puede dejarlo en blanco:

#define PinNumber ""


Definir una serie de constantes que contienen información acerca de la red GPRS a la que va a conectar. Necesitará el nombre de punto de acceso (APN), inicio de sesión (login) y contraseña (password). Para obtener esta información, póngase en contacto con su proveedor de red para la información más actualizada. Esta página tiene alguna información acerca de los diversos ajustes de operador, pero puede no estar actualizada.

#define GPRS_APN       "GPRS_APN"
#define GPRS_LOGIN     "login"
#define GPRS_PASSWORD  "password"

Inicializar instancias de las clases que va a utilizar. Usted va a necesitar las clases GSM, GPRS, y GSMClient.

GSMClient client;
GPRS gprs;
GSM gsmAccess;

Crear algunas variables para contener el servidor, la ruta y el puerto que desea conectarse.

char server[] = "arduino.cc";
char path[] = "/";
int port = 80;

En setup, abra una conexión serie al ordenador. Después de abrir la conexión, envía un mensaje que indica que el programa se ha iniciado.

 void setup(){
  Serial.begin(9600);
     Serial.println("Iniciando cliente web Arduino.");

Crear una variable local para realizar un seguimiento del estado de la conexión. Vamos a usar esto para mantener el boceto de arranque hasta que la tarjeta SIM está conectada a la red:

boolean notConnected = true;

Conectarse a la red llamando a gsmAccess.begin (). Se necesita PIN de la tarjeta SIM como argumento. También podrá conectarse a la red GPRS utilizando gprs.attachGPRS (). Esto requiere el APN, el inicio de sesión y la contraseña que ha declarado anteriormente. Al colocar esto dentro de un bucle while(), puede comprobar continuamente el estado de la conexión y esperar a que ambos se conectan realmente antes de continuar.

Cuando el módem y la conexión se hayan conectado a la red GPRS,  gmsAccess() devolverá GSM_READY. Use esto como una bandera para establecer la variable notConnected a true o a false. Una vez conectado, se ejecutará el resto de setup.

while(notConnected)
  {
     if(gsmAccess.begin(PINNUMBER)==GSM_READY)
         (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
       notConnected = false;
     else
     {
       Serial.println("No conectado");
       delay(1000);
     }
   }

Intentará conectarse al servidor utilizando client.connect ().connect () requiere dos argumentos, el servidor y el puerto. Una vez conectado al servidor, realizar una solicitud HTTP llamando client.print (). Una solicitud web típica se parece a "GET ruta de acceso HTTP / 1.0". print  enviará el mensaje, al igual que lo haría un navegador.

if (client.connect(server, port))
   {
     Serial.println("Conectado");
     client.print("Obtenido ");
     client.print(path);
     client.println(" HTTP/1.0");
     client.println();
 
 }

Si la conexión con el servidor no pudo realizarse, hacer tomar nota de ello en el monitor serie, y cerrar setup.

else  {     Serial.println("Fallo de conexion");}
}

Dentro de loop, comprobar para ver si hay bytes devueltos por el servidor. Si es así, leerlos e imprimirlos en el monitor serie.

if (client.available())
   {
     char c = client.read();
     Serial.print(c);
   }

Si se desconecta el servidor, lo que se suele hacer una vez que se ha completado la solicitud HTTP, es detener el cliente a nivel local y cerrar loop.

if (!client.available() && !client.connected())
   {
     Serial.println();
     Serial.println("disconnecting.");
     client.stop();

     // do nothing forevermore:
     for(;;)
       ;
   }
 }

Una vez que se carga el código, abrir el monitor serie. Debería ver el código HTML de http://arduino.cc imprimir en pantalla cuando se recibe. Tarda aproximadamente un minuto, por lo que no se preocupe si usted no tiene una retroalimentación inmediata!

A continuación, el programa completo.


// Cliente Web

// Este programa se conecta a un sitio web por medio de un escudo GSM. 
// Específicamente, este ejemplo descarga la URL "http://www.arduino.cc/asciilogo.txt" 
// y la imprime al monitor serie. 

// Circuito: 
// * Escudo GSM conectado a un Arduino 
// * Tarjeta SIM con un plan de datos 

//creado el 8 de Marzo de 2012 
// por Tom Igoe http://www.arduino.cc/en/Tutorial/GSMExamplesWebClient 

// bibliotecas
#include <GSM.h>

// Numero de PIN 
#define PINNUMBER ""

// APN data
#define GPRS_APN       "GPRS_APN" // reemplazar por su APN GPRS
#define GPRS_LOGIN     "login"    // reemplazar por su login GPRS
#define GPRS_PASSWORD  "password" // reemplazar por su password GPRS

// initializa la instancia biblioteca
GSMClient client;
GPRS gprs;
GSM gsmAccess;

// URL, path & port (por ejemplo: arduino.cc)
char server[] = "arduino.cc";
char path[] = "/asciilogo.txt";
int port = 80; // el puerto 80 es el puerto por defecto para HTTP

void setup() {
  // initializa la comunicacion serie y espera a que el puerto se abra:
  Serial.begin(9600);
  while (!Serial) {
    ; // espera a que el puerto este conectado. Solo necesario para USB nativo
  }

  Serial.println("Iniciando el cliente web Arduino.");
  // estado de la conexion
  boolean notConnected = true;

  // Despues de iniciar el modem con GSM.begin()
  // conectar el escudo a la red GPRS con el APN, login y password
  while (notConnected) {
    if ((gsmAccess.begin(PINNUMBER) == GSM_READY) &
        (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
      notConnected = false;
    } else {
      Serial.println("No conectado");
      delay(1000);
    }
  }

  Serial.println("Conectando...");

  // si consigue una conexion, informa por el monitor serie:
  if (client.connect(server, port)) {
    Serial.println("Conectado");
    // Make a HTTP request:
    client.print("CONSEGUIDA ");
    client.print(path);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(server);
    client.println("Conexion: Cerrar");
    client.println();
  } else {
    // Si usted no recibió una conexión con el servidor:
    Serial.println("Fallo de conexion");
  }
}

void loop() {
  // Si hay bytes entrantes disponibles
  // desde el servidor, leerlos e imprimirlos:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // si el servidor se desconecta, detener el cliente:
  if (!client.available() && !client.connected()) {
    Serial.println();
    Serial.println("Desconectando.");
    client.stop();

    // no hace nada
    for (;;)
      ;
  }
}



2 comentarios: