สวัสดีครับนักศึกษาทุกคน เคยสงสัยไหมครับว่า “เมื่อคืนตอนตี 2 อุณหภูมิในห้องเราเป็นเท่าไหร่?” หรือ “เดือนนี้เราเปิดไฟไปกี่ชั่วโมง?” คำตอบเหล่านี้จะหาไม่ได้เลยถ้าเราไม่มีระบบ Data Logger
ในอุตสาหกรรมจริง เขาอาจใช้ Database แพงๆ แต่สำหรับการเรียนรู้ ไม่มีอะไรดีไปกว่า Google Sheets ครับ ในบทนี้เราจะแปลงร่าง Google Sheets ให้กลายเป็นฐานข้อมูลออนไลน์ และเขียนโปรแกรมให้ ESP32 ส่งข้อมูลไปบันทึกเองอัตโนมัติทุกๆ 1 นาทีครับ
1. หลักการทำงาน: ESP32 คุยกับ Google Sheets ได้อย่างไร?
Google Sheets ไม่มีช่องทางให้ ESP32 เข้ามาเขียนข้อมูลตรงๆ ครับ (เพื่อความปลอดภัย) เราจึงต้องสร้าง “ยามเฝ้าประตู” ขึ้นมาตัวหนึ่ง ซึ่งก็คือ Google Apps Script
Flow การทำงาน:
- ESP32: ส่งข้อมูลผ่าน Link (URL) เช่น
.../exec?temp=25&hum=60 - Apps Script (ยาม): รับค่ามา แกะซองดูว่ามีข้อมูลอะไรบ้าง
- Apps Script: นำข้อมูลนั้นไปหยอดลงใน Google Sheets แถวล่าสุด
- 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. ลบโค้ดเดิมทิ้ง แล้ววางโค้ดนี้ลงไป:
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 จะส่งข้อมูลไม่เข้าครับ
- กดปุ่มสีฟ้า การทำให้ใช้งานได้ (Deploy) > การทำให้ใช้งานได้รายการใหม่ (New deployment)
- กดรูปเฟืองด้านซ้าย เลือก เว็บแอป (Web app)
- ตั้งค่าตามนี้เป๊ะๆ:
- Description: ใส่
v1(หรืออะไรก็ได้) - Execute as (ผู้ดำเนินการ): เลือก ฉัน (Me) <— สำคัญ!
- Who has access (ผู้มีสิทธิ์เข้าถึง): เลือก ทุกคน (Anyone) <— สำคัญมาก! ต้องเลือกอันนี้เท่านั้น
- Description: ใส่
- กด Deploy -> ระบบจะขอสิทธิ์เข้าถึง (Authorize access) -> เลือกบัญชี Google -> กด Advanced (ขั้นสูง) -> กด Go to … (unsafe) -> กด Allow
- Copy URL เก็บไว้: คุณจะได้ลิงก์ยาวๆ ที่ลงท้ายด้วย
/execนี่คือ Script URL ของเราครับ
4. ขั้นตอนที่ 3: ทดสอบผ่าน Web Browser
ก่อนเขียนโค้ด ESP32 ลองทดสอบว่า Script ทำงานจริงไหม
- เอา URL ที่ได้มา เติมต่อท้ายด้วย
?temp=99&hum=88- เช่น
https://script.google.com/.../exec?temp=99&hum=88
- เช่น
- กด Enter เข้าเว็บ -> หน้าเว็บต้องขึ้นคำว่า
Success - กลับไปดูที่ Google Sheets -> ต้องมีเลข 99 และ 88 โผล่ขึ้นมา!
5. ขั้นตอนที่ 4: เขียนโค้ด ESP32
เราจะใช้หลักการเดียวกับบทที่ 10 (HTTP GET) แต่คราวนี้ยิงไปที่ Google ครับ
ข้อควรระวัง: Google ใช้ HTTPS ดังนั้นเราต้องจัดการเรื่องการ Redirect โดยใช้ setFollowRedirects ครับ
#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. ดูผลลัพธ์
- Upload โค้ดลงบอร์ด
- เปิด Serial Monitor รอจนมันขึ้น
Sending Data...และ200 Success - ไปนั่งเฝ้าหน้าจอ 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 น้อยๆ ไม่งั้นโควตาเต็มครับ
