En la era de la tecnología y la conectividad, el ESP8266 se ha convertido en una herramienta clave para aquellos que buscan integrar dispositivos electrónicos en su vida diaria. En este artículo, aprenderás cómo configurar una tarea diaria en tu ESP8266 para publicar valores de temperatura en ThingSpeak. ¡Descubre cómo hacer tu hogar más inteligente y eficiente con esta sencilla guía paso a paso!
En este proyecto aprenderá cómo construir un nodo sensor usando un ESP8266 que envía temperatura y humedad una vez al día a un servicio gratuito llamado Thing Speak.
Mira el vídeo tutorial y la demostración del proyecto.
Esta guía está disponible en formato de video (ver más abajo) y en formato escrito (sigue leyendo).
requisitos
Antes de continuar con este tutorial, te recomendamos echar un vistazo a estos recursos:
- Comenzando con ESP8266 Wi-Fi
- ESP8266 Sueño profundo con Arduino IDE
- Botón WiFi ESP8266: clon DIY del botón Amazon Dash
- ESP8266 DHT11/DHT22 Servidor web de temperatura y humedad
Si te gusta ESP8266 y quieres aprender más sobre él, te recomiendo descargar mi curso: Domótica con ESP8266.
Piezas requeridas
Para este proyecto necesitará estos componentes:
- ESP8266 – leer Las mejores placas de desarrollo Wi-Fi ESP8266
- Sensor de temperatura y humedad DHT11
- Resistencia de 4,7k ohmios
- tablero de circuitos
- Cables de puente
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Esquema
El circuito es muy fácil de montar y no requiere soldadura. Simplemente siga el siguiente diagrama.
Preparar el IDE de Arduino
Nota: Debe tener instalado el complemento ESP8266 en el IDE de Arduino.
Una vez que haya terminado el circuito, abra su IDE de Arduino e instale dos bibliotecas de Arduino. Ir a Bosquejo > Integrar biblioteca > Administrar bibliotecas…
Buscar DHT (o Descarga aquí). Presione el «Instalar» botón.
Nota: Es posible que también necesites el Biblioteca de sensores de Adafruit.
Entonces también hay que buscar Tarea diaria ESP e instalar esta biblioteca (o Descarga aquí).
hablar sobre el asunto
Para este proyecto utilizamos CosaSpeak.com. Thing Speak le permite publicar las lecturas de sus sensores en el sitio web y mostrarlas en un gráfico con marcas de tiempo. Luego podrá acceder a sus valores desde cualquier parte del mundo.
Vale la pena señalar que este proyecto se puede modificar fácilmente para publicar los valores en su centro de automatización del hogar u otra aplicación en lugar de Thing Speak.
El concepto principal que quiero mostrarles con este proyecto es cómo poner permanentemente su ESP8266 en modo de suspensión profunda y publicar un valor cada 24 horas.
Crear nuevo canal
Si aún no tiene una cuenta en Thing Speak, deberá crear una. Una vez que su cuenta esté configurada, inicie sesión y abra el «canales» pestaña.
Presione el botón “Crear”Nuevo canalBotón l”:
Ingresa un nombre para tu canal, agrega una descripción y habilita un segundo campo. El campo 1 recibe esto humedad Valores medidos y campo 2 el temperatura Mediciones. Una vez que hayas completado todos los campos, guarda tu canal.
Personalizar gráfico
Estos gráficos se pueden personalizar. Para hacer esto, vaya a la pestaña «Vista privada» y haga clic en el ícono de edición:
Puedes darle un título a cada gráfico. Por ejemplo, el primer gráfico se llama «% de humedad» y mi segundo gráfico se llama «Temperatura ºC».
También puedes personalizar el color de fondo, los ejes xey y mucho más como ves. Cuando termine, presione el botón «Ahorrar» botón.
Escribir claves API
Para poder publicar valores con el ESP8266, necesita el Escribir claves API. Abre el «Clave API“ y copie la clave Write API en un lugar seguro, ya que la necesitará pronto.
Subir código
Regrese a su IDE de Arduino y copie el siguiente código:
/*
* ESP8266 Daily Task
* Rui Santos
* Complete Project Details https://randomnerdtutorials.com
*/
#include <ESP8266WiFi.h>
#include <ESPDailyTask.h>
#include "DHT.h"
// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// Replace with your SSID and Password
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Replace with your unique Thing Speak WRITE API KEY
const char* apiKey = "REPLACE_WITH_YOUR_ThingSpeak_WRITE_API_KEY";
const char* resource = "/update?api_key=";
// Thing Speak API server
const char* server = "api.thingspeak.com";
// Set this for what time your daily code should run
ESPDailyTask dailyTask(11*60 + 15); // 11:15am
// DHT Sensor
const int DHTPin = 5;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);
// Temporary variables
static char temperatureTemp[7];
static char humidityTemp[7];
void setup() {
// Initializing serial port for debugging purposes
Serial.begin(115200);
delay(10);
dailyTask.sleep1Day();
// put your daily code here...
dht.begin();
initWifi();
makeHTTPRequest();
// and back to sleep once daily code is done
dailyTask.backToSleep();
}
void loop() {
// sleeping so wont get here
}
// Establish a Wi-Fi connection with your router
void initWifi() {
Serial.print("Connecting to: ");
Serial.print(ssid);
WiFi.begin(ssid, password);
int timeout = 10 * 4; // 10 seconds
while(WiFi.status() != WL_CONNECTED && (timeout-- > 0)) {
delay(250);
Serial.print(".");
}
Serial.println("");
if(WiFi.status() != WL_CONNECTED) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("WiFi connected in: ");
Serial.print(millis());
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}
// Make an HTTP request to Thing Speak
void makeHTTPRequest() {
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan
Serial.println("Failed to read from DHT sensor!");
strcpy(temperatureTemp,"Failed");
strcpy(humidityTemp, "Failed");
return;
}
else {
// Computes temperature values in Celsius + Fahrenheit and Humidity
float hic = dht.computeHeatIndex(t, h, false);
// Comment the next line, if you prefer to use Fahrenheit
dtostrf(hic, 6, 2, temperatureTemp);
float hif = dht.computeHeatIndex(f, h);
// Uncomment the next line, if you want to use Fahrenheit
//dtostrf(hif, 6, 2, temperatureTemp);
dtostrf(h, 6, 2, humidityTemp);
// You can delete the following Serial.print's, it's just for debugging purposes
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %t Temperature: ");
Serial.print
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *Ft Heat index: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.print(" *F");
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %t Temperature: ");
Serial.print
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *Ft Heat index: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
Serial.print("Connecting to ");
Serial.print(server);
WiFiClient client;
int retries = 5;
while(!!!client.connect(server, 80) && (retries-- > 0)) {
Serial.print(".");
}
Serial.println();
if(!!!client.connected()) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("Request resource: ");
Serial.println(resource);
client.print(String("GET ") + resource + apiKey + "&field1=" + humidityTemp + "&field2=" + temperatureTemp +
" HTTP/1.1rn" +
"Host: " + server + "rn" +
"Connection: closernrn");
int timeout = 5 * 10; // 5 seconds
while(!!!client.available() && (timeout-- > 0)){
delay(100);
}
if(!!!client.available()) {
Serial.println("No response, going back to sleep");
}
while(client.available()){
Serial.write(client.read());
}
Serial.println("nclosing connection");
client.stop();
}
Preparando tu código
Hay 3 variables que necesitas cambiar. Agregue su SSID y contraseña para permitir que su ESP se comunique con su enrutador:
// Replace with your SSID and Password const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Ingrese su clave API Thing Speak Write en esta variable:
// Replace with your unique Thing Speak WRITE API KEY
const char* apiKey = "REPLACE_WITH_YOUR_ThingSpeak_WRITE_API_KEY";
entender el codigo
Ahora podemos echar un vistazo más de cerca al código. La función setup() comienza inicializando el puerto serie.
void setup() { // Initializing serial port for debugging purposes Serial.begin(115200); delay(10);
Luego llama a la función de tarea diaria del ESP para determinar si han pasado o no 24 horas desde la última medición. De lo contrario, el ESP vuelve al modo de suspensión profunda.
dailyTask.sleep1Day();
Sin embargo, si han pasado 24 horas desde la última medición, el código continúa. Inicializa el sensor DHT, se conecta al enrutador WiFi y envía una solicitud HTTP GET a Thing Speak para publicar las mediciones.
// put your daily code here... dht.begin(); initWifi(); makeHTTPRequest();
Tan pronto como se publican las lecturas, el ESP vuelve al modo de suspensión profunda.
// and back to sleep once daily code is done dailyTask.backToSleep(); }
No sucede nada en la función loop() porque su ESP está constantemente en modo de suspensión profunda y se despierta solo.
void loop() { // sleeping so wont get here }
Otros cambios: diferentes sensores y grados Fahrenheit
Nota: Si está utilizando un sensor que no sea el DHT11, puede comentar y descomentar la línea DEFINE correcta para usar su sensor.
// Uncomment one of the lines below for whatever DHT sensor type you're using! #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT21 // DHT 21 (AM2301) //#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
Hay una cosa más importante que puedes cambiar. De forma predeterminada, este código genera la temperatura en grados Celsius. Sin embargo, si comenta la variable resaltada en rojo y descomenta la variable resaltada en verde, la temperatura se mostrará en grados Fahrenheit.
// Computes temperature values in Celsius + Fahrenheit and Humidity float hic = dht.computeHeatIndex(t, h, false); // Comment the next line, if you prefer to use Fahrenheit dtostrf(hic, 6, 2, temperatureTemp); float hif = dht.computeHeatIndex(f, h); // Uncomment the next line, if you want to use Fahrenheit //dtostrf(hif, 6, 2, temperatureTemp);
Una vez que haya realizado todos los cambios, puede cargar el código en su placa ESP.
Probando el proyecto
Finalmente, abra el monitor serial Arduino IDE con una velocidad de baudios de 115200. Puede probar su proyecto y simular cada hora que pasa. Simplemente retire el cable que conecta el pin RESET a D0 (GPIO 16), luego simplemente presione el botón RESET para simular cada hora que pasa.
Entonces hay que presionar 24 veces para publicar una lectura. La variable del contador aumenta cada vez que presiona el botón de reinicio. Una vez que reinicie el ESP8266 24 veces, publicará las lecturas en Thing Speak.
Como puede ver, la humedad y la temperatura se han publicado con éxito y se han trazado en tiempo real en el gráfico.
Después de probar el circuito, debes volver a conectar el cable de RESET a D0. El ESP se activa cada hora, pero sólo emite un valor cada 24 horas.
Envolver
Espero que este proyecto haya sido útil. Ahora ya sabes cómo aplicar el concepto de tarea diaria a cualquier proyecto.
Este es un extracto de mi libro electrónico “Automatización del hogar con ESP8266”. Si te gusta ESP8266 y quieres aprender más sobre él, te recomiendo descargar mi curso: “Home Automation con ESP8266”.
Espero que esta guía haya sido útil. ¡Gracias por leer!
Tarea diaria ESP8266: publicar valores de temperatura en ThingSpeak
En este proyecto aprenderás a construir un nodo sensor con un ESP8266 que publica la temperatura y la humedad una vez al día en un servicio gratuito llamado Thing Speak.
Video Tutorial y Demostración del Proyecto
Esta guía está disponible en formato de video (ver debajo) y en formato escrito.
Requisitos previos
Antes de proceder con este tutorial, te recomendamos echar un vistazo a estos recursos:
- Getting Started with ESP8266 Wi-Fi
- ESP8266 Deep Sleep with Arduino IDE
- ESP8266 Wi-Fi Button – DIY Amazon Dash Button Clone
- ESP8266 DHT11/DHT22 Temperature and Humidity Web Server
Componentes requeridos
Para este proyecto, necesitarás los siguientes componentes:
- ESP8266
- sensor de temperatura y humedad DHT11
- resistor de 4.7k Ohm
- protoboard
- cables jumper
Puedes encontrar todos los componentes necesarios en MakerAdvisor.com al mejor precio.
Esquemático
El circuito es fácil de armar y no requiere soldadura, simplemente sigue el siguiente diagrama.
Preparando Arduino IDE
Nota: debes tener el complemento ESP8266 instalado en el Arduino IDE.
Después de tener el circuito listo, abre tu Arduino IDE e instala dos librerías. Ve a Sketch > Include library > Manage libraries…
Busca DHT (o descárgalo aquí) y presiona el botón «Instalar».
También necesitarás buscar ESP Daily Task e instalar esa librería (o descargarla aquí).
Thing Speak
Para este proyecto utilizaremos ThingSpeak.com. Thing Speak te permite publicar las lecturas de tus sensores en su sitio web y mostrarlas en un gráfico con marcas de tiempo. Luego, puedes acceder a tus lecturas desde cualquier parte del mundo.
Vale la pena mencionar que este proyecto se puede modificar fácilmente para publicar los valores en tu centro de automatización del hogar u otra aplicación en lugar de Thing Speak.
Creando un Nuevo Canal
Si no tienes una cuenta en Thing Speak, tendrás que crear una. Después de que tu cuenta esté lista, inicia sesión y abre la pestaña «Channels».
Presiona el botón «New Channel».
Escribe un nombre para tu canal, agrega una descripción y habilita un segundo campo. El Campo 1 recibirá las lecturas de humedad y el Campo 2 las lecturas de temperatura. Una vez que hayas completado todos estos campos, guarda tu canal.
Personalizando el Gráfico
Estos gráficos se pueden personalizar. Ve a tu pestaña de Vista Privada y presiona el ícono de edición.
Puedes darle a cada gráfico un título, por ejemplo, el primer gráfico se llamará Humedad % y mi segundo gráfico se llamará Temperatura ºC.
También puedes personalizar el color de fondo, los ejes x e y, y mucho más. Cuando termines, presiona el botón «Guardar».
Escribiendo la Clave API
Para publicar valores con el ESP8266, necesitas la Clave API de Escritura. Abre la pestaña «API Keys» y copia la Clave API de Escritura en un lugar seguro porque la necesitarás en un momento.
Subiendo el Código
Vuelve a tu Arduino IDE y copia el código proporcionado. Una vez que hayas realizado todos los cambios necesarios, puedes subir el código a tu placa ESP.
Para obtener más detalles sobre la instalación y funcionamiento del código, puedes consultar la guía completa del proyecto.
¡Muy útil! Me viene genial para monitorizar la temperatura en mi casa. ¡Gracias por la info!
¡Interesante artículo! Me encantaría poder implementar esto en mis proyectos con ESP8266. ¡Gracias por compartir!
Gracias por la info, ¡definitivamente voy a probar esto en mi proyecto! 🌡️📊