การส่งข้อมูลอุณหภูมิและความชื้นจาก Raspberry Pi Pico WH ไปยัง Google Sheet เป็นวิธีที่ดีในการเก็บบันทึกข้อมูลและดูแนวโน้มได้ง่าย ๆ ครับ
การจะทำเช่นนี้ได้ Pico WH ต้องเชื่อมต่อ Wi-Fi และส่งข้อมูลผ่านอินเทอร์เน็ตไปยัง Google Sheets API หรือบริการตัวกลางอื่น ๆ
นี่คือขั้นตอนและโค้ดตัวอย่างในการส่งข้อมูล DHT11 ไปยัง Google Sheet โดยใช้ Google Apps Script เป็นตัวกลาง (Web App) ซึ่งเป็นวิธีที่ได้รับความนิยมและค่อนข้างง่ายครับ
ขั้นตอนที่ 1: เตรียม Google Sheet และ Google Apps Script
* สร้าง Google Sheet ใหม่:
* ไปที่ Google Drive ของคุณแล้วสร้าง Google Sheet ใหม่ ตั้งชื่อว่า "DHT11_Data" หรือชื่อที่คุณต้องการ
* ในชีต ให้ตั้งชื่อคอลัมน์แรกเป็น "Timestamp", คอลัมน์ที่สองเป็น "Temperature", และคอลัมน์ที่สามเป็น "Humidity" (ตัวพิมพ์ใหญ่-เล็กต้องตรงเป๊ะ)
* สร้าง Google Apps Script (Web App):
* ใน Google Sheet ของคุณ ไปที่ Extensions -> Apps Script
* หน้าต่าง Apps Script จะเปิดขึ้นมา ลบโค้ดที่มีอยู่ออกทั้งหมด แล้วคัดลอกโค้ดด้านล่างนี้วางลงไป:
// Google Apps Script Code (Code.gs)
function doGet(e) {
return handlePost(e); // ใช้ doGet เพื่อให้สามารถทดสอบด้วย URL ได้ง่ายขึ้น
}
function doPost(e) {
return handlePost(e);
}
function handlePost(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // เปลี่ยน "Sheet1" เป็นชื่อชีตของคุณ เช่น "Sheet1" หรือ "Data"
if (!sheet) {
return ContentService.createTextOutput("Sheet not found").setMimeType(ContentService.MimeType.TEXT);
}
var temperature = e.parameter.temperature;
var humidity = e.parameter.humidity;
if (temperature && humidity) {
var timestamp = new Date();
sheet.appendRow([timestamp, temperature, humidity]);
return ContentService.createTextOutput("Data logged successfully").setMimeType(ContentService.MimeType.TEXT);
} else {
return ContentService.createTextOutput("Missing temperature or humidity parameter").setMimeType(ContentService.MimeType.TEXT);
}
}
* สำคัญ: เปลี่ยน "Sheet1" ในโค้ด var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); ให้เป็นชื่อแท็บชีตของคุณจริง ๆ (ปกติคือ "Sheet1" แต่ถ้าคุณเปลี่ยนชื่อแท็บต้องเปลี่ยนให้ตรง)
* บันทึกสคริปต์ (คลิกไอคอนรูปแผ่นดิสก์ หรือ Ctrl + S)
* Deploy Apps Script เป็น Web App:
* คลิกที่ Deploy (มุมขวาบน) -> New deployment
* เลือก Type เป็น Web app
* ในช่อง Execute as, เลือก Me
* ในช่อง Who has access, เลือก Anyone
* คลิก Deploy
* ระบบอาจขอให้คุณอนุญาต (Authorize) สคริปต์ ให้คลิก Review permissions และทำตามขั้นตอน (เลือกบัญชี Google ของคุณ -> Allow)
* เมื่อ Deploy เสร็จสิ้น คุณจะได้ Web app URL คัดลอก URL นี้เก็บไว้ดี ๆ เพราะเราจะใช้มันในโค้ด MicroPython ของเรา
ขั้นตอนที่ 2: โค้ด MicroPython สำหรับ Raspberry Pi Pico WH
โค้ดนี้จะใช้โมดูล urequests เพื่อส่งคำขอ HTTP POST ไปยัง Web app URL ของคุณ
สิ่งที่ต้องเตรียมเพิ่มเติมสำหรับโค้ด:
* ไลบรารี urequests: Pico WH ไม่มีไลบรารีนี้มาให้โดยตรง คุณต้องติดตั้ง
* เปิด Thonny IDE
* ไปที่ Tools -> Manage packages...
* ค้นหา micropython-urequests
* คลิก Install
* ข้อมูล Wi-Fi: ชื่อ Wi-Fi (SSID) และรหัสผ่านของคุณ
* Web app URL: URL ที่ได้จากขั้นตอนที่ 1
<!-- end list -->
from machine import Pin
import time
import dht
import network # สำหรับเชื่อมต่อ Wi-Fi
import urequests # สำหรับส่ง HTTP requests
# --- กำหนดค่า Wi-Fi และ Google Sheet ---
WIFI_SSID = "ชื่อ_WiFi_ของคุณ" # แก้ไขเป็นชื่อ Wi-Fi ของคุณ
WIFI_PASSWORD = "รหัสผ่าน_WiFi_ของคุณ" # แก้ไขเป็นรหัสผ่าน Wi-Fi ของคุณ
# แก้ไขเป็น Web app URL ที่ได้จาก Google Apps Script ของคุณ
# ตัวอย่าง: "https://script.google.com/macros/s/AKfycbzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz/exec"
WEB_APP_URL = "YOUR_GOOGLE_APPS_SCRIPT_WEB_APP_URL_HERE"
# --- กำหนดค่า DHT11 ---
DHT_PIN = 15 # GPIO Pin ที่เชื่อมต่อกับขา DATA ของ DHT11
sensor = dht.DHT11(Pin(DHT_PIN))
# --- ฟังก์ชันเชื่อมต่อ Wi-Fi ---
def connect_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print(f"Connecting to WiFi: {ssid}...")
wlan.connect(ssid, password)
max_attempts = 10
while not wlan.isconnected() and max_attempts > 0:
print(".", end="")
time.sleep(1)
max_attempts -= 1
if wlan.isconnected():
print("\nWiFi Connected!")
print("IP Address:", wlan.ifconfig()[0])
else:
print("\nFailed to connect to WiFi.")
return wlan.isconnected()
# --- เริ่มต้นโปรแกรม ---
print("Starting DHT11 sensor reading and Google Sheet logging...")
print("Press Ctrl+C to stop.")
# เชื่อมต่อ Wi-Fi ก่อนเริ่มลูป
if not connect_wifi(WIFI_SSID, WIFI_PASSWORD):
print("Cannot proceed without WiFi connection. Please check credentials and try again.")
# หากเชื่อมต่อไม่ได้ อาจจะทำอะไรบางอย่าง เช่น หยุดโปรแกรม หรือลองใหม่
exit() # หยุดการทำงานของสคริปต์หากเชื่อมต่อไม่ได้
try:
while True:
try:
# เริ่มต้นการวัดค่าจากเซ็นเซอร์ DHT11
sensor.measure()
time.sleep(1) # รอให้เซ็นเซอร์วัดค่าเสร็จ
# อ่านค่าอุณหภูมิและความชื้น
temperature = sensor.temperature()
humidity = sensor.humidity()
# แสดงผลบน Serial Monitor (สำหรับ Debug)
print(f"Temperature: {temperature:.1f} °C, Humidity: {humidity:.1f} %")
# ตรวจสอบว่ามีค่าอุณหภูมิ/ความชื้นที่ถูกต้องหรือไม่ (DHT บางครั้งก็อ่านค่าผิดพลาด)
if temperature is not None and humidity is not None:
# สร้าง URL สำหรับส่งข้อมูล
# Google Apps Script จะรับค่าผ่าน parameters ใน URL
payload = {
"temperature": f"{temperature:.1f}", # ส่งเป็น string
"humidity": f"{humidity:.1f}" # ส่งเป็น string
}
# ส่งข้อมูลแบบ GET request
# urequests.get(url, params=payload)
# หรือส่งข้อมูลแบบ POST request (แนะนำ)
# Google Apps Script จะรับข้อมูลจาก e.parameter ใน doGet/doPost
url_with_params = f"{WEB_APP_URL}?temperature={payload['temperature']}&humidity={payload['humidity']}"
response = urequests.get(url_with_params)
if response.status_code == 200:
print("Data sent to Google Sheet successfully!")
else:
print(f"Failed to send data. Status code: {response.status_code}")
print("Response text:", response.text)
response.close() # ปิดการเชื่อมต่อ
else:
print("Invalid sensor readings (None value). Skipping data upload.")
except OSError as e:
print(f"Failed to read sensor: {e}")
print("Retrying sensor reading in 2 seconds...")
except Exception as e:
print(f"An unexpected error occurred: {e}")
time.sleep(15) # ส่งข้อมูลทุกๆ 15 วินาที (ปรับได้ตามต้องการ)
except KeyboardInterrupt:
print("\nProgram stopped by user.")
except Exception as e:
print(f"An error occurred: {e}")
ข้อควรทราบและข้อแนะนำ:
* ความถี่ในการส่งข้อมูล: Google Apps Script มีข้อจำกัดในการเรียกใช้งาน (quota) อย่าส่งข้อมูลบ่อยเกินไป เช่น ทุก 15-60 วินาทีก็เพียงพอสำหรับข้อมูลสภาพแวดล้อมทั่วไป
* การจัดการข้อผิดพลาด: โค้ดมีการจัดการ OSError สำหรับ DHT และมีการจัดการ Exception ทั่วไปสำหรับการส่งข้อมูล แต่ในสภาพแวดล้อมจริงคุณอาจต้องเพิ่มการจัดการข้อผิดพลาดการเชื่อมต่อ Wi-Fi ที่ซับซ้อนขึ้น
* ความปลอดภัย: การส่งข้อมูลโดยตรงไปยัง Web App URL ผ่าน GET request ในลักษณะนี้ ไม่ปลอดภัย สำหรับข้อมูลที่ละเอียดอ่อน เนื่องจากพารามิเตอร์จะปรากฏใน URL ถ้าเป็นโปรเจกต์จริงจัง ควรใช้การส่งข้อมูลแบบ POST body หรือใช้ API Key เพื่อยืนยันตัวตน
* พลังงาน: การเชื่อมต่อ Wi-Fi และส่งข้อมูลจะใช้พลังงานมากกว่าการอ่านเซ็นเซอร์อย่างเดียว หากใช้แบตเตอรี่ อาจต้องพิจารณาการประหยัดพลังงาน
* การดีบัก: ใช้ print() และดู output ใน Serial Monitor ของ Thonny เพื่อตรวจสอบว่าโปรแกรมทำงานถูกต้องและข้อมูลถูกส่งไปหรือไม่
หลังจากที่คุณรันโค้ดบน Pico WH และเชื่อมต่อ Wi-Fi สำเร็จ คุณจะเห็นข้อมูลอุณหภูมิและความชื้นปรากฏใน Google Sheet
ไม่มีความคิดเห็น:
แสดงความคิดเห็น