สวัสดีครับนักศึกษาทุกคน เคยสงสัยไหมครับว่า “เมื่อคืนตอนตี 2 อุณหภูมิในห้องเราเป็นเท่าไหร่?” หรือ “เดือนนี้เราเปิดไฟไปกี่ชั่วโมง?” คำตอบเหล่านี้จะหาไม่ได้เลยถ้าเราไม่มีระบบ Data Logger

ในอุตสาหกรรมจริง เขาอาจใช้ Database แพงๆ แต่สำหรับการเรียนรู้ ไม่มีอะไรดีไปกว่า Google Sheets ครับ ในบทนี้เราจะแปลงร่าง Google Sheets ให้กลายเป็นฐานข้อมูลออนไลน์ และเขียนโปรแกรมให้ ESP32 ส่งข้อมูลไปบันทึกเองอัตโนมัติทุกๆ 1 นาทีครับ


1. หลักการทำงาน: ESP32 คุยกับ Google Sheets ได้อย่างไร?

Google Sheets ไม่มีช่องทางให้ ESP32 เข้ามาเขียนข้อมูลตรงๆ ครับ (เพื่อความปลอดภัย) เราจึงต้องสร้าง “ยามเฝ้าประตู” ขึ้นมาตัวหนึ่ง ซึ่งก็คือ Google Apps Script

Flow การทำงาน:

  1. ESP32: ส่งข้อมูลผ่าน Link (URL) เช่น .../exec?temp=25&hum=60
  2. Apps Script (ยาม): รับค่ามา แกะซองดูว่ามีข้อมูลอะไรบ้าง
  3. Apps Script: นำข้อมูลนั้นไปหยอดลงใน Google Sheets แถวล่าสุด
  4. Google Sheets: บันทึกข้อมูลพร้อมเวลา (Timestamp)

2. ขั้นตอนที่ 1: เตรียม Google Sheets และ Script

1. เข้า docs.google.com/spreadsheets สร้าง Sheet ใหม่

2. ตั้งชื่อไฟล์ เช่น ESP32_DataLog

3. ในแถวที่ 1 ตั้งชื่อหัวข้อคอลัมน์:

A1: Date_Time

B1: Temperature

C1: Humidity

4. ไปที่เมนู ส่วนขยาย (Extensions) > Apps Script

5. ลบโค้ดเดิมทิ้ง แล้ววางโค้ดนี้ลงไป:

JavaScript
function doGet(e) { 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1'); // ตรวจสอบชื่อแผ่นงานให้ตรง (Sheet1)

  // รับค่าตัวแปรจาก URL
  var temp = e.parameter.temp;
  var hum = e.parameter.hum;
  var date = new Date(); // ดึงเวลาปัจจุบัน

  // บันทึกลงแถวล่าสุด (Append Row)
  sheet.appendRow([date, temp, hum]);

  // ตอบกลับไปหา ESP32 ว่าเสร็จแล้ว
  return ContentService.createTextOutput("Success");
}

6. กดรูป แผ่นดิสก์ (Save) ตั้งชื่อโปรเจกต์ว่า ESP32_Logger


3. ขั้นตอนที่ 2: การ Deploy (จุดปราบเซียน)

ขั้นตอนนี้สำคัญที่สุด ถ้าทำผิด ESP32 จะส่งข้อมูลไม่เข้าครับ

  1. กดปุ่มสีฟ้า การทำให้ใช้งานได้ (Deploy) > การทำให้ใช้งานได้รายการใหม่ (New deployment)
  2. กดรูปเฟืองด้านซ้าย เลือก เว็บแอป (Web app)
  3. ตั้งค่าตามนี้เป๊ะๆ:
    • Description: ใส่ v1 (หรืออะไรก็ได้)
    • Execute as (ผู้ดำเนินการ): เลือก ฉัน (Me) <— สำคัญ!
    • Who has access (ผู้มีสิทธิ์เข้าถึง): เลือก ทุกคน (Anyone) <— สำคัญมาก! ต้องเลือกอันนี้เท่านั้น
  4. กด Deploy -> ระบบจะขอสิทธิ์เข้าถึง (Authorize access) -> เลือกบัญชี Google -> กด Advanced (ขั้นสูง) -> กด Go to … (unsafe) -> กด Allow
  5. Copy URL เก็บไว้: คุณจะได้ลิงก์ยาวๆ ที่ลงท้ายด้วย /exec นี่คือ Script URL ของเราครับ

