#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include "time.h"
#include <ESP_Google_Sheet_Client.h>
#include <GS_SDHelper.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Google Project ID
#define PROJECT_ID "Id-proyectoserious-case-468717-j2"
// Service Account's client email
#define CLIENT_EMAIL "[email protected]"
// Service Account's private key
const char PRIVATE_KEY[] PROGMEM = "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCwWH8rE372Kl1k\napxbKuxjGNce2b7fq4iCbqf+mn7NHlNuQzNeKuJEHBlnL098eEgoYik3cvhP+RHL\nCDVr1KVvebbhb0auffysLcT2LgmiaH05q5kDCdbuWHfnPgmfL+LYGMkhkjm07j8K\n6pjGyGH/LOQGCpGLlVyzOazUlTz0lE2RLyyMGd9eC36x9hP490LmVRaHR1zX+1lF\n7BpzJ0kdHInvOwW78Yxjn4EYm6U72Mm3JMU0rLmNYh1gOIIkJsVMe6iM20ro4fDA\nCL4XQi4Q/d/wDJSUqqRCUY2HJABc1CGm78aUpBWhWMEQBB6XynQR2jobnVoUq/Nw\n0d9JgHujAgMBAAECggEAAxF0vPgODchmsZSvpgq4ltiniV+w3Y+dLOZObELDqRAd\nFj0vhsMOi4EMLBnoltZyP2YR+Nj4BbcmrKhJuFL63lY2y7tSPZ2QXN/g6h6RPB+Z\nED8tqmUEIsw6lfwtVsD/nItumEke/Eh/RNJtqPK1b7VVwnYvpiqhX0TGGxLXlFQA\n/FoMD6oLmLXau7pDpfnVBZM2TqVpIFS11CQtzx44iAbqn6XAWIffDQzplFAXYSNH\nQCY8swU8SHc0RGlO+8iWbtxcaTKuvzDX4j6viwxKgYg0P0cxW3RZKSU5dIFolSI0\nPxQpN9IT2aKd2Iuo0vlfcrBVR+9EP4ULjU6nKWL00QKBgQDaNxr2o3gOR2DDLNvU\nidIXlIsdC4voBR8yDEQsmbJ3Ur72sN6NCYP8HHaWzZzFtABNZdhEsPYvP6DdDUSh\nJ7fCp9EcBpTtaAiug52XF+KtmuwhdBYBBgxJLcahEvOsJ314++0Wddh+Jcc+AOwf\nqR0BYo6uaSkpGsmAwio/77yeiQKBgQDO4W0mEQlj+SE/ysrxyoeJ3QQZaYkRQ///\nWpldG0w0IOrrph4CW7fe4enz1o6WWNeCOaHkOPDYRIHQ/rk1qfwlO8qRZX3ytvbr\nP2AqaIoRUYOnVaXTg34QEw0JwC/ilY06tfpuTSLTV334qFzHgJkp9nsS5nm888YJ\nFVFuEN9dywKBgDFCQzntyMogXr1wQOeHfP+JrqWN17U2gsY/cpxGzbyV1znEz1gz\nD7I3kqWUIJGYgoD2Po2zDL+5s0xzFEz0tEyiqVeUPMYit+L9HvPelnLuB+O9WsI8\nZUWXqcDukEcKWw6Wf/yT+ZzwVjuu5Z54BG4tm1vPrVT0EQyZyAPK0F9RAoGAUp+Z\ndgCL3Y+cBdw6HUMjyp2oi3WotmqQDS3j3lmOn6sd56tahNqYnr1fMHFaVRV6TJoz\n2/AZ0GXb6towogwXlc9BYbxFBvCnwOB4ybcinTQO/n+oUMdNS6IwLNrCxR2xX+dZ\n8z9/TyS8PNkQ5OSpRycXlD7UE/DQAMSw1uKKMu0CgYBqtqvdeyPqnMJxszdXCCZ1\nCiG1tCAlcSZI840xesAzTMdpYJGPbG5Mz4fiUOi+E9T6Rq5wWNFiQZIcNaKWg+qQ\nsshIlcAFcUB6sfVzL7y71qpHteCigEY/1qXMCgPaqDP32FLIlMkgL50+KpMdVoKj\ny0E6ssyHme13oVXY3yqfjw==\n-----END PRIVATE KEY-----\n";
// The ID of the spreadsheet where you'll publish the data
const char spreadsheetId[] = "1DqgxqkENNWxEJA_81pEq4apPRSrtUlijFX_ceOrqEfM";
// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 3000;
// Token Callback function
void tokenStatusCallback(TokenInfo info);
float level;
//temp
// NTP server to request epoch time
const char* ntpServer = "pool.ntp.org";
// Function that gets current epoch time
unsigned long getTime() {
time_t now;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
//Serial.println("Failed to obtain time");
return(0);
}
time(&now);
return now;
}
void setup(){
Serial.begin(115200);
Serial.println();
Serial.println();
//Configure time
configTime(0, 0, ntpServer);
GSheet.printf("ESP Google Sheet Client v%s\n\n", ESP_GOOGLE_SHEET_CLIENT_VERSION);
// Connect to Wi-Fi
WiFi.setAutoReconnect(true);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
// Set the callback for Google API access token generation status (for debug only)
GSheet.setTokenCallback(tokenStatusCallback);
// Set the seconds to refresh the auth token before expire (60 to 3540, default is 300 seconds)
GSheet.setPrerefreshSeconds(10 * 60);
// Begin the access token generation for Google API authentication
GSheet.begin(CLIENT_EMAIL, PROJECT_ID, PRIVATE_KEY);
}
void loop(){
// Call ready() repeatedly in loop for authentication checking and processing
bool ready = GSheet.ready();
if (ready && millis() - lastTime > timerDelay){
lastTime = millis();
FirebaseJson response;
Serial.println("\nAppend spreadsheet values...");
Serial.println("----------------------------");
FirebaseJson valueRange;
//temp
// New BMP280 sensor readings
level = analogRead(34);
valueRange.add("majorDimension", "COLUMNS");
valueRange.set("values/[1]/[0]", level);
// For Google Sheet API ref doc, go to https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/append
// Append values to the spreadsheet
bool success = GSheet.values.append(&response /* returned response */, spreadsheetId /* spreadsheet Id to append */, "Sheet1!A1" /* range to append */, &valueRange /* data range to append */);
if (success){
response.toString(Serial, true);
valueRange.clear();
}
else{
Serial.println(GSheet.errorReason());
}
Serial.println();
Serial.println(ESP.getFreeHeap());
}
}
void tokenStatusCallback(TokenInfo info){
if (info.status == token_status_error){
GSheet.printf("Token info: type = %s, status = %s\n", GSheet.getTokenType(info).c_str(), GSheet.getTokenStatus(info).c_str());
GSheet.printf("Token error: %s\n", GSheet.getTokenError(info).c_str());
}
else{
GSheet.printf("Token info: type = %s, status = %s\n", GSheet.getTokenType(info).c_str(), GSheet.getTokenStatus(info).c_str());
}
}