Arduino y sketches de Arduino

Arquitectura de firmware para sondas de temperatura conectadas a la red con placas Arduino y sensores de humedad.

Vista superior de una placa microcontroladora Arduino Uno azul sobre fondo blanco
Las placas compatibles con Arduino ejecutan el sketch que consulta las sondas y publica JSON. Foto: Wikimedia Commons contributor. CC0

El hardware de las sondas funciona con microcontroladores compatibles con Arduino. El firmware, que suele llamarse sketch, lee los sensores a intervalos fijos, da formato JSON a los resultados y los sirve por la red para que el sitio web y otros clientes obtengan datos en vivo sin cables serie.

Qué hace el sketch

  1. Inicializa los buses de sensores y la pantalla LCD local de 16×2 para lecturas in situ.
  2. Lee cada sonda DHT22 con reintentos ante errores transitorios del bus.
  3. Calcula un promedio de las sondas en buen estado como valor resumen rápido en el JSON.
  4. Responde a las solicitudes HTTP con un documento JSON compacto a través del shield Ethernet.
  5. Opcionalmente, registra errores por serie para depurar in situ.

Estructura JSON típica

Los clientes esperan un objeto temp en el nivel superior con claves numéricas para cada sonda, además de avg. La humedad aparece junto a la temperatura en cada sonda. Mantener las claves estables importa más que un formato bonito: las asignaciones del dashboard hacen referencia directa a esas claves.

{
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 },
    "1": { "f": 36.8, "c": 2.7, "h": 43.5 },
    "avg": { "f": 37.5, "c": 3.1, "h": 42.2 }
  }
}

Para la ingesta push, el mismo objeto de sonda puede enviarse a /api/ingest/<key>. Los campos opcionales de nivel superior battery (o battery_pct) y rssi actualizan el estado del dispositivo en la página Devices sin necesidad de claves de sensor adicionales.

{
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 }
  },
  "battery": 87,
  "rssi": -62
}

Ingesta push desde el shield Ethernet

La pila W5100 de un Uno no admite TLS, así que no puede hacer POST directamente a https://probeharbor.dev. Usa ethernet_dht22_ingest para enviar por HTTP el JSON temp clásico (DHT22 en A4/A5, JSON opcional en el puerto 80 para consultas desde la LAN). Ejecuta push_https_forward.py en una Raspberry Pi, un NAS o un portátil para que esos POST lleguen a ProbeHarbor por HTTPS. Los ejemplos para ESP32 con Wi‑Fi que hablan TLS están en sketches/.

Guías de cableado del hardware

El montaje físico usa un Arduino Uno, un shield Ethernet W5100, una protoboard, un potenciómetro de contraste, una pantalla LCD de 16×2 y dos sensores DHT22. Tres páginas complementarias documentan en detalle los esquemas y el mapa de pines:

Opciones de pila de red

Esta revisión usa un shield Ethernet por SPI. El sketch gestiona DHCP, los bucles de reconexión y el servicio del JSON mientras la LCD sigue mostrando los valores de las sondas en vivo. Cuando TLS es demasiado pesado para el MCU, un relay en Python puede terminar HTTPS: consulta Scripts y feeds en Python. Para la ingesta push desde el mismo shield, consulta ethernet_dht22_ingest.

Arduino Uno conectado a un sensor DHT de temperatura y humedad con tres cables puente
Una primera prueba mínima de MCU y sensor antes del cableado de Ethernet, LCD y doble sonda. Foto: Wikimedia Commons contributor. CC BY-SA 4.0
Placa de sonda ProbeHarbor de segunda revisión con shield Ethernet, LCD y sensores DHT22
ProbeHarbor, revisión dos: Ethernet, lectura en LCD y dos entradas DHT22 en un solo montaje.

Flujo de desarrollo

Los sketches se editan en el Arduino IDE o en PlatformIO, se graban por USB y se verifican con registros por serie antes de montar la placa en el espacio vigilado. Comprueba la estructura del JSON con curl antes de añadir la URL del feed al dashboard del sitio.

En este repositorio, dentro de sketches/, hay ejemplos listos para adaptar para DS18B20, MAX31855, MAX6675 y Uno + Ethernet. La Raspberry Pi Pico W / Pico 2 W usa el mismo JSON de ingesta con CircuitPython o MicroPython. Firmware completo de Ethernet + DHT + LCD: arduino-network-json-temperature-sever.

Consejos de fiabilidad

  • Los reinicios por watchdog se recuperan de los raros bloqueos de red sin tener que subir a una escalera.
  • Separa el ruido de la alimentación de los sensores de la del MCU cuando haya tiradas de cable largas.
  • Versiona tu esquema JSON en la documentación cuando añadas campos.
  • Documenta qué pines GPIO corresponden a qué etiquetas físicas de sonda; consulta la guía de cableado de pines.

Preguntas frecuentes

¿Dónde están los sketches de ejemplo para Arduino?
En el repositorio de GitHub de probeharbor, en sketches/, además de las guías de Arduino en About. Los ejemplos para ESP32 hacen POST por HTTPS directamente. El Uno + Ethernet W5100 usa ethernet_dht22_ingest (JSON de temperatura clásico en A4/A5) más un relé HTTP→HTTPS en la red local: el shield no puede hacer TLS con probeharbor.dev.