Cómo Enviar Datos de NodeMCU a Google Sheets Utilizando ESP8266 y DHT11

Enviar datos de sensores desde un microcontrolador como NodeMCU (basado en ESP8266) a servicios en la nube para su análisis y visualización es una tarea común en el mundo del Internet de las Cosas (IoT). Una solución práctica y económica es enviar estas mediciones directamente a una hoja de cálculo de Google Sheets. Esto se puede lograr mediante un script de Google y PushingBox, actuando como un intermediario seguro. Este tutorial detalla el proceso para enviar lecturas de temperatura y humedad de un sensor DHT11 a Google Sheets utilizando el ESP8266.

Diagrama de conexión ESP8266 DHT11

Configuración del Hardware

Para este proyecto, necesitarás los siguientes componentes:

  • Un módulo ESP8266 (NodeMCU es una opción popular).
  • Un sensor de temperatura y humedad DHT11.
  • Cables de conexión (jumpers).
  • Una fuente de alimentación para el ESP8266.

Conexión del Sensor DHT11 al ESP8266

La conexión física entre el sensor DHT11 y el ESP8266 es relativamente sencilla. El sensor DHT11 tiene tres pines: VCC, DATA y GND.

  1. VCC: Conecta el pin VCC del DHT11 al pin de 5V del ESP8266. Es importante notar que, aunque el ESP8266 opera a 3.3V internamente, el pin de 5V es necesario para alimentar correctamente el sensor DHT11. Un voltaje más bajo puede resultar en lecturas imprecisas o nulas.
  2. DATA: Conecta el pin DATA del DHT11 a uno de los pines digitales del ESP8266. En este tutorial, se utiliza el pin D4 (GPIO2) del ESP8266. Este pin será el encargado de transmitir los datos del sensor al microcontrolador.
  3. GND: Conecta el pin GND del DHT11 al pin GND del ESP8266.

Es fundamental asegurarse de que todas las conexiones estén firmes para evitar problemas de comunicación con el sensor.

Conexión del ESP32 con el sensor de temperatura humedad DHT11

Configuración del Software

La configuración del software se realiza principalmente a través del Entorno de Desarrollo Integrado (IDE) de Arduino. Se recomienda utilizar una versión reciente del IDE, preferiblemente superior a la 1.6.4, para asegurar la compatibilidad con las bibliotecas necesarias.

Instalación de Bibliotecas Necesarias

Antes de cargar el código en el ESP8266, deberás instalar dos bibliotecas esenciales:

  1. DHT Sensor Library: Esta biblioteca facilita la lectura de datos del sensor DHT11. Puedes instalarla yendo a Sketch > Include Library > Manage Libraries... en el IDE de Arduino y buscando "DHT sensor library" por Adafruit.
  2. Adafruit Unified Sensor: La biblioteca DHT depende de esta biblioteca base para el manejo de sensores. Instálala de la misma manera, buscando "Adafruit Unified Sensor".

Configuración del Código del ESP8266

El código para el ESP8266 es el corazón del proyecto, ya que se encarga de leer los datos del sensor, conectarse a la red Wi-Fi y enviar la información a través de HTTP.

