#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include <DHT.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 "sensor-temperatura-3029600"
// Service Account's client email
#define CLIENT_EMAIL "sensor-temperatura@sensor-temperatura-3029600.iam.gserviceaccount.com"
// Service Account's private key
const char PRIVATE_KEY[] PROGMEM = "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDDSL23DpruLEqw\nwVa65a6OjCvH191bZOLEoAvJNhO8o+jeNjk9KBH1RO4YYlFi8xNhz3jhYECvasCM\nfACpy1EwfEUlfTWNbS2ggdSAioBv0/C//VISV4aEtosePntge5hftpGNvci3ivGc\nIenXlOknaAdT391Lxmt8KqFeNjcIYuIXZs0MrKNkP9Cka5eLvYoYR7OZW0HEWbUt\nkrxjPeSbqt461TfqxdkEJ1bLp4coKHFMhtsoFamC3L2LBgRn/Seqp9ArX9ZADAuy\nDSwbmL5sxCWhVu+Pqco9NeEmlnOQxJB2KJGEQFNG7KgT7cSDGslccTLkUwoCX4vZ\n+Xm6zH/XAgMBAAECggEAGaCbqQDFKzlrydttftRyfml9u1mkRoCsU8JvGYY7u9dE\n0ZiLFXADP00+87s/U/1zTzQzeFwx0PNw9l61lZLFglfkmSFf3EH2KWiwUvgaF9LX\n9tIPKbILyLHN+veXKFe/7NugKVo9E30r7OH0dqKnoFDCGWs49t9ArshHaf4yZaqd\nk7KkXo754fZE3jOR15NcITstM/imZ7HrKChtoL/CzdzTai6kpI3g+kI8pnxYrH9j\n2KbpzY6EhNz9wDImBRJYWwZdStut7nXd17aaXRIB7teDBU5Syu28R2VD39s0ZCKo\nousmhs+W3deVOe8EoDFhSwK6wnaGBPEo3uslszPJoQKBgQDubbBh11PgbuGo8s0T\nfyJWgbcyuyXXdjCdw+HB6+aF5AkCBWcAG1ZtQ4tb6z1OtSGSIDoQN9xld3fR87Ee\nf7POhVIe8PLzggO3gMjYZH3442yRAosjq+55LrJSWUSu65olEJ0bbn+0PIf/ninl\ntkOX9IVcJG7vWgnFfEwXwenztwKBgQDRrRHP+Wc27XISyMdeMqQM+rO7qm+BuH0n\ne+uX6+g5JjkPzq114XzMtch3sUfwxzPOyShUwSeRXU8krRu2M4X7r3S6fl3M/op0\nnqwh9Oq6y6lpG7ZoJu1NTWSE3x3wTSWiT+WE4TKWwL1MXUpZm3G426offcIRTBnF\n0+vIcfUU4QKBgQCWubTlRVB68t2pBkTqbFZyxXHgmjqj6M13DpurEcwbHDstkei5\nQo7yZ96zbxTEqvDcBY9vLUEgy9NtYFa55xTuG438jWmo0qoy2TEeyvhv3KWHTkpT\ndJ8+8Gw+brxisAI0KDqJWuNUN2fqCjyGQSCd8TBVPZr7qLnApIEeC7IwJQKBgQCQ\nHjteDfkpwe9kheizEG++FBux5CYcragomX6Hv7iwf1s9SDvmCIT1WAVgb9QY5XLw\nsUctak4+Fjqt5OZlR+jR4/mBrhXfLx4Ppnh+Jo+osQ/SlR+9WvRE6+spgQpc/0nc\n1LnXqcpR4Ey8zmqqSLPT8fhvCMt5hCs61Lz924YvQQKBgHRTfqPiwPO3nR3bzomk\nfVQcO9JrB26Z/7KzlzLawI90dPkjCGIWjyLICI8l+llmlpFhrNAQcRpR87uSqmNQ\nSB1C+9QyjLvI593WEh6NBbioyJ0C1VdlBjUNDIoodmwkZEbMtQJDTexvwglMoPkT\nhSQ6ngHDxof+kaP7leLOn+sV\n-----END PRIVATE KEY-----\n";
// The ID of the spreadsheet where you'll publish the data
const char spreadsheetId[] = "1bEC_8EnOr9o-MLygT5Fm4UQiXV2tLKWSBbLkOJlPpGA";
// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 3000;
// Token Callback function
void tokenStatusCallback(TokenInfo info);
double temperatura;
double humedad;
// 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
temperatura = analogRead(27);
valueRange.add("majorDimension", "COLUMNS");
valueRange.set("values/[1]/[0]", temperatura);
// 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());
}
}