Servicio HTTP II
Saberes previos
- Saber interpretar circuitos electrónicos.- Ser capaz de analizar hoja de datos o dataship del sim800l.- Conocer el entorno de Arduino.- Conocer comandos AT para poder programar y comunicar el modulo sim800l.- Conocer como realizar tipo de peticiones, GET, POST para el protocolo HTTP.
- Saber interpretar circuitos electrónicos.
- Ser capaz de analizar hoja de datos o dataship del sim800l.
- Conocer el entorno de Arduino.
- Conocer comandos AT para poder programar y comunicar el modulo sim800l.
- Conocer como realizar tipo de peticiones, GET, POST para el protocolo HTTP.
Materiales Utilizados:
- Tarjeta de Arduino Uno o mega 2560
- Modulo sim800l
- Sim card, puede ser de cualquier de esta compañía: Tigo, Claro o Movistar "para Colombia". Si estas en un país distinto, puedes probar con distintas sim card y ver con cual funciona bien.
Circuito
Descripción del código
En la practica anterior (video 18), se describió un poco sobre el protocolo HTTP, se describieron algunos conceptos claves, para poder entender el proceso de configuración e invocación de un servicio HTTP a través del módulo sim800l (cliente). En esta práctica se realiza un proceso similar, pero haciendo una invocación de tipo POST, además se utiliza una base de dato MySQL para guardar los datos de ubicación que se envian al servicio, que se implementa con lenguaje PHP, a continuación se detalla los comandos AT y recursos utilizados:
AT+SAPBR=3,1,"Contype","GPRS": Configurar perfil de portador.
AT+SAPBR=3,1,"APN","internet.comcel.com.co": Establecer contexto de portador, el valor internet.comcel.com.co depende del operador móvil que se esté utilizando, en esta prueba se utiliza Claro-Colombia.
AT+SAPBR=1,1: Contexto de portador activo.
AT+SAPBR=2,1: Leer parámetro de portador.
AT+HTTPINIT: Se inicia el servicio HTTP.
AT+HTTPPARA="CID",1: Para llamar HTTP.
AT+HTTPPARA="URL","http://prueba-sim800l-post.atwebpages.com/prueba-sim800l-post.php": Se estable IP del servicio expuesto para invocar.
AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded": establece tipo de contenido en la solicitud HTTP.
AT+HTTPDATA=192,5000: define el tamaño de los datos del cliente que se transfieren en bytes.
Datos de pruebas a enviar:
- data=9.24141;-74.35132
- data=9.24134;-74.35125
Donde:
data: es el parámetro que guarda los datos de la ubicación (latitud;longitud), separado con punto y como ";".
AT+HTTPACTION=1: Realiza acciones HTTP (POST).
AT+HTTPREAD: Leer respuesta del servicio.
AT+HTTPTERM: Finalizar sesión HTTP.
AT+SAPBR=0,1: Desactivar contexto de portadora.
El comando AT+HTTPACTION=1 define el tipo de petición a realizar, en este caso POST. Tener en cuenta que el orden de envió de los comandos AT al sim800l, es el descrito anteriormente.
Descripción del servicio de prueba
Para esta practica se sigue implementado el servicio en lenguaje PHP, con la diferencia de ser un servicio para peticiones de tipo POST, a continuación se describe:
<?php
$servername = "fdb23.awardspace.net";
$username = "3420962_sim800l";
$password = "password ";
$dbname = "dbname ";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$dataString = $_POST["data"];
$latData = substr($dataString,0,7);
$longData = substr($dataString,8,16);
$sql = "INSERT INTO gps_data (latitud, longitud) VALUES ($latData, $longData)";
if (mysqli_query($conn, $sql)) {
echo "Posicion guardada correctamente...!";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
En el código anterior, inicialmente se definen las credenciales de acceso a la base de datos, con la función mysqli_connect se crea la conexión a la base, luego se hace un chequeo si la conexión ha ido bien.
Se obtiene el parámetro de la petición POST "data", que es almacenado en la variable dataString, se extrae de dicha variable los datos de la posición utilizando la función substr: latitud "latData" y longitud "longData". Posteriormente se crea la consulta para insertar en la tabla gps_data los datos de latitud y longitud.
Finalmente se describe el proceso que se encarga de mostrar los datos almacenado en la base de datos, en una pagina muy sencilla, donde se puede observar los datos del [id, latitud, longitud], dicho proceso es implementado en lenguaje PHP:
<?php
$servername = "fdb23.awardspace.net";
$username = "3420962_sim800l";
$password = "password";
$dbname = "dbname";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT * from gps_data ORDER BY id ASC";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - latitud: " . $row["latitud"]. " -longitud: " . $row["longitud"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
El código anterior realiza una consulta a la tabla gps_data, si se encuentra datos, se recorren todos los registros a través de un bucle while y se pintan las respectiva filas.
Nota: Se debe tener en cuenta de contar con un paquete de dato activo, para que se pueda hacer la configuración satisfactoria del servicio y poder acceder a el, no basta con tener saldo disponible en la línea móvil.
Tips para realizar las pruebas
- Si no posee el modulo tp4056, puede realizar las pruebas solo con batería, utilice una, no es necesario tener las dos, tener en cuenta que debe estar cargada más del 50%.
- Se recomienda utilizar cables de conexión para la alimentacion del sim800l, con calibre más gruesos que los dupont, para garantizar la circulación de corriente de manera fluida.
- No se recomienda hacer las conexiones sobre protoboard, porque se crean falsos contactos que impide la circulación fluida de la corriente, en lo posible realice las conexiones con cables de un calibre grueso, especialmente los de la alimentación (Vcc y GND), si es posible, soldar los cables.
- Si el sim800l no logra conectarse a la red con determinada sim card del operador móvil que esta utilizando, quítela y realice la prueba con la de otro operador disponible en su país o ciudad.
- Fijar la frecuencia del módulo en 115200 bps "Serial.begin(115200)" y "Serial1.begin(115200)", por lo que la mayoría de los módulos vienen configurado con esa frecuencia, si no le funciona con dicha frecuencia, ir modificando hasta encontrar la correcta.
- En el circuito, no olvidar la conexión en común de las tierras "GND" del Arduino Mega 2560, el modulo tp4056 y el modulo sim800l.
- Cuando se disponga a subir el código a la tarjeta de Arduino Mega, tener presente que la conexión con los pines de trasmisión TX1 y RX1, deben estar desconectado para que no se tenga error por conexión, luego conectar nuevamente para las pruebas.
Códigos Fuentes Utilizados
En el siguiente enlace, puedes encontrar el repositorio con los códigos fuentes que se utilizaron en las pruebas.
0 Comentarios