Sie sind auf Seite 1von 8

6/12/2020 ESP32, Google Tabellen (Sheets) und Google Apps Script

ESP32 Arduino Projekte

10x-60x Faster Query Times


Event data is the lifeblood of managing a digital system, service or business

Scalyr DOWNLOAD

ESP32 und Google Tabellen (Sheets)

Beispiel für direkte Messwert Übertragung von ESP32 in  Google Tabellen (Sheets)

Bei dem ESP8266 gab es die Möglichkeit mit Hilfe externe Bibliothek HTTPSRedirect mit Google über SSL zu kommunizieren.
ESP32 hat schon passende Mittel dabei.  WiFiClientSecure.h ermöglicht eine HTTPS  SSL Verbindung direkt zum Google
Tabellen (Sheets) herzustellen. Ok nicht ganz so direkt. Dazwischen soll noch ein Google Apps Script verwendet werden.
Google Script kann von überall gestartet werden und in der GET (oder auch POST) Anfrage werden die Daten von ESP32
übertragen und von Google Script in die Google Tabelle eingetragen. Vorteil von dieser Methode ist, dass keine zusätzlichen
Service verwendet werden. Kein IFTTT oder PushingBox ist nötig. Vorgehensweise:

Google Tabelle erzeugen (Tabellen ID Merken)


Google Apps Script (JavaScript) anlegen und als Web-App einrichten
In ESP32 Beispiel Sketch  das Web-App-URL eintragen.

Beschreibung  des Google Scripts



esp32-server.de/google-sheets/ 1/8
6/12/2020 ESP32, Google Tabellen (Sheets) und Google Apps Script

der Google Script Empfängt Daten per Get-Anfrage und platziert die Werte in die nächste freie Zeile. Damit der Script auf Ihre
Google Tabelle den Zugri erhält, fügen sie in die Zeile 1 des Google Scripts die ID der Google Tabelle. ID der Tabelle
entnehmen Sie dem URL der Google Tabelle.
In die erste Spalte (A) wird automatisch Timestamp eingetragen. Weitere Zellen werden mit den Daten gefüllt.  Die Zahl mit
der das Argument der GET-Anfrage anfängt, bestimmt die Spalte wo der Wert eingetragen wird. „2_Spalte=200“  Spalte 2 (C)
wird mit dem Wert „200“ beschrieben. Anzahl der Argumente-Wert Paare ist nicht begrenzt. Wichtig ist das Argument mit
einer Zahl anfängt, der Text dahinter kann beliebig sein. Bei erfolgreicher Ausführung des Google Scripts erscheint im
Browser  ein „Ok“ als Text.

1 var id = '11DaCrAGtFplNqW5VJOsvTELR2oHoyJ9bhiCbrfwertz';  // ID der Tabelle


2  
3 function doGet(e) {                 // GET Parameter Empfangen
4  
5   if (e.parameter == undefined) {   // Wenn keine Parametr über GET Empfangen
6     result = 'Parameter fehlen';
7   }
8   else {
9     var sheet = SpreadsheetApp.openById(id).getActiveSheet(); // Zuweisung des Tabellendokuments und AktiverTabelle einer Variable
10     var newRow = sheet.getLastRow() + 1;  // Letzte beschriebene Zeile + 1
11     var rowData = [];        // Array anlegen
12     rowData[0] = new Date(); // Timestamp in Spalte A Erste Elemet des Arrays rowData
13     
14     for (var param in e.parameter) {    // Alle empfangenen Parametr Durchgenen
15       var value = e.parameter[param];   // Werte einlesen
16       rowData[parseInt(param)] = value; // Werte in Array Speichern. Position bestimmt die Zahl im Parametr
17     }
18     
19     // Lege neue Zeile an in der Länge des Arrays mit Werten
20     var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
21     newRange.setValues([rowData]);    // Zeile  mit Daten aus Array befüllen
22     var result =  'Ok'// Text des Anworts
23   }
24  
25   // Antwort als Text an Browser senden
26   return ContentService.createTextOutput(result);
27 }

Anleitung: Google Script als Web-App einrichten

Beschreibung ESP32 Sketches

Der Sketch erzeugt HTTPS Verbindung mit  script.google.com und sendet eine GET Anfrage an Web-App (Google Script).
Diese Anfrage sieht so aus:
„https://script.google.com/macros/s/AKrycby0T0QaLhhdlDRiBNyYSWYwq9bNM-Y17YrzFVeZ8V6im9FL42c/exec?
1_Spalte=100&2_Spalte=200&3_Spalte=300&4_Spalte=400&5_Spalte=500&6_Spalte=600“

