กลับไปหน้ารวมไฟล์
weather-forecast-displayer-bbc99e.md

รายละเอียดการทำงานเชิงลึกของโปรเจกต์ (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) เพื่อให้ผู้ใช้งานแยกแยะได้ทันทีว่าเป็นข้อมูลพยากรณ์ในอนาคต

Display - Weather Forecast

การตรวจวัดสภาพอากาศในพื้นที่ด้วยเซ็นเซอร์ออนบอร์ด

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

  1. HTS221: เซ็นเซอร์วัดอุณหภูมิและความชื้นสัมพัทธ์แบบดิจิทัล ให้ความแม่นยำสูงและตอบสนองไว
  2. LPS22HB: เซ็นเซอร์วัดความดันบรรยากาศ (Barometric Pressure) ซึ่งช่วยในการวิเคราะห์แนวโน้มสภาพอากาศในพื้นที่ได้

ข้อมูลเรียลไทม์เหล่านี้จะถูกแสดงผลบน พื้นหลังสีเขียว (Green Background) เพื่อความแตกต่างที่ชัดเจนจากหน้าจอพยากรณ์อากาศ

Display - Current Weather

ตรรกะการควบคุมและระบบจัดการพลังงาน

เพื่อให้ระบบทำงานได้อย่างมีประสิทธิภาพและประหยัดพลังงานที่สุด โค้ดได้ถูกเขียนขึ้นด้วยตรรกะดังนี้:

  • 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" เพื่อแจ้งสถานะให้ผู้ใช้ทราบ

Display - Updating The Weather Data


วิธีการใช้งาน (How To Use)

  1. ทำการ Clone Repository ของโปรเจกต์ลงในเครื่องคอมพิวเตอร์ของคุณ
  2. เปิดไฟล์ arduino_secrets.h แล้วระบุค่า SSID และ Password ของเครือข่าย WiFi ที่ต้องการใช้งาน
  3. อัปโหลดโค้ดลงในบอร์ด Arduino MKR WiFi 1010 ผ่าน Arduino IDE
  4. รอสักครู่เพื่อให้เครื่องสร้างการเชื่อมต่อ WiFi เมื่อสำเร็จ หน้าจอจะปรากฏสีแดงพร้อมข้อความ "Updating the Weather Data" หากหน้าจอดับมืด แสดงว่าการเชื่อมต่อล้มเหลว ให้ตรวจสอบค่าใน arduino_secrets.h อีกครั้ง
  5. เมื่ออัปเดตเสร็จ ข้อมูลพยากรณ์อากาศวันแรกจะปรากฏขึ้น
  6. ใช้ปุ่มสัมผัสในการควบคุม:
    • กด ปุ่ม 0 เพื่อดูวันก่อนหน้า
    • กด ปุ่ม 4 เพื่อดูวันถัดไป
    • กด ปุ่ม 2 เพื่อดูค่าจากเซ็นเซอร์ปัจจุบัน
  7. ระบบจะวนกลับมาหน้าปัจจุบันเองหลังจากทิ้งไว้ 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) เพื่อเปิดจอเฉพาะเมื่อมีคนเดินผ่านในระยะที่กำหนด

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

title: "Weather Forecast Displayer"
description: "Weather forecast for 7 days and current (local) weather data displayer using the Arduino Opla IoT Kit"
author: "alexandrucohal"
category: "Sensors & Environment"
tags:
  - "weather"
  - "displayer"
views: 18440
likes: 7
price: 299
difficulty: "Intermediate"
components:
  - "1x Arduino Oplà IoT Kit"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://github.com/alexandru-cohal/WeatherForecastDisplayer"
documentationLinks: []
passwordHash: "6ba6493653b71a81dbefae75df29af4678f65101804177e7cc437bc65f63e695"
encryptedPayload: "U2FsdGVkX19Hb+1bRyLYIWdyFndwPU3UwtMHB1uIZE/5lhaH0eCOFczsJoNP3KBv+Fw20g4VywqDd7CdDyEpBe7D3ia/XruF7PEDAIkPMXA="
seoDescription: "7-day Weather Forecast and local weather data displayer using Arduino Opla IoT Kit. Compact IoT weather station project."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/weather-forecast-displayer-bbc99e_cover.jpg"
lang: "en"