Cómo enviar datos de NodeMCU a Google Sheets

Cómo enviar datos de NodeMCU a Google Sheets

Enviar los datos del sensor usando el firmware de NodeMCU por internet a una hoja de cálculo de Google Sheets puede ser muy útil. Esto se puede hacer a través de un script de Google y tiene el beneficio de no costar nada, a diferencia de muchas alternativas de almacenamiento en la nube.

Para el propósito de este artículo, te mostraremos un proyecto simple para enviar las lecturas de temperatura usando el ESP8266 y un sensor de temperatura y humedad DHT11.

Configura tu hoja de Google

  1. Primero, deberás crear una nueva hoja de cálculo. Accede a tu cuenta de Google, ve a Mi disco y abre una hoja de cálculo en blanco.
  2. Copia la clave URL de tu hoja de cálculo. Dale un nombre intuitivo a la hoja de cálculo. Ve al editor de scripts, en el menú Herramientas.
    editor de scripts
  3. Dale un nombre a tu script (de nuevo, que sea intuitivo, especialmente si estás haciendo más de un proyecto). Utiliza el guión dado y copia y pégalo en el editor de Google Script.
    código del editor de scripts
  4. Bajo la línea de identificación de la hoja de cálculo, pega la clave URL de tu hoja de cálculo guardada.
  5. Guarda el script y despliégalo como una aplicación. Encontrarás esta opción en el menú Publicar. Configura los parámetros de despliegue para asegurarte de que la hoja de cálculo funcione correctamente.
  6. Guarda la «URL de la aplicación web actual».
  7. Guarda la versión del proyecto como nueva para todas las revisiones de la secuencia de comandos (esto permite a Google actualizar las revisiones que puedas hacer en el futuro).
  8. En el campo «Ejecutar la aplicación como», añade el siguiente ling «me(tu dirección de Gmail)».
  9. Para el campo Quién tiene acceso a la aplicación, añade la siguiente línea «cualquiera, incluso anónimo».

Código para configurar el sensor ESP8266 y DHT11

Esto es lo que debe cargar al conectar su ESP8266 al sensor DHT11:

#include “ESP8266WiFi.h”

#include “DHT.h”

#define DHTPIN 2 // a qué pin digital estás conectado

//pin2 a D4 en el tablero esp

// Elimina el comentario del código del tipo de sensor DHT que estás usando.

#define DHTTYPE DHT11 // DHT 11

//#define DHTTYPE DHT21 // DHT 21

//#define DHTTYPE DHT22 // DHT 22

DHT dht(DHTPIN,DHTTYPE);

const char WEBSITE[] = “api.pushingbox.com”; //the PushingBox API server

const String devid = “<YOUR_Devid_HERE>”; //device ID from Pushingbox

const char* MY_SSID = “<YOUR_WIFI_NAME_HERE”;

const char* MY_PWD = “<YOUR_WIFI_PASSWORD_HERE>”;

void setup()

{

Serial.begin(115200);

dht.begin();

Serial.print(“Connecting to “+*MY_SSID);

WiFi.begin(MY_SSID, MY_PWD);

Serial.println(“going into wl connect”);

while (WiFi.status() != WL_CONNECTED) //not connected,..waiting to connect

{

delay(1000);

Serial.print(“.”);

}

Serial.println(“wl connected”);

Serial.println(“”);

Serial.println(“Credentials accepted! Connected to wifi\n “);

Serial.println(“”);

}

void loop()

{

//Deje pasar más tiempo entre las lecturas

//google sheet populate, para evitar repasar el número de solicitudes gratuitas de PushingBox

delay(10000); //10 seconds, (sampling rate vs. service call quota)

float humidityData = dht.readHumidity();

// Leer la temperatura como Celsius (el valor predeterminado)

float celData = dht.readTemperature();

// Leer la temperatura como Fahrenheit (isFahrenheit = true)

float fehrData = dht.readTemperature(true);

// Revisa si las lecturas fallidas salen temprano (para intentarlo de nuevo).

if (isnan(humidityData) || isnan(celData) || isnan(fehrData))

{

Serial.println(“Failed to read from DHT sensor!”);

return;

}

// Calcular el índice de calor en Celsius (isFahreheit = false)

float hicData = dht.computeHeatIndex(celData, humidityData, false);

//Calcular el índice de calor en Fahrenheit (por defecto)

float hifData = dht.computeHeatIndex(fehrData, humidityData);

//Imprimir en el monitor de serie o en el terminal de tu elección a 115200 baudios.

Serial.print(“Humidity: “);

Serial.print(humidityData);

Serial.print(” %\t”);

Serial.print(“Temperature in Cel: “);

Serial.print(celData);

Serial.print(” *C “);

Serial.print(“Temperature in Fehr: “);

Serial.print(fehrData);

Serial.print(” *F\t”);

Serial.print(“Heat index in Cel: “);

Serial.print(hicData);

Serial.print(” *C “);

Serial.print(“Heat index in Fehr: “);

Serial.print(hifData);

Serial.print(” *F\n”);

WiFiClient client; //Instantiate WiFi object

//Start or API service using our WiFi Client through PushingBox

if (client.connect(WEBSITE, 80))

{

client.print(“GET /pushingbox?devid=” + devid

+ “&humidityData=” + (String) humidityData

+ “&celData=” + (String) celData

+ “&fehrData=” + (String) fehrData

+ “&hicData=” + (String) hicData

+ “&hifData=” + (String) hifData

);

client.println(” HTTP/1.1″);

client.print(“Host: “);

client.println(WEBSITE);

client.println(“User-Agent: ESP8266/1.0”);

client.println(“Connection: close”);

client.println();

}

}

Ejemplo de código de script de Google App

Aquí está el código que necesitas para crear un guión legible para la transferencia de datos de tu sensor.

GET Request query:

https://script.google.com/macros/s/<your gscriptID>/exec?celData=data_here

HumidityDat, celData,fehrData,hicData, hifData (GScript, PushingBox, and Arduino variables in the order you should write them)

Function doGet(e) {

Logger.log ( JSON.stringify(e) ); // this is for viewing the parameters

Var result = ‘Ok’;

If (e.parameter == undefined) {

Result = ‘No Parameters’;

}

Else {

Var id= ‘<your spreadsheet URL\;

Var sheet = SpreadsheetApp.openById(id).getActivesheet();

Var newRow = sheet.getLastRow() + 1;

Var rowData = [];

//var waktu = new Date()’

rowData[0] = new Date(); //for Timestamp in column A

for (var param in e.parameter) {

logger.log(‘in for loop, param=’+param);

var value = stripQuotes(e.parameter[param]);

switch (param) {

case ‘humidityData’: //Parameter

rowData[1] = value; //Value in column B

break;

case ‘celData’;

rowData[2] = value;

break;

case ‘fehrData’:

rowData[3] = value ;

break;

case ‘hicData’:

rowData[4] = value;

break;

case ‘hifData’:

rowData[5] = value;

break;

default:

result = “unsupported parameter”;

}

Logger.log(JSON.stringify(rowData));

Var newRange = sheet.getRange(newRow, 1, 1, rowData.length);

newRange.setValues([rowData]);

}

Return ContentService.createTextOutput(result);

}

Function stripQuotes( value ){

Return value.replace(/^[“’]|[‘|]$/g, “”);

}

Configurar PushingBox

Este servicio actúa como intermediario entre los datos de tu sensor DHT y Google Sheets. Utilizando la API de PushingBox, puedes convertir los datos transmitidos por HTTP en datos HTTPS encriptados que Google reconoce.

Ten en cuenta que PushingBox te limita a 1.000 solicitudes por día. Sin embargo, elimina gran parte del trabajo y la experiencia necesarios para crear tu propio algoritmo de cifrado al que Google responderá.

  1. Crea una cuenta en PushingBox, si aún no tienes una.
  2. Utiliza la dirección de Gmail que también estás usando para el proyecto de datos del sensor NodeMCU.
  3. Ve a Mis Servicios.
  4. Añade un nuevo servicio desde la opción Añadir un servicio.
  5. Desplázate hasta la última opción titulada CustomURL, Configura tu propio servicio.
  6. Rellena los campos que requieren el nombre, la URL y el método.
  7. Para el método, selecciona GET.
  8. Para la URL, utiliza la URL que comienza con «script.google.com…», a partir de la URL generada cuando creaste la dirección de Google Scrip.
  9. Envía el servicio y ve a Mis escenarios.
  10. Introduce un nombre intuitivo y pulsa el botón de añadir.
  11. Añade una acción cuando se te pida en la pantalla.
  12. Configura el método GET formateando los nombres de cada variable. Este paso será diferente dependiendo del número de sensores que esté registrando y lo que estén registrando.

Configuración del hardware

Si usas un sensor DHT con tu ESP8266, enciende la unidad con 5v en vez de 3.3v. Un voltaje más bajo puede no darte lecturas correctas. Conecte las clavijas 2 y D4 de su ESP8266.

Configuración del software

Esta configuración funciona con el IDE de Arduino, preferiblemente una versión más reciente que la 1.6.4. Esto también significa que necesitas descargar algunas bibliotecas en tu sistema.

Las librerías se pueden encontrar en los siguientes enlaces:

hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
https://learn.adafruit.com/dht

El siguiente paso es subir el código de Arduino y configurarlo para tu proyecto y tu dispositivo. Sólo hay tres campos relevantes que debes formatear y personalizar para tu proyecto:

  • Red Wi-Fi.
  • Contraseña de Wi-Fi.
  • ID de PushingBox.

¿Cómo se aborda la transferencia de datos de NodeMCU?

Hay más formas de hacerlo y un montón de tipos de sensores que puedes usar para transferir datos usando un ESP8266 con el firmware de NodeMCU directamente a Google Sheets u otras plataformas Cloud.

Pin It on Pinterest

Shares