IoT para Principiantes
La temperatura del cuarto, en el teléfono. El dato se queda en tu Wi‑Fi.
Qué vas a encontrar
- Un DHT11 en el pin D2 de una NodeMCU
- Una página con dos números
- Por qué el teléfono en datos móviles no la abre
- La clave del Wi‑Fi no se fotografía
Un sensor mide. Una placa con Wi‑Fi publica una página. Tu teléfono, en la misma red de la casa, la abre. Nadie fuera tiene esa lectura todavía. Ese es el internet de las cosas en una habitación.
Necesitas una NodeMCU (el chip es un ESP8266), un DHT11, tres cables y Arduino IDE. En las preferencias del IDE pega la dirección de placas ESP8266 e instala la biblioteca “DHT sensor library”. El sensor va así: VCC a 3.3 V, GND a GND, datos al pin marcado D2. D2 es el GPIO 4.
Cambia el nombre de tu Wi‑Fi y la clave. Sube el programa. Abre el Monitor serie a 115200. Cuando conecte, imprime una dirección del tipo 192.168.1.50. Escríbela en el navegador del teléfono.
Esa dirección solo abre desde un aparato en el mismo Wi‑Fi. Si estás en datos móviles, no entras a tu casa. Si el monitor no imprime nada, revisa la clave, o fíjate si tu red es solo de 5 GHz: esta placa habla 2.4 GHz. Si el número de temperatura es imposible, aprieta el cable antes de tocar el código.
La vuelta de tuerca local es encender un LED si pasas de 28 grados. Publicar la página hacia todo internet es otro proyecto, y antes hay que sacar la clave del archivo. Una foto del código con la contraseña deja la puerta abierta.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT11
const char* ssid = "tu_wifi";
const char* password = "tu_clave";
DHT dht(DHTPIN, DHTTYPE);
ESP8266WebServer server(80);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println(WiFi.localIP());
server.on("/", []() {
float t = dht.readTemperature();
float h = dht.readHumidity();
String pagina = "<h1>El cuarto</h1>";
pagina += "<p>Temperatura: " + String(t) + " °C</p>";
pagina += "<p>Humedad: " + String(h) + " %</p>";
server.send(200, "text/html", pagina);
});
server.begin();
}
void loop() {
server.handleClient();
}// En setup(), junto a lo demás:
pinMode(2, OUTPUT);
// Sustituye loop() por esto.
// En muchas NodeMCU la luz integrada se enciende con LOW, al revés que en la Uno.
unsigned long ultima = 0;
void loop() {
server.handleClient();
if (millis() - ultima > 2000) {
ultima = millis();
float t = dht.readTemperature();
if (!isnan(t) && t > 28.0) {
digitalWrite(2, LOW);
} else {
digitalWrite(2, HIGH);
}
}
}