// Incluir las bibliotecas necesarias#include <ESP8266WiFi.h>#include <DHT.h>// Definir los pines y el tipo de sensor DHT#define DHTPIN D4 // Pin donde está conectado el sensor DHT11#define DHTTYPE DHT11 // Tipo de sensor DHT (DHT11 o DHT22)// Crear una instancia del sensor DHTDHT dht(DHTPIN, DHTTYPE);// Credenciales de tu red Wi-Ficonst char* ssid = "TU_SSID_WIFI";const char* password = "TU_PASSWORD_WIFI";// La URL de PushingBox para enviar datos// Reemplaza YOUR_DEVICE_ID y YOUR_SERVICE_ID con tus credenciales de PushingBoxconst char* pushingbox_url = "https://api.pushingbox.com/push/YOUR_DEVICE_ID/YOUR_SERVICE_ID?temperature=%f&humidity=%f";void setup() { Serial.begin(115200); delay(10); // Inicializar el sensor DHT dht.begin(); // Conectar a la red Wi-Fi Serial.println(); Serial.print("Conectando a "); Serial.println(ssid); WiFi.begin(ssid, password); // Esperar a que la conexión Wi-Fi se establezca while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Conexion Wi-Fi establecida"); Serial.print("Direccion IP: "); Serial.println(WiFi.localIP());}void loop() { // Esperar unos segundos entre lecturas delay(10000); // 10 segundos // Leer la humedad y la temperatura del sensor DHT float h = dht.readHumidity(); // Leer la temperatura en Celsius (por defecto) float t = dht.readTemperature(); // Comprobar si la lectura fue exitosa if (isnan(h) || isnan(t)) { Serial.println("Error al leer del sensor DHT!"); return; } // Imprimir las lecturas en el monitor serial Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.println(" *C"); // Preparar la URL para PushingBox con los datos del sensor char url_buffer[200]; // Buffer para almacenar la URL construida sprintf(url_buffer, pushingbox_url, t, h); // Formatear la URL con temperatura y humedad // Enviar los datos a PushingBox Serial.println("Enviando datos a PushingBox..."); HTTPClient http; http.begin(url_buffer); // Inicializar la conexión HTTP int httpCode = http.GET(); // Realizar la solicitud GET if (httpCode > 0) { Serial.printf("HTTP Response code: %d\n", httpCode); if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } } else { Serial.printf("Error en la solicitud HTTP: %s\n", http.errorToString(httpCode).c_str()); } http.end(); // Cerrar la conexión HTTP Serial.println("Datos enviados.");}

Es crucial reemplazar "TU_SSID_WIFI" y "TU_PASSWORD_WIFI" con las credenciales de tu red Wi-Fi. La variable pushingbox_url debe ser adaptada con el YOUR_DEVICE_ID y YOUR_SERVICE_ID obtenidos de tu configuración en PushingBox. La frecuencia de envío de datos se controla con el delay(10000);, que en este caso está configurado a 10 segundos. Este valor puede ajustarse según la necesidad de actualización de los datos.

Configurar PushingBox

PushingBox actúa como un intermediario seguro entre tu ESP8266 y Google Sheets. Su función principal es tomar las solicitudes HTTP enviadas por el ESP8266 y convertirlas en solicitudes HTTPS encriptadas, que son las que Google reconoce y procesa.

Creación de una Cuenta y Dispositivo en PushingBox

  1. Regístrate en PushingBox: Visita el sitio web de PushingBox y crea una cuenta si aún no tienes una.
  2. Crea un Dispositivo: Una vez dentro de tu cuenta, navega a la sección de "Devices" y crea un nuevo dispositivo. Asigna un nombre descriptivo a tu dispositivo. Al crearlo, PushingBox te proporcionará un Device ID y un Access Token. Estos son esenciales para configurar la comunicación.
  3. Configura un Servicio: Dentro de tu dispositivo, ve a la sección de "Services" y añade un nuevo servicio. Selecciona la opción para enviar datos a una URL (generalmente un webhook).
  4. Define la Acción del Servicio: En la configuración del servicio, deberás especificar la URL de destino. En este caso, la URL de tu script de Google App. PushingBox te permitirá definir los parámetros que se enviarán. Para nuestro propósito, se enviarán la temperatura y la humedad. PushingBox te dará un Service ID específico para este servicio.

La URL que configuras en PushingBox se verá similar a: https://script.google.com/macros/s/TU_DEPLOYMENT_ID/exec?temperature=%%temperature%%&humidity=%%humidity%%. Aquí, %%temperature%% y %%humidity%% son marcadores de PushingBox que serán reemplazados por los valores enviados desde el ESP8266.

Limitaciones de PushingBox

Es importante tener en cuenta que PushingBox impone un límite de 1.000 solicitudes por día para cuentas gratuitas. Este límite es generalmente suficiente para proyectos personales o de prueba, pero si planeas enviar datos con mucha mayor frecuencia o desde múltiples dispositivos, podrías necesitar considerar un plan de pago o buscar alternativas.

Configura tu Hoja de Google y Script de Google App

Para recibir y almacenar los datos enviados desde el ESP8266, necesitas configurar una hoja de cálculo de Google y un script de Google App asociado.

