Mudarse a España en pleno verano puede ser un verdadero desafío. Mi familia y yo lo aprendimos rápidamente al instalarnos, enfrentando una ola de calor tras otra. Aunque nuestros teléfonos nos decían la temperatura de la ciudad, a mí me interesaba más saber las condiciones específicas dentro de nuestro apartamento. ¿Qué tan caliente estaba la sala? ¿Y la cocina después de cocinar?
En lugar de comprar un dispositivo inteligente ya hecho, decidí convertir esto en un proyecto divertido y educativo para mi hijo mayor. Quería mostrarle cómo podíamos construir algo útil desde cero.
Nuestro Primer Intento
Inicialmente, planeé usar un Arduino Uno con una placa de pruebas, una pantalla de 4 dígitos y una barra de LED para mostrar la temperatura y la humedad. Fue una excelente manera de probar los sensores y el código, pero pronto me di cuenta de que podíamos convertirlo en un dispositivo mucho más moderno y práctico.
Así que cambiamos de estrategia. Reemplacé el Arduino Uno por un Wemos D1 Mini, una placa pequeña con Wi-Fi integrado. También sustituí las pantallas físicas por una simple respuesta HTTP, que es una forma mucho más flexible de obtener datos. Esto permite que el dispositivo envíe información a cualquier sistema conectado, como un teléfono inteligente o un centro de control domótico.
El Hardware que Necesitas
Aquí tienes la sencilla lista de componentes que usamos:
- 1 x Wemos D1 Mini: Nuestro controlador principal con Wi-Fi incorporado.
- 1 x Sensor DHT11: Este pequeño y asequible sensor mide tanto la humedad como la temperatura.
- Cables de conexión: Para conectar el sensor al Wemos D1 Mini.
- 1 x Cable USB a Micro USB: Para alimentar y programar el Wemos.
- 1 x Power Bank: Una fuente de alimentación portátil para mover el sensor a cualquier lugar.
Conectar el sensor DHT11 al Wemos D1 Mini es muy sencillo: solo necesitas unir los pines de 5V, Tierra (Ground) y datos. Encontrarás muchísimos diagramas en línea, pero aquí te dejo uno simple para empezar: [Imagen de un Wemos D1 Mini conectado a un sensor DHT11]
Haciéndolo Inteligente
La verdadera magia está en el código. Nuestro firmware está diseñado para hacer una sola cosa: cuando se solicita una dirección web específica, lee los datos de humedad y temperatura del sensor y los devuelve como un objeto JSON. Este formato es perfecto para software de domótica como Home Assistant, que puede leer y procesar los datos fácilmente.
#include <ESP8266WiFi.h> const char* ssid = "2.4 GHZ Wifi SSID"; const char* password = "WIFI PASS"; WiFiServer server(80); #include <DHT11.h> DHT11 dht11(2); void setup() { Serial.begin(115200); delay(10); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.print("Wifi Status: "); Serial.println(WiFi.status()); Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.print("Use this URL : "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { // // Serial.print("Wifi Status: "); // Serial.println(WiFi.status()); int temperature = 0; int humidity = 0; while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String request = client.readStringUntil('\r'); Serial.println(request); client.flush(); // Match the request if (request.indexOf("/READ=ON") != -1) { for (int x = 0; x < 5; x++){ dht11.readTemperatureHumidity(temperature, humidity); delay(500); Serial.print("Sensor Loop: "); Serial.println(x); if (humidity > 0){ // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: application/json"); client.println(""); // do not forget this one client.print("{ \"temperature\": "); client.print(temperature); client.print(", \"Humidity\": "); client.print(humidity); client.print(" ,\"temperature_symbol\": \"°C\", \"humidity_symbol\": \"%\""); client.print(", \"sensor_attempts\": "); client.print(x+1); client.print("}"); break; } if(x == 4 ){ Serial.println("Limit attemps reached (5)!"); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: application/json"); client.println(""); // do not forget this one client.print("{ \"error\": \"Sensor readings failed after 5 attempts!\""); client.print("}"); } } Serial.print("Humidity: "); Serial.print(humidity, 1); Serial.print("%"); Serial.print(" | "); Serial.print("Temperatura: "); Serial.print(temperature, 1); Serial.println("C"); } // Return the response // client.println("HTTP/1.1 200 OK"); // client.println("Content-Type: application/json"); // client.println(""); // do not forget this one // client.println("<!DOCTYPE HTML>"); // client.println("<html>"); // client.println("Temperature: "); // client.println(temperature); // client.println(" C <br>"); // client.println("Humidity: "); // client.println(humidity); // client.println("% <br>"); // client.println("</html>"); // client.print("{ \"temperature\": "); // client.print(temperature); // client.print(", \"Humidity\": "); // client.print(humidity); // client.print(" ,\"temperature_symbol\": \"°C\", \"humidity_symbol\": \"%\""); // client.print("}"); Serial.println("Client disconnected"); Serial.println(""); }
{ "temperature": 29, "Humidity": 42 ,"temperature_symbol": "°C", "humidity_symbol": "%", "sensor_attempts": 1}
Mis próximos pasos son añadir más sensores, imprimir una carcasa personalizada en 3D para el proyecto y conectarlo directamente a un enchufe de pared. Aunque el power bank es genial para la portabilidad, una fuente de alimentación directa es mucho más cómoda para una instalación permanente.
Este proyecto fue una forma fantástica de introducir a mi hijo en el mundo de la electrónica y la programación, y nos ha dado una herramienta genial para entender el clima dentro de nuestro nuevo hogar.
¿Qué proyectos DIY has hecho para hacer tu casa más inteligente? ¡Me encantaría leer tus ideas!