"เราจะส่งข้อมูลจากไมโครคอนโทรลเลอร์ ESP32 ไปยัง Google Sheets ได้อย่างไร?" เนื่องจากผู้เขียนเองเคยทดลองในเรื่องนี้ และ มีความสนใจในหัวข้อนี้ จึงอยากจะแบ่งปันประสบการณ์ และ ขั้นตอนการทำงานในบทความนี้ครับ หวังว่าจะเป็นประโยชน์สำหรับทุกคนที่กำลังศึกษา และ ทดลองเช่นกัน
ทำไมต้องใช้ ESP32 และ MicroPython?
ESP32 เป็นไมโครคอนโทรลเลอร์ที่มีความสามารถหลากหลาย รองรับการเชื่อมต่อ WiFi และ Bluetooth ทำให้เหมาะอย่างยิ่งสำหรับงาน IoT และการส่งข้อมูลไปยังคลาวด์หรือเซิร์ฟเวอร์ เช่น Google Sheets
การใช้งาน MicroPython กับ ESP32 นั้นสะดวกและง่ายกว่าการใช้ Arduino IDE ในบางกรณี เนื่องจาก MicroPython มีฟังก์ชันที่ครอบคลุมและยืดหยุ่น โดยเฉพาะในเรื่องการจัดการข้อมูลและการพัฒนาอย่างรวดเร็ว นอกจากนี้ยังรองรับไลบรารี urequests
ซึ่งทำให้การส่งข้อมูลไปยัง Google Sheets ไม่จำเป็นต้องพึ่งพา Google Apps Script ช่วยลดความซับซ้อน และทำให้การพัฒนาโปรเจกต์ง่ายขึ้นอย่างมาก
ขั้นตอนการส่งข้อมูลจาก ESP32 ไปยัง Google Sheets
- ตั้งค่า Google Form และ Google Sheets
- สร้าง Google Form เพื่อใช้เป็นอินเทอร์เฟซในการรับข้อมูล โดยในฟอร์มนี้จะสร้างฟิลด์ตามที่ต้องการ เช่น ชื่อโปรเจกต์ รายละเอียด และวันที่เริ่มต้น
- ลิงก์ Google Form เข้ากับ Google Sheets เพื่อให้ข้อมูลที่ส่งมาจาก ESP32 ถูกบันทึกลงใน Sheets โดยอัตโนมัติ
- ติดตั้ง MicroPython และเตรียม ESP32
- แฟลช MicroPython ลงใน ESP32
- ติดตั้งไลบรารีที่จำเป็น เช่น
urequests
สำหรับการส่ง HTTP POST
- เขียนโค้ดเพื่อส่งข้อมูล
- ใช้ภาษา Python ในการเขียนโค้ดเพื่อรวบรวมข้อมูลจากผู้ใช้ หรือ เซ็นเซอร์
- ใช้ฟังก์ชัน POST เพื่อส่งข้อมูลไปยัง URL ของ Google Form โดยส่งข้อมูลในรูปแบบ URL-encoded
ความสะดวกของการใช้ MicroPython
หนึ่งในข้อดีสำคัญของการใช้ MicroPython บน ESP32 คือความง่ายในการจัดการข้อมูลและการพัฒนาโปรแกรม เราสามารถพัฒนาโปรเจกต์ IoT ที่ส่งข้อมูลไปยัง Google Sheets ได้ในเวลาอันรวดเร็ว โดยไม่ต้องยึดติดกับแพลตฟอร์มหรือระบบปฏิบัติการใดๆ
หวังว่าประสบการณ์และคำแนะนำเหล่านี้จะช่วยให้คุณเริ่มต้นพัฒนาโปรเจกต์ที่เกี่ยวข้องได้ง่ายขึ้นครับ หากมีคำถามหรือข้อสงสัยเพิ่มเติม ยินดีตอบเสมอครับ!
ตัวอย่าง Micropython Code
import urequests
import network
import time
#import urequests
#import urllib.parse
# ตั้งค่าการเชื่อมต่อ WiFi
SSID = "YOUR_SSID"
PASSWORD = "YOUR_PASSWORD"
# ฟังก์ชันเชื่อมต่อ WiFi
def connect_to_wifi():
print("Connecting to WiFi...")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
print("Waiting for connection...")
time.sleep(1)
print("Connected to WiFi")
print("Network Config:", wlan.ifconfig())
# URL ของ Google Form
url = 'https://docs.google.com/forms/d/e/1FAIpQLSdTZe8kbzfaZTvgD-i-BwugFPmM0syiwme0E8GYk9_JTqA9gA/formResponse'
# รับข้อมูลจากผู้ใช้
def get_user_input():
first_field = input("\nกรุณาป้อนข้อมูลรายการ Project: ")
second_field = input("กรุณาป้อนข้อมูลรายละเอียด: ")
third_field = input("กรุณาป้อนข้อมูลวันที่เริ่มทำงาน (YYYY-MM-DD): ")
return {
'entry.1049040913': first_field,
'entry.242823717': second_field,
'entry.1799517998': third_field
}
# ส่งข้อมูลไปยัง Google Form
def urlencode(data):
"""แปลง dict ให้เป็น URL-encoded string"""
return '&'.join('{}={}'.format(key, value.replace(' ', '+')) for key, value in data.items())
def submit_data(url, data):
try:
print("\nSending data to Google Form...")
# ใช้ฟังก์ชัน urlencode ที่เขียนเอง
encoded_data = urlencode(data)
# ส่งข้อมูลแบบ POST พร้อม headers ที่เหมาะสม
response = urequests.post(url, data=encoded_data, headers={'Content-Type': 'application/x-www-form-urlencoded'})
if response.status_code == 200:
print("Data submitted successfully!")
else:
print("Error submitting data. HTTP Status Code:", response.status_code)
response.close()
except Exception as e:
print("Error:", e)
# Main Function
def main():
#connect_to_wifi()
form_data = get_user_input()
submit_data(url, form_data)
# เริ่มต้นโปรแกรม
if __name__ == "__main__":
main()
โค้ดชุดนี้เป็นโค้ด Python ที่ใช้สำหรับเชื่อมต่อกับ WiFi และส่งข้อมูลไปยัง Google Form โดยใช้โมดูล urequests
และ network
ซึ่งมักใช้ในอุปกรณ์ IoT เช่น ESP32 หรือ ESP8266 ที่รัน MicroPython มาดูหลักการทำงานของโค้ดทีละส่วนกันครับ
1. การเชื่อมต่อ WiFi
SSID = "YOUR_SSID"
PASSWORD = "YOUR_PASSWORD"
def connect_to_wifi():
print("Connecting to WiFi...")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
print("Waiting for connection...")
time.sleep(1)
print("Connected to WiFi")
print("Network Config:", wlan.ifconfig())
-
SSID และ PASSWORD: ใช้สำหรับเก็บชื่อและรหัสผ่านของ WiFi ที่ต้องการเชื่อมต่อ
-
connect_to_wifi(): ฟังก์ชันนี้ใช้สำหรับเชื่อมต่ออุปกรณ์กับ WiFi โดยใช้โมดูล
network
-
network.WLAN(network.STA_IF)
: สร้างออบเจกต์สำหรับเชื่อมต่อ WiFi ในโหมด Station (อุปกรณ์เป็น client) -
wlan.active(True)
: เปิดการทำงานของ WiFi -
wlan.connect(SSID, PASSWORD)
: พยายามเชื่อมต่อกับ WiFi ที่กำหนด -
while not wlan.isconnected()
: รอจนกว่าจะเชื่อมต่อสำเร็จ -
wlan.ifconfig()
: แสดงการตั้งค่าเครือข่ายหลังจากเชื่อมต่อสำเร็จ (เช่น IP Address)
-
2. รับข้อมูลจากผู้ใช้
def get_user_input():
first_field = input("\nกรุณาป้อนข้อมูลรายการ Project: ")
second_field = input("กรุณาป้อนข้อมูลรายละเอียด: ")
third_field = input("กรุณาป้อนข้อมูลวันที่เริ่มทำงาน (YYYY-MM-DD): ")
return {
'entry.1049040913': first_field,
'entry.242823717': second_field,
'entry.1799517998': third_field
}
-
get_user_input(): ฟังก์ชันนี้ใช้รับข้อมูลจากผู้ใช้ผ่านคีย์บอร์ด
-
input()
: รับค่าจากผู้ใช้ -
ค่าที่รับมาจะถูกเก็บใน dictionary โดยใช้ key ที่ตรงกับชื่อ field ใน Google Form (เช่น
entry.1049040913
)
-
3. แปลงข้อมูลเป็น URL-encoded string
def urlencode(data) :
"""แปลง dict ให้เป็น URL-encoded string"""
return '&'.join('{}={}'.format(key, value.replace(' ', '+')) for key, value in data.items())
-
urlencode(): ฟังก์ชันนี้ใช้แปลง dictionary ให้เป็นรูปแบบ URL-encoded string
-
ตัวอย่าง:
{'entry.1049040913': 'Project1', 'entry.242823717': 'Details'}
จะถูกแปลงเป็นentry.1049040913=Project1&entry.242823717=Details
-
ช่องว่างในข้อมูลจะถูกแทนที่ด้วย
+
เพื่อให้สอดคล้องกับรูปแบบ URL encoding
-
4. ส่งข้อมูลไปยัง Google Form
def submit_data(url, data):
try:
print("\nSending data to Google Form...")
encoded_data = urlencode(data)
response = urequests.post(url, data=encoded_data, headers={'Content-Type': 'application/x-www-form-urlencoded'})
if response.status_code == 200:
print("Data submitted successfully!")
else:
print("Error submitting data. HTTP Status Code:", response.status_code)
response.close()
except Exception as e:
print("Error:", e)
-
submit_data() : ฟังก์ชันนี้ใช้ส่งข้อมูลไปยัง Google Form โดยใช้ HTTP POST request
-
urequests.post()
: ส่งข้อมูลแบบ POST ไปยัง URL ของ Google Form -
headers={'Content-Type': 'application/x-www-form-urlencoded'}
: กำหนด header เพื่อบอกว่าเราส่งข้อมูลในรูปแบบ URL-encoded -
response.status_code
: ตรวจสอบสถานะการส่งข้อมูล (200 แปลว่าสำเร็จ) -
response.close()
: ปิดการเชื่อมต่อหลังจากส่งข้อมูลเสร็จ
-
5. Main Function
def main():
#connect_to_wifi()
form_data = get_user_input()
submit_data(url, form_data)
if __name__ == "__main__":
main()
-
main(): ฟังก์ชันหลักของโปรแกรม
-
connect_to_wifi()
: เรียกใช้ฟังก์ชันเชื่อมต่อ WiFi (ในโค้ดนี้ถูกคอมเมนต์ไว้) -
get_user_input()
: รับข้อมูลจากผู้ใช้ -
submit_data()
: ส่งข้อมูลไปยัง Google Form
-
-
if name == "main":: ตรวจสอบว่าโปรแกรมถูกเรียกใช้งานโดยตรงหรือไม่ ถ้าใช่ก็จะเรียกฟังก์ชัน
main()
ผล
สรุป
โค้ดนี้ทำงานโดย :
-
เชื่อมต่อกับ WiFi (ถ้าเปิดใช้งานฟังก์ชัน
connect_to_wifi()
) -
รับข้อมูลจากผู้ใช้ผ่านคีย์บอร์ด
-
แปลงข้อมูลเป็นรูปแบบ URL-encoded
-
ส่งข้อมูลไปยัง Google Form โดยใช้ HTTP POST request
หมายเหตุ:
-
โค้ดนี้เหมาะสำหรับใช้ในอุปกรณ์ IoT ที่รัน MicroPython
-
ต้องแก้ไข
SSID
,PASSWORD
, และ URL ของ Google Form ให้ถูกต้องก่อนใช้งาน -
ฟังก์ชัน
connect_to_wifi()
ถูกคอมเมนต์ไว้ในโค้ด ดังนั้นถ้าต้องการเชื่อมต่อ WiFi ต้องยกเลิกการคอมเมนต์ก่อน