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


ภาพรวมสถาปัตยกรรม 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
ระบบนี้มีความน่าเชื่อถือในแง่ความหน่วงต่ำได้ ผ่าน กลยุทธ์โปรโตคอลซอฟต์แวร์ หลายอย่าง:
- JSON Stream Parsing: เพราะข้อมูลที่ได้จาก OpenWeatherMap อาจมีขนาดใหญ่กว่า 512 ไบต์ โค้ดจึงใช้ไลบรารี
ArduinoJsonเพื่อ "กรอง" สตรีมขาเข้า โดยเก็บเฉพาะคีย์ข้อมูลสภาพอากาศที่ต้องการและทิ้งส่วนที่เหลือเพื่อประหยัดหน่วยความจำ - State-Cycling Interrupts: ปุ่มกดจะเชื่อมโยงกับ "ตัวนับสถานะ" ทุกครั้งที่กดจะเพิ่มค่าตัวแปร (0, 1, 2) ซึ่งลูปหลักจะใช้เพื่อสลับระหว่างแดชบอร์ดภาพต่างๆ
- Automatic Refresh Protocol: เพื่อหลีกเลี่ยงการเกินขีดจำกัดการเรียกใช้ API ในขณะที่ยังคงข้อมูลใหม่อยู่ ระบบจะใช้ตัวจับเวลาแบบไม่บล็อก
millis()โดยจะรีเฟรชข้อมูลทุก 600,000 มิลลิวินาที (10 นาที) โดยไม่หยุดการโต้ตอบกับหน้าจอ - ไอคอนและกราฟิกสภาพอากาศ: โปรเจคนี้ใช้ไลบรารี
Adafruit_GFXเพื่อวาดไอคอนสภาพอากาศแบบกำหนดเอง (เช่น เมฆ, ดวงอาทิตย์, รอยลม) ทำให้ดูพรีเมียมมากกว่าแค่ข้อความธรรมดา
WORKING
ไปเอา API key มาให้พี่จากเว็บ openweathermap แล้วก็เอามาแปะในโค้ดเลย ใส่ข้อมูล Wi-Fi ของน้องลงไป อัพโหลดโค้ดขึ้นบอร์ด
อย่าลืมเปลี่ยนตำแหน่งจาก "KARACHI" ในโค้ดเป็นเมืองที่อยากรู้สภาพอากาศนะจ๊ะ
Why This Project is Important
การฝึกฝนเรื่อง WiFi Serial Communication และ API Integration เป็นทักษะขั้นเทพสำหรับ นักพัฒนา IoT แบบ Full-Stack และวิศวะเมืองอัจฉริยะ มันสอนให้น้องรู้วิธีเชื่อมต่อโลกของไมโครคอนโทรลเลอร์เข้ากับฐานข้อมูลระดับโลกได้อย่างราบรื่น นอกจากจะทำเป็นจอแสดงสภาพอากาศได้แล้ว หลักการเดียวกันนี้ยังเอาไปใช้กับ จอแสดงราคาหุ้นในโรงงาน, ระบบติดตามโลจิสติกส์แบบเรียลไทม์ และ แดชบอร์ดแสดงพลังงานใน Smart Grid อีกด้วย การทำโปรเจคนี้ให้สำเร็จคือการพิสูจน์ว่าน้องจัดการกับโปรโตคอลอินเทอร์เน็ตที่ปลอดภัย และส่งต่อข้อมูลคุณภาพสูงไปยังอินเทอร์เฟซที่กะทัดรัดและใช้ง่ายได้แล้ว จัดไปวัยรุ่น!