bclose

Conectarse a Internet mediante GPRS

Realizar una conexión HTTP mediante Arduino y el módulo GRPS

Objetivos

 

 

    • Seguir ampliando las funcionalidades del módulo GPRS.
    • Aprender a configurar el GPRS para poder conectarnos a Internet.
    • Realizar una conexión TCP con servidor.
    • Enviar una petición HTTP a un servidor.
 

Material requerido.

 

  Tienda España Tienda Mexico
Vista principal de un arduino uno Arduino UNO Arduino UNO
Vista principal Shield GPRS Shield GPRS

 

CONFIGURAR LA CONEXIÓN A INTERNET

 

Si habéis seguido las sesiones que hemos dedicado hasta ahora al GPRS, no vais a tener ningún problema con esta. Y si no las habéis leído, os recomendamos que lo hagáis, porque vamos a pasar muy por encima las cosas que ya hemos explicado y vamos a reutilizar (con algunos cambios) la mayoría de las funciones que ya hemos usado antes. Concretamente vamos a basarnos en el programa que utilizamos en la sesión dedicada a Enviar y recibir llamadas y SMS.

De hecho las funciones que hemos usado para encender, apagar, reiniciar y enviar lo comandos AT y recibir las respuestas vamos a dejarlas tal cual.

int enviarAT(String ATcommand, char* resp_correcta, unsigned int tiempo)
{

  int x = 0;
  bool correcto = 0;
  char respuesta[100];
  unsigned long anterior;

  memset(respuesta, '\0', 100); // Inicializa el string
  delay(100);
  while ( SIM900.available() > 0) SIM900.read(); // Limpia el buffer de entrada
  SIM900.println(ATcommand); // Envia el comando AT
  x = 0;
  anterior = millis();
  // Espera una respuesta
  do {
    // si hay datos el buffer de entrada del UART lee y comprueba la respuesta
    if (SIM900.available() != 0)
    {
        respuesta[x] = SIM900.read();
        x++;
      // Comprueba si la respuesta es correcta
      if (strstr(respuesta, resp_correcta) != NULL)
      {
        correcto = 1;
      }
    }
  }
  // Espera hasta tener una respuesta
  while ((correcto == 0) && ((millis() - anterior) < tiempo));
  Serial.println(respuesta);

  return correcto;
}

void power_on()
{
  int respuesta = 0;

  // Comprueba que el modulo SIM900 esta arrancado
  if (enviarAT("AT", "OK", 2000) == 0)  
  {
    Serial.println("Encendiendo el GPRS...");

    pinMode(9, OUTPUT);
    digitalWrite(9, HIGH);
    delay(1000);
    digitalWrite(9, LOW);
    delay(1000);

    // Espera la respuesta del modulo SIM900
    while (respuesta == 0) {
      // Envia un comando AT cada 2 segundos y espera la respuesta
      respuesta = enviarAT("AT", "OK", 2000);
      SIM900.println(respuesta);
    }
  }
}

void power_off()
{
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(1000);
}

void reiniciar()
{
  Serial.println("Reiniciando...");
  power_off();
  delay (5000);
  power_on();
}

La función void iniciar(); en la que configuramos el módulo GPRS, la vamos a tener que cambiar para enviar los comandos AT que necesitamos para conectarnos correctamente a Internet. Lo primero es que vamos a necesitar conectarnos a la red GPRS.

Aunque no lo hemos dicho claro hasta ahora, os habréis dado cuenta que en cuanto activamos la tarjeta y metemos el PIN correcto el módulo se conecta a la red de forma automática. No hay más que esperar y comprobar que realmente lo haya hecho con el comando AT+CREG?.

Sin embargo para conectarnos a la red GPRS y adjuntarnos al servicio de paquetes que nos posibilite conectarnos a Internet tendremos que utilizar el siguiente comando:

AT+CGATT=1 //Conectamos a la red GPRS

 

Contenido solo disponible para suscriptores. ¡Accede al contenido!

Ya estamos preparados para cargar el sketch en nuestro Arduino, y si está todo correcto deberíamos ver cómo se va configurando en el monitor serie:

monitor serie internet gprs

Si ahora escribimos “h” en el monitor serie y pulsamos “Intro”, veremos cómo empiezan a llegar un montón de datos. La gran mayoría de ellos no nos interesan y corresponden a la programación de la página, que además, al ser de tipo WordPress tiene un montón de cosas. Pero si os fijáis veréis como tenemos lo que nos interesaba, y de esta forma podemos verificar que la conexión ha ido bien.

resultado http grps arduino

Aquí os dejamos el programa completo para que lo podáis descargar: gprs_internet.

 

Resumen de la sesión

 

