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
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.
| Arduino | Componente | Pin destino | Cable color |
|---|---|---|---|
| 5V | DHT11 | VCC | Rojo |
| GND | DHT11 | GND | Negro |
| D2 | DHT11 | DATA | Amarillo |
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:
- 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.
- Ingresá a bloomit.app/devices/test (requiere login).
- 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...). - Confirmá el baud rate 9600 (es el mismo que tiene el sketch).
- 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 grupoBloomit
¿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.