Danu Andrean, 11 Oct 2025

Mengirim Data Spreadsheet Dengan Esp32

Penjelasan Gambar

Pernah ingin menyimpan data sensor langsung ke spreadsheet tanpa harus bikin server dulu? Ternyata, kamu bisa melakukannya hanya dengan ESP32 dan Google Apps Script. Di artikel ini, kita akan membahas cara menghubungkan ESP32 ke Google Spreadsheet secara langsung lewat HTTP.

Persiapan Alat & Software

Hardware:

  • ESP32 (WROOM atau DevKit)

Software:

Akun Google Service

Untuk melakukan pengiriman ke spreadsheet dengan baik dan aman, kamu perlu membuat aku google service nanti service ini yang akan melakukan handle untuk meneruskan data ke spreadsheet. Kamu bisa mempelajari secara mendalam di artikel ini Service Account.

Baik langsung saja kita eksekusi

1. Buat project di Google Cloud Console

Penjelasan Gambar

klik create project sebelah pojok kanan seperti pada gambar

2. Berikan nama project

Penjelasan Gambar

disini kita buat untuk contoh dengan nama “logger”. setelah itu klik create dan hasilnya seperti ini.

Penjelasan Gambar

3. Sekarang kamu perlu membuat service account untuk project tersebut.

Penjelasan Gambar

pergi ke bagian “service account” kemudian klik “create service account”

4. Masukan nama service account dan service account id kemudian create and continue

Penjelasan Gambar

5. Pilih service account role owner kemudian continue

Penjelasan Gambar

setelah itu pilih done dan kemudian akan masuk dalam service account setting

6. Buat Key baru

Penjelasan Gambar

klik titik 3 sebalah kanan dan manage keys. kemudian create new key

Penjelasan Gambar

pilih format json dan kemudian klik create

Penjelasan Gambar

setelah kamu mendapatkan data json, nanti data itu akan kamu pakai untuk mengisi parameter yang ada di code arduino.

7. Enable Google sheet API

kamu perlu melakukan enable untuk google spreadsheet API https://console.cloud.google.com/apis/library/sheets.googleapis.com

Penjelasan Gambar

8. Enable Google Drive API

kamu juga perlu untuk melakukan enable google driver ikuti link berikut https://console.cloud.google.com/apis/library/drive.googleapis.com

Penjelasan Gambar

9. Buat Spreadsheet baru

buat Spreadsheet baru dan catat id spreadsheet

Penjelasan Gambar

ID bisa kmu lihat seperti ini https://docs.google.com/spreadsheets/d/[id]/edit?gid=0#gid=0

ESP32

kamu perlu melakukan instalasi library ESP-Google-Froms-Client seperti berikut

Penjelasan Gambar

masukan data dari json yang sudah kamu dapat tadi ke code arduino seperti dibawah.

Khusus untuk Private Key kamu bisa menggunakan R"KEY(–datakey–)KEY" sesuai format c++11, atau bisa menuliskan string yang bagus setiap bariskan, kmu bisa menggunakan AI seperti chatGPT, gemini atau deepseek untuk mempermudah menjadikan code sehingga tidak error

full code

#include <Arduino.h>
#include <WiFi.h>
#include <ESP_Google_Sheet_Client.h>

#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "password"


#define PROJECT_ID "logger-474719"

#define CLIENT_EMAIL "data-log@logger-474719.iam.gserviceaccount.com"

