So senden Sie Daten von NodeMCU an Google Sheets
Veröffentlicht: 2020-08-26Das Senden von Sensordaten mithilfe der NodeMCU-Firmware über das Internet in eine Google Sheets-Tabelle ist sehr praktisch. Dies kann über ein Google-Skript erfolgen und hat den Vorteil, dass es im Gegensatz zu vielen Cloud-Speicheralternativen nichts kostet.
In diesem Artikel zeigen wir Ihnen ein einfaches Projekt zum Senden von Temperaturmesswerten mithilfe des ESP8266 und eines DHT11-Temperatur- und Feuchtigkeitssensors.
Richten Sie Ihr Google Sheet ein
Zunächst möchten Sie eine neue Tabelle erstellen. Melden Sie sich bei Ihrem Google-Konto an, gehen Sie zu „Mein Laufwerk“ und öffnen Sie eine leere Tabelle.
Kopieren Sie den URL-Schlüssel für Ihre Tabelle. Geben Sie der Tabelle einen intuitiven Namen. Gehen Sie zum Skript-Editor im Menü „Extras“.
Geben Sie Ihrem Skript einen Namen (auch hier achten Sie darauf, dass er intuitiv ist, insbesondere wenn Sie mehr als ein Projekt durchführen). Verwenden Sie das angegebene Skript und kopieren Sie es und fügen Sie es in den Google Script-Editor ein.
Fügen Sie unter der Zeile mit der Tabellen-ID den URL-Schlüssel aus Ihrer gespeicherten Tabelle ein.
Speichern Sie das Skript und stellen Sie es als App bereit. Sie finden diese Option im Menü „Veröffentlichen“. Konfigurieren Sie die Bereitstellungsparameter, um sicherzustellen, dass die Tabelle ordnungsgemäß funktioniert.
- Speichern Sie die „Aktuelle Web-App-URL“.
- Speichern Sie die Projektversion als neu für alle Skriptrevisionen (dadurch kann Google alle Revisionen, die Sie in Zukunft vornehmen, aktualisieren).
- Fügen Sie für das Feld „App ausführen als“ den folgenden Text hinzu: „ich (Ihre Gmail-Adresse)“.
- Fügen Sie für das Feld „Wer hat Zugriff auf die App“ die folgende Zeile hinzu: „Jeder, auch anonym“.
Code zum Einrichten des ESP8266- und DHT11-Sensors
Folgendes sollten Sie hochladen, wenn Sie Ihren ESP8266 mit dem DHT11-Sensor verbinden:
#include „ESP8266WiFi.h“
#include „DHT.h“
#define DHTPIN 2 // mit welchem digitalen Pin Sie verbunden sind
//Pin2 zu D4 auf der ESP-Platine
// Entfernen Sie den Kommentar im Code für den DHT-Sensortyp, den Sie verwenden.
#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“; //der PushingBox API-Server
const String devid = „<YOUR_Devid_HERE>“; //Geräte-ID von 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(“Verbinden mit „+*MY_SSID);
WiFi.begin(MY_SSID, MY_PWD);
Serial.println(“going in wl connect”);
while (WiFi.status() != WL_CONNECTED) //nicht verbunden,..wartet auf Verbindung
{
Verzögerung (1000);
Serial.print(“.”);
}
Serial.println(“wl connected“);
Serial.println(“”);
Serial.println(“Anmeldeinformationen akzeptiert! Mit WLAN verbunden\n“);
Serial.println(“”);
}
Leere Schleife()
{
//Lassen Sie zwischen den Lesungen mehr Zeit verstreichen
//Google Sheet auffüllen, um zu vermeiden, dass die Anzahl der kostenlosen Anfragen von PushingBox überschritten wird
Verzögerung (10000); //10 Sekunden, (Abtastrate vs. Service-Anrufquote)
float MoistureData = dht.readHumidity();
// Temperatur als Celsius lesen (Standard)
float celData = dht.readTemperature();
// Temperatur als Fahrenheit lesen (isFahrenheit = true)
float fehrData = dht.readTemperature(true);
// Auf fehlgeschlagene Lesevorgänge prüfen, vorzeitig beenden (um es erneut zu versuchen).
if (isnan(humidityData) || isnan(celData) || isnan(fehrData))
{
Serial.println(“Fehler beim Lesen vom DHT-Sensor!”);
zurückkehren;
}
// Hitzeindex in Celsius berechnen (isFahreheit = false)
float hicData = dht.computeHeatIndex(celData, MoistureData, false);
// Hitzeindex in Fahrenheit berechnen (Standard)
float hifData = dht.computeHeatIndex(fehrData, MoistureData);
//Drucken Sie mit 115200 Baud auf einem seriellen Monitor oder einem Terminal Ihrer Wahl
Serial.print(„Luftfeuchtigkeit:“);
Serial.print(humidityData);
Serial.print(“ %\t“);
Serial.print(“Temperatur in Cel:“);
Serial.print(celData);
Serial.print(“ *C „);
Serial.print(“Temperatur in Fehr:“);
Serial.print(fehrData);
Serial.print(“ *F\t“);
Serial.print(“Wärmeindex in Cel:“);
Serial.print(hicData);
Serial.print(“ *C „);
Serial.print(“Hitzeindex in Fehr: “);
Serial.print(hifData);
Serial.print(“ *F\n“);
WiFiClient-Client; //WLAN-Objekt instanziieren
//Starten oder API-Dienst mit unserem WiFi-Client über PushingBox
if (client.connect(WEBSITE, 80))
{
client.print(“GET /pushingbox?devid=” + devid
+ „&humidityData=“ + (String) MoistureData
+ „&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(“Verbindung: schließen”);
client.println();
}
}
Beispiel für einen Google App-Skriptcode
Hier ist der Code, den Sie benötigen, um ein lesbares Skript für Ihre Sensordatenübertragung zu erstellen.
GET-Anfrageabfrage:
https://script.google.com/macros/s/<your gscriptID>/exec?celData=data_here
HumidityDat, celData,fehrData,hicData, hifData (GScript-, PushingBox- und Arduino-Variablen in der Reihenfolge, in der Sie sie schreiben sollten)
Funktion doGet(e) {
Logger.log ( JSON.stringify(e) ); // Dies dient zum Anzeigen der Parameter
Var result = 'Ok';
If (e.parameter == undefiniert) {
Ergebnis = 'Keine Parameter';
}
Anders {
Var id= '<Ihre Tabellen-URL\;
Var sheet = SpreadsheetApp.openById(id).getActivesheet();
Var newRow = sheet.getLastRow() + 1;
Var rowData = [];
//var waktu = neues Datum()'
rowData[0] = neues Datum(); //für Zeitstempel in Spalte A
for (var param in e.parameter) {
logger.log('in for loop, param='+param);
var value = stripQuotes(e.parameter[param]);
Schalter (param) {
case 'humidityData': //Parameter
rowData[1] = value; //Wert in Spalte B
brechen;
Fall 'celData';
rowData[2] = value;
brechen;
Fall 'fehrData':
rowData[3] = value ;
brechen;
Fall 'hicData':
rowData[4] = value;
brechen;
Fall 'hifData':
rowData[5] = value;
brechen;
Standard:
Ergebnis = „nicht unterstützter Parameter“;
}
Logger.log(JSON.stringify(rowData));
Var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
Return ContentService.createTextOutput(result);
}
Funktion stripQuotes( value ){
Rückgabewert.replace(/^[“']|['|]$/g, „“);
}
PushingBox einrichten
Dieser Dienst fungiert als Vermittler zwischen Ihren DHT-Sensordaten und Google Sheets. Mithilfe der PushingBox-API können Sie über HTTP übertragene Daten in verschlüsselte HTTPS-Daten umwandeln, die von Google erkannt werden.
Beachten Sie, dass PushingBox Sie auf 1.000 Anfragen pro Tag beschränkt. Es erspart Ihnen jedoch einen Großteil der Arbeit und des Fachwissens, die für die Erstellung Ihres eigenen Verschlüsselungsalgorithmus erforderlich sind, auf den Google reagiert.
- Erstellen Sie ein PushingBox-Konto, falls Sie noch keines haben.
- Verwenden Sie die Gmail-Adresse, die Sie auch für das NodeMCU-Sensordatenprojekt verwenden.
- Gehen Sie zu Meine Dienste.
- Fügen Sie über die Option „Dienst hinzufügen“ einen neuen Dienst hinzu.
- Scrollen Sie zur letzten Option mit dem Titel „CustomURL, Legen Sie Ihren eigenen Dienst fest!“
- Füllen Sie die Felder aus, die den Namen, die URL und die Methode erfordern.
- Wählen Sie als Methode GET aus.
- Verwenden Sie als URL die URL, die mit „script.google.com…“ beginnt und von der URL stammt, die beim Erstellen der Google Scrip-Adresse generiert wurde.
- Senden Sie den Dienst und gehen Sie zu „Meine Szenarien“.
- Geben Sie einen intuitiven Namen ein und klicken Sie auf die Schaltfläche „Hinzufügen“.
- Fügen Sie eine Aktion hinzu, wenn Sie auf dem Bildschirm dazu aufgefordert werden.
- Konfigurieren Sie die GET-Methode, indem Sie die Namen für jede Variable formatieren. Dieser Schritt unterscheidet sich je nachdem, wie viele Sensoren Sie aufzeichnen und was sie aufzeichnen.
Konfigurieren der Hardware
Wenn Sie einen DHT-Sensor mit Ihrem ESP8266 verwenden, versorgen Sie das Gerät mit 5 V statt mit 3,3 V. Eine niedrigere Spannung liefert möglicherweise keine korrekten Messwerte.
Verbinden Sie die Pins 2 und D4 Ihres ESP8266.
Konfigurieren der Software
Dieses Setup funktioniert mit der Arduino IDE, vorzugsweise einer Version neuer als 1.6.4. Dies bedeutet auch, dass Sie einige Bibliotheken auf Ihr System herunterladen müssen.
Die Bibliotheken finden Sie unter folgenden Links:
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
Im nächsten Schritt laden Sie die Arduino-Skizze hoch und konfigurieren sie für Ihr Projekt und Ihr Gerät. Es gibt nur drei relevante Felder, die Sie für Ihr Projekt formatieren und anpassen müssen:
- Wi-Fi-Netzwerk.
- WLAN Passwort.
- PushingBox-ID.
Wie gehen Sie an die NodeMCU-Datenübertragung heran?
Dafür gibt es mehr Möglichkeiten und unzählige Sensortypen, mit denen Sie Daten mithilfe eines ESP8266 mit NodeMCU-Firmware direkt an Google Sheets oder andere Cloud-Plattformen übertragen können.
Schreiben Sie lieber Ihre eigenen Skripte und Codes, um Ihre Projekte zu personalisieren, oder suchen Sie online auf Github und anderen Plattformen nach verifizierten Skripten und passen diese dann an? Teilen Sie uns im Kommentarbereich unten Ihre bevorzugten Code- und Skriptquellen sowie ESP8266- und Sensorkombinationen mit.