ESP32 → Google Sheets: відправка даних у таблицю кожні 5 хвилин

У цьому прикладі ESP32 автоматично вимірює параметри (температуру та вологість для демонстрації) і кожні 5 хвилин додає новий рядок у Google Таблицю. Зв’язка реалізована через Google Apps Script (Web App), тому зовнішній сервер не потрібен: контролер робить HTTPS-запит напряму у ваш скрипт, а той додає дані у лист.

Необхідне обладнання

  • Плата ESP32 DevKit (WROOM/WROVER)
  • Датчик DHT22 (можна замінити будь-яким іншим; у коді легко підставити свій датчик)
  • Резистор для DHT22 (10 кОм, якщо потрібна підтяжка)
  • USB-кабель для прошивки та живлення
  • Доступ до Wi-Fi і обліковий запис Google

Принцип роботи

Ви створюєте Google Таблицю і скрипт (Apps Script), публікуєте його як Web App та отримуєте URL виду https://script.google.com/macros/s/AKfycb.../exec. ESP32 кожні 5 хвилин зчитує дані з датчика і відправляє HTTPS-запит (GET або POST) на цей URL. Скрипт приймає параметри і додає рядок у таблицю: час — температура — вологість — статус.

Поле Джерело Приклад значення
timestampСкрипт (new Date())2025-08-20 10:15:00
temperatureESP32 (DHT22)24.6
humidityESP32 (DHT22)51.2
statusESP32OK / SENSOR_ERROR

Приклад коду

// ======================= ЧАСТИНА 1: ESP32 (Arduino) =======================
// Бібліотеки: WiFi, WiFiClientSecure, HTTPClient, DHT (Adafruit DHT sensor library)
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <DHT.h>

#define DHTPIN   4
#define DHTTYPE  DHT22
DHT dht(DHTPIN, DHTTYPE);

// --- Wi-Fi ---
const char* WIFI_SSID = "YOUR_WIFI_SSID";
const char* WIFI_PASS = "YOUR_WIFI_PASSWORD";

// --- URL опублікованого Web App (Apps Script) ---
// Формат GET: https://script.google.com/macros/s/AKfycb.../exec?temperature=24.6&humidity=51.2&status=OK
const char* WEB_APP_URL = "https://script.google.com/macros/s/AKfycb_your_deployed_id/exec";

// --- період відправки (мс) ---
const unsigned long SEND_PERIOD_MS = 5UL * 60UL * 1000UL; // 5 хвилин
unsigned long lastSend = 0;

WiFiClientSecure client;

void wifiConnect() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  Serial.print("WiFi connecting");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.printf("\nWiFi OK, IP: %s\n", WiFi.localIP().toString().c_str());
}

void setup() {
  Serial.begin(115200);
  dht.begin();
  wifiConnect();

  // Спрощений варіант TLS (без кореневого сертифіката)
  client.setInsecure(); // Для продакшн краще вказати кореневий сертифікат Google
}

bool sendToSheets(float t, float h, const String& status) {
  if (WiFi.status() != WL_CONNECTED) {
    wifiConnect();
  }

  HTTPClient https;
  // Формуємо URL з параметрами (GET)
  String url = String(WEB_APP_URL) + "?temperature=" + String(t, 1)
             + "&humidity=" + String(h, 1)
             + "&status=" + status;

  Serial.println("[HTTP] GET: " + url);
  if (https.begin(client, url)) {
    int code = https.GET();
    Serial.printf("[HTTP] code: %d\n", code);
    if (code > 0) {
      String payload = https.getString();
      Serial.println("[HTTP] response: " + payload);
    }
    https.end();
    return (code == 200);
  } else {
    Serial.println("[HTTP] unable to connect");
    return false;
  }
}