Das URL bis zum Fragezeichen erhalten Sie beim Anlegen des Google Scripts als Web-App. Text Nach dem Fragezeichen sind
Die Daten die zum Google Script übertragen werden. Google App Script antwortet erst mit einem Redirect. Und auf der
umgeleiteten Webseite be ndet sich der Antwort des Google App Scripts.

Das Beispielprogramm sendet die Werte  100,200,300,400,500,600 zum Google Sheet beim jeden Start. Wenn das  Google
Script Web-App mit einem „Ok“ antwortet Geht die Eingebaute LED an. Das Beispielprogramm sollte die Grundfunktion
zeigen und als Vorlage für weitere Entwicklungen dienen.

1 #include <WiFiClientSecure.h>
2 #define LED_BUILTIN 22         // LED an ESP32 LOLIN32
3  
4 const char* ssid     = "Bitte eintragen";    
5 const char* password = "Bitte eintragen";
6  
7 const char*  server = "script.google.com";  // Server URL
8 // google script key
9 const char* key = "AKfycby0T0QaLhodlDRiBNyYSWYwq9bNM-Y17YrzFVeZ8V6im9FL42c";
10  
11 WiFiClientSecure client;
12 #define debug true
13  
14 boolean SendeZumGoogle(String URL)
15 {
16   String movedURL;
17   String line;
18
19
 
  if (debug)Serial.println("Verbinde zum script.google.com");

esp32-server.de/google-sheets/ 2/8
6/12/2020 ESP32, Google Tabellen (Sheets) und Google Apps Script
20   if (!client.connect(server, 443))
21   {
22     if (debug) Serial.println("Verbindung fehlgeschlagen!");
23     return false;
24   }
25  
26   if (debug) Serial.println("Verbunden!");
27   // ESP32 Erzeugt HTTPS Anfrage an Google sheets
28   client.println("GET " + URL);
29   client.println("Host: script.google.com" );
30   client.println("Connection: close");
31   client.println();
32  
33   // ESP32 empfängt antwort vom Google sheets
34   while (client.connected())     // ESP32  empfängt Header
35   {
36     line = client.readStringUntil('\n');
37     if (debug) Serial.println(line);
38     if (line == "\r") break;      // Ende Des Headers empfangen
39     if (line.indexOf ( "Location" ) >= 0)   // Weiterleitung im Header?
40     { // Neue URL merken
41       movedURL = line.substring ( line.indexOf ( ":" ) + 2 ) ;
42     }
43   }
44  
45   while (client.connected())    // Google Antwort HTML Zeilenweise Lesen
46   {
47     if (client.available())
48     {
49       line = client.readStringUntil('\r');
50       if (debug) Serial.print(line);
51     }
52   }
53   client.stop();
54  
55   movedURL.trim(); // leerzeichen, \n entfernen
56   if (debug) Serial.println("Weiterleitungs URL: \"" + movedURL + "\"");
57  
58   if (movedURL.length() < 10) return false; // Weiterleitung nicht da
59  
60   if (debug) Serial.println("\n Starte Weiterleitung...");
61   if (!client.connect(server, 443))
62   {
63     if (debug) Serial.println("Weiterleitung fehlgeschlagen!");
64     return false;
65   }
66  
67   Serial.println("Verbunden!");
68   // // ESP32 Erzeugt HTTPS Anfrage an Google Tabellen
69   client.println("GET " + movedURL);
70   client.println("Host: script.google.com");
71   client.println("Connection: close");
72   client.println();
73  
74   while (client.connected()) // ESP32  empfängt Header
75   {
76     line = client.readStringUntil('\n');
77     if (debug) Serial.println(line);
78     if (line == "\r")break;
79   }
80   
81   while (client.connected()) // Google Antwort HTML Zeilenweise Lesen
82   {
83     if (client.available())
84     {
85       line = client.readStringUntil('\r');
86       if (debug) Serial.print(line);
87     }
88   }
89   client.stop();
90   if (line == "Ok") return true;
91 }
92  
93  
94 void setup()
95 {
96   pinMode(LED_BUILTIN, OUTPUT);
97   digitalWrite(LED_BUILTIN, 1);
98   Serial.begin(115200);
99   Serial.println("Warte auf Verbindung");
100   WiFi.begin(ssid, password);
101   while (WiFi.status() != WL_CONNECTED)
102   {
103     delay(500);
104     Serial.print(".");
105   }
106   Serial.println("");
107   Serial.print("IP Addresse: ");
108   Serial.println(WiFi.localIP());
109   String URL="https://script.google.com/macros/s/";
110   URL += key;
111   URL += "/exec?";
112   URL += "1_Spalte=100&2_Spalte=200&3_Spalte=300&4_Spalte=400&5_Spalte=500&6_Spalte=600";
113   Serial.println(URL);
114   if (SendeZumGoogle(URL)) digitalWrite(LED_BUILTIN, 0);
115
116
}
 

