tutoriales.com

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.

Intermedio20 min de lectura11 views
Reportar error

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:

ComponenteCantidadDescripciónEnlace de Compra SugeridoPrecio AproximadoDificultad de Uso
------------------
ESP32 DevKitC o similar1Microcontrolador con Wi-Fi integradoTienda de Electrónica Local8-15 USDIntermedio
Sensor DHT22 (AM2302)1Mide temperatura y humedad con buena precisiónTienda de Electrónica Local5-10 USDFácil
------------------
Protoboard (Breadboard)1Para conexiones temporales sin soldaduraTienda de Electrónica Local2-5 USDFácil
Cables Jumper (Macho-Hembra)5-10Para conectar componentes en el protoboardTienda de Electrónica Local1-3 USDFácil
------------------
Cable Micro USB1Para programar y alimentar el ESP32Ya Incluido en ESP32---Fácil
Resistencia 10k Ohm (Opcional)1Para el sensor DHT22 (pull-up), a veces ya viene integrada en módulos.Tienda de Electrónica Local0.5 USDFácil
------------------
Ordenador con IDE de Arduino1Para programar el ESP32------Intermedio
💡 Consejo: Asegúrate de que tu sensor DHT22 sea un módulo con la resistencia de pull-up integrada si prefieres simplificar el cableado. Si no, necesitarás una resistencia externa de 10k Ohm entre el pin de datos y VCC.

⚙️ 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:

  1. Abre el IDE de Arduino.
  2. Ve a Archivo > Preferencias.
  3. 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.json Si ya tienes otras URLs, sepáralas con una coma.
  4. Haz clic en OK.
  5. Ahora ve a Herramientas > Placa > Gestor de Tarjetas....
  6. 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.

  1. En el IDE de Arduino, ve a Programa > Incluir Librería > Gestionar Librerías....
  2. Busca DHT sensor library e instala la versión de Adafruit.
  3. Busca ArduinoJson e instala la última versión estable (recomiendo v6.x.x, ya que la v7.x.x tiene cambios en la API).
🔥 Importante: Para ArduinoJson, si usas la versión 7, el código de serialización JSON será diferente. Este tutorial está diseñado para la versión 6 de ArduinoJson. Asegúrate de instalar la versión 6.x.x.

🔌 Diagrama de Conexión (Esquemático)

La conexión del sensor DHT22 al ESP32 es bastante sencilla.

Diagrama ESP32 + DHT22 ESP32 3.3V D4 (GPIO) GND DHT22 VCC DATA GND 10kΩ Resistencia de Pull-up entre VCC y DATA

Pasos de Conexión:

  1. 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.
  2. DHT22 GND a ESP32 GND: Conecta el pin GND del sensor DHT22 a cualquier pin GND del ESP32.
  3. 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.
  4. 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.
📌 Nota: Es fundamental respetar la polaridad y los pines correctos para evitar daños a los componentes. Siempre revisa la hoja de datos de tu sensor DHT22 para identificar sus pines correctamente.

🚀 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

  1. Ve a sheets.new para crear una nueva hoja de cálculo.
  2. Nombra tu hoja de cálculo, por ejemplo: "Monitoreo Bodega IoT".
  3. 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

  1. En tu hoja de cálculo de Google, ve a Extensiones > Apps Script.
  2. Esto abrirá un nuevo proyecto de Apps Script.
  3. Borra cualquier código existente (function myFunction() { ... }).
  4. 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:

  1. En el editor de Apps Script, haz clic en Implementar > Nueva implementación.
  2. Haz clic en el icono de Tipo de implementación (la tuerca) y selecciona Aplicación web.
  3. 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).
  4. Haz clic en Implementar.
  5. Se te pedirá que autorices el script. Sigue los pasos: Revisar permisos, selecciona tu cuenta de Google, haz clic en Avanzado y luego en Ir a Monitoreo Bodega IoT (no seguro). Confirma los permisos.
  6. 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.
⚠️ Advertencia: La opción "Cualquiera" significa que cualquiera con la URL puede acceder a tu script. Para un entorno de producción, se deberían implementar medidas de seguridad adicionales (por ejemplo, claves API o tokens de autenticación en el ESP32 y el script). Para este tutorial, "Cualquiera" es suficiente.

💻 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:

  • ssid y password: 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. 300000 significa 5 minutos. Puedes ajustarlo según tus necesidades (por ejemplo, 60000 para 1 minuto).

Carga del Código al ESP32:

  1. Conecta tu ESP32 al ordenador con el cable Micro USB.
  2. En el IDE de Arduino, ve a Herramientas > Placa y selecciona tu modelo de ESP32 (e.g., ESP32 Dev Module).
  3. En Herramientas > Puerto, selecciona el puerto COM al que está conectado tu ESP32.
  4. Haz clic en el botón Subir (la flecha a la derecha) para compilar y cargar el código a tu ESP32.
  5. Abre el Monitor Serie (icono de lupa en la esquina superior derecha) y asegúrate de que la velocidad esté configurada a 115200 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.

Paso 1: Abre el Monitor Serie en el IDE de Arduino (asegúrate que la velocidad sea 115200).
Paso 2: Observa los mensajes de conexión Wi-Fi y las lecturas de temperatura/humedad.
Paso 3: Espera el primer intervalo de envío (e.g., 5 minutos). Verás el mensaje "Enviando JSON" y la respuesta del servidor de Google.
Paso 4: Abre tu Google Sheet en el navegador. Deberías ver una nueva fila con la fecha y hora, la temperatura y la humedad.
Paso 5: Si no aparecen datos, revisa el Monitor Serie en busca de errores. Verifica la URL del Apps Script, la configuración de permisos del script y las credenciales de Wi-Fi.

Posibles Problemas y Soluciones:

  • "Error al leer del sensor DHT!": Revisa las conexiones del DHT22 al ESP32. Asegúrate de que el pin DHTPIN sea correcto y que la resistencia de pull-up esté en su lugar si es necesario.
  • "WiFi conectado!" no aparece: Revisa el ssid y password en 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 el doPost del 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.
0 25 50 75 100 00:00 04:00 08:00 12:00 16:00 20:00 24:00 Temperatura (°C) Humedad (%) Reporte Climatológico 24h
  • 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.
📌 Nota: Migrar a otras plataformas requerirá adaptar el código del ESP32 para usar sus APIs o protocolos específicos.

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

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!