Cómo enviar datos desde NodeMCU a Google Sheets
Publicado: 2020-08-26Enviar datos del sensor utilizando el firmware NodeMCU a través de Internet a una hoja de cálculo de Google Sheets es muy conveniente. Esto se puede hacer mediante un script de Google y tiene la ventaja de no costar nada, a diferencia de muchas alternativas de almacenamiento en la nube.
A los efectos de este artículo, le mostraremos un proyecto simple para enviar lecturas de temperatura utilizando el ESP8266 y un sensor de temperatura y humedad DHT11.
Configure su hoja de Google
Primero, querrás crear una nueva hoja de cálculo. Inicie sesión en su cuenta de Google, vaya a Mi unidad y abra una hoja de cálculo en blanco.
Copie la clave URL de su hoja de cálculo. Dale a la hoja de cálculo un nombre intuitivo. Vaya al Editor de secuencias de comandos, en el menú Herramientas.
Dale un nombre a tu script (nuevamente, mantenlo intuitivo, especialmente si estás haciendo más de un proyecto). Utilice el script proporcionado y cópielo y péguelo en el editor de Google Script.
Debajo de la línea de ID de la hoja de cálculo, pegue la clave URL de su hoja de cálculo guardada.
Guarde el script e impleméntelo como una aplicación. Encontrarás esta opción en el menú Publicar. Configure los parámetros de implementación para garantizar que la hoja de cálculo funcione correctamente.
- Guarde la "URL de la aplicación web actual".
- Guarde la versión del proyecto como nueva para todas las revisiones del script (esto permite a Google actualizar cualquier revisión que pueda realizar en el futuro).
- Para el campo Ejecutar la aplicación como, agregue la siguiente frase "yo (su dirección de Gmail)".
- Para el campo Quién tiene acceso a la aplicación, agregue la siguiente línea "cualquiera, incluso anónimo".
Código para configurar el sensor ESP8266 y DHT11
Esto es lo que debes cargar al conectar tu ESP8266 al sensor DHT11:
#incluir “ESP8266WiFi.h”
#incluir “DHT.h”
#define DHTPIN 2 // a qué pin digital estás conectado
//pin2 a D4 en la placa esp
// Elimina el comentario en el código para el tipo de sensor DHT que estás usando.
#definir DHTTYPE DHT11 // DHT 11
//#definir DHTTYPE DHT21 // DHT 21
//#definir DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN,DHTTYPE);
const char SITIO WEB[] = “api.pushingbox.com”; //el servidor API de PushingBox
const String devid = “<TU_Devid_AQUÍ>”; //ID del dispositivo de Pushingbox
const char* MI_SSID = “<TU_NOMBRE_WIFI_AQUÍ”;
const char* MI_PWD = “<TU_CONTRASEÑA_WIFI_AQUÍ>”;
configuración nula()
{
Serie.begin(115200);
dht.begin();
Serial.print(“Conectando a “+*MY_SSID);
WiFi.begin(MY_SSID, MY_PWD);
Serial.println(“entrando en wl connect”);
while (WiFi.status() != WL_CONNECTED) //no conectado,...esperando conectarse
{
retraso(1000);
Impresión.de serie(“.”);
}
Serial.println(“wl conectado”);
Serie.println(“”);
Serial.println(“¡Credenciales aceptadas! Conectado a wifi\n “);
Serie.println(“”);
}
bucle vacío()
{
//Permita que pase más tiempo entre lecturas
// rellenar la hoja de Google, para evitar sobrepasar el número de solicitudes gratuitas de PushingBox
retraso(10000); //10 segundos (tasa de muestreo versus cuota de llamadas de servicio)
float humedadData = dht.readHumidity();
// Lee la temperatura como Celsius (el valor predeterminado)
float celData = dht.readTemperature();
// Lee la temperatura en grados Fahrenheit (isFahrenheit = true)
float fehrData = dht.readTemperature(true);
// Comprobar si hay lecturas fallidas y salir antes (para volver a intentarlo).
if (isnan(humidityData) || isnan(celData) || isnan(fehrData))
{
Serial.println(“¡Error al leer desde el sensor DHT!”);
devolver;
}
// Calcular el índice de calor en Celsius (isFahreheit = false)
float hicData = dht.computeHeatIndex(celData, humedadData, false);
// Calcular el índice de calor en Fahrenheit (el valor predeterminado)
float hifData = dht.computeHeatIndex(fehrData, humedadData);
//Imprime al monitor serial o terminal de tu elección a 115200 baudios
Serial.print(“Humedad: “);
Serial.print (datos de humedad);
Serie.print(” %\t”);
Serial.print(“Temperatura en Cel: “);
Serie.print(celData);
Serial.print(” *C “);
Serial.print(“Temperatura en Fehr: “);
Serial.print(fehrData);
Serie.print(” *F\t”);
Serial.print(“Índice de calor en Cel: “);
Serie.print(hicData);
Serial.print(” *C “);
Serial.print(“Índice de calor en Fehr: “);
Serie.print(hifData);
Serie.print(” *F\n”);
Cliente WiFiClient; //Crear una instancia del objeto WiFi
//Iniciar servicio API utilizando nuestro Cliente WiFi a través de PushingBox
if (cliente.connect(SITIO WEB, 80))
{
client.print(“OBTENER /pushingbox?devid=” + devid
+ “&humidityData=” + (Cadena) humedadData
+ “&celData=” + (Cadena) celData
+ “&fehrData=" + (Cadena) fehrData
+ “&hicData=" + (Cadena) hicData
+ “&hifData=" + (Cadena) hifData
);
client.println(”HTTP/1.1″);
cliente.print(“Host: “);
client.println(SITIO WEB);
client.println(“Agente de usuario: ESP8266/1.0”);
client.println(“Conexión: cerrar”);
cliente.println();
}
}
Ejemplo de código de secuencia de comandos de aplicación de Google
Aquí está el código que necesita para crear un script legible para la transferencia de datos de su sensor.
OBTENER Consulta de solicitud:
https://script.google.com/macros/s/<su gscriptID>/exec?celData=data_here
HumidityDat, celData,fehrData,hicData, hifData (variables GScript, PushingBox y Arduino en el orden en que debes escribirlas)
Función doGet(e) {
Logger.log (JSON.stringify(e)); // esto es para ver los parámetros
Resultado de la variable = 'Aceptar';
Si (e.parámetro == indefinido) {
Resultado = 'Sin parámetros';
}
Demás {
Var id= '<la URL de su hoja de cálculo\;
Hoja var = SpreadsheetApp.openById(id).getActivesheet();
Var nuevaFila = hoja.getLastRow() + 1;
Var datos de fila = [];
//var waktu = nueva fecha()'
datos de fila[0] = nueva fecha(); //para la marca de tiempo en la columna A
para (var parámetro en e.parameter) {
logger.log('en bucle for, param='+param);
valor var = stripQuotes(e.parameter[param]);
cambiar (parámetro) {
case 'humidityData': //Parámetro
datos de fila[1] = valor; //Valor en la columna B
romper;
caso 'celData';
datosdefila[2] = valor;
romper;
caso 'fehrData':
datos de fila[3] = valor;
romper;
caso 'hicData':
datosdefila[4] = valor;
romper;
caso 'hifData':
datos de fila[5] = valor;
romper;
por defecto:
resultado = “parámetro no admitido”;
}
Logger.log(JSON.stringify(rowData));
Var newRange = hoja.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
Devolver ContentService.createTextOutput(resultado);
}
Función stripQuotes( valor ){
Valor de retorno.replace(/^[“']|['|]$/g, “”);
}
Configurar PushingBox
Este servicio actúa como intermediario entre los datos de su sensor DHT y Google Sheets. Con la API de PushingBox, puede convertir datos transmitidos por HTTP en datos HTTPS cifrados que Google reconoce.
Tenga en cuenta que PushingBox le limita a 1000 solicitudes por día. Sin embargo, elimina gran parte del trabajo duro y la experiencia necesarios para crear su propio algoritmo de cifrado al que responderá Google.
- Cree una cuenta PushingBox, si aún no tiene una.
- Utilice la dirección de Gmail que también está utilizando para el proyecto de datos del sensor NodeMCU.
- Vaya a Mis servicios.
- Agregue un nuevo servicio desde la opción Agregar un servicio.
- Desplácese hasta la última opción titulada CustomURL, ¡Configure su propio servicio!
- Complete los campos que requieren el nombre, URL y Método.
- Para el método, seleccione OBTENER.
- Para la URL, utilice la URL que comienza con “script.google.com…”, de la URL generada cuando creó la dirección de Google Scrip.
- Envíe el servicio y vaya a Mis escenarios.
- Ingrese un nombre intuitivo y presione el botón Agregar.
- Agregue una acción cuando se le solicite en la pantalla.
- Configure el método GET formateando los nombres de cada variable. Este paso variará dependiendo de cuántos sensores estés grabando y qué estén grabando.
Configurar el hardware
Si está utilizando un sensor DHT con su ESP8266, encienda la unidad con 5v en lugar de 3.3v. Es posible que un voltaje más bajo no proporcione lecturas correctas.
Conecte los pines 2 y D4 en su ESP8266.
Configurar el software
Esta configuración funciona con Arduino IDE, preferiblemente una versión posterior a 1.6.4. Esto también significa que necesita descargar algunas bibliotecas en su sistema.
Las bibliotecas se pueden encontrar en los siguientes enlaces:
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
El siguiente paso consiste en cargar el boceto de Arduino y configurarlo para su proyecto y su dispositivo. Sólo hay tres campos relevantes que debes formatear y personalizar para tu proyecto:
- Red Wi Fi.
- Contraseña de wifi.
- ID de PushingBox.
¿Cómo se aborda la transferencia de datos de NodeMCU?
Hay más formas de hacer esto y toneladas de tipos de sensores que puede usar para transferir datos usando un ESP8266 con firmware NodeMCU directamente a Google Sheets u otras plataformas en la nube.
¿Prefieres escribir tus propios scripts y código para personalizar tus proyectos o buscas en línea scripts verificados en github y otras plataformas y te adaptas desde allí? Háganos saber sus fuentes de código y script favoritas, así como combinaciones de sensores y ESP8266, en la sección de comentarios a continuación.