รายละเอียดการทำงานเชิงลึกของโปรเจกต์ (Detailed Description)
โปรเจกต์นี้ถูกออกแบบมาเพื่อเปลี่ยนชุดอุปกรณ์ Arduino Opla IoT Kit ให้กลายเป็นสถานีพยากรณ์อากาศอัจฉริยะที่ทำงานแบบไร้สายได้อย่างสมบูรณ์ (Wireless Operation) โดยใช้เพียงการเชื่อมต่อผ่านเครือข่าย WiFi และใช้พลังงานจากแบตเตอรี่ Li-Po หรือสาย USB ก็ได้ ซึ่งหัวใจหลักของระบบคือบอร์ด Arduino MKR WiFi 1010 ที่ติดตั้งอยู่บน MKR IoT Carrier
การดึงข้อมูลพยากรณ์อากาศผ่าน API
ระบบจะทำการดึงข้อมูลพยากรณ์อากาศล่วงหน้า 7 วัน (รวมถึงวันปัจจุบัน) จากบริการของ 7timer.info ซึ่งเป็น Open API ที่ให้ข้อมูลด้านอุตุนิยมวิทยาที่แม่นยำ กระบวนการนี้เริ่มต้นด้วยการส่งคำสั่ง HTTP GET Request ไปยังเซิร์ฟเวอร์ โดยระบุพิกัดละติจูดและลองจิจูด (ในตัวอย่างนี้ตั้งค่าไว้ที่กรุงปราก สาธารณรัฐเช็ก: 50.076° N, 14.438° E) ข้อมูลที่ตอบกลับมาจะอยู่ในรูปแบบ JSON (JavaScript Object Notation) ซึ่งเป็นฟอร์แมตมาตรฐานในการแลกเปลี่ยนข้อมูลบนเว็บ จากนั้นโค้ดจะทำการ Parse หรือแยกแยะข้อมูลเพื่อดึงค่าสำคัญต่างๆ มาแสดงผล
ข้อมูลพยากรณ์อากาศที่ดึงมาได้ประกอบด้วย:
- อุณหภูมิต่ำสุดและสูงสุดของแต่ละวัน
- สภาพอากาศ (Weather Type) เช่น ท้องฟ้าแจ่มใส (Clear), มีเมฆบางส่วน (Partly Cloudy), ฝนตก (Rain) หรือหิมะ (Snow)
- ลักษณะลม (Wind Type) เช่น ลมสงบ (Calm), ลมปานกลาง (Moderate) ไปจนถึงระดับพายุ (Hurricane)
การแสดงผลพยากรณ์อากาศจะมาพร้อมกับวันที่ เดือน และวันในสัปดาห์ โดยเลือกใช้ พื้นหลังสีน้ำเงิน (Blue Background) เพื่อให้ผู้ใช้งานแยกแยะได้ทันทีว่าเป็นข้อมูลพยากรณ์ในอนาคต

การตรวจวัดสภาพอากาศในพื้นที่ด้วยเซ็นเซอร์ออนบอร์ด
นอกจากข้อมูลจากอินเทอร์เน็ตแล้ว ชุด Opla ยังสามารถวัดสภาพอากาศในจุดที่ติดตั้งเครื่องได้จริง (Local Weather Data) ผ่านเซ็นเซอร์ประสิทธิภาพสูงที่ฝังมาบน MKR IoT Carrier ดังนี้:
- HTS221: เซ็นเซอร์วัดอุณหภูมิและความชื้นสัมพัทธ์แบบดิจิทัล ให้ความแม่นยำสูงและตอบสนองไว
- LPS22HB: เซ็นเซอร์วัดความดันบรรยากาศ (Barometric Pressure) ซึ่งช่วยในการวิเคราะห์แนวโน้มสภาพอากาศในพื้นที่ได้
ข้อมูลเรียลไทม์เหล่านี้จะถูกแสดงผลบน พื้นหลังสีเขียว (Green Background) เพื่อความแตกต่างที่ชัดเจนจากหน้าจอพยากรณ์อากาศ

