กลับไปหน้ารวมไฟล์
monitor-temperature-with-google-sheets-c7590a.md

ชื่อโปรเจกต์: Monitor Temperature with Google Sheets

ภาพรวมโปรเจกต์

การมอนิเตอร์อุณหภูมิและความชื้นในบ้านน่ะมันมีประโยชน์นะน้อง มันช่วยให้เราปรับแต่งระบบทำความร้อนหรือความเย็นเพื่อให้ได้บรรยากาศที่เป๊ะที่สุด ปกติจะนั่งมองหน้าจอที่ติดกับตัวเครื่องมันก็โอเคอยู่หรอก แต่จะดีกว่ามั้ยถ้าเราสามารถดูข้อมูลแบบ Real-time บน Google Sheets ได้เลย? จะกดเช็คสถานะบ้านตอนไหนก็ได้ จากอุปกรณ์อะไรก็ได้ แค่คลิกสองคลิกก็รู้เรื่องแล้ว

โปรเจกต์นี้พี่จัดมาให้แบบเน้นทำง่าย ใครๆ ก็ทำตามได้ พี่ใช้บริการของ Temboo ผ่าน Google Sheets choreo ซึ่งมันจะช่วยให้เราเขียนโปรแกรมสั่ง [Arduino](https://s.shopee.co.th/7fUgFAWSki) Yun ให้ส่งค่าอุณหภูมิและความชื้นไปเก็บไว้ใน Google Sheets ได้แบบชิลๆ

หลักการทำงาน

เจ้าตัว TemperatureVisualiser จะอ่านค่าจาก [Sensor](https://s.shopee.co.th/7VBG2rX65j) วัดอุณหภูมิและความชื้น DHT11 แล้วส่งข้อมูลไปที่ Temboo จากนั้น Temboo จะทำหน้าที่ส่งข้อมูลต่อไปยัง Google APIs และไปจบที่ Google Sheets เพื่อแสดงผลข้อมูลลงในตาราง Spreadsheet ลองดูภาพประกอบกระบวนการทำงานด้านล่างนี้เลย

กระบวนการรับส่งข้อมูล

และนี่คือภาพรวมของตัว Code ในโปรเจกต์นี้

ภาพรวมของ Code
  • อ่านค่า Temp และ Humidity
    ตัวโปรแกรมจะอ่านค่าอุณหภูมิและความชื้นจาก Sensor แล้วนำมาเก็บข้อมูลไว้
  • ประมวลผลข้อมูล
    นำค่าอุณหภูมิและความชื้นมาจัดฟอร์แมตใส่ไว้ใน buffer ให้อยู่ในรูปแบบ json ตามที่ระบบต้องการ
  • ส่งข้อมูลไปที่ Temboo
    ส่งข้อมูลใน buffer ไปยัง Temboo ในรูปแบบ choreo
  • Microcontroller จะรอเวลาสักพักก่อนจะเริ่มวน Loop ทำซ้ำอีกครั้ง

Temboo และ Google ต้องการข้อมูลในรูปแบบ json แบบ Array ซ้อน Array ซึ่งหน้าตาของ buffer ที่เราจัดฟอร์แมตแล้วจะเป็นแบบนี้

[ [ temp, hum, ] ]

โดยที่ Temp คือค่าอุณหภูมิ และ Hum คือค่าความชื้นที่อ่านได้จาก Sensor DHT11 นั่นเอง

ข้อดีของโปรเจกต์นี้

ถ้าทำตัวนี้สำเร็จ น้องจะได้ประโยชน์ตามนี้เลย:

  • เข้าถึงข้อมูลได้จากทุกที่ ทุกเวลา
  • ใช้งานง่ายมาก แค่จ่ายไฟให้ Arduino Yun ก็จบ
  • สร้างกราฟหรือดูข้อมูลสวยๆ ได้ง่ายผ่าน Google Sheets

เริ่มลงมือทำกันเลย

ขั้นตอนที่ 1: เตรียมอุปกรณ์ (Apparatus)

ฮาร์ดแวร์โปรเจกต์นี้ใช้น้อยมาก จัดหามาตามนี้เลยน้อง:

  • สาย jumper
  • 1 Arduino Yun
  • 1 DHT11 Temperature and Humidity Sensor
  • 1 Power Source (พี่ใช้สาย USB ต่อกับ Mac เอา ง่ายดี)
รวมอุปกรณ์ทั้งหมด

ขั้นตอนที่ 2: การต่อวงจร

มีอุปกรณ์แค่ 3 อย่าง ประกอบแป๊บเดียวเสร็จ นี่คือผังการต่อวงจร (Schematics) พี่จะจ่ายไฟให้ Sensor DHT11 ด้วยแรงดัน 5v นะ น้องเช็คดูด้วยว่า Sensor ของน้องรองรับ 5v มั้ย ถ้าไม่ชัวร์ก็ใช้ 3.3v แทนก็ได้

ผังการต่อวงจร

ขั้นตอนที่ 3: ทำความเข้าใจตัว Code

ตัว Code จะแบ่งออกเป็น 3 ส่วนหลักๆ คือ:

  • อ่านค่าจาก sensor
  • สร้าง buffer
  • ส่ง (parse) buffer ออกไป

โปรเจกต์นี้จะมี 2 ไฟล์ คือตัว Sketch หลัก และไฟล์ Header ที่เก็บข้อมูลบัญชีผู้ใช้ของ Google และ Temboo เดี๋ยวเราจะไปเซ็ตค่าในไฟล์ Header กันในหัวข้อ "การตั้งค่าตัวแปร" ด้านล่างนะ มาดู Code แต่ละส่วนกันก่อน

  • ส่วนการอ่านค่า Sensor
overview = DHT.read11(11); // อ่านค่าจาก sensor 
temp = DHT.temperature,1; // เก็บค่าอุณหภูมิ
hum = DHT.humidity,1; // เก็บค่าความชื้น

ส่วนนี้จะใช้ Library ช่วยอ่านข้อมูลจาก DHT11 พอได้ค่ามาแล้วเราก็เอาไปเก็บแยกไว้ใน Variable ที่ชื่อ temp
และ
hum

  • ส่วนการยัดข้อมูลลง Buffer
sprintf(values,"[[%02d,%02d,]]",temp,hum); // เอา temp และ hum ใส่ลงใน json packet 

บรรทัดนี้สำคัญนะน้อง มันคือการเอาค่าจาก sensor มาใส่ใน buffer โดยใช้คำสั่ง sprintf ฟอร์แมต [[%02d,%02d,]]
คือรูปแบบที่ Google ต้องการเพื่อให้มันอ่านค่าได้ถูกต้อง

  • ส่วนการส่งข้อมูลไป Temboo
TembooChoreo AppendValuesChoreo; // เริ่มต้นสร้าง choreo 
AppendValuesChoreo.begin(); // สั่งรัน choreo
// ตั้งค่าบัญชี Temboo - ตั้งค่าใน Accounts.h
AppendValuesChoreo.setAccountName(TEMBOO_ACCOUNT);
AppendValuesChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME);
AppendValuesChoreo.setAppKey(TEMBOO_APP_KEY);
// ตั้งค่า Google Credentials - ตั้งค่าใน Accounts.h
AppendValuesChoreo.addInput("RefreshToken", GOOGLE_CLIENT_REFRESH_TOKEN);
AppendValuesChoreo.addInput("ClientSecret", GOOGLE_CLIENT_SECRET);
AppendValuesChoreo.addInput("Values", values);
AppendValuesChoreo.addInput("ClientID", GOOGLE_CLIENT_ID);
AppendValuesChoreo.addInput("SpreadsheetID", GOOGLE_SPREADSHEET_ID);
AppendValuesChoreo.setChoreo("/Library/Google/Sheets/AppendValues");
// ระบุ choreo ที่จะรัน
AppendValuesChoreo.run(); // สั่งทำงานรัวๆ

ส่วนนี้คือการเรียกใช้ Temboo ตั้งค่าบัญชีทั้งของ Temboo และ Google แล้วสั่งให้ส่งข้อมูลไปที่ Google Sheets ข้อมูลบัญชีทั้งหมดจะถูกเก็บแยกไว้ในไฟล์ Accounts.h เพื่อความเป็นระเบียบ

การตั้งค่าตัวแปร (Setting Up the Variables)

ตัวแปรทุกตัวจะอยู่ในไฟล์ Accounts.h ที่มาคู่กับโปรเจกต์ น้องแค่ต้องเข้าไปแก้ค่าต่างๆ ในไฟล์นั้นเพื่อให้ choreo ทำงานได้ เดี๋ยวพี่จะอธิบายวิธีเซ็ตอัพฝั่ง Backend (Temboo และ Google APIs) ให้ดูในหัวข้อถัดไป

Library ที่ต้องใช้

Temboo - ลิขสิทธิ์ (c) 2017 Temboo Inc. ภายใต้ Apache 2.0 Licence.

DHT - เขียนโดย Rob Tillaart (Public domain)

Bridge - โดย Arduino LLC (Public domain)

การเตรียมบอร์ด (Setup)

โปรเจกต์นี้ต้องใช้ Arduino Yun ที่ตั้งค่าเริ่มต้นเรียบร้อยแล้วนะ ถ้าใครยังไม่เคยเล่น ลองไปดูคู่มือเริ่มต้นของ Yun ก่อน พอพร้อมแล้วก็เสียบ Yun เข้ากับคอมแล้วเตรียมรัน Sketch ได้เลย

ระบบ Backend (โปรแกรมหลังบ้าน)

เราต้องไปตั้งค่า 2 ฝั่งคือ Temboo และ Google APIs ค่อยๆ ทำตามพี่ไปนะน้อง ถ้ายังไม่ได้ก็อย่าเพิ่งท้อ ลองใหม่ดู (พี่เองก็ทำตั้งหลายรอบกว่าจะผ่าน!)

  • ขั้นตอนที่ 1: สร้างบัญชี Temboo

ไปสมัครสมาชิก Temboo ให้เรียบร้อย ใส่ username แล้วกด "Try it Out" ทำตามขั้นตอนไปเรื่อยๆ Temboo มีแผน Basic ให้ใช้ฟรี เดือนนึงรันได้ 250 ครั้ง เหลือๆ สำหรับการทดลอง

  • ขั้นตอนที่ 2: เตรียมบัญชี Google

ไปสมัคร Google Account ซะ (ถ้ายังไม่มีนะ) แล้วเข้าไปที่หน้าจัดการบัญชี ล็อกอินให้เรียบร้อย หน้าตาควรจะออกมาประมาณนี้

จากนั้นไปที่ส่วน "ความปลอดภัย" (Sign-in & Security) แล้วเปิดการใช้งาน "การยืนยันแบบสองขั้นตอน" (Two Step Verification) ซะ พอทำเสร็จหน้าตาควรจะเป็นแบบนี้

  • ขั้นตอนที่ 3: ตั้งค่า Google APIs

นี่คือขั้นตอนที่สำคัญและมึนที่สุด ตั้งสติให้ดีนะน้อง! เข้าไปที่ Google Console ล็อกอินให้เรียบร้อย ถ้ายังไม่มีโปรเจกต์ก็กด "Create a Project" สร้างมันขึ้นมาซะ พอมันโหลดเสร็จหน้าตาจะเป็นแบบนี้

จากนั้นกดที่เมนู "Credentials" ด้านซ้ายมือ จะเจอหน้านี้

กด "Create Credentials" แล้วเลือก OAuth Client ID เลือกประเภทเป็น "Web Application" ตั้งชื่อตามใจชอบ (พี่ตั้งว่า Temboo) ตรงช่อง "Authorised redirect URIs" ให้ใส่ค่าตามนี้:

https://ชื่อบัญชีTEMBOOของน้อง.temboolive.com/callback/google

อย่าลืมเปลี่ยนตรงชื่อบัญชีให้เป็นของน้องจริงๆ นะ เช่น https://myaccount.temboolive.com/callback/google

ตรงช่อง "Authorized JavaScript origins" ปล่อยว่างไว้ หน้าตาควรจะเป็นแบบนี้

กด "Create" แล้วน้องจะได้ Client ID กับ Client Secret มา เก็บไว้ให้ดีๆ นะ ห้ามหาย! จากนั้นกลับไปที่ Dashboard กดเปิดใช้งาน APIs แล้วค้นหา "Google Sheets" จากนั้นกด Enable ซะ

  • ขั้นตอนที่ 4: เริ่มต้น OAuth (Initialise OAuth)

กลับไปที่ Temboo ล็อกอินแล้วไปที่เมนู Google -> OAuth -> InitialiseAuth

ใส่ Google ClientID ของน้องลงไป เลื่อนลงไปดูตรง "notes" ก๊อปปี้พวก scope ของ Google Spreadsheets มาใส่ในช่อง scope ด้านบนให้หมด (มี 3 ตัวนะ ดูในภาพประกอบเอา)

กด "Run Now" น้องจะได้ URL กับ callbackID มา เซฟ callbackID ไว้ด้วย แล้วกดเข้าไปที่ URL นั้นเพื่อทำการกดยอมรับสิทธิ์ (Allow) ในหน้าของ Google ถ้ามันขึ้นเตือนว่าไม่ปลอดภัย ให้กด Advanced แล้วกดไปที่ temboolive.com ต่อเลย พอเสร็จแล้วจะเจอหน้าว่างๆ แสดงว่าน้องมาถูกทางแล้ว

  • ขั้นตอนที่ 5: จบขั้นตอน OAuth (Finalise OAuth)

ไปที่ Temboo เลือก Google -> OAuth -> Finalise OAuth ใส่ค่าที่ได้มาจากขั้นตอนก่อนๆ ให้ครบ แล้วกด "Run Now" ถ้าผ่าน น้องจะได้ Access Token กับ RefreshToken มา จดไว้ให้แม่นเลย นี่แหละตัวสำคัญ!

  • ขั้นตอนที่ 6: ลองยิงข้อมูลทดสอบ (Run a Probe)

เพื่อเช็คว่าเซ็ตมาถูกมั้ย ให้ไปที่ Temboo เมนู Google -> Sheets -> AppendValues ใส่ ClientID, Client Secret, Refresh Token และ ID ของ Google Spreadsheet (ID จะอยู่ใน URL ของไฟล์ชีตที่เราสร้างขึ้นมานั่นแหละ)

ลองใส่ค่าทดสอบในช่อง Values ดูแบบนี้:

[ [ "100", "200", "300" ] ]

ก๊อปปี้ Code ที่ได้ไปใส่ใน Arduino IDE สร้างแท็บใหม่ชื่อ "TembooAccount.h" แล้วก๊อปเนื้อหาในช่อง Header File ไปใส่ไว้ด้วย จากนั้นเบิร์นลงบอร์ด Arduino Yun แล้วเปิด Serial Monitor ดู ถ้ามันทำงานได้ ค่า 100 200 300 จะไปโผล่ใน Google Sheets ของน้องเลย หล่อเท่!

  • ขั้นตอนที่ 7: ขั้นสุดท้าย

เปิด Code โปรเจกต์หลัก แก้ไขไฟล์ Header ใส่ค่า Token ต่างๆ ของน้องลงไป พี่ตั้ง Delay ไว้ที่ 1 นาทีนะ (แก้ได้ตามใจชอบ) แนะนำให้เปิด proDebug เป็น 1 ก่อนในช่วงแรกเพื่อดูข้อมูลใน Serial Monitor ถ้าทุกอย่างนิ่งแล้วค่อยปิดเป็น 0 แล้วปล่อยมันทำงานยาวๆ ไปเลย

บทสรุป

ฮาร์ดแวร์โปรเจกต์นี้มันน้อย พี่เลยไม่ได้ทำกล่องใส่ไว้ ใครอยากทำก็จัดได้เลยตามศรัทธา พี่ตั้งใจทำโปรเจกต์นี้มาเพื่อให้น้องๆ เข้าใจเรื่อง IoT ได้ง่ายขึ้น ไม่ต้องงมเองให้เสียเวลา การมีข้อมูลอุณหภูมิใน Spreadsheet มันช่วยให้เราวิเคราะห์เทรนด์ได้ง่ายและสะดวกสุดๆ จัดไปวัยรุ่น!

รายละเอียดทางเทคนิคเพิ่มเติม

การเก็บบันทึกข้อมูลบน Cloud

โปรเจกต์นี้ช่วยเปลี่ยนการเก็บข้อมูลแบบเดิมๆ ให้เป็นระบบ Spreadsheet มืออาชีพเพื่อการวิเคราะห์ระยะยาว

  • Sensor Node: อ่านค่าจาก Sensor อุณหภูมิรุ่น LM35 หรือ DHT22
  • API Orchestration: ใช้ Temboo หรือจะเขียน Google Apps Script (GAS) เองก็ได้ โดย Arduino (หรือ ESP8266) จะส่ง HTTP POST request ที่มีข้อมูล Sensor ไปยังปลายทาง

ระบบ Automation ของ Spreadsheet

  • Real-Time Logging: ทุกครั้งที่ส่ง Request ข้อมูลจะถูกเพิ่มเป็นแถวใหม่ใน Google Sheets พร้อมลง Timestamp ให้โดยอัตโนมัติ
  • Remote Visibility: ดูข้อมูลได้จากทั่วโลก ใครก็เข้าถึงได้ ไม่ว่าจะเป็นเกษตรกรหรือช่างแอร์ ก็มอนิเตอร์อุณหภูมิหน้างานผ่าน Browser ได้เลย แถมยังเอาเครื่องมือทำกราฟของ Google Sheets มาใช้ดูเทรนด์รายสัปดาห์ได้แบบหล่อๆ เลยล่ะน้อง!

ข้อมูล Frontmatter ดั้งเดิม

title: "Monitor Temperature with Google Sheets"
description: "Append Temperature and Humidity Values to a Google Spreadsheet."
author: "andreiflorian"
category: "Lab Stuff"
tags:
  - "internet of things"
views: 14100
likes: 12
price: 2450
difficulty: "Intermediate"
components:
  - "1x Arduino Yun"
  - "1x Jumper wires (generic)"
  - "1x DHT11 Temperature & Humidity Sensor (3 pins)"
tools: []
apps:
  - "1x Temboo"
  - "1x Arduino Web Editor"
  - "1x Actions on Google"
  - "1x Google Sheets"
downloadableFiles:
  - "https://create.arduino.cc/editor/LightPro/136cb893-b10d-484f-a465-4382b47e8e6d"
documentationLinks: []
passwordHash: "7364de6eeeb7a6f6e2f2e598c9ff2d50417cbdd2148893e7256362dab0206cc8"
encryptedPayload: "U2FsdGVkX1/i30BCZDm4mDKHuCAybUNmd0oL9jTFvL+vexaHdTW76TXzPc/2qXNY6rz1nIm4nVLIS+EYejqbSax/VAInthLUZqXLaYuTrCAB0CPqyRm9gfFrpJSCX7poExmGWvfM0sioyDH/SXzxQ8wwj4YQmcL6BBw+HZsxJ18="
seoDescription: "Log Temperature and Humidity data to Google Sheets using Arduino. A simple IoT project for real-time data monitoring and storage."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/monitor-temperature-with-google-sheets-c7590a_cover.png"
lang: "th"