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í.


Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *