กลับไปหน้ารวมไฟล์
smart-weather-monitor-with-oled-screen-a795a7.md

โปรเจคนี้จะสอนให้รู้จักใช้ ESP32/ESP8266 กับจอ OLED แบบ SSD1306 เพื่อดึงข้อมูลสภาพอากาศแบบเรียลไทม์จาก OpenWeatherMap API ระบบนี้จะแสดงพารามิเตอร์สภาพอากาศ เช่น อุณหภูมิ ความชื้น และความเร็วลมของเมือง Karachi และสามารถสลับดูข้อมูลต่างๆ ได้ด้วยการกดปุ่มเดียว

ฟีเจอร์เด็ดๆ:

  1. เชื่อมต่อ Wi-Fi เพื่อดึงข้อมูลสภาพอากาศแบบสดๆ
  2. ข้อมูลสภาพอากาศจะแสดงบนจอ OLED แบ่งเป็น 3 โหมด: อุณหภูมิ, ความชื้น, และความเร็วลม
  3. ใช้ปุ่มกดแค่ปุ่มเดียวเพื่อสลับโหมด
  4. ข้อมูลจะอัปเดตอัตโนมัติทุก 10 นาที

อุปกรณ์ที่ต้องจัด:

  1. บอร์ดไมโครคอนโทรลเลอร์ ESP32 หรือ ESP8266
  2. จอแสดงผล OLED แบบ SSD1306
  3. ปุ่มกดสำหรับสลับโหมด
  4. OpenWeatherMap API สำหรับดึงข้อมูลสภาพอากาศ

Project Image

Project Image

ภาพรวมสถาปัตยกรรม IoT Weather

Smart Weather Monitor ตัวนี้ทำงานด้วยวงจรชีวิตแบบ Request-Parse-Display โดยเฉพาะเลย ทำงานบน ESP32 Dual-Core processor ตัวบอร์ดจะเริ่มด้วยการจับมือเชื่อมต่อ Wi-Fi แบบปลอดภัยเพื่อเข้าถึง OpenWeatherMap API มันจะส่งคำขอ GET ที่ระบุตำแหน่งไป รับข้อมูล JSON ซับซ้อนกลับมา แล้วใช้การแยกวิเคราะห์ความเร็วสูงเพื่อดึงข้อมูลเทเลเมทรีที่แม่นยำ เช่น อุณหภูมิ (รู้สึกได้), ความชื้น (สัมบูรณ์), และความเร็วลม จากนั้นข้อมูลจะถูกจัดรูปแบบเพื่อแสดงผลบนอินเทอร์เฟซ SSD1306 OLED ที่คอนทราสสูง

โครงสร้างพื้นฐานฮาร์ดแวร์และระดับการเชื่อมต่อ

  • ESP32 NodeMCU / Nano ESP32: คือ "Connectivity Engine" เลย เราเลือกใช้เพราะมันมี WiFi/Bluetooth ในตัวและมี SRAM เยอะ ซึ่งช่วยให้จัดการบัฟเฟอร์ JSON ขนาดใหญ่ได้โดยไม่ทำให้ระบบล่มแบบ Arduino Uno ทั่วไป
  • SSD1306 OLED (128x64): คือ "Status Panel" ใช้โปรโตคอล I2C (SDA/SCL) ซึ่งต่อสายแค่ 2 เส้น จอขาวดำแบบนี้ทำให้ข้อมูลสภาพอากาศคมชัด อ่านง่ายจากทุกมุม ไม่ว่าจะแสงเท่าไหร่
  • ปุ่มเลือกโหมด: เป็นองค์ประกอบ UX ที่สำคัญมาก แทนที่จะยัดข้อมูลทั้งหมดลงจอเล็กๆ พร้อมกัน ปุ่มกดทางกายภาพนี้จะให้ผู้ใช้สลับดู "มุมมองความหนาแน่นสูง" ทั้ง 3 แบบได้:
    • มุมมองอุณหภูมิ: อุณหภูมิแบบเรียลไทม์ (°C/°F)
    • มุมมองบรรยากาศ: เปอร์เซ็นต์ความชื้นสัมพัทธ์
    • มุมมองอากาศพลศาสตร์: ความเร็วลม (m/s) และลมกระโชก
  • ลอจิก Dual-Bus: โปรเจคนี้แสดงให้เห็นความสำคัญของการแยก สายไฟเลี้ยง (Power Rail) ออกจาก บัสข้อมูล I2C เพื่อให้แน่ใจว่าสัญญาณ WiFi ที่พุ่งสูงขึ้นจะไม่ทำให้หน้าจอกระพริบหรือข้อมูลเสียหาย

ลอจิกทางเทคโนโลยีและการจับมือ API

