Monitoreo Inteligente de Bodegas: Control de Temperatura y Humedad con ESP32 y Google Sheets
Este tutorial te guiará paso a paso en la creación de un sistema de monitoreo inteligente para bodegas o almacenes, utilizando un microcontrolador ESP32, sensores de temperatura y humedad DHT22, y la plataforma Google Sheets para registrar y visualizar datos en tiempo real. Ideal para asegurar condiciones óptimas de almacenamiento.
Introducción al Monitoreo Inteligente de Bodegas 🌡️
En la gestión de bodegas, almacenes o incluso espacios domésticos como despensas y armarios de vinos, mantener condiciones ambientales adecuadas de temperatura y humedad es crucial. Variaciones extremas pueden afectar la calidad y la vida útil de productos almacenados, desde alimentos y bebidas hasta documentos importantes y equipos electrónicos. Un sistema de monitoreo inteligente nos permite supervisar estas condiciones en tiempo real y tomar acciones preventivas.
Este tutorial te enseñará a construir un sistema de monitoreo de bajo costo y fácil implementación, utilizando el versátil microcontrolador ESP32 y el popular sensor DHT22. Los datos recolectados se enviarán a Google Sheets, una herramienta accesible y potente para el almacenamiento y análisis de información.
¿Por qué monitorear temperatura y humedad? 💡
- Conservación de productos: Evita el deterioro de alimentos, medicamentos, vinos, etc.
- Prevención de moho y corrosión: Protege estructuras y equipos electrónicos.
- Optimización energética: Ayuda a ajustar sistemas de climatización.
- Cumplimiento normativo: Esencial en ciertos sectores industriales.
- Seguridad: Algunos químicos requieren condiciones específicas para su almacenamiento seguro.
🛠️ Materiales Necesarios
Para llevar a cabo este proyecto, necesitarás los siguientes componentes:
| Componente | Cantidad | Descripción | Enlace de Compra Sugerido | Precio Aproximado | Dificultad de Uso |
|---|---|---|---|---|---|
| --- | --- | --- | --- | --- | --- |
| ESP32 DevKitC o similar | 1 | Microcontrolador con Wi-Fi integrado | Tienda de Electrónica Local | 8-15 USD | Intermedio |
| Sensor DHT22 (AM2302) | 1 | Mide temperatura y humedad con buena precisión | Tienda de Electrónica Local | 5-10 USD | Fácil |
| --- | --- | --- | --- | --- | --- |
| Protoboard (Breadboard) | 1 | Para conexiones temporales sin soldadura | Tienda de Electrónica Local | 2-5 USD | Fácil |
| Cables Jumper (Macho-Hembra) | 5-10 | Para conectar componentes en el protoboard | Tienda de Electrónica Local | 1-3 USD | Fácil |
| --- | --- | --- | --- | --- | --- |
| Cable Micro USB | 1 | Para programar y alimentar el ESP32 | Ya Incluido en ESP32 | --- | Fácil |
| Resistencia 10k Ohm (Opcional) | 1 | Para el sensor DHT22 (pull-up), a veces ya viene integrada en módulos. | Tienda de Electrónica Local | 0.5 USD | Fácil |
| --- | --- | --- | --- | --- | --- |
| Ordenador con IDE de Arduino | 1 | Para programar el ESP32 | --- | --- | Intermedio |
⚙️ Configuración del Entorno de Desarrollo
Antes de empezar a programar, necesitamos preparar nuestro entorno de desarrollo para el ESP32 en el IDE de Arduino.
1. Instalar el IDE de Arduino
Si aún no lo tienes, descarga e instala el IDE de Arduino desde su sitio web oficial: arduino.cc/en/software
2. Configurar el Soporte para ESP32 en el IDE de Arduino
Para que el IDE de Arduino pueda programar el ESP32, debemos añadir el gestor de tarjetas:
- Abre el IDE de Arduino.
- Ve a
Archivo > Preferencias. - En el campo
URLs Adicionales de Gestores de Tarjetas, añade la siguiente URL:https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.jsonSi ya tienes otras URLs, sepáralas con una coma. - Haz clic en
OK. - Ahora ve a
Herramientas > Placa > Gestor de Tarjetas.... - Busca "esp32" e instala el paquete
esp32 by Espressif Systems.
3. Instalar las Librerías Necesarias
Vamos a usar la librería DHT sensor library para leer los datos del sensor y ArduinoJson para construir el JSON que enviaremos a Google Sheets.
- En el IDE de Arduino, ve a
Programa > Incluir Librería > Gestionar Librerías.... - Busca
DHT sensor librarye instala la versión de Adafruit. - Busca
ArduinoJsone instala la última versión estable (recomiendo v6.x.x, ya que la v7.x.x tiene cambios en la API).
🔌 Diagrama de Conexión (Esquemático)
La conexión del sensor DHT22 al ESP32 es bastante sencilla.
Pasos de Conexión:
- DHT22 VCC a ESP32 3.3V: Conecta el pin VCC del sensor DHT22 al pin de 3.3V del ESP32. Algunos módulos ESP32 también tienen un pin de 5V, pero el DHT22 funciona bien con 3.3V.
- DHT22 GND a ESP32 GND: Conecta el pin GND del sensor DHT22 a cualquier pin GND del ESP32.
- DHT22 DATA a ESP32 GPIO: Conecta el pin de datos del sensor DHT22 a un pin GPIO digital del ESP32. Usaremos el pin
D4(GPIO4) en nuestro código, pero puedes usar otro. - Resistencia Pull-up (Opcional): Si tu módulo DHT22 no tiene una resistencia de pull-up integrada, conecta una resistencia de 10k Ohm entre el pin VCC y el pin DATA del DHT22. Esto asegura que la señal de datos esté bien definida.
🚀 Configuración del Servidor Web de Google Apps Script
Para que el ESP32 pueda enviar datos a Google Sheets, necesitamos un pequeño script que actúe como un puente. Este script se ejecutará en los servidores de Google y recibirá los datos enviados por el ESP32, para luego escribirlos en nuestra hoja de cálculo.
1. Crear una Nueva Hoja de Cálculo de Google
- Ve a sheets.new para crear una nueva hoja de cálculo.
- Nombra tu hoja de cálculo, por ejemplo: "Monitoreo Bodega IoT".
- En la primera fila, establece los encabezados de las columnas donde se guardarán los datos. Por ejemplo:
Fecha y Hora,Temperatura (°C),Humedad (%)
2. Crear el Google Apps Script
- En tu hoja de cálculo de Google, ve a
Extensiones > Apps Script. - Esto abrirá un nuevo proyecto de Apps Script.
- Borra cualquier código existente (
function myFunction() { ... }). - Copia y pega el siguiente código en el editor:
var SPREADSHEET_ID = 'TU_ID_DE_HOJA_DE_CALCULO'; // Reemplaza con el ID de tu hoja
var SHEET_NAME = 'Hoja1'; // Reemplaza si el nombre de tu hoja es diferente
function doGet(e) {
// Maneja peticiones GET (no usaremos GET para este tutorial, pero es buena práctica)
return ContentService.createTextOutput("Método GET no soportado. Usa POST.");
}
function doPost(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
var rowData = [];
// Obtener datos del cuerpo de la petición POST
var params = JSON.parse(e.postData.contents);
// Obtener la fecha y hora actual del servidor de Google
var timestamp = new Date();
rowData.push(timestamp); // Columna A: Fecha y Hora
rowData.push(params.temperatura); // Columna B: Temperatura
rowData.push(params.humedad); // Columna C: Humedad
// Añadir la fila al final de la hoja
sheet.appendRow(rowData);
return ContentService.createTextOutput("Datos recibidos y guardados con éxito.");
}
3. Obtener el ID de tu Hoja de Cálculo
El SPREADSHEET_ID se encuentra en la URL de tu hoja de cálculo. Es la cadena de caracteres entre /d/ y /edit. Por ejemplo:
https://docs.google.com/spreadsheets/d/123abcDEF_GHI456JKL_MNO789PQR_STU/edit#gid=0
En este ejemplo, 123abcDEF_GHI456JKL_MNO789PQR_STU sería tu SPREADSHEET_ID.
Reemplaza 'TU_ID_DE_HOJA_DE_CALCULO' en el script con el ID real de tu hoja.
4. Publicar el Script como una Aplicación Web
Para que tu ESP32 pueda acceder al script, necesitas publicarlo como una aplicación web:
- En el editor de Apps Script, haz clic en
Implementar > Nueva implementación. - Haz clic en el icono de
Tipo de implementación(la tuerca) y seleccionaAplicación web. - Configura:
Descripción:Monitoreo Bodega IoT(o similar)Ejecutar como:Yo(tu correo electrónico)Quién tiene acceso:Cualquiera(¡IMPORTANTE! Si seleccionas "Solo yo", el ESP32 no podrá enviar datos).
- Haz clic en
Implementar. - Se te pedirá que autorices el script. Sigue los pasos:
Revisar permisos, selecciona tu cuenta de Google, haz clic enAvanzadoy luego enIr a Monitoreo Bodega IoT (no seguro). Confirma los permisos. - Una vez autorizado, se te mostrará una ventana con la
URL de la aplicación web. Copia esta URL, la necesitaremos para el código del ESP32. Guarda esta URL en un lugar seguro.
💻 Código del ESP32
Ahora vamos a escribir el código para el ESP32 en el IDE de Arduino. Este código leerá los datos del sensor DHT22, los formateará como JSON y los enviará periódicamente a tu Google Apps Script.
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <ArduinoJson.h> // Asegúrate de que sea la versión 6.x.x
// --- Configuración de tu red WiFi ---
const char* ssid = "TU_NOMBRE_DE_WIFI";
const char* password = "TU_CONTRASEÑA_DE_WIFI";
// --- Configuración del Google Apps Script ---
// Pega aquí la URL de la aplicación web que obtuviste en el paso anterior
const char* googleAppsScriptUrl = "TU_URL_DE_GOOGLE_APPS_SCRIPT_WEB_APP";
// --- Configuración del Sensor DHT22 ---
#define DHTPIN 4 // Pin digital donde está conectado el DHT22 (GPIO4)
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
// --- Configuración del intervalo de envío de datos (en milisegundos) ---
const long DATA_SEND_INTERVAL = 300000; // 5 minutos (5 * 60 * 1000 ms)
unsigned long lastSendTime = 0;
void setup() {
Serial.begin(115200);
dht.begin();
// Conectar a WiFi
Serial.print("Conectando a WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado!");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
unsigned long currentTime = millis();
if (currentTime - lastSendTime >= DATA_SEND_INTERVAL) {
lastSendTime = currentTime;
// Leer datos del sensor DHT22
float h = dht.readHumidity();
float t = dht.readTemperature(); // Lee la temperatura en Celsius (por defecto)
// Verificar si la lectura falló
if (isnan(h) || isnan(t)) {
Serial.println("Error al leer del sensor DHT!");
return;
}
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" % ");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C");
// Crear JSON con los datos
StaticJsonDocument<200> doc; // Tamaño del documento JSON (ajustar si es necesario)
doc["temperatura"] = t;
doc["humedad"] = h;
String jsonPayload;
serializeJson(doc, jsonPayload);
Serial.print("Enviando JSON: ");
Serial.println(jsonPayload);
// Enviar datos a Google Sheets via HTTP POST
HTTPClient http;
http.begin(googleAppsScriptUrl);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(jsonPayload);
if (httpResponseCode > 0) {
Serial.printf("[HTTP] Código de respuesta: %d\n", httpResponseCode);
String response = http.getString();
Serial.println(response);
} else {
Serial.printf("[HTTP] Error en la petición: %s\n", http.errorToString(httpResponseCode).c_str());
}
http.end();
}
delay(100); // Pequeña espera para no saturar el bucle
}
Ajustes del Código:
ssidypassword: Reemplaza con el nombre y la contraseña de tu red Wi-Fi.googleAppsScriptUrl: Pega la URL de la aplicación web que copiaste de Google Apps Script.DHTPIN: Si conectaste el pin de datos del DHT22 a otro GPIO del ESP32, actualiza este número.DATA_SEND_INTERVAL: Este valor está en milisegundos.300000significa 5 minutos. Puedes ajustarlo según tus necesidades (por ejemplo,60000para 1 minuto).
Carga del Código al ESP32:
- Conecta tu ESP32 al ordenador con el cable Micro USB.
- En el IDE de Arduino, ve a
Herramientas > Placay selecciona tu modelo de ESP32 (e.g.,ESP32 Dev Module). - En
Herramientas > Puerto, selecciona el puerto COM al que está conectado tu ESP32. - Haz clic en el botón
Subir(la flecha a la derecha) para compilar y cargar el código a tu ESP32. - Abre el
Monitor Serie(icono de lupa en la esquina superior derecha) y asegúrate de que la velocidad esté configurada a115200 baudios. Verás mensajes de conexión Wi-Fi y lecturas del sensor.
✅ Verificación y Pruebas
Una vez que el código se ha cargado con éxito en el ESP32, y este se ha conectado a tu red Wi-Fi, deberías empezar a ver datos aparecer en tu Google Sheet después de cada intervalo de envío.
Posibles Problemas y Soluciones:
- "Error al leer del sensor DHT!": Revisa las conexiones del DHT22 al ESP32. Asegúrate de que el pin
DHTPINsea correcto y que la resistencia de pull-up esté en su lugar si es necesario. - "WiFi conectado!" no aparece: Revisa el
ssidypassworden tu código. Asegúrate de que tu ESP32 esté dentro del rango de tu red Wi-Fi. - "Error en la petición: ..." (HTTP error): Esto suele indicar un problema con la URL del Google Apps Script o sus permisos. Verifica que la URL sea exactamente la que obtuviste al publicar el script y que los permisos estén en "Cualquiera".
- Datos en Google Sheets no coinciden con los encabezados: Asegúrate de que los encabezados en tu Google Sheet (
Fecha y Hora,Temperatura (°C),Humedad (%)) coincidan con el orden en que se añaden los datos en eldoPostdel Apps Script.
✨ Mejoras y Próximos Pasos
Este sistema básico es un excelente punto de partida. Aquí tienes algunas ideas para expandir y mejorar tu proyecto:
📊 Visualización Avanzada de Datos
- Gráficos en Google Sheets: Usa las funciones de Google Sheets para crear gráficos de línea que muestren la evolución de la temperatura y humedad a lo largo del tiempo. Puedes configurar el rango de datos para que se actualice automáticamente.
- Google Data Studio (Looker Studio): Para una visualización más profesional y personalizable, conecta tu Google Sheet a Google Data Studio. Podrás crear dashboards interactivos con múltiples gráficos, filtros y métricas clave.
🔔 Alertas y Notificaciones
- Google Apps Script (Avanzado): Modifica el Apps Script para que, si la temperatura o humedad superan ciertos umbrales, envíe un correo electrónico o una notificación a tu teléfono móvil (por ejemplo, usando servicios como IFTTT o integraciones directas con servicios de mensajería).
- IFTTT (If This Then That): Conecta tu Google Sheet a IFTTT para activar acciones automáticamente, como enviar un SMS si un valor excede un límite, o registrar una entrada en un calendario.
🔋 Alimentación y Despliegue
- Batería: Para un monitoreo portátil, considera alimentar el ESP32 con una batería LiPo y añadir un módulo de gestión de energía (como el TP4056) para cargarla. Optimiza el consumo de energía del ESP32 (por ejemplo, usando
deep sleep) para prolongar la vida de la batería. - Caja protectora: Diseña o imprime en 3D una caja para proteger el ESP32 y el sensor del polvo, la humedad y daños físicos, especialmente si lo vas a desplegar en una bodega real.
☁️ Otras Plataformas IoT
Si necesitas funcionalidades más robustas o escalabilidad, puedes explorar otras plataformas IoT como:
- Blynk: Interfaz de usuario intuitiva para móviles, fácil configuración de widgets y notificaciones.
- ThingSpeak: Ideal para visualización de datos en tiempo real y análisis básicos.
- Adafruit IO: Plataforma con dashboards personalizables y feed de datos.
- MQTT Broker: Para una arquitectura más flexible y escalable, usando protocolos estándar como MQTT.
Conclusión 🎉
¡Felicidades! Has construido tu propio sistema de monitoreo de temperatura y humedad basado en IoT. Este proyecto te ha permitido familiarizarte con el ESP32, la lectura de sensores, la comunicación Wi-Fi y la interacción con servicios web de Google. Las posibilidades son infinitas, y este es solo el primer paso en el emocionante mundo del Internet de las Cosas.
Esperamos que este tutorial te haya sido útil y te inspire a seguir explorando y creando. ¡El control inteligente de tus espacios ahora está al alcance de tus manos!
Tutoriales relacionados
- Control Remoto de Iluminación Inteligente con ESP32 y Blynkbeginner18 min
- Control Inteligente de Acceso a Puertas con RFID y Notificaciones en Tiempo Real usando ESP32intermediate20 min
- Control Inteligente de Niveles en Depósitos de Agua con ESP32 y Blynk 💧intermediate20 min
- Sistema de Monitoreo Ambiental Acuático Inteligente con ESP32 y Sensores Sumergiblesintermediate25 min
- Monitorización de la Calidad del Aire Interior con Sensores IoT y ESP8266intermediate18 min
Comentarios (0)
Aún no hay comentarios. ¡Sé el primero!