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 | |
---|---|---|
![]() |
Arduino UNO | Arduino UNO |
![]() |
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
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:

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.

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

Si, lo estoy alimentando directo al módulo y con el multimetro y me da 1A, cambié algunas cosas en pro de que se conectara, y de hecho el módulo se conecta de acuerdo al parpadeo del led, pero en el monitor me sigue dejando sin acceso.
enviarAT(«AT+CGATT=1\r», «OK», 1000); //Iniciamos la conexión GPRS
enviarAT(«AT+CSTT=\»internet.comcel.com.co\»,\»\»,\»\»», «OK», 3000); //Definimos el APN, usuario y clave a utilizar
enviarAT(«ATD*99#», «OK», 1000);
enviarAT(«AT+CIPSTART=\»TCP\»,\»www.google.com.co\»,\»80\»», «CONNECT OK», 5000); //Inicia una conexión TCP
enviarAT(«AT+CIICR», «OK», 3000); //Activamos el perfil de datos inalámbrico
enviarAT(«AT+CIFSR», «», 3000); //Activamos el perfil de datos inalámbrico
Hola Jean, la verdad es que no me acuerdo ya pero es un retorno de carro que supongo que hay que enviarlo. De todas formas prueba a quitarlo y si funciona pues estupendo. LA función AT espera una respuesta, que puede ser ERROR o nada, si por ejemplo mandas un comando AT que no reconoce.
Hola gracias por el tutorial, tengo algunas preguntas:Por qué en el comando enviarAT(«AT+CGATT=1\r», «OK», 1000) se le añade al final un \r? En el resto de comandos AT no lo tiene, habría alguna diferencia si lo omito?
Por otro lado, la funcion enviarAT cuando no responde lo que se espera retorna ERROR y un 0 ?
Gracias