Cuando trabajamos con dispositivos IoT y Arduino, una de las formas más sencillas de enviar datos a un servidor es a través de una URL con parámetros. En este artículo, explicaremos cómo hacerlo usando una placa con Wi-Fi, como el ESP32 o ESP8266.
Requisitos
Antes de comenzar, necesitas lo siguiente:
- Una placa compatible con Wi-Fi (ESP32 o ESP8266).
- Un servidor con capacidad para recibir datos mediante una URL.
- Una red Wi-Fi disponible.
Código para conectar a Wi-Fi
El primer paso es conectar nuestro Arduino a una red Wi-Fi. Utilizamos la biblioteca WiFi.h
para gestionar la conexión:
#include <WiFi.h>
const char* ssid = "NombreDeTuRed";
const char* password = "TuContrasena";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Conectando a Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConectado");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Aquí colocaremos la lógica de envío de datos
}
Enviar datos a través de una URL
Para enviar datos a un servidor, usamos el protocolo HTTP. La forma más simple es realizar una solicitud GET con una variable como parámetro.
#include <HTTPClient.h>
void sendData(int value) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String serverPath = "http://tuservidor.com/recibir_dato.php?valor=" + String(value);
http.begin(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("Respuesta del servidor: ");
Serial.println(http.getString());
} else {
Serial.print("Error en la petición HTTP: ");
Serial.println(httpResponseCode);
}
http.end();
}
}
Integración en loop()
Podemos llamar a la función sendData()
desde loop()
, enviando datos cada cierto tiempo:
void loop() {
int sensorValue = analogRead(34); // Lectura de un sensor, por ejemplo
sendData(sensorValue);
delay(5000); // Envía datos cada 5 segundos
}
El código entero.
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "NombreDeTuRed";
const char* password = "TuContrasena";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Conectando a Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConectado");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void sendData(int value) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String serverPath = "http://tuservidor.com/recibir_dato.php?valor=" + String(value);
http.begin(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("Respuesta del servidor: ");
Serial.println(http.getString());
} else {
Serial.print("Error en la petición HTTP: ");
Serial.println(httpResponseCode);
}
http.end();
}
}
void loop() {
int sensorValue = analogRead(34); // Lectura de un sensor, por ejemplo
sendData(sensorValue);
delay(5000); // Envía datos cada 5 segundos
}
Prueba sin sensores.
#include <WiFi.h>
#include <HTTPClient.h>
// Configura tus credenciales de Wi-Fi
const char* ssid = "NombreDeTuRed"; // Reemplaza con el nombre de tu red Wi-Fi
const char* password = "TuContrasena"; // Reemplaza con tu contraseña de Wi-Fi
// URL base (sin el número aleatorio)
const String baseURL = "http://ejemplo.com/ruta/?numero="; // Reemplaza con tu URL
void setup() {
// Inicia la comunicación serial
Serial.begin(115200);
// Conecta a la red Wi-Fi
WiFi.begin(ssid, password);
// Espera a que se establezca la conexión
Serial.print("Conectando a Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Una vez conectado, muestra "Conectado" en el monitor serie
Serial.println();
Serial.println("Conectado");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
// Genera un número aleatorio
int numeroAleatorio = random(100); // Número aleatorio entre 0 y 99
// Construye la URL completa con el número aleatorio
String urlCompleta = baseURL + String(numeroAleatorio);
// Realiza la solicitud HTTP
HTTPClient http;
http.begin(urlCompleta); // Especifica la URL
int httpCode = http.GET(); // Envía la solicitud GET
// Verifica si la solicitud fue exitosa
if (httpCode > 0) {
Serial.print("Código de respuesta HTTP: ");
Serial.println(httpCode);
// Lee la respuesta del servidor
String respuesta = http.getString();
Serial.println("Respuesta del servidor:");
Serial.println(respuesta);
} else {
Serial.print("Error en la solicitud HTTP: ");
Serial.println(httpCode);
}
// Cierra la conexión
http.end();
}
void loop() {
// No es necesario hacer nada en el loop para este ejemplo
}
Ejemplo de la salida del serial monitor
Conectando a Wi-Fi.....
Conectado
Dirección IP: 192.168.1.100
Código de respuesta HTTP: 200
Respuesta del servidor:
{"status":"ok","numero":42}
¿Tienes problemas para configurar <httpClient.h> en arduino? Entra aquí.
Deja una respuesta