Tabla de contenido:
- Paso 1: Hardware requerido
- Paso 2: Conexiones de hardware
- Paso 3: código para la programación de tareas
- Paso 4: Código para leer valores de temperatura y humedad
- Paso 5: código para alojar un servidor web
- Paso 6: Código para publicar datos en Thing Speak
- Paso 7: Código general
Video: Aplicación web meteorológica con Esp8266: 7 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
SHT 31 es un sensor de temperatura y humedad fabricado por Sensirion. El SHT31 proporciona un alto nivel de precisión alrededor de ± 2% RH. Su rango de humedad está entre 0 y 100% y el rango de temperatura está entre -40 y 125 ° C. Es mucho más confiable y rápido con 8 segundos de tiempo de respuesta del sensor. Su funcionalidad incluye procesamiento de señal mejorado y compatibilidad I2C. Tiene diferentes modos de funcionamiento lo que lo hace energéticamente eficiente.
En este tutorial, hemos interconectado SHT 31 con la placa Adafruit Huzzah. Para leer los valores de temperatura y humedad, hemos utilizado el escudo ESP8266 I2C. Este adaptador hace que todos los pines sean accesibles para el usuario y ofrece un entorno I2C fácil de usar.
Paso 1: Hardware requerido
Hardware utilizado para completar esta tarea:
1. SHT31
2. Adafruit Huzzah ESP8266
3. Adaptador ESP8266 I2C
4. Cable I2C
Paso 2: Conexiones de hardware
Este paso incluye la guía de conexión de hardware. Esta sección explica básicamente las conexiones de cableado necesarias entre el sensor y el ESP8266. Las conexiones son las siguientes.
- El SHT31 funciona sobre I2C. La imagen de arriba muestra la conexión entre ESP8266 y el módulo SHT31. Estamos usando un cable I2C para ello o podemos usar cables de puente de 4 F a F.
- un cable se utiliza para Vcc, el segundo cable para GND y otros dos para SDA y SCL respectivamente.
- Según el adaptador I2C, el pin 2 y el pin 14 de una placa ESP8266 se utilizan como SDA y SCL respectivamente
Paso 3: código para la programación de tareas
En este tutorial, estamos realizando tres operaciones
- Leer los datos de SHT11 usando el protocolo I2C
- alojar el servidor web y publicar la lectura del sensor en la página web
- publicar las lecturas del sensor en ThingSpeak API
Para lograr esto, estamos usando la biblioteca TaskScheduler. Hemos programado tres tareas diferentes referidas a tres operaciones de control diferentes. esto se hace de la siguiente manera
- La tarea 1 es para leer el valor del sensor, esta tarea se ejecuta durante 1 segundo hasta que alcanza el tiempo de espera de 10 segundos.
- Cuando la Tarea1 alcanza su tiempo de espera, la Tarea 2 está habilitada y la Tarea1 está deshabilitada.
- Nos conectamos a AP en esta devolución de llamada, se toman dos variables booleanas para encargarse del cambio entre STA y AP
- En la Tarea 2, estamos alojando un servidor web en 192.168.1.4. Esta tarea se ejecuta cada 5 segundos hasta que alcanza su tiempo de espera, que es de 50 segundos.
- Cuando la Tarea 2 alcanza el tiempo de espera, la Tarea 3 está habilitada y la Tarea2 está deshabilitada.
- Nos conectamos a STA (IP local) en esta devolución de llamada
- En la Tarea 3, publicamos la lectura del sensor en la API de ThingSpeak en la nube.
- La tarea 3 se ejecuta cada cinco segundos hasta que alcanza su tiempo de espera, es decir, 50 segundos
- Cuando la Tarea 3 alcanza su tiempo de espera, la Tarea 1 se habilita de nuevo y la Tarea 3 se deshabilita.
- Cuando no se realiza ninguna devolución de llamada o el dispositivo está inactivo, entra en modo de suspensión ligera, lo que ahorra energía.
Programador ts;
// Tareas para i2c, servidor web de alojamiento y publicación en thingspeak
Tarea tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Task tAP (5 * TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL y taskAPDisable); Tarea tWiFi (5 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL y taskWiFiDisable); // tiempo de espera para las tareas tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // habilitar la tarea I2C tI2C.enable ();
Paso 4: Código para leer valores de temperatura y humedad
Estamos usando la biblioteca Wire.h para leer los valores de temperatura y humedad. Esta biblioteca facilita la comunicación i2c entre el sensor y el dispositivo maestro. 0x44 es la dirección I2C para SHT31.
SHT31 opera en un modo de operación diferente. Puede consultar la hoja de datos para eso.
Estamos usando 0x2C y 0x06 como MSB y LSB respectivamente para operación de disparo único.
// devolución de llamada de tarea I2C void taskI2CCallback ()
{Serial.println ("taskI2CStarted"); raíz int sin firmar [6]; // comenzar la transmisión desde 0x44; Wire.beginTransmission (Addr); // para una transmisión de un disparo con alta repetibilidad usamos 0x2C (MSB) y 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // finalizar la transmisión Wire.endTransmission (); // solicitar bytes de 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Dirección, 6); if (Wire.available () == 6) {// data [0] y data [1] contienen 16 bits de temperatura. root [0] = Wire.read (); root [1] = Wire.read (); // los datos [2] contienen 8 bits de la raíz CRC [2] = Wire.read (); // datos [3] y datos [4] contienen 16 bits de raíz de humedad [3] = Wire.read (); root [4] = Wire.read (); // los datos [5] constan de una raíz CRC de 8 bits [5] = Wire.read (); } int temp = (raíz [0] * 256) + raíz [1]; // desplazar MSB en 8 bits agregar LSB float cTemp = -45.0 + (175.0 * temp / 65535.0); float fTemp = (cTemp * 1.8) + 32.0; // cambia el MSB en 8 bits, agrega LSB a él dividido en resolución completa y * 100 para el porcentaje de humedad flotante = (100.0 * ((root [3] * 256.0) + root [4])) / 65535.0;
tempC = cTemp;
tempF = fTemp; húmedo = humedad; Serial.print ("Temperatura en C: / t"); Serial.println (String (cTemp, 1)); Serial.print ("Temperatura en F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Humedad: / t"); Serial.println (String (humedad, 1)); }
Paso 5: código para alojar un servidor web
Hemos alojado un servidor web desde nuestro dispositivo en una IP estática.
- La biblioteca ESP8266WebServer se utiliza para alojar el servidor web
- Primero debemos declarar la dirección IP, la puerta de enlace y la máscara de subred para crear nuestra IP estática
- Ahora declare ssid y contraseña para su punto de acceso.
- conectarse al punto de acceso desde cualquier dispositivo STA
- alojar el servidor en el puerto 80, que es un puerto predeterminado para el protocolo de comunicación de Internet, Protocolo de transferencia de hipertexto (HTTP)
- ingrese 192.168.1.4 en su navegador web para la página web de introducción y 192.168.1.4/Value para la página web de lectura del sensor
// IP estática para AP
Dirección IP ap_local_IP (192, 168, 1, 4);
Dirección IP ap_gateway (192, 168, 1, 254);
IPAddress ap_subnet (255, 255, 255, 0); // ssid y AP para WiFi local en modo STA
const char WiFissid = "*********";
const char WiFipass = "*********";
// ssid y pase por AP
const char APssid = "********";
const char APpass = "********";
Servidor ESP8266WebServer (80);
configuración vacía {
server.on ("/", onHandleDataRoot);
server.on ("/ Value", onHandleDataFeed);
server.onNotFound (onHandleNotFound);
}
void taskAPCallback () {
Serial.println ("taskAP iniciado");
server.handleClient ();
}
void onHandleDataRoot () {server.send (200, "texto / html", PAGE1); }
void onHandleDataFeed () {
server.send (200, "texto / html", PAGE2); }
void onHandleNotFound () {
String message = "Archivo no encontrado / n / n";
mensaje + = "URI:";
mensaje + = servidor.uri ();
mensaje + = "\ nMétodo:";
mensaje + = (server.method () == HTTP_GET)? "GET": "POST";
mensaje + = "\ nArgumentos:";
mensaje + = servidor.args ();
mensaje + = "\ n";
server.send (404, "texto / plano", mensaje);}
void reconnectAPWiFi () {
Modo WiFi (WIFI_AP_STA);
retraso (100);
WiFi.disconnect ();
estado booleano = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
si (estado == verdadero) {
Serial.print ("Configurando soft-AP…");
boolean ap = WiFi.softAP (APssid, APpass);
si (ap == verdadero) {
Serial.print ("conectado a: / t");
// Dirección IP myIP = WiFi.softAPIP ();
Serial.println (WiFi.softAPIP ());
}
server.begin ();
}
}
Paso 6: Código para publicar datos en Thing Speak
Aquí estamos publicando las lecturas del sensor en Thing Speak. Se necesitan los siguientes pasos para completar esta tarea:
- Crea tu cuenta en thing speak
- Cree canales y campos para almacenar los datos de sus sensores
- podemos obtener y publicar los datos de ESP en thingSpeak y viceversa usando solicitudes GET y POST a la API.
- podemos publicar nuestros datos en ThingSpeak de la siguiente manera
void taskWiFiCallback () {
WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr + = "& campo1 ="; postStr + = String (húmedo); postStr + = "& campo2 ="; postStr + = String (tempC); postStr + = "& field3 ="; postStr + = String (tempF); postStr + = "\ r / n / r / n"; wifiClient.print ("POST / actualización HTTP / 1.1 / n"); wifiClient.print ("Host: api.thingspeak.com / n"); wifiClient.print ("Conexión: cerrar / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); wifiClient.print ("Tipo de contenido: aplicación / x-www-form-urlencoded / n"); wifiClient.print ("Contenido-Longitud:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }
Paso 7: Código general
El código general está disponible en mi repositorio de github
Créditos:
- Arduino JSON: ArduinoJson
- ESP826WebServer
- Programador de tareas
- SHT 31
- Escaneo I2C
- Tutorial de instructables HIH6130
- Alambre Arduino
- NCD.io
Recomendado:
Estación meteorológica NaTaLia: estación meteorológica con energía solar Arduino hecha de la manera correcta: 8 pasos (con imágenes)
Estación meteorológica NaTaLia: estación meteorológica con energía solar Arduino hecha de la manera correcta: después de 1 año de operación exitosa en 2 ubicaciones diferentes, estoy compartiendo los planes del proyecto de mi estación meteorológica con energía solar y explicando cómo evolucionó a un sistema que realmente puede sobrevivir durante mucho tiempo períodos de energía solar. Si tu sigues
Creación de una aplicación de Android para pequeñas empresas con la aplicación MIT y Google Fusion Table: 7 pasos
Creación de una aplicación de Android para pequeñas empresas con la aplicación MIT y Google Fusion Table: ¿Alguna vez ha querido crear su propia aplicación que puede estar disponible en Google Play Store? Si tiene un negocio, este tutorial cambiará su vida. Después de leer esto detenidamente, podrá crear su propia aplicación. Antes
Estación meteorológica de IoT con la aplicación Blynk: 5 pasos
Estación meteorológica IoT utilizando la aplicación Blynk: este proyecto está relacionado con los pasos iniciales en el mundo IoT, aquí conectaremos el sensor DHT11 / DHT22 con NodeMCU u otra placa basada en ESP8266 y recibiremos datos en Internet.Vamos a usar la aplicación Blynk, use el siguiente tutorial. enlace si eres
Cerradura inteligente magnética con golpe secreto, sensor de infrarrojos y aplicación web: 7 pasos (con imágenes)
Cerradura magnética inteligente con golpe secreto, sensor de infrarrojos y aplicación web: si te gusta este proyecto, sígueme en Instagram y YouTube.En este proyecto, construiré una cerradura magnética para mi oficina en casa, que se abre si conoces el golpe secreto. Oh … y también tendrá algunos trucos más bajo la manga. Magnet
Complemento de operador de puerta controlado por aplicación web (IoT): 20 pasos (con imágenes)
Complemento de operador de puerta controlado por aplicación web (IoT): Tengo un cliente que tenía un área cerrada donde mucha gente necesitaba ir y venir. No querían usar un teclado en el exterior y solo tenían un número limitado de transmisores de llavero. Fue difícil encontrar una fuente asequible de llaveros adicionales. I