En esta sesión hemos aprendido varias cosas importantes:

 
    • A configurar el módulo GPRS para conectarse a Internet.
    • Hemos realizado una conexión TCP con un servidor.
    • A enviar una petición Http.
    • Hemos realizado una conexión Http sin utilizar un navegador, utilizando nuestro Arduino.
    • Podemos utilizar nuestro Arduino para conectarnos a Internet desde cualquier lugar en el que tengamos cobertura de red móvil
 
 
 

LikeUsOnFacebook_Icon

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(103) Comments

  • Avatar for Ivan Uriarte
    • Laura

    Hola! Mi problema es que al intentar conectar a la red (AT+CGATT=1), no recibo el OK, no se conecta. ¿A qué puede ser debido? A la ubicación? Lo he utilizado en otras ocasiones y no he tenido problemas!
    Gracias!!

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Gracias Sebastián. Un saludo.

  • Avatar for Ivan Uriarte
    • Sebastián

    Muchas gracias por la ayuda que brindad!!!! Me ha servido de mucho!!!! Un abrazo desde Argentina!!!!

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Sí podrías usarlo, le pasas los parámetros en la URL y listo.

  • Avatar for Ivan Uriarte
    • Luis Angel

    hola buenas tardes, muy bien tutorial, me funciono muy bien, solo quería saber si con ese codigo se puede utilizar el metodo post para agregar datos a una base de datos, sauldos

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    El servidor te responde por el puerto serie una vez has hecho la conexión. Puedes guardarlo en un array de char y hacerle ahí el indexof.

  • Avatar for Ivan Uriarte
    • Andrse

    Hola queria saber en que parte es que el server me responde con la pagina web que constesto esto con el fin de aguardarlo en un string y ahcer un index off pero no encuentro donde esta la respuesta podrias ayudarme porfavor

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Guillermo primer tienes que pasar la temperatura a char. Si es un int, por ejemplo, la manera más sencilla es pasarla a string y luego a array char:
    int a=1;
    char b[2];
    String str;
    str=String(a);
    str.toCharArray(b,2);

    Ahora ya no tienes más que incluirlo en el array del mensaje de conexión.

  • Avatar for Ivan Uriarte

    Gracias Ivan, pero podrias enviarme unas lineas de como quedaria, soy nuevo en esto y totalmente autodidacta.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Guillermos, prueba a sacar los datos del sensor y a construir un array de char a partir de él junto con el resto del mensaje. Así haz la ptición directamente con el array que has creado.

  • Avatar for Ivan Uriarte
    • Guillermo

    Hola, se agradece tu tutorial, me funciona muy bien, pero quiero incluir el valor de un sensor en la peticion GET, y al hacerlo solo me pone el nombre de la variable, pero no su valor, alguna idea de como solucionarlo?
    «GET /dc/gps.Test.jsp?temp=(tempC) HTTP/1.1\r\nHost: 45.7.228.40\r\nConnection: close\r\n\r\n»;

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Rafael, lo poco que he podido probar parece que el problema es que hemos movido nuestra página a https y elste módulo no soporta conexión segura.

  • Avatar for Ivan Uriarte
    • Rafael

    Hola Jorge Pudiste arreglar ese problema? a mi me sale lo mismo. Gracias!

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Lo siento pero no hemos trabajado con ese módulo, a ver si alguien puede echarte una mano. Un saludo.

  • Avatar for Ivan Uriarte

    muy bueno el foro… estoy aquí por que no logro enviar la imagen que captura el modulo A6C la Web… ya cree mi servidor así como también realice todos los paso que realizan en los tutoriales que por cierto son similares y poco… no logro enviar la imagen al web. El modulo me responde +CAMPOST:0… … orienten me por favor..

  • Avatar for Ivan Uriarte

    Hola Ivan, me compre una placa arduino bastante completa. Viene con un puerto serial RS232, el manual de operación dice que no conecte un dispositivo TTL por que se puede dañar. Mi pregunta es, la placa sim900 usa TTL?. De no ser así, que comunicación utiliza?. Saludos y gracias por todo el contenido.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    No lo he probado pero debería de funcionar igual.

  • Avatar for Ivan Uriarte
    • Juan

    Funciona para la el modulo SIM808?

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Ernesto, es necesario disponer de saldo, igual que en un teléfono normal. Un saludo.

  • Avatar for Ivan Uriarte
    • Ernesto Martinez

    Hola que excelente que ademas del producto hagan este tipo de post, una duda de las 2 formas ya sea en GSM y en GPRS necesito estar ingresando saldo al chip para realizar el envió de datos cierto? ¿o en GPRS no es necesario? gracias.

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login