ระบบนี้มีความน่าเชื่อถือในแง่ความหน่วงต่ำได้ ผ่าน กลยุทธ์โปรโตคอลซอฟต์แวร์ หลายอย่าง:

  1. JSON Stream Parsing: เพราะข้อมูลที่ได้จาก OpenWeatherMap อาจมีขนาดใหญ่กว่า 512 ไบต์ โค้ดจึงใช้ไลบรารี ArduinoJson เพื่อ "กรอง" สตรีมขาเข้า โดยเก็บเฉพาะคีย์ข้อมูลสภาพอากาศที่ต้องการและทิ้งส่วนที่เหลือเพื่อประหยัดหน่วยความจำ
  2. State-Cycling Interrupts: ปุ่มกดจะเชื่อมโยงกับ "ตัวนับสถานะ" ทุกครั้งที่กดจะเพิ่มค่าตัวแปร (0, 1, 2) ซึ่งลูปหลักจะใช้เพื่อสลับระหว่างแดชบอร์ดภาพต่างๆ
  3. Automatic Refresh Protocol: เพื่อหลีกเลี่ยงการเกินขีดจำกัดการเรียกใช้ API ในขณะที่ยังคงข้อมูลใหม่อยู่ ระบบจะใช้ตัวจับเวลาแบบไม่บล็อก millis() โดยจะรีเฟรชข้อมูลทุก 600,000 มิลลิวินาที (10 นาที) โดยไม่หยุดการโต้ตอบกับหน้าจอ
  4. ไอคอนและกราฟิกสภาพอากาศ: โปรเจคนี้ใช้ไลบรารี Adafruit_GFX เพื่อวาดไอคอนสภาพอากาศแบบกำหนดเอง (เช่น เมฆ, ดวงอาทิตย์, รอยลม) ทำให้ดูพรีเมียมมากกว่าแค่ข้อความธรรมดา

WORKING

ไปเอา API key มาให้พี่จากเว็บ openweathermap แล้วก็เอามาแปะในโค้ดเลย ใส่ข้อมูล Wi-Fi ของน้องลงไป อัพโหลดโค้ดขึ้นบอร์ด

อย่าลืมเปลี่ยนตำแหน่งจาก "KARACHI" ในโค้ดเป็นเมืองที่อยากรู้สภาพอากาศนะจ๊ะ

Why This Project is Important

การฝึกฝนเรื่อง WiFi Serial Communication และ API Integration เป็นทักษะขั้นเทพสำหรับ นักพัฒนา IoT แบบ Full-Stack และวิศวะเมืองอัจฉริยะ มันสอนให้น้องรู้วิธีเชื่อมต่อโลกของไมโครคอนโทรลเลอร์เข้ากับฐานข้อมูลระดับโลกได้อย่างราบรื่น นอกจากจะทำเป็นจอแสดงสภาพอากาศได้แล้ว หลักการเดียวกันนี้ยังเอาไปใช้กับ จอแสดงราคาหุ้นในโรงงาน, ระบบติดตามโลจิสติกส์แบบเรียลไทม์ และ แดชบอร์ดแสดงพลังงานใน Smart Grid อีกด้วย การทำโปรเจคนี้ให้สำเร็จคือการพิสูจน์ว่าน้องจัดการกับโปรโตคอลอินเทอร์เน็ตที่ปลอดภัย และส่งต่อข้อมูลคุณภาพสูงไปยังอินเทอร์เฟซที่กะทัดรัดและใช้ง่ายได้แล้ว จัดไปวัยรุ่น!

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

apps:
  - "1x Arduino IDE"
  - "1x OpenWeatherMap"
author: "coding_boss"
category: "Sensors & Environment"
components:
  - "1x 40 colored male-male jumper wires"
  - "1x Push Button"
  - "1x ESP32"
  - "1x Grove - OLED Display 0.96"
description: "สถานีตรวจอากาศจิ๋วแต่แจ๋ว! มันจะแสดงอุณหภูมิ ความชื้น และความเร็วลมแบบเรียลไทม์บนจอ OLED สวยๆ แถมมีปุ่มกดให้สลับโหมดได้แบบตึงๆ งานนี้จัดไป วัยรุ่นต้องมี!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/f80b0b5c-3928-4637-84f9-8767141358d9.ino"
encryptedPayload: "U2FsdGVkX19d/uYZeWxShfY3+Dn3j7V31M1+6Q8ktK/yEocccYdpHi9vZka4rgwy6OfCV9klbCthl8wfuRyHbCaeMmu25refwG21e4/UYuRnHBo0R7dd6E4KkkrBtae9shE3HowCChQluW83kmvYpQfWEcrKcZHUxEltPJQ4VL4="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/smart-weather-monitor-with-oled-screen-a795a7_cover.jpg"
lang: "en"
likes: 4
passwordHash: "4a5f5ed4d371b474741964567846905c77625b6524c7dfa8f2f4cdce95976dbe"
price: 299
seoDescription: "Build a Smart Weather Monitor to track temperature, humidity, and wind speed on an OLED screen with button mode selection."
tags:
  - "Weather"
  - "Smart appliances"
  - "Environmental Sensing"
  - "Home Automation"
  - "Internet Of Things"
  - "Monitoring"
title: "จอโชว์สภาพอากาศแบบ Smart OLED งานง่ายแต่หล่อ!"
tools: []
videoLinks: []
views: 16523