Creación de la Hoja de Cálculo

  1. Accede a Google Drive: Inicia sesión en tu cuenta de Google y ve a "Mi Drive".
  2. Crea una Nueva Hoja de Cálculo: Selecciona "Nuevo" > "Hojas de cálculo de Google" para crear una hoja de cálculo en blanco.
  3. Nombra la Hoja de Cálculo: Dale un nombre intuitivo, como "Datos Sensor ESP8266".
  4. Define las Columnas: En la primera fila, crea encabezados para las columnas que recibirán los datos. Por ejemplo, puedes tener columnas para "Timestamp", "Temperatura" y "Humedad".

Creación del Script de Google App

  1. Abre el Editor de Scripts: Dentro de tu hoja de cálculo, ve a Extensiones > Apps Script.
  2. Nombra el Script: En el editor de scripts, dale un nombre descriptivo a tu proyecto, como "Receptor Datos ESP8266".
  3. Pega el Código del Script: Borra cualquier código preexistente y pega el siguiente script:
function doPost(e) { // Obtener los parámetros enviados desde PushingBox var temperature = e.parameter.temperature; var humidity = e.parameter.humidity; // Obtener la hoja de cálculo activa y la hoja específica donde se guardarán los datos var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Hoja1"); // Asegúrate de que el nombre de la hoja sea correcto // Obtener la fecha y hora actual var timestamp = new Date(); // Añadir una nueva fila con los datos sheet.appendRow([timestamp, temperature, humidity]); // Opcional: Registrar en el log para depuración Logger.log("Datos recibidos: Timestamp=" + timestamp + ", Temperatura=" + temperature + ", Humedad=" + humidity); // Devolver una respuesta para confirmar la recepción (opcional) return ContentService.createTextOutput("Datos recibidos correctamente.");}

Asegúrate de que el nombre de la hoja en ss.getSheetByName("Hoja1"); coincida exactamente con el nombre de la hoja donde deseas guardar los datos (en este ejemplo, se asume "Hoja1").

Despliegue del Script como una Aplicación Web

  1. Guarda el Script: Haz clic en el icono del disquete para guardar tu script.
  2. Despliega como Aplicación Web: Ve al menú Implementar > Nuevas implementaciones.
  3. Configura la Implementación:
    • Selecciona el tipo de implementación como "Aplicación web".
    • En "Ejecutar como", elige "Yo" (tu cuenta de Google).
    • En "Acceso", selecciona "Cualquier persona" (o "Cualquier persona con la cuenta de Google" si prefieres restringir el acceso).
    • Haz clic en "Implementar".
  4. Autoriza el Script: Se te pedirá que autorices el script para acceder a tu cuenta de Google. Revisa los permisos y autoriza.
  5. Copia la URL de la Aplicación Web: Después de la implementación, se te proporcionará una URL. Esta es la URL que deberás usar en PushingBox. Copia esta URL, ya que es el punto de entrada para tus datos. La URL tendrá un formato similar a: https://script.google.com/macros/s/TU_DEPLOYMENT_ID/exec.

Configuración de la URL en PushingBox

Ahora, vuelve a la configuración de tu servicio en PushingBox. En el campo de la URL de destino, pega la URL de tu aplicación web de Google Script. Deberás asegurarte de que los parámetros que PushingBox envía coincidan con los que tu script espera. Si tu script espera temperature y humidity, la URL en PushingBox debería verse así:

https://script.google.com/macros/s/TU_DEPLOYMENT_ID/exec?temperature=%%temperature%%&humidity=%%humidity%%

Donde %%temperature%% y %%humidity%% son los valores que se enviarán desde tu ESP8266. Asegúrate de que los nombres de los parámetros (temperature, humidity) coincidan exactamente en el código del ESP8266, en la configuración de PushingBox y en el script de Google App.

Configuración del Código del ESP8266 para PushingBox

En el código del ESP8266, la línea que define la URL de PushingBox debe ser actualizada para reflejar tu YOUR_DEVICE_ID y YOUR_SERVICE_ID específicos de PushingBox.

// La URL de PushingBox para enviar datos// Reemplaza YOUR_DEVICE_ID y YOUR_SERVICE_ID con tus credenciales de PushingBoxconst char* pushingbox_url = "https://api.pushingbox.com/push/YOUR_DEVICE_ID/YOUR_SERVICE_ID?temperature=%f&humidity=%f";

Al reemplazar YOUR_DEVICE_ID y YOUR_SERVICE_ID con los valores correctos, el ESP8266 enviará los datos de temperatura y humedad a PushingBox, que a su vez los reenviará a tu script de Google App.

Cómo se Aborda la Transferencia de Datos de NodeMCU

La transferencia de datos de NodeMCU a Google Sheets, como se describe en este tutorial, se aborda mediante un flujo de comunicación de tres pasos:

  1. ESP8266 (NodeMCU) a PushingBox: El módulo ESP8266, equipado con el sensor DHT11, lee periódicamente los datos de temperatura y humedad. Estos datos se empaquetan en una solicitud HTTP y se envían a la URL de PushingBox. Esta comunicación se realiza a través de la red Wi-Fi a la que está conectado el ESP8266.
  2. PushingBox como Intermediario: PushingBox recibe la solicitud HTTP del ESP8266. Su función principal aquí es actuar como un puente seguro. Dado que Google Sheets requiere HTTPS, PushingBox toma los datos recibidos y los reenvía a la URL de tu Google Apps Script utilizando una conexión HTTPS encriptada. Esto es crucial para la seguridad y para que Google procese la solicitud correctamente.
  3. PushingBox a Google Apps Script: PushingBox envía los datos (temperatura y humedad) a la URL de la aplicación web de tu Google Apps Script. El script, al ser activado, recibe estos datos como parámetros.
  4. Google Apps Script a Google Sheets: El script de Google App procesa los parámetros recibidos, añade una marca de tiempo y escribe los datos en la hoja de cálculo de Google Sheets especificada.

Este método es efectivo porque:

  • Evita la necesidad de manejar directamente la autenticación de Google Sheets desde el microcontrolador: El ESP8266 no necesita credenciales complejas de Google, ya que PushingBox y Google Apps Script manejan la comunicación segura.
  • Proporciona un canal seguro: La conversión de HTTP a HTTPS a través de PushingBox asegura que los datos se transmitan de forma encriptada.
  • Es de bajo costo: Utilizar Google Sheets y Google Apps Script es gratuito, y PushingBox ofrece un generoso plan gratuito para la mayoría de los proyectos de aficionados.

La elección de utilizar PushingBox como intermediario es una estrategia para simplificar la integración y mejorar la seguridad. Sin PushingBox, el ESP8266 tendría que realizar una solicitud HTTPS directamente a la API de Google Sheets, lo cual es significativamente más complejo de implementar en un microcontrolador con recursos limitados y requiere una gestión de certificados SSL.

Consideraciones Adicionales y Posibles Mejoras

  • Manejo de Errores: El código proporcionado incluye manejo básico de errores para la lectura del sensor y la conexión HTTP. Para aplicaciones críticas, se deberían implementar mecanismos de reintento más robustos y notificaciones en caso de fallos persistentes.
  • Frecuencia de Envío: La frecuencia de envío de datos (delay(10000);) puede ajustarse. Un intervalo más corto aumentará el uso de datos y podría acercarte al límite diario de PushingBox. Un intervalo más largo reducirá la granularidad de tus datos.
  • Otros Sensores: Este proyecto se centra en el DHT11. El mismo enfoque puede ser adaptado para otros sensores, siempre y cuando puedas leer sus datos en el ESP8266 y enviarlos como parámetros a través de PushingBox.
  • Visualización de Datos: Una vez que los datos están en Google Sheets, puedes utilizar las herramientas de gráficos de Google Sheets para visualizar las tendencias de temperatura y humedad a lo largo del tiempo.
  • Seguridad de Credenciales: En un entorno de producción, las credenciales de Wi-Fi y los IDs de PushingBox no deberían estar codificados directamente en el sketch. Se podrían utilizar métodos más seguros como la configuración a través de un portal cautivo o el almacenamiento en una memoria externa.
  • Gestión de Límites de PushingBox: Si superas las 1.000 solicitudes diarias de PushingBox, considera agrupar varias lecturas del sensor en una sola solicitud antes de enviarlas a PushingBox, o bien, explora planes de pago o soluciones alternativas de intermediación.
  • Google Apps Script Avanzado: El script de Google App puede ser ampliado para realizar análisis más complejos, enviar alertas si los valores superan ciertos umbrales, o incluso para interactuar con otros servicios de Google.

Al seguir estos pasos, podrás configurar tu propio sistema para monitorear y registrar datos ambientales de forma remota y accesible a través de la nube.

tags: #arduino #esp8266 #subir #datos #a #google