ตรรกะการควบคุมและระบบจัดการพลังงาน
เพื่อให้ระบบทำงานได้อย่างมีประสิทธิภาพและประหยัดพลังงานที่สุด โค้ดได้ถูกเขียนขึ้นด้วยตรรกะดังนี้:
- WiFi Connectivity & Security: การเชื่อมต่อ WiFi จะต้องคงไว้เพื่อดึงข้อมูล API โดยข้อมูลสำคัญเช่น SSID และ Password จะถูกแยกเก็บไว้ในไฟล์
arduino_secrets.hเพื่อความปลอดภัยตามหลักการพัฒนาซอฟต์แวร์ที่ดี นอกจากนี้โมดูล WiFi ยังถูกตั้งค่าให้อยู่ในโหมด Low Power เพื่อยืดอายุการใช้งานแบตเตอรี่ - User Interface (UI) Logic: ระบบใช้ปุ่มสัมผัส (Capacitive Touch Buttons) บนตัว Carrier:
- ปุ่ม 0 (ซ้าย): เลื่อนดูพยากรณ์อากาศย้อนหลังหรือวันก่อนหน้า
- ปุ่ม 4 (ขวา): เลื่อนดูพยากรณ์อากาศล่วงหน้าของวันถัดไป
- ปุ่ม 2 (กลาง): สลับมาดูสภาพอากาศปัจจุบันจากเซ็นเซอร์ในตัวเครื่อง
- Automatic State Reset: เพื่อให้หน้าจอพร้อมใช้งานเสมอ หากไม่มีการกดปุ่มใดๆ เป็นเวลา 10 วินาที ระบบจะดีดหน้าจอกลับมาแสดงผลพยากรณ์อากาศของ "วันปัจจุบัน" โดยอัตโนมัติ
- Data Update Cycle: ระบบจะทำการอัปเดตข้อมูลพยากรณ์อากาศใหม่ทุกๆ 60 นาที เพื่อให้มั่นใจว่าข้อมูลไม่ล้าสมัย ในระหว่างการดึงข้อมูล หน้าจอจะเปลี่ยนเป็น พื้นหลังสีแดง พร้อมข้อความ "Updating the Weather Data" เพื่อแจ้งสถานะให้ผู้ใช้ทราบ

วิธีการใช้งาน (How To Use)
- ทำการ Clone Repository ของโปรเจกต์ลงในเครื่องคอมพิวเตอร์ของคุณ
- เปิดไฟล์
arduino_secrets.hแล้วระบุค่า SSID และ Password ของเครือข่าย WiFi ที่ต้องการใช้งาน - อัปโหลดโค้ดลงในบอร์ด Arduino MKR WiFi 1010 ผ่าน Arduino IDE
- รอสักครู่เพื่อให้เครื่องสร้างการเชื่อมต่อ WiFi เมื่อสำเร็จ หน้าจอจะปรากฏสีแดงพร้อมข้อความ "Updating the Weather Data" หากหน้าจอดับมืด แสดงว่าการเชื่อมต่อล้มเหลว ให้ตรวจสอบค่าใน
arduino_secrets.hอีกครั้ง - เมื่ออัปเดตเสร็จ ข้อมูลพยากรณ์อากาศวันแรกจะปรากฏขึ้น
- ใช้ปุ่มสัมผัสในการควบคุม:
- กด ปุ่ม 0 เพื่อดูวันก่อนหน้า
- กด ปุ่ม 4 เพื่อดูวันถัดไป
- กด ปุ่ม 2 เพื่อดูค่าจากเซ็นเซอร์ปัจจุบัน
- ระบบจะวนกลับมาหน้าปัจจุบันเองหลังจากทิ้งไว้ 10 วินาที
รายละเอียดไฟล์ในโปรเจกต์ (Project Files)
- wfdOplaNode.ino: ไฟล์หลักของโปรเจกต์ ทำหน้าที่ควบคุมกระบวนการ Setup (เริ่มต้น Serial, WiFi และ MKR IoT Carrier) และฟังก์ชัน Loop ซึ่งคอยจัดการการอัปเดตข้อมูลตามเวลาที่กำหนด รวมถึงตรวจจับการกดปุ่ม
- arduino_secrets.h: ไฟล์สำหรับเก็บข้อมูลรับรอง (Credentials) ของเครือข่าย WiFi เพื่อความเป็นระเบียบและปลอดภัย
- weatherData.h: ไฟล์ Header ที่รวบรวมการประกาศฟังก์ชัน (Function Declarations) สำหรับการเรียกดูข้อมูล, การประมวลผล JSON และการจัดการการแสดงผลบนหน้าจอ
- weatherData.cpp: ไฟล์ซอร์สโค้ดที่บรรจุการทำงานจริง (Implementation) ของฟังก์ชันที่ประกาศไว้ในไฟล์ Header โดยเน้นที่ตรรกะการติดต่อกับ API และการจัดการกราฟิกบนจอ OLED
แนวทางการพัฒนาในอนาคต (Future Improvements)
แม้ว่าโมดูล WiFi จะทำงานในโหมดพลังงานต่ำแล้ว แต่เรายังสามารถเพิ่มประสิทธิภาพการประหยัดพลังงานได้อีก เช่น การตั้งค่าให้หน้าจอปิดการทำงาน (Display Sleep) หากไม่มีการใช้งานเกิน 10 นาที และจะเปิดขึ้นมาใหม่เมื่อมีการสัมผัสปุ่มเท่านั้น นอกจากนี้ยังสามารถปรับปรุงในส่วนของอัลกอริทึมการคำนวณ Deep Sleep ของตัวไมโครคอนโทรลเลอร์ เพื่อให้เครื่องสามารถทำงานได้นานหลายสัปดาห์ต่อการชาร์จเพียงครั้งเดียว หากต้องการให้เครื่องพร้อมแสดงผลตลอดเวลาเหมือนในปัจจุบัน อาจพิจารณาการใช้เซ็นเซอร์ตรวจจับความเคลื่อนไหว (PIR) เพื่อเปิดจอเฉพาะเมื่อมีคนเดินผ่านในระยะที่กำหนด