4. ขั้นตอนที่ 3: ทดสอบผ่าน Web Browser

ก่อนเขียนโค้ด ESP32 ลองทดสอบว่า Script ทำงานจริงไหม

  1. เอา URL ที่ได้มา เติมต่อท้ายด้วย ?temp=99&hum=88
    • เช่น https://script.google.com/.../exec?temp=99&hum=88
  2. กด Enter เข้าเว็บ -> หน้าเว็บต้องขึ้นคำว่า Success
  3. กลับไปดูที่ Google Sheets -> ต้องมีเลข 99 และ 88 โผล่ขึ้นมา!

5. ขั้นตอนที่ 4: เขียนโค้ด ESP32

เราจะใช้หลักการเดียวกับบทที่ 10 (HTTP GET) แต่คราวนี้ยิงไปที่ Google ครับ

ข้อควรระวัง: Google ใช้ HTTPS ดังนั้นเราต้องจัดการเรื่องการ Redirect โดยใช้ setFollowRedirects ครับ

C++
#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "YOUR_WIFI_NAME";
const char* password = "YOUR_WIFI_PASS";

// นำ URL จาก Apps Script มาใส่ (ลบส่วน ?temp... ออกนะ)
String scriptURL = "https://script.google.com/macros/s/xxxxxxxxx/exec";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nConnected!");
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    
    // จำลองค่า (งานจริงใช้ dht.readTemperature())
    float t = random(200, 400) / 10.0;
    float h = random(500, 800) / 10.0;
    
    // สร้าง URL แบบเต็ม
    // รูปแบบ: url + ?temp=xx&hum=yy
    String urlFinal = scriptURL + "?temp=" + String(t) + "&hum=" + String(h);
    
    Serial.print("Sending Data... ");
    
    // เริ่มเชื่อมต่อ
    http.begin(urlFinal);
    http.setFollowRedirects(HTTPC_STRICT); // สำคัญ! เพื่อให้รองรับ HTTPS Redirect ของ Google

    int httpCode = http.GET(); // สั่งยิงข้อมูล

    if (httpCode > 0) {
      String payload = http.getString();
      Serial.println(httpCode);
      Serial.println(payload); // ต้องขึ้นว่า Success
    } else {
      Serial.println("Error on HTTP request");
    }
    
    http.end();
  }
  
  // หน่วงเวลา 1 นาที (60000 ms) อย่าส่งถี่เกินไปเดี๋ยว Google บล็อก
  delay(60000); 
}

6. ดูผลลัพธ์

  1. Upload โค้ดลงบอร์ด
  2. เปิด Serial Monitor รอจนมันขึ้น Sending Data... และ 200 Success
  3. ไปนั่งเฝ้าหน้าจอ Google Sheets ข้อมูลจะไหลเข้ามาทีละบรรทัดทุกๆ 1 นาทีเองโดยที่เราไม่ต้องกดอะไรครับ

สรุปท้ายบท

การทำ Data Logging ลง Google Sheets เป็นทักษะที่นำไปประยุกต์ใช้ได้จริงในงานหลากหลายมากครับ เช่น ระบบบันทึกเวลาเข้างาน, ระบบจดมิเตอร์น้ำ/ไฟ หรือระบบบันทึกอุณหภูมิห้องเย็นส่งกรมโรงงาน

ภารกิจต่อไป: เราได้เรียนรู้มาครบถ้วนทั้ง Hardware, Networking, Platform (Blynk), และ Database แล้ว ในบทความหน้าจะเป็น “บทสรุปและโครงงาน” โดยเราจะมาดูเรื่อง ความปลอดภัย (Security) ที่มักถูกมองข้าม และแนวทางการต่อยอดสู่การทำโปรเจกต์จบระดับ ปวส. กันครับ


หมายเหตุสำหรับคุณครู:

  • Deploy as “Anyone” คือจุดที่นักศึกษาผิดบ่อยที่สุด 90% ครับ (ถ้าเลือกเป็น “Only myself” บอร์ดจะส่งข้อมูลไม่เข้าเพราะบอร์ดไม่มีบัญชี Google Login)
  • Google Apps Script มีโควตาจำกัดนะครับ (ประมาณ 20,000 requests/วัน) ซึ่งเหลือเฟือสำหรับการเรียน แต่ควรกำชับนักศึกษาว่า อย่าใส่ใน loop delay น้อยๆ ไม่งั้นโควตาเต็มครับ