void loop() {
  const unsigned long now = millis();
  if (now - lastSend >= SEND_PERIOD_MS || lastSend == 0) {
    lastSend = now;

    float h = dht.readHumidity();
    float t = dht.readTemperature();
    String status = "OK";

    if (isnan(h) || isnan(t)) {
      Serial.println("DHT read error");
      // Можна відправити статус про помилку, щоб бачити збої у таблиці
      sendToSheets(NAN, NAN, "SENSOR_ERROR");
      return;
    }

    // Відправляємо дані
    bool ok = sendToSheets(t, h, status);
    if (!ok) {
      Serial.println("Send failed, will retry in 5 minutes.");
    }
  }

  // Додатково: можна перевести ESP32 у deep sleep і прокидатися раз на 5 хвилин,
  // щоб економити енергію в автономних системах.
}

// ================= ЧАСТИНА 2: Google Apps Script (код скрипта) =================
// У Таблиці: Extensions → Apps Script. Вставте цей код, вкажіть назву листа.
// Потім: Deploy → New deployment → Type: Web app → Execute as: Me → Access: Anyone with the link
// Після деплою отримаєте URL і вставте його в WEB_APP_URL вище.

function doGet(e) {
  return handleRequest_(e);
}

function doPost(e) {
  return handleRequest_(e);
}

function handleRequest_(e) {
  var ss   = SpreadsheetApp.getActiveSpreadsheet();
  var sh   = ss.getSheetByName("Data") || ss.insertSheet("Data");
  // Заголовок таблиці (автосоздання)
  if (sh.getLastRow() === 0) {
    sh.appendRow(["timestamp", "temperature", "humidity", "status"]);
  }

  var params = (e && e.parameter) ? e.parameter : {};
  var t = params.temperature || "";
  var h = params.humidity || "";
  var s = params.status || "";

  if (t === "NaN") t = "";
  if (h === "NaN") h = "";

  sh.appendRow([new Date(), t, h, s]);

  return ContentService
    .createTextOutput(JSON.stringify({ ok: true, rows: sh.getLastRow() }))
    .setMimeType(ContentService.MimeType.JSON);
}

Застосування та розширення проекту

  • Теплиця/склад/серверна: журнал температури та вологості з інтервалом 5–10 хв
  • Багатодатчикові системи: додайте ще поля (напруга батареї, тиск, CO₂) і відправляйте одним запитом
  • Графіки в Sheets: налаштуйте діаграми у таблиці для автооновлення
  • Алерти: додайте тригер у Apps Script (або Telegram-бота) — сповіщення при виході за пороги
  • Економія енергії: переведіть ESP32 у deep sleep на 5 хвилин між вимірюваннями
  • Безпека: обмежте доступ Web App (доступ лише за посиланням, перевірка секретного ключа у параметрах)

Висновок

Відправка даних з ESP32 у Google Sheets за таймером — зручний і безкоштовний спосіб побудувати надійний журнал показників для інженерних завдань. Метод швидко розгортається, легко масштабується і може бути розширений десятками пристроїв. Далі ви можете додати графіки, алерти, інші датчики та навіть двосторонній обмін командами через Таблицю.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Припой з каніфоллю 0,5мм 30г

Припой з каніфоллю 0,5мм 30г

Нитка припою для тонкої пайки мілких радіодеталей, що містить флюсСвинця 40 %Олова 60 %Флюса 1,2 %На..

211.57грн.

SIM800L як припаяти гребінку

SIM800L як припаяти гребінку

Привіт друзі! Це коротка стаття під назвою SIM800L як припаяти гребінку. Модулі GSM зв'язку SIM8..

Кроковий двигун 28BYJ-48 з модулем драйвера

Кроковий двигун 28BYJ-48 з модулем драйвера

Кількість фаз 4Робоча напруга 5 ВКоефіцієнт зміни швидкості 1/64Кут повертання мінімальний 5.62..

114.93грн.

Термопровідний клей STARS-922 5г

Термопровідний клей STARS-922 5г

Теплопровідний клей для кріплення компонентів, що гріються, до радіаторів (світлодіоди, мікросхеми, ..

49.21грн.

Шарніри під обертальну вісь 8, 10 мм 2шт.

Шарніри під обертальну вісь 8, 10 мм 2шт.

Такі шарніри призначені для кріплення вісі черв'ячної передачі на будь-якій з трьох осей переміщення..

164.87грн.