117 void loop()

esp32-server.de/google-sheets/ 3/8
6/12/2020 ESP32, Google Tabellen (Sheets) und Google Apps Script
118 {
119   delay(1);
120 }

Erzeugen und kon gurieren des Google Scripts

Legen Sie neue Tabelle an.


Geben Sie die Überschriften. Erste Spalte heißt „Timestamp“ oder „Datum/Zeit“.
Bitte formatieren Sie entsprechend die erste Spalte. (auf „A“ klicken => Format => Zahl => Datum/Uhrzeit). Sonst wird nur
Datum angezeigt.
Direkt vom Google Tabelle können wir zum Google Scripteditor wechseln: Tools => Skripteditor. Vergeben Sie dem Script
eine Name sonst heiß er „Unbenanntes Projekt“.
Ersetzen Sie function myFunction durch den Script von dieser Webseite.

Damit der Google Script auf die Tabelle Zugri erhält, muss dem Script die ID des spreadsheets mitgeteilt werden. Wechseln
Sie zu Google Tabelle und kopieren Sie aus dem URL die ID.

https://docs.google.com/spreadsheets/d/17k0fEFhPdL9QlmfLF9H8UD0u3v9eUQWsWoWqZe35CKc/edit#gid=0

Fügen Sie die ID in das Script (Zeile 1). Speichern Sie das Script „Strg+s“
Wechseln Sie zum Menü Verö entlichen => Als Web-App einrichten


esp32-server.de/google-sheets/ 4/8
6/12/2020 ESP32, Google Tabellen (Sheets) und Google Apps Script


esp32-server.de/google-sheets/ 5/8
6/12/2020 ESP32, Google Tabellen (Sheets) und Google Apps Script

Jetzt kommt Meldung „Autorisierung erforderlich“ Melden Sie sich mit ihrem Google Konto.
Trotz dem, werden Sie nicht weiter zum Script zugelassen.

Klicken Sie auf „Erweitert“ => „Unsicher ausführen“


esp32-server.de/google-sheets/ 6/8
6/12/2020 ESP32, Google Tabellen (Sheets) und Google Apps Script

Kopieren Sie die Web-App-URL. ID aus dieser URL kommt in ESP32 Sketch in die Zeile 9 (google script key).

Testen des Google Scripts

Bevor man zu ESP32 greift, sollte erst die Funktionalität des Google Scripts über Browser geprüft werden. Geben Sie das URL
„https://script.google.com/macros/s/_Script_ID_/exec?
1_Spalte=100&2_Spalte=200&3_Spalte=300&4_Spalte=400&5_Spalte=500&6_Spalte=600“ in die Adresszeile Ihres
Browsers(„_Script_ID_“ gegen Ihr  Google Script ID austauschen). Es sollte ein „Ok“ erscheinen und Ihre Tabelle bekommt
eine neue Zeile.

Anzeige als Diagramm

Bei Google Tabellen gibt es Möglichkeit, genauso wie beim Excel, ein Diagramm zu erstellen. Dieses Diagramm lässt sich als
Gra k verö entlichen. Ein ö entliches Diagramm kann man in eigene Homepage einbinden.
Ich habe mir Gedanken gemacht wie zeige ich nur die aktuelle Daten und nicht alle in der Tabelle. Passende Anweisungen
sind schnell gefunden:

if(sheet.getLastRow()>20) sheet.deleteRows(2);

Wenn die nächste freie Zeile 21 ist wird Zeile 2 gelöscht.


Die Tabelle wird bis Zeile 20 gefüllt, danach wird Zeile 2 gelöscht(Erste Zeile hat Überschriften) und die anderen Zeilen
rutschen nach oben. So erhalten Wir immer die letzten 20 Eintragungen und die neuste Werte im Diagramm. Man könnte
noch die Zeile 2 vor dem löschen in eine andere Tabelle eintragen fürs Protokoll.

Ideen

Personenwaage die das Gewicht  an Google sheets sendet. Waage umbauen mit HX711 modul.
Gmail noti er. Wand Anzeigetafel die das Anzahl ungelesene Mails anzeigt.
var ureadMsgsCount = GmailApp.getInboxUnreadCount();
Wand Anzeigetafel die Text des Mails  anzeigt, wenn das Betre bestimmte Codewort enthält. Oder von bestimmten
Versender.
Vorde nierte E-Mail über Gmail senden per Tastendruck, Reedkontakt oder Touch. Batteriebetrieben.


esp32-server.de/google-sheets/ 7/8
6/12/2020 ESP32, Google Tabellen (Sheets) und Google Apps Script


esp32-server.de/google-sheets/ 8/8