TUTORIAL IOT · ESP32
ESP32 ke Google Sheets dengan PlatformIO: Tutorial Komunikasi Data Generik
Panduan generik ESP32-WROOM mengirim dua nilai dummy ke Google Sheets melalui HTTPS POST JSON, Apps Script Web App, validasi, retry, template dashboard, dan troubleshooting.
# ESP32 ke Google Sheets dengan PlatformIO: Tutorial Komunikasi Data Generik
Tutorial ini menunjukkan cara mengirim data generik dari ESP32-WROOM ke Google Sheets. Contoh tidak terikat pada sensor atau alat tertentu. ESP32 menghasilkan dua nilai dummy, status, RSSI, uptime, sequence, dan versi firmware, lalu mengirimkannya sebagai JSON melalui HTTPS POST ke Google Apps Script Web App.
Google Apps Script menyediakan fungsi doPost(e) untuk menerima request POST pada Web App. Data kemudian ditulis ke sheet menggunakan Spreadsheet Service. Dokumentasi resmi yang menjadi rujukan utama tersedia pada:
- https://developers.google.com/apps-script/guides/web
- https://developers.google.com/apps-script/reference/spreadsheet/sheet
- https://developers.google.com/apps-script/reference/lock/lock-service
- https://developers.google.com/apps-script/guides/services/quotas
- https://docs.platformio.org/en/latest/boards/espressif32/esp32dev.html
Artikel Random Nerd Tutorials digunakan sebagai referensi pembanding alur umum, tetapi tulisan, kode, struktur payload, ilustrasi, template workbook, validasi, dan mekanisme retry di sini dibuat ulang secara mandiri:
1. Arsitektur
Alur sistem:
ESP32-WROOM
└─ membuat data dummy
└─ HTTPS POST JSON
└─ Google Apps Script Web App
└─ validasi API key dan payload
└─ appendRow() ke DATA_ESP32
└─ dashboard dan grafik
Google Sheets sesuai untuk pencatatan periodik, praktikum, demonstrasi, dan pelaporan ringan. Ia bukan kanal telemetry berfrekuensi tinggi. Gunakan interval sekitar 10–60 detik untuk eksperimen normal. Monitoring 5–10 kali per detik lebih tepat menggunakan WebSocket pada server sendiri.
2. Isi paket
LangitLab_ESP32_Google_Sheets_Generic/
├── platformio.ini
├── include/
│ └── secrets.example.h
├── src/
│ └── main.cpp
├── apps-script/
│ └── Code.gs
├── docs/images/
├── Template_ESP32_Google_Sheets_Generic.xlsx
├── ARTIKEL_TUTORIAL.md
└── README.md
3. Menyiapkan Google Spreadsheet
Unggah Template_ESP32_Google_Sheets_Generic.xlsx ke Google Drive, lalu buka sebagai Google Sheets. Template memiliki:
DATA_ESP32: tabel penerima data.DASHBOARD: KPI dan grafik contoh.PANDUAN: daftar langkah dan sumber.
Spreadsheet ID berada pada URL:
https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit
Salin bagian antara /d/ dan /edit.
4. Menyiapkan Apps Script
Buka Extensions → Apps Script, hapus kode contoh, dan tempel isi apps-script/Code.gs.
Ubah konfigurasi:
const CONFIG = Object.freeze({
SPREADSHEET_ID: 'GANTI_DENGAN_SPREADSHEET_ID',
SHEET_NAME: 'DATA_ESP32',
API_KEY: 'GANTI_SECRET_RANDOM_PANJANG',
MAX_BODY_BYTES: 4096,
});
Buat API key acak, misalnya dari Linux:
openssl rand -hex 32
Jalankan fungsi setupSheet() satu kali dari editor. Google akan meminta izin akses spreadsheet.
Cara endpoint bekerja
doGet() menjadi health check dan tidak menulis baris. doPost(e) melakukan:
- Memastikan body tersedia.
- Membatasi ukuran payload.
- Mem-parsing JSON.
- Memeriksa API key.
- Menormalisasi tipe dan rentang nilai.
- Memakai
LockServiceagar request bersamaan tidak menulis secara tumpang tindih. - Menambahkan satu baris dengan
appendRow(). - Mengembalikan respons JSON.
Contoh payload:
{
"api_key": "secret-random-panjang",
"device_id": "ESP32-SHEETS-001",
"sequence": 21,
"uptime_ms": 315000,
"value_1": 47.28,
"value_2": 73.10,
"status": "NORMAL",
"wifi_rssi": -51,
"firmware": "1.0.0-sheets-generic"
}
5. Deploy Web App
Pilih Deploy → New deployment → Web app.
Gunakan pengaturan yang sesuai dengan kebutuhan akun. Untuk demonstrasi langsung dari ESP32, endpoint harus dapat dipanggil oleh perangkat tanpa login interaktif. Salin URL deployment yang berakhir dengan /exec.
Setiap kali kode Apps Script diubah, buat deployment versi baru atau perbarui deployment aktif. Menyimpan kode saja tidak selalu memperbarui endpoint produksi.
6. Konfigurasi PlatformIO
Salin:
include/secrets.example.h
menjadi:
include/secrets.h
Nilai contoh sesuai jaringan yang diminta:
#define WIFI_SSID "ESP32"
#define WIFI_PASSWORD "123456780"
#define GOOGLE_SCRIPT_URL "https://script.google.com/macros/s/.../exec"
#define GOOGLE_SCRIPT_API_KEY "secret-yang-sama-dengan-Code.gs"
#define DEVICE_ID "ESP32-SHEETS-001"
secrets.h dikecualikan oleh .gitignore. Jangan masukkan API key atau password Wi-Fi ke repository publik.
Build dan upload:
pio run
pio run -t upload
pio device monitor
7. Data dummy dan interval
Firmware mengubah value_1 dan value_2 secara perlahan agar grafik mudah diamati. Interval awal:
constexpr uint32_t SEND_INTERVAL_MS = 15000;
Satu baris setiap 15 detik menghasilkan:
4 baris/menit
240 baris/jam
5.760 baris/hari jika berjalan terus
Untuk logging jangka panjang, interval 30–300 detik biasanya lebih rasional. Sesuaikan dengan kebutuhan dan quota layanan.
8. HTTPS, redirect, dan keamanan
Google Apps Script dapat mengarahkan request menuju host konten Google. Karena itu firmware mengaktifkan follow redirect:
https.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
Contoh tutorial memakai tls.setInsecure() untuk mengurangi hambatan awal saat sertifikat endpoint Google berubah. Ini berarti identitas server tidak diverifikasi secara kriptografis dan tidak layak untuk produk final. Untuk implementasi produksi, gunakan verifikasi CA certificate atau strategi trust store yang dikelola dan diperbarui.
API key pada body hanya kontrol akses sederhana, bukan pengganti sistem autentikasi kelas produksi. Jangan mengirim data sangat sensitif melalui rancangan demonstrasi ini.
9. Membaca Serial Monitor
Contoh berhasil:
[POST] seq=21 HTTP=200 latency=846 ms TX=191 B RX=98 B
{"ok":true,"row":22,"sequence":21,"processing_ms":64}
Interpretasi:
HTTP=200: endpoint merespons sukses pada tingkat HTTP.ok:true: Apps Script menerima dan menulis data.row: nomor baris hasil penulisan.latency: waktu keseluruhan request dari ESP32.processing_ms: waktu kerja Apps Script, tidak termasuk seluruh perjalanan jaringan.TX/RX: ukuran payload aplikasi, bukan total overhead TCP/TLS.
10. Troubleshooting
HTTP negatif atau gagal membuka URL
Periksa koneksi Wi-Fi, URL deployment, DNS, tanggal/waktu perangkat, dan redirect.
HTTP 200 tetapi ok:false
Baca field error. Penyebab umum: API key berbeda, body kosong, payload terlalu besar, atau Apps Script gagal membuka spreadsheet.
Tidak ada baris baru
Pastikan SPREADSHEET_ID, SHEET_NAME, dan deployment yang aktif benar. Jalankan setupSheet() dan lihat Executions pada Apps Script.
Data ganda
Retry dapat membuat request yang sama ditulis dua kali ketika respons hilang tetapi penulisan sebenarnya berhasil. Untuk sistem penting, tambahkan deduplikasi berdasarkan kombinasi device_id + sequence sebelum appendRow().
Banyak perangkat
Tambahkan Device ID unik. Saat jumlah request meningkat, pertimbangkan batch write, antrean, database khusus, atau server IoT sendiri.
11. Pengembangan lanjutan
Template generik dapat dikembangkan dengan:
- pembacaan sensor nyata menggantikan nilai dummy;
- timestamp dari NTP atau RTC;
- buffer offline di LittleFS/microSD;
- deduplikasi sequence;
- batching beberapa sampel per request;
- trigger notifikasi;
- pemisahan sheet per perangkat;
- dashboard Looker Studio;
- server WebSocket untuk realtime dan Google Sheets hanya untuk ringkasan.
12. Kesimpulan
Pola ESP32 → HTTPS POST JSON → Apps Script → Google Sheets mudah dipahami dan cukup kuat untuk pencatatan periodik. Pemisahan API key, validasi payload, lock, retry, sequence, dan monitoring latency membuat contoh ini lebih aman dan lebih mudah dikembangkan daripada request tanpa struktur.