1. Servidor Web de humedad y temperatura

En esta práctica vamos a utilizar el ESP8266 para monitorizar via web la humedad y temperatura de un sensor DHT11. Posteriormente modificaremos el código para enviarlo a un servidor en la nube desde el que monitorizar desde cualquier punto.

Materiales

  • ESP8266-12E NodeMCU
  • Sensor DHT11

Esquema

En el esquema la patilla RSV a la que está conectado el sensor, es en la versión v3 del modeMCU la salida VU que corresponde con una salida a 5V del propio puerto usb

Código

<sxh c>

Libreria para Sensores DHT #include “DHT.h” #define DHTPIN 4 Pin del ESP8266 al que está conectado. El 4 corresponde al D2 del ESP8266

Descomentar segun el tipo de sensor DHT usado #define DHTTYPE DHT11 DHT 11

Inicializa el sensor DHT dht(DHTPIN, DHTTYPE); Configura Arduino void setup() {

Serial.begin(115200); 
dht.begin();

}

void loop() {

// Espera tres segundos entre mediciones. Con 2s  daba problemas de lectura
delay(3000);
// Obtiene la Humedad
float h = dht.readHumidity();
// Obtiene la Temperatura en Celsius
float t = dht.readTemperature();

Control de errores, valida que se obtuvieron valores para los datos medidos if (isnan(h) || isnan(t)) { Serial.println(“Falla al leer el sensor DHT!”); return; } Serial.print(“Humedad: ”); Serial.print(h); Serial.print(“ %\t”); Serial.print(“Temperatura: ”); Serial.print(t); Serial.println(“ *C ”); } </sxh> Una vez que hemos comprobado por el serial que funciona correctamente, vamos a modificar el programa para obtener los datos desde el navegador <sxh javascript> Librerias #include “ESP8266WiFi.h” #include “DHT.h”

WiFi p const char* ssid = “miwifi”; const char* password = “mipassword”; #define DHTPIN 4 Pin del ESP8266 al que está conectado. El GPIO 4 corresponde al D2 del ESP8266-12E NodeMCU v3

Descomentar segun el tipo de sensor DHT usado #define DHTTYPE DHT11 DHT 11

WiFiServer server(80);

Inicializa el sensor DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); dht.begin(); Conectando a la WIFI

Serial.println();
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
// Iniciamos el servidor web
server.begin();
Serial.println("Servidor Iniciado");
Serial.println("");
Serial.println("Conectado a la WIFI");
Serial.println("dirección IP: ");
Serial.println(WiFi.localIP());

}

void loop() {

// Verifica si se ha conectado un cliente
WiFiClient client = server.available();
if (!client) {
  return;
}
// Espera tres segundos entre mediciones
delay(3000);
// Obtiene la Humedad
float h = dht.readHumidity();
// Obtiene la Temperatura en Celsius
float t = dht.readTemperature();
// Control de errores, valida que se obtuvieron valores para los datos medidos
if (isnan(h) || isnan(t)) {
  Serial.println("Falla al leer el sensor DHT!");
  client.print("Falla al leer el sensor DHT");
  return;
}
// Preparamos la respuesta
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n";
s += "\r\n<html><head><meta http-equiv=\"refresh\" content=\"5\"></head><body>\r\n"; // refresca automáticamente la página cada 5s
s += "<h2>Medida de Temperatura y Humedad</h2>";
s += "Humedad=" + String(h) + "%<br>";
s += "Temperatura="+ String(t)+"*C<br>";
s += "</body></html>\n";
client.print(s);

} </sxh>

Referencias