const char PRIVATE_KEY[] PROGMEM = R"KEY(-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDIYUnzDoYnDS+Q
yE+AjmH+QDWahTPCuxU3QOL6aAjH2RF1Yq/umIP+6fjJzipvIkct+c6qdN1UI4Mk
xLDObJItust7uXF99eDz8s9aXdTgXN7CD+4mxy9q/xH7P2xv+uMrat0kKDNRP0Ae
tyFWPVqhYORzqPVciDGHshnnAFfqeLDlq5XLY5MAk9Q+c5oDzzxwT2GV1pb0BZoo
bZyXz/kqDtiazaFFGUBCCrC8kmnyMVpcV7Gy3y18qh63mHnQ+czeBGWg0FqIFnmW
pwEYUc/jajO6WZ4Q9weKtN1hCahjPnOEvzLgduXwdZFDq4nCmmM9gZ2f7TaxjLdT
igT+vDN7AgMBAAECggEAEp3/aea6jhxKhBAoWtBfyGic0lt34KrTIMwViqBp2G+R
kK93mxpugRup8s4F4Ud1B4+DJREwkyWthJgFuVgbCManKzqikcpreR7hJws6wRG/
3JXwUYgGHtHOEOLmp0zPGHSYUUiu4+iVg4UOQt32crH258wV59/7ghkJEQ5WHMGp
hcos/OIVIQylVaTBrkk+7Za3ztU+wojfUpLVv1h7U4J0MXd74DEBd7iOW2bvwm8g
ysFbeTA7uT8mnzzBDMlyry7EjyZvx5B4Kzu5vJdD8bzRykz0DbnesTmbK4bk2Y6N
VHtrCYLgvUQLWiIn4PPyu+CtaICudlDSKAg7u/ku8QKBgQD+noU83pqGDeS7hMRn
ZMmpxUTSZYwVe9y5C47A6J+vv5oTPbPeRqHBNWCIh9bGWCIO6wGj7jAkkUncyVOZ
NwBIbXFcf5rMlT1d2pi5EO6OF1gWUlEaNtMRVALVewJMShU58eDEHS07PXOqUBYy
kYHnsYKqcd+vqaYlkFjYESB3+QKBgQDJd3hMb4lFUneq8FYjED8psZKizLBZ38To
MwVFoAsicTv7uoioJGUC/fLYnsuRC5SlSyeg8CBi9Ja1ctthGrCCxgdhK9ikcQ0A
KresiloG79E4ZJi1Lpuux0+XbYfelLVmrzdqejh17eBztD7GAzvlYGFGy8Ch2rwL
ReMyDHisEwKBgF/Uld0VAx+VNxOEos8vVd85ye9OHO0xEx/qQ65DX2asPHclb/8m
olavmkeIqMM6BIeM1681RJVewWgBth8iXk7kMhhYRpDdUp1yWqy8vKxqCNNN5Axz
ufj5n59tjq3b7CVE7g2h1ZZISLI/NjuOHFBxtPYlqcTZmxjkPSwFNi0xAoGBAJMH
EVAXBgMFUDf79aDZNn9jDDSrVPgCCl26/ln1lqqoILJxS1IKXX11f0j/emh8HxsS
YfVdyQTuox4AmIGhTLfjdXdA3HYF2wsIIctVnKX7VqDlKVzwisVex4MneETEGi66
KKMYVyQZWfiWzkkMCyY21EcqY4a7bwh7FHduCpLpAoGBAN220cuTelgcSNf6yn9P
SlqRFzMwZh/qvf6eD+4lmPWmD77OGwZt04h2O7voKOa25heOdIxpQN75fF+9mgo2
zrs3ymV3+xtNODNgj+nWSbf5OtKIkpFNQ3m/iW+sMBAD24lraGaE2RVLMsIzi9G8
RU3Voj7+ltdU6HKGGx/MmX+I
-----END PRIVATE KEY-----
)KEY";

const char spreadsheetId[] = "1DdrKGU5H0bQ24cSKs7895fAniZ516ZYtYYTRZem-y30";

unsigned long lastTime = 0;
unsigned long timerDelay = 5000;

void setup() {
  Serial.begin(115200);
  WiFi.setAutoReconnect(true);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(300);
  }

  gs_setup();
}

void loop() {
  gs_send("now", millis());
}

void gs_setup() {

  GSheet.printf("ESP Google Sheet Client v%s\n\n", ESP_GOOGLE_SHEET_CLIENT_VERSION);
  GSheet.setTokenCallback(tokenStatusCallback);

  // Set the seconds to refresh the auth token before expire (60 to 3540, default is 300 seconds)
  GSheet.setPrerefreshSeconds(10 * 60);

  GSheet.begin(CLIENT_EMAIL, PROJECT_ID, PRIVATE_KEY);
}

void gs_send(String date, int data) {
  bool ready = GSheet.ready();

  if (ready && millis() - lastTime > timerDelay) {
    lastTime = millis();

    FirebaseJson response;
    FirebaseJson valueRange;


    valueRange.add("majorDimension", "COLUMNS");
    valueRange.set("values/[0]/[0]", date);
    valueRange.set("values/[1]/[0]", data);

    // 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 gs_info) {
  if (gs_info.status == token_status_error) {
    GSheet.printf("Token info: type = %s, status = %s\n", GSheet.getTokenType(gs_info).c_str(), GSheet.getTokenStatus(gs_info).c_str());
    GSheet.printf("Token error: %s\n", GSheet.getTokenError(gs_info).c_str());
  } else {
    GSheet.printf("Token info: type = %s, status = %s\n", GSheet.getTokenType(gs_info).c_str(), GSheet.getTokenStatus(gs_info).c_str());
  }
}

upload firmware ke esp 32 dan hasilnya seperti ini

Penjelasan Gambar

Kesimpulan

Spreadsheet bisa kamu gunakan untuk melakukan logging data sehingga data tersimpan dalam cloud dan tidak perlu menggunakan server sendiri, kamu juga bisa melakukan kombinasi service pihak ke tiga untuk menampilkan UI secara realtime, pelajari selangkapnya hanya disini.🎉🎉🎉



#arduino #esp32 #esp8266