Tuesday, 9 December 2025

แจกโค้ด! ทำเครื่องวัดอุณหภูมิ IoT ด้วย ESP32 ส่งค่าเข้า Google Sheets (รองรับ WiFi Manager + จอ OLED)

 เกริ่นนำ: สวัสดีครับ วันนี้ผมจะมาแจกโปรเจกต์ IoT เจ๋งๆ ที่สามารถนำไปประยุกต์ใช้งานจริงได้ ไม่ว่าจะเป็นการวัดอุณหภูมิห้อง server, โรงเรือนเพาะปลูก, หรือตู้ปลา โดยจุดเด่นของโปรเจกต์นี้คือ "ไม่ต้องแก้โค้ดเพื่อใส่รหัส WiFi" เพราะเราใส่ระบบ WiFi Manager มาให้ และยังมีระบบกันเครื่องค้าง (Watchdog) เพื่อความเสถียรในการทำงานระยะยาวครับ


https://youtube.com/shorts/iCMVIuxMhdc?si=stxi2DvBpmvr8rLh














ตัวอย่าง

https://script.google.com/macros/s/AKfycbw4_XAhbyv51DnEiFIa3rTouKf62fWsAEttOVaS1ETYcTDsx7zfztyGdMuD2-_s8Wk/exec

https://script.google.com/macros/s/AKfycbxVSvRRvMJEgccu1dLFS_8JwSPFz2BKsEvwTVREHk7xg3909Ir3fozzbqJyN02z8F0/exec





🛠️ ฟีเจอร์เด่นของโปรเจกต์นี้

  1. เชื่อมต่อ Google Sheets: บันทึกค่าอุณหภูมิและความชื้นลงตาราง Excel ออนไลน์ได้ฟรีๆ

  2. WiFi Manager: ไม่ต้อง Hardcode SSID/Password ในโค้ด เชื่อมต่อ WiFi หน้างานผ่านมือถือได้เลย

  3. OLED Display: แสดงค่า Real-time ผ่านจอ 0.96 นิ้ว

  4. Watchdog & Anti-Brownout: ระบบป้องกันไฟตกและรีเซ็ตตัวเองอัตโนมัติเมื่อเครื่องค้าง

  5. Factory Reset: มีฟังก์ชันกดปุ่ม BOOT ค้าง 10 วินาที เพื่อล้างค่า WiFi เดิม


📦 อุปกรณ์ที่ต้องใช้

  1. บอร์ด ESP32 (รุ่นไหนก็ได้ แนะนำ ESP32 DevKit V1)

  2. จอ OLED ขนาด 0.96" (แบบ I2C)

  3. เซ็นเซอร์ (เลือกตามการใช้งาน):

    • แบบที่ 1: DHT11 (วัดอุณหภูมิห้อง + ความชื้น)

    • แบบที่ 2: DS18B20 (วัดอุณหภูมิของเหลว/กันน้ำ) + ตัวต้านทาน 4.7kΩ

  4. สาย Jumper และ Breadboard


🔌 วงจรการเชื่อมต่อ (Wiring Diagram)

แบบที่ 1: ใช้เซ็นเซอร์ DHT11 (วัดอากาศทั่วไป)

  • OLED: SDA -> D21, SCL -> D22

  • DHT11: Data -> D4

(ใส่รูปวงจร DHT11 ที่ผมทำให้ก่อนหน้านี้ตรงนี้)

แบบที่ 2: ใช้เซ็นเซอร์ DS18B20 (วัดน้ำ/ความแม่นยำสูง)

  • OLED: SDA -> D21, SCL -> D22

  • DS18B20: Data -> D4 (ต้องต่อตัวต้านทาน 4.7kΩ คร่อมระหว่างไฟเลี้ยง 3.3V กับขา Data)

(ใส่รูปวงจร DS18B20 ที่ผมทำให้ก่อนหน้านี้ตรงนี้)


💻 ส่วนที่ 1: ตั้งค่า Google Sheets (Server Side)

ก่อนจะอัปโหลดโค้ดลงบอร์ด เราต้องสร้างจุดรับข้อมูลก่อนครับ

  1. ไปที่ Google Sheets สร้างไฟล์ใหม่

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

  3. ลบโค้ดเก่าออก แล้ววางโค้ดนี้ลงไป:

JavaScript
function doGet(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  
  // รับค่าจาก ESP32
  var temp = e.parameter.temp;
  var humid = e.parameter.humid; // ถ้าใช้ DS18B20 ค่านี้จะเป็น undefined ก็ไม่เป็นไร
  
  var date = new Date();
  
  // บันทึกลงแถวใหม่
  if (humid !== undefined) {
    sheet.appendRow([date, temp, humid]); // สำหรับ DHT11
  } else {
    sheet.appendRow([date, temp]); // สำหรับ DS18B20
  }
  
  return ContentService.createTextOutput("Success");
}
  1. กด Deploy (การทำให้ใช้งานได้) > New Deployment

  2. ตรง Who has access (ผู้มีสิทธิ์เข้าถึง) เลือกเป็น "Anyone (ทุกคน)" -> สำคัญมาก!

  3. กด Deploy แล้ว Copy URL เก็บไว้ (เราต้องเอา URL นี้ไปใส่ตอนตั้งค่า WiFi)


📝 ส่วนที่ 2: โค้ด ESP32 (Arduino Code)

โปรเจกต์นี้ต้องลง Library ผ่าน Arduino IDE ดังนี้ครับ:

  • WiFiManager (by tzapu)

  • Adafruit SSD1306 & Adafruit GFX

  • DHT sensor library (สำหรับแบบที่ 1)

  • DallasTemperature & OneWire (สำหรับแบบที่ 2)

(วางโค้ด Arduino ที่คุณเลือกใช้ลงตรงนี้)


⚙️ วิธีการใช้งานครั้งแรก

  1. ต่อวงจรและอัปโหลดโค้ดลงบอร์ด ESP32

  2. เมื่อเปิดเครื่อง หน้าจอ OLED จะขึ้นว่า "Setup Mode"

  3. ใช้มือถือค้นหา WiFi ชื่อ "ESP32_Temp_Setup"

  4. กดเชื่อมต่อ จะเด้งหน้าต่างตั้งค่าขึ้นมา (ถ้าไม่เด้งให้เข้า 192.168.4.1)

  5. กด Configure WiFi

    • เลือก WiFi บ้านของคุณ

    • ใส่รหัสผ่าน

    • ช่อง gas_url: ให้วาง URL ของ Google Apps Script ที่ทำไว้ในส่วนที่ 1

  6. กด Save บอร์ดจะรีสตาร์ทและเริ่มส่งข้อมูลเข้า Google Sheets ทันที!


💡 ทริคเพิ่มเติม

  • การรีเซ็ตค่า: หากต้องการย้ายสถานที่หรือเปลี่ยน WiFi ให้กดปุ่ม BOOT บนบอร์ด ESP32 ค้างไว้ 10 วินาที จนหน้าจอขึ้นนับถอยหลังเพื่อล้างค่าโรงงาน

electronic

About electronic

Author Description here.. Nulla sagittis convallis. Curabitur consequat. Quisque metus enim, venenatis fermentum, mollis in, porta et, nibh. Duis vulputate elit in elit. Mauris dictum libero id justo.

Subscribe to this Blog via Email :