Principiante15 min

Arduino UNO + DHT11: clima ambiental a Bloomit

Medí temperatura y humedad del aire con un sensor DHT11 y enviá los datos a Bloomit vía Serial USB desde el navegador. Código completo, librería Adafruit, sin configuración de WiFi.

Hardware necesario

  • Arduino UNO, Nano o Mega
  • Sensor DHT11 (o DHT22 para más precisión)
  • Resistencia 10kΩ (pull-up, opcional en módulos breakout)
  • Protoboard y cables jumper
  • Cable USB A-B
  • PC con Chrome 89+ o Edge 89+

Cómo funciona

El Arduino UNO no tiene WiFi, así que no puede enviar datos directamente a internet. En cambio, usa el puerto Serial USB para comunicarse con la PC. El flujo completo es: Arduino lee el DHT11 cada 60 segundos → imprime una línea JSON por Serial → el navegador abierto en bloomit.app lee ese Serial usando la Web Serial API → el front postea los datos al backend automáticamente.

La ventaja es que el setup es completamente plug-and-play: no hay que configurar WiFi en la placa, no hay credenciales de red, no hay firmware complejo. Conectás el Arduino por USB, abrís Bloomit en Chrome o Edge, y en menos de dos minutos ya estás recibiendo datos.

La limitación es la contracara: la PC tiene que estar encendida con la pestaña de Bloomit abierta y conectada. Para monitoreo desatendido 24/7, el camino es migrar a un ESP32 con WiFi directo. Pero para un proyecto de escritorio, laboratorio o habitación donde la computadora está siempre prendida, este setup es ideal.

Diagrama de conexión

GNDArduinoUno (o Nano / Mega)5VGNDD2DHT11temp + humedadVCCDATAGNDVCC (5V)GNDDATA (señal)Sensor DHT11

Si usás el sensor DHT11 crudo de 4 pines (sin módulo breakout), el cuarto pin —contando de izquierda a derecha mirando la rejilla— se deja sin conectar. En ese caso también necesitás agregar una resistencia pull-up de 10kΩ entre VCC y DATA. Los módulos breakout (los que vienen en una plaquita azul o roja) ya la traen incorporada y podés conectar directamente los 3 pines.

ArduinoComponentePin destinoCable color
5VDHT11VCCRojo
GNDDHT11GNDNegro
D2DHT11DATAAmarillo

Instalar la librería DHT

En el Arduino IDE abrí Sketch → Include Library → Manage Libraries, buscá "DHT sensor library" de Adafruit e instalala. El instalador te va a ofrecer instalar también "Adafruit Unified Sensor", que es una dependencia requerida; aceptá esa instalación también. Sin estas dos librerías el sketch no va a compilar.

Código completo

El sketch lee temperatura y humedad del DHT11 y los imprime por Serial como JSON. Bloomit detecta esas líneas y las reenvía a la API sin que tengas que hacer nada más.

#include <DHT.h>

// ── Configuración del sensor ───────────────────────────
#define DHTPIN  2      // Pin digital D2 donde está conectado el DATA
#define DHTTYPE DHT11  // Cambiar a DHT22 si usás ese modelo (más preciso)

DHT dht(DHTPIN, DHTTYPE);

// ── Intervalo de lectura ───────────────────────────────
// 60000 ms = 1 minuto. Con el plan free de Bloomit tenés 25 lecturas
// por dispositivo por día, así que 1 por minuto durante ~25 minutos
// es ideal para pruebas; para uso continuo podés subir a 3600000 (1h).
const unsigned long INTERVAL_MS = 60000;
unsigned long lastRead = 0;

// ── Setup ──────────────────────────────────────────────
void setup() {
  // 9600 baud: es el valor por defecto que usa el proxy de bloomit.app.
  // Si cambiás este valor, tenés que cambiarlo también al conectar
  // en el panel de Bloomit (selector de baud rate).
  Serial.begin(9600);
  dht.begin();

  // Handshake inicial con bloomit.app: le dice al proxy qué tipo
  // de dispositivo es este y qué versión de protocolo usa.
  Serial.println("{\"device\":\"arduino-dht11\",\"version\":1}");
}

// ── Loop ───────────────────────────────────────────────
void loop() {
  // Esperamos el intervalo sin bloquear con delay()
  if (millis() - lastRead < INTERVAL_MS) return;
  lastRead = millis();

  float h = dht.readHumidity();     // humedad relativa en %
  float t = dht.readTemperature();  // temperatura en °C (defecto)

  // Si la lectura falla, el DHT devuelve NaN. Puede pasar si el
  // sensor está mal conectado o si el cable DATA es muy largo.
  if (isnan(h) || isnan(t)) {
    Serial.println("{\"error\":\"read_failed\"}");
    return;
  }

  // Imprimimos JSON con un decimal de precisión.
  // Bloomit espera las claves "temperature" y "humidity".
  Serial.print("{\"temperature\":");
  Serial.print(t, 1);
  Serial.print(",\"humidity\":");
  Serial.print(h, 1);
  Serial.println("}");
}

