ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

En el mundo de la Internet de las cosas, la capacidad de enviar datos de sensores de manera eficiente y precisa es fundamental. En este artículo, exploraremos cómo el ESP32 puede publicar valores de sensores en Google Sheets, una plataforma popular para organizar y analizar datos. ¡Además, este método también es compatible con el ESP8266, lo que lo hace accesible para una amplia gama de dispositivos! Acompáñanos en este emocionante viaje de programación y conectividad.

En este tutorial, le mostraremos cómo publicar valores de sensores en Google Sheets usando la placa ESP32 o ESP8266. Como ejemplo, publicamos valores de temperatura, humedad y presión en una hoja de cálculo de Google Sheets cada 30 minutos usando el sensor BME280; usamos IFTTT.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Puede utilizar IFTTT para integrarse con Google Sheets, pero por ahora recomendamos la integración con Google Sheets a través de una cuenta de servicios de Google. Recomendamos seguir este tutorial: Registro de datos ESP32 en Google Sheets (con una cuenta de servicio de Google).

Descripción del proyecto

La siguiente imagen muestra una descripción general de lo que logrará al final de este proyecto.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)
  • Primero el ESP se conecta a tu red WiFi;
  • A continuación, el BME280 mide la temperatura, la humedad y la presión.
  • Su ESP32 o ESP8266 se comunica con el servicio webhook IFTTT, que publica las métricas en una hoja de cálculo en Google Sheets, almacenada en su carpeta de Google Drive.
  • Una vez publicadas las lecturas, el ESP entra en modo de sueño profundo durante 30 minutos;
  • Después de 30 minutos el ESP se despierta;
  • Después de despertarse, el ESP se conecta al WiFi y el proceso se repite.

Creando su cuenta IFTTT

Para este proyecto estamos utilizando IFTTT para integrarlo con Google Sheets. Entonces, el primer paso es crear una cuenta en IFTTT si aún no tienes una. ¡Crear una cuenta con IFTTT es gratis!

Ir al sitio web oficial: ifttt.com e ingrese su dirección de correo electrónico para comenzar.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Creando un subprograma

A continuación necesitas crear un nuevo subprograma. Siga los siguientes pasos para crear un nuevo subprograma:

1) Vaya a Mis subprogramas y cree un nuevo subprograma haciendo clic en el botón Nuevo subprograma.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

2) Haga clic en la palabra azul «esto» como se resalta en la imagen a continuación.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

3) Busque el servicio Webhooks y seleccione el icono Webhooks.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

4) Seleccione el activador «Recibir una solicitud web».

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

5) Dale un nombre al evento. En este caso «bme280_valores medidos”, como se muestra en la imagen a continuación. Luego haga clic en el botón «Crear disparador».

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

6) Haga clic en “esta” palabra para continuar.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

7) Busque el servicio Google Sheets y seleccione el icono de Google Sheets.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

8vo) Si aún no se ha conectado al servicio Google Sheets, deberá hacer clic en el botón «Conectar».

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

9) Seleccione la acción «Agregar fila a la tabla».

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

10) Luego complete los campos de acción. Asigne un nombre a la tabla, deje el campo Fila formateada como predeterminado y luego elija una ruta de carpeta de Google Drive. Si deja este campo en blanco, IFTTT creará una carpeta llamada «IFTTT» en su carpeta de Google Drive para almacenar la hoja de cálculo. Finalmente, haga clic en el botón «Crear acción».

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

11) Su subprograma debería crearse después de hacer clic en el botón Listo.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Probando su subprograma

Antes de continuar con el proyecto, es muy importante probar primero su subprograma. Siga los siguientes pasos para probar su subprograma.

1) Ir a Página de servicio de webhooksy haga clic en el botón “Documentación”.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

2) Aparecerá una página como la siguiente imagen. La página mostrará su clave API única. No debes compartir tu clave API única con nadie.

Complete la sección «Cómo activar un evento» como se muestra a continuación: está resaltada con rectángulos rojos. Luego haga clic en el botón «Probar».

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

3) El evento debería activarse correctamente y recibirá un mensaje verde como se muestra a continuación que dice «El evento se ha activado».

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

4) Vaya a su Google Drive. El servicio IFTTT debería haber creado una carpeta llamada «IFTTT» con la tabla «BME280_Readings» en ella.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

