Saltar al contenido
Volver a proyectos
Proyecto

IoT para Principiantes

La temperatura del cuarto, en el teléfono. El dato se queda en tu Wi‑Fi.

IoTWi‑FiSensores

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.

cppCambia tu_wifi y tu_clave. Datos del sensor al pin D2. El monitor serie va a 115200. Abre la dirección que imprima, desde el mismo Wi‑Fi.
#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();
}
cppLa vuelta de tuerca, todavía en casa: la luz de la placa se enciende si el cuarto pasa de 28 °C. El sensor se lee cada dos segundos, no en cada vuelta.
// 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);
    }
  }
}

Otros proyectos