Nota sobre el intervalo: INTERVAL_MS = 60000 (1 minuto) es un buen punto de partida para pruebas. Para uso continuo en un ambiente estable podés subir a 3600000 (1 hora) para no consumir las lecturas del plan free innecesariamente. El DHT11 tampoco se beneficia de leer más frecuente que eso: su tiempo de respuesta mínimo especificado en el datasheet es de 1 segundo, y en la práctica los cambios de temperatura y humedad en un interior son lentos.

Conectar desde bloomit.app

Con el sketch cargado y el Arduino conectado por USB, seguí estos pasos:

  1. Abrí Chrome o Edge. Firefox y Safari no soportan la Web Serial API todavía, así que no van a ver el botón de conexión.
  2. Ingresá a bloomit.app/devices/test (requiere login).
  3. Hacé click en Conectar por Serial USB. El navegador abre un popup con la lista de puertos disponibles. Seleccioná el que corresponde al Arduino (normalmente aparece como "USB Serial" o "CH340" en Windows; en Mac como /dev/cu.usbmodem...).
  4. Confirmá el baud rate 9600 (es el mismo que tiene el sketch).
  5. Una vez conectado, esperá hasta que el Arduino complete el primer ciclo de lectura (máximo 1 minuto si usás el intervalo por defecto). Las líneas JSON van a aparecer en la consola del panel. Si el token de tu cuenta es válido, los datos también se reflejan en tiempo real en el dashboard del dispositivo.

Importante: el proxy Serial funciona solo mientras la pestaña de bloomit.app esté abierta y el navegador no la suspenda. Si cerrás la pestaña o la PC entra en suspensión, la conexión se corta. Para monitoreo continuo sin intervención humana, el camino es migrar a un ESP32 con WiFi, que envía los datos directamente a la API sin necesitar una PC como intermediaria.

Qué ves en Bloomit

Una vez que llegan los primeros datos, el dashboard muestra dos curvas independientes: temperatura (en °C) y humedad relativa (en %). Podés verlas en el mismo gráfico o por separado según la configuración del widget.

En un ambiente interior normal, un DHT11 debería reportar valores en estos rangos:

  • Temperatura: entre 18 °C y 26 °C en verano/invierno con calefacción o aire acondicionado. Si vivís en una zona cálida sin climatización, puede llegar a 30–32 °C en verano.
  • Humedad relativa: entre 40 % y 60 % en interiores habitados. Valores por debajo de 30 % indican ambiente muy seco (puede causar problemas respiratorios); por encima de 70 % hay riesgo de condensación y hongos.

Si ves valores claramente fuera de esos rangos —por ejemplo, temperatura de 0 °C o humedad de 100 % constante—, lo más probable es que el sensor esté mal conectado, que el cable DATA sea muy largo sin resistencia pull-up, o que el DHT11 sea de mala calidad (es uno de los sensores más baratos del mercado y la variabilidad entre unidades es alta). En ese caso, probá reemplazarlo por un DHT22, que tiene mejor precisión y confiabilidad.

Ideas para extender el proyecto

  • Agregar un LDR (fotorresistencia) en A0 para medir el nivel de luz ambiental. Conectás una pata del LDR a 5V, la otra a A0 y a GND a través de una resistencia de 10kΩ. En el sketch, leés analogRead(A0) y lo agregás al JSON como "light": valor. Así el mismo Arduino reporta temperatura, humedad y luz en cada ciclo.
  • Cambiar el DHT11 por un DHT22 para mayor precisión. El DHT22 usa exactamente el mismo esquema de conexión y la misma librería; solo tenés que cambiar una línea en el sketch: #define DHTTYPE DHT22. El DHT22 tiene rango de temperatura de -40 °C a 80 °C y precisión de ±0.5 °C, frente a los ±2 °C del DHT11.
  • Combinar con el tutorial de humedad de suelo para armar una estación completa de monitoreo de plantas: Arduino + sensor resistivo de humedad de suelo. El mismo Arduino puede leer ambos sensores y enviar los datos en el mismo JSON.
  • Agregar un LED de alerta de temperatura. Conectá un LED con resistencia de 220Ω al pin 9. En el sketch, después de leer la temperatura, agregá: digitalWrite(9, t > 28.0 ? HIGH : LOW);. El LED se prende si la temperatura supera los 28 °C —o el umbral que elijas— y se apaga cuando baja.

¿Te trabaste en algún paso?

Sumate al grupo de Telegram de Bloomit: ahí te ayudamos a resolver errores de cableado, compilación o conexión. Hay gente armando los mismos proyectos que vos.

Unirme al grupo

Bloomit

¿Todo funcionando? Abrí el panel

Registrá tu cuenta gratis, conectá el dispositivo y los datos aparecen en tiempo real. Hardware Bloomit listo para usar en bloomit.com.ar.