5) Abra la hoja de cálculo y debería ver los valores que ingresó anteriormente para probar el subprograma.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Continúe leyendo esta publicación para aprender cómo integrar el servicio IFTTT Google Sheets con su ESP32 o ESP8266.

Piezas requeridas

Para este ejemplo tomamos los valores del sensor BME280. Aquí hay una lista de las piezas que necesitará para construir el circuito para este proyecto:

Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Esquema

El sensor BME280 que utilizamos en este ejemplo puede comunicarse con ESP32/ESP8266 a través del protocolo de comunicación I2C. Por tanto utilizaremos los pines ESP I2C.

BME280 con ESP32

Siga el siguiente diagrama de cableado para cablear el sensor BME280 si usa un ESP32.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

(Este esquema utiliza la versión del módulo ESP32 DEVKIT V1 con 36 GPIO; si está utilizando un modelo diferente, verifique la distribución de pines de la placa que está utilizando).

Recomendaciones de literatura: ESP32 con sensor BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

BME280 con ESP8266

Siga el siguiente esquema si está utilizando un ESP8266 12E.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Nota: Para utilizar el modo de suspensión profunda con el ESP8266, debe conectar D0 (GPIO16) al pin RST.

Recomendaciones de literatura: ESP8266 con BME280 usando Arduino IDE (Presión, Temperatura, Humedad)

Instalación de la biblioteca BME280

Para medir la lectura del módulo sensor BME280, utilizamos el Biblioteca Adafruit_BME280Siga los siguientes pasos para instalar la biblioteca en su IDE de Arduino:

Abra su IDE de Arduino y vaya a Bosquejo > incluir biblioteca > Administrar bibliotecas. El administrador de la biblioteca debería abrirse.

Buscar «Adafruit BME280 ”en el campo de búsqueda e instale la biblioteca.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Instalación de la biblioteca Adafruit_Sensor

Para utilizar la biblioteca BME280, también debe tener la Biblioteca Adafruit_SensorSiga los siguientes pasos para instalar la biblioteca en su IDE de Arduino:

Ir a Bosquejo > incluir biblioteca > Administrar bibliotecas y escribe “Sensor unificado de Adafruit”en el campo de búsqueda. Desplácese hacia abajo para buscar e instalar la biblioteca.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Después de instalar las bibliotecas, reinicie su IDE de Arduino.

código

Existe un complemento para Arduino IDE que le permite programar el ESP32 usando el Arduino IDE y su lenguaje de programación. Siga uno de los siguientes tutoriales para preparar su IDE de Arduino si aún no lo ha hecho.

  • ventanas Instrucciones – Placa ESP32 en Arduino IDE
  • mac y linux Instrucciones – Placa ESP32 en Arduino IDE
  • Placa ESP8266 en Arduino IDE

Después de asegurarse de tener instalado el complemento ESP32, puede copiar el siguiente código en su IDE de Arduino. ¡Pero no lo subas todavía! Para que funcione para usted, debe realizar algunos cambios.

Nota: Este código funciona tanto con el ESP32 como con el ESP8266.

/*
 * Rui Santos 
 * Complete Project Details https://randomnerdtutorials.com
 */
 
#ifdef ESP32
  #include <WiFi.h>
#else
  #include <ESP8266WiFi.h>
#endif

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

// Replace with your SSID and Password
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Replace with your unique IFTTT URL resource
const char* resource = "REPLACE_WITH_YOUR_IFTTT_URL_RESOURCE";

// How your resource variable should look like, but with your own API KEY (that API KEY below is just an example):
//const char* resource = "/trigger/bme280_readings/with/key/nAZjOphL3d-ZO4N3k64-1A7gTlNSrxMJdmqy3";

// Maker Webhooks IFTTT
const char* server = "maker.ifttt.com";

// Time to sleep
uint64_t uS_TO_S_FACTOR = 1000000;  // Conversion factor for micro seconds to seconds
// sleep for 30 minutes = 1800 seconds
uint64_t TIME_TO_SLEEP = 1800;

// Uncomment to use BME280 SPI
/*#include <SPI.h>
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

void setup() {
  Serial.begin(115200); 
  delay(2000);

  // initialize BME280 sensor
  bool status;
  status = bme.begin(0x76);  
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  initWifi();
  makeIFTTTRequest();
    
  #ifdef ESP32
    // enable timer deep sleep
    esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);    
    Serial.println("Going to sleep now");
    // start deep sleep for 3600 seconds (60 minutes)
    esp_deep_sleep_start();
  #else
    // Deep sleep mode for 3600 seconds (60 minutes)
    Serial.println("Going to sleep now");
    ESP.deepSleep(TIME_TO_SLEEP * uS_TO_S_FACTOR); 
  #endif
}

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 the IFTTT web service
void makeIFTTTRequest() {
  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...");
  }
  
  Serial.print("Request resource: "); 
  Serial.println(resource);

  // Temperature in Celsius
  String jsonObject = String("{"value1":"") + bme.readTemperature() + "","value2":"" + (bme.readPressure()/100.0F)
                      + "","value3":"" + bme.readHumidity() + ""}";
                      
  // Comment the previous line and uncomment the next line to publish temperature readings in Fahrenheit                    
  /*String jsonObject = String("{"value1":"") + (1.8 * bme.readTemperature() + 32) + "","value2":"" 
                      + (bme.readPressure()/100.0F) + "","value3":"" + bme.readHumidity() + ""}";*/
                      
  client.println(String("POST ") + resource + " HTTP/1.1");
  client.println(String("Host: ") + server); 
  client.println("Connection: closernContent-Type: application/json");
  client.print("Content-Length: ");
  client.println(jsonObject.length());
  client.println();
  client.println(jsonObject);
        
  int timeout = 5 * 10; // 5 seconds             
  while(!!!client.available() && (timeout-- > 0)){
    delay(100);
  }
  if(!!!client.available()) {
    Serial.println("No response...");
  }
  while(client.available()){
    Serial.write(client.read());
  }
  
  Serial.println("nclosing connection");
  client.stop(); 
}

Ver código sin formato

Incluyendo su SSID y contraseña

Lo primero que debes hacer en el código es cambiar tus credenciales de red: escribe el SSID y la contraseña en las siguientes líneas:

// Replace with your SSID and Password
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Incluyendo su recurso único de URL IFTTT

Luego deberá escribir su recurso de URL IFTTT único. Vuelva a la sección Probar su subprograma, punto 2) para obtener su recurso URL IFTTT único.

// Replace with your unique IFTTT URL resource
const char* resource = "REPLACE_WITH_YOUR_IFTTT_URL_RESOURCE";

En mi caso mi recurso es:

/trigger/bme280_readings/with/key/nAZjOphL3d-ZO4N3k64-1A7gTlNSrxMJdmqy3

Entonces esta línea en el código se ve así:

const char* resource = "/trigger/bme280_readings/with/key/nAZjOphL3d-ZO4N3k64-1A7gTlNSrxMJdmqy3";

Configurar el tiempo de sueño

En este ejemplo, hemos fijado el tiempo de descanso en 30 minutos. Esto significa que cada 30 minutos el ESP se activa, recopila las mediciones y las publica en su hoja de cálculo de Google Sheets. El período de descanso será en HORA DE DORMIR Variable en segundos:

// sleep for 30 minutes = 1800 seconds
uint64_t TIME_TO_SLEEP = 1800;

Si desea cambiar el tiempo de sueño, debe HORA DE DORMIR Variable. Tenga en cuenta que puede configurar el tiempo de sueño en el HORA DE DORMIR variable en segundos.

Advertencia: Tenga cuidado al configurar el tiempo de descanso. Si establece un período de tiempo muy corto, puede exceder el límite de solicitudes impuesto por el servicio IFTTT.

Envío de lecturas de BME280

Los valores medidos del sensor BME280 se transmiten a través del jsonObjeto Variable como se muestra en la siguiente línea:

String jsonObject = String("{"value1":"") + bme.readTemperature() + "","value2":"" + (bme.readPressure()/100.0F) + "","value3":"" + bme.readHumidity() + ""}";

Publicar temperatura en grados Fahrenheit

Para publicar la temperatura en Fahrenheit, es necesario comentar y descomentar el código de esta manera:

// Temperature in Celsius
/*String jsonObject = String("{"value1":"") + bme.readTemperature() + "","value2":"" + (bme.readPressure()/100.0F) + "","value3":"" + bme.readHumidity() + ""}";*/

// Comment the previous line and uncomment the next line to publish temperature readings in Fahrenheit 
String jsonObject = String("{"value1":"") + (1.8 * bme.readTemperature() + 32) + "","value2":"" + (bme.readPressure()/100.0F) + "","value3":"" + bme.readHumidity() + ""}";

demostración

Después de realizar todos los cambios necesarios, cargue el código en su ESP32 o ESP8266. Asegúrese de seleccionar la placa y el puerto COM correctos.

Cada 30 minutos, el ESP32 o ESP8266 se activa para recopilar los valores del sensor y publicarlos en una hoja de cálculo en Google Sheets.

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

El chip ESP32 tiene un reloj incorporado, por lo que las lecturas son muy precisas y se publican en la mesa cada 30 minutos. El ESP8266, por el contrario, publica nuevos valores medidos aproximadamente cada 28 o 29 minutos.

Envolver

En esta publicación, le mostramos cómo publicar las lecturas de su sensor con su ESP32 o ESP8266 en una hoja de cálculo en Google Sheets usando la plataforma IFTTT. Como ejemplo, hemos publicado mediciones del sensor BME280. También utilizamos las funciones de suspensión profunda del ESP para ahorrar energía. De esta forma, el ESP sólo está activo cuando necesitamos tomar medidas. Debería poder aplicar este ejemplo de proyecto a sus propios proyectos.

Tenga en cuenta que este método tiene algunas limitaciones: en primer lugar, utiliza un servicio de terceros y, en segundo lugar, debe tener cuidado con la cantidad de solicitudes que realiza en un día. Sin embargo, este método funciona muy bien y es fácil de implementar.

Si te gusta ESP32 y quieres aprender más sobre él, asegúrate de consultar nuestro curso dedicado completamente a ESP32: Aprenda ESP32 con Arduino IDE.

Gracias por leer.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)

Introducción

En este tutorial se mostrará cómo publicar lecturas de sensores en Google Sheets utilizando placas ESP32 o ESP8266. A modo de ejemplo, publicaremos lecturas de temperatura, humedad y presión utilizando el sensor BME280 en una hoja de cálculo de Google Sheets cada 30 minutos, utilizando IFTTT.

¿Qué es IFTTT?

IFTTT es un servicio en línea que te permite crear cadenas de acciones simples en línea. En este caso, lo utilizaremos para integrar Google Sheets con nuestros dispositivos ESP32 o ESP8266. Recomendamos seguir este tutorial para integrar Google Sheets usando una cuenta de Servicio de Google.

Proyecto

El proyecto consiste en que el ESP se conecte a tu red Wi-Fi, tome las lecturas de temperatura, humedad y presión con el sensor BME280, se comunique con el servicio de Webhooks de IFTTT que publica las lecturas en una hoja de cálculo en Google Sheets guardada en tu Google Drive, y luego entre en modo de hibernación por 30 minutos. Este proceso se repite cada 30 minutos.

Preguntas Frecuentes

  1. ¿Cómo creo una cuenta en IFTTT?

    Para crear una cuenta en IFTTT, visita el sitio oficial ifttt.com e ingresa tu correo electrónico para empezar.

  2. ¿Cómo creo un Applet en IFTTT?

    Para crear un Applet, sigue los siguientes pasos: ve a «Mis Applets» y haz clic en «Nuevo Applet». Luego, selecciona el servicio «Webhooks» como activador y crea una acción para añadir una fila en Google Sheets. Completa los campos necesarios y luego crea el Applet.

  3. ¿Qué componentes necesito para el proyecto?

    Para este proyecto necesitarás una placa ESP32 o ESP8266, un sensor BME280, cables jumper y una protoboard. Puedes encontrar estos componentes en MakerAdvisor.com.

  4. ¿Cómo configuro las horas de sueño del ESP?

    Puedes configurar el tiempo de sueño en el código del ESP modificando la variable TIME_TO_SLEEP. Cada unidad representa un segundo, por lo que el tiempo de sueño se introduce en segundos.

  5. ¿Puedo publicar la temperatura en Fahrenheit en lugar de Celsius?

    Sí, puedes publicar la temperatura en Fahrenheit modificando el código para realizar la conversión. Encuentra la sección en el código que se encarga de enviar las lecturas y modifica la fórmula para Fahrenheit.

2 comentarios en «ESP32 publica valores de sensores en Google Sheets (compatible con ESP8266)»

Deja un comentario