ภาพรวม:
โปรเจกต์ Arduino ตัวนี้เป็นจอแสดงผลแบบอินเทอร์แอคทีฟที่โชว์อัตราแลกเปลี่ยนเงินตราแบบเรียลไทม์ โดยใช้การเชื่อมต่อ Wi-Fi และหน้าจอ OLED อัตราแลกเปลี่ยนจะอัปเดตทุก 24 ชั่วโมง ผู้ใช้สามารถเลื่อนดูข้อมูลและโต้ตอบกับจอแสดงผลได้ด้วยปุ่มกดจริง
"Cloud-Synced FX Monitor" นี่คือแดชบอร์ดทางการเงินสุดล้ำที่เชื่อมต่อ IoT นำตลาดเงินตราทั่วโลกมาวางไว้บนโต๊ะทำงานของคุณ ด้วยการดึงพลังจาก Wi-Fi stack ที่ฝังมากับ ESP32-C3 โปรเจกต์นี้จะเชื่อมต่อไปยัง RESTful API เพื่อดึงอัตราแลกเปลี่ยนสดๆ มาแสดงผลบน จอ OLED ขนาด 128x64 ที่คอนทราสต์สูง มันสาธิตหลักการพื้นฐานทางวิศวกรรม IoT: การโต้ตอบระหว่างไคลเอนต์และเซิร์ฟเวอร์ผ่าน HTTP, การแยกวิเคราะห์ JSON แบบอะซิงโครนัส และ การจัดการพลังงานอย่างชาญฉลาด ผ่านโหมด "หลับ" ของจอแสดงผลที่ทำงานตามเวลา
ฟีเจอร์เด็ด:
- อัปเดตทุกวัน: ระบบดึงอัตราแลกเปลี่ยนล่าสุดจาก API ออนไลน์ทุก 24 ชั่วโมง รับรองว่าจอแสดงผลจะสดใหม่เสมอ
- หน้าจอ OLED: แสดงข้อมูลบนจอ OLED 128x64 ให้ภาพชัด อ่านง่าย ไม่ปวดตา
- ควบคุมด้วยปุ่ม: ผู้ใช้สามารถเลื่อนดูข้อมูลที่แสดงด้วยปุ่มกดจริงสองปุ่ม ทำให้การเรียกดูข้อมูลเป็นเรื่องง่ายๆ
- จัดการจออัตโนมัติ: เพื่อประหยัดพลังงาน จอจะปิดตัวเองหลังจากไม่มีการใช้งาน 5 นาที และจะเปิดกลับมาใหม่ทันทีเมื่อกดปุ่ม
- เชื่อมต่อ Wi-Fi: โปรเจกต์ใช้ Wi-Fi เชื่อมต่ออินเทอร์เน็ตเพื่อดึงข้อมูลอัตราแลกเปลี่ยน ทำให้ข้อมูลอัปเดตอยู่เสมอ
เจาะลึกเทคนิค (แบบเด็กช่าง)
- เชื่อมต่อ RESTful API: ระบบจะส่ง คำขอ HTTP GET ไปที่ `exchangerate-api.com` ไม่เหมือนกับการโหลดหน้าเว็บธรรมดา ESP32 จะขอรับข้อมูลในรูปแบบ JSON (JavaScript Object Notation) ซึ่งเป็นรูปแบบข้อมูลที่มีโครงสร้าง ทำให้ไมโครคอนโทรลเลอร์สามารถ "คัด" เอาค่าเงินเฉพาะสกุลที่ต้องการจากลิสต์ใหญ่ๆ ได้โดยไม่ต้องเปลืองหน่วยความจำไปกับแท็ก HTML ที่ไม่จำเป็น
- แยกวิเคราะห์ JSON แบบประหยัดหน่วยความจำ: การประมวลผลลิสต์สกุลเงินขนาดใหญ่ อาจเกินขีดจำกัด RAM ของไมโครคอนโทรลเลอร์ตัวเล็กๆ โปรเจกต์นี้ใช้วิธีแยกวิเคราะห์แบบ "Stream-based" (มักใช้ไลบรารี `ArduinoJson`) โดย ESP32 จะทำหน้าที่เหมือน State Machine สแกนตัวอักษรที่เข้ามา และอัปเดตตัวแปร float ภายในก็ต่อเมื่อตรวจพบคีย์ของสกุลเงินที่ตรงกัน (เช่น "EUR", "JPY")
- บัส I2C และโปรโตคอล SSD1306: จอ OLED สื่อสารผ่านโปรโตคอล I2C (Inter-Integrated Circuit) บนขา SDA และ SCL ไลบรารี `Adafruit_SSD1306` จะจัดการเฟรมบัฟเฟอร์—ซึ่งเป็นส่วนหนึ่งของ RAM ที่ใช้ "วาด" ลายหน้าจอก่อนจะส่งข้อมูลไปยังจอแสดงผล วิธีนี้ทำให้สามารถเลื่อนข้อความได้ลื่นไหลและเรนเดอร์ฟอนต์แบบกำหนดเองได้ โดยไม่เกิดปัญหาจอแตกเป็นเส้น
- การโต้ตอบแบบขับเคลื่อนด้วยอินเตอร์รัปต์: ปุ่มกดถูกตั้งค่าด้วย ตัวต้านทานดึงขึ้นภายใน (Internal Pull-Up Resistors) เฟิร์มแวร์จะตรวจสอบสถานะของ GPIO เพื่อตรวจจับทริกเกอร์ "ขอบขาลง (Falling Edge)" เมื่อตรวจจับได้ มันจะรีเซ็ตตัวแปร `lastActivityTime` ซึ่งจะป้องกันไม่ให้ลอจิกการหลับอัตโนมัติทำงานในขณะที่ผู้ใช้กำลังเรียกดูอัตราแลกเปลี่ยนอยู่
- จัดการเวลาแบบซิงโครนัส: ในขณะที่ระบบจะเรียกข้อมูลจาก API ทุก 24 ชั่วโมง ESP32 จะใช้ตัวนับ `millis()` ภายในหรือซิงค์เวลาแบบ NTP (Network Time Protocol) เพื่อให้แน่ใจว่าการอัปเดตเกิดขึ้นตรงตามช่วงเวลาที่กำหนด แม้ว่าการเชื่อมต่อ Wi-Fi จะหลุดชั่วคราว
วิธีเซ็ตอัพและใช้งานจอแสดงผลอัตราแลกเปลี่ยนด้วย Arduino:
วัสดุอุปกรณ์ที่ต้องมี:
- บอร์ดไมโครคอนโทรลเลอร์: เราใช้ XIAO ESP32-C3 ในโปรเจกต์นี้เพราะขนาดกะทัดรัด พอดีกับเซ็ตอัพของเรา แต่ว่า บอร์ด ESP32 ตัวไหนก็ได้ที่มี Wi-Fi (หมายเหตุ: ไม่ใช่ ESP8266 นะ) ก็ใช้กับโปรเจกต์นี้ได้
- OLED Display: จอ OLED ขนาด 128x64 (ใช้ร่วมกับไลบรารี Adafruit SSD1306 ได้)
- Push Buttons: ปุ่มกด 2 ปุ่มสำหรับโต้ตอบกับน้องๆ
- Jumper Wires: สายจัมเปอร์สำหรับต่อวงจร อย่าลืมเตรียมมาให้พอนะ
- Breadboard: ถ้ามีก็ดี จะได้ต่อวงจรสะดวกๆ ไม่ต้องบัดกรี
- Power Supply: แหล่งจ่ายไฟที่พอสำหรับเลี้ยง ESP32 กับจอ OLED ของเรา
ขั้นตอนประกอบและตั้งค่า:
- ต่อฮาร์ดแวร์:
**จอ OLED:** ต่อจอ OLED เข้ากับ ESP32 ผ่านอินเทอร์เฟซ I2C ตรวจสอบให้ดีว่าเราต่อสายไฟ (VCC กับ GND) และสายข้อมูล (SDA กับ SCL) ถูกต้องแล้ว
**ปุ่มกด:** ต่อปุ่มกดเข้ากับขา GPIO สองขาบน ESP32 โดยกำหนดให้ขา Digital Pin 2 เป็นปุ่มเลื่อนขึ้น และขา Digital Pin 3 เป็นปุ่มเลื่อนลง และอย่าลืมต่อลงกราวด์ (GND) ด้วย

- ความเข้ากันได้ของไลบรารี:
**ติดตั้งไลบรารีที่จำเป็น:** ต้องลงไลบรารีเหล่านี้ใน Arduino IDE ก่อน ไม่งั้นโปรเจคไม่รันนะจ๊ะ:Adafruit SSD1306
Adafruit GFX
WiFi
HTTPClient
- ตั้งค่า API:
- ขอ API Key มา:
เราใช้บริการจาก **ExchangeRate-API** ในโปรเจคนี้ รุ่นพื้นฐานฟรีหมดจด ใช้ได้เดือนละ 1500 ครั้ง เพียงพอสำหรับเราแล้วน้องจะใช้เว็บอื่นสำหรับอัตราแลกเปลี่ยนก็ได้ ขอแค่ให้ข้อมูลมาในรูปแบบที่เข้ากันได้ แต่ถ้าใช้เว็บอื่น ก็ต้องมาแกะโค้ดปรับกันหน่อยนะ
เข้าไปที่เว็บไซต์ของ ExchangeRate-API
กดที่ปุ่ม "Get Free Key."
- ขอ API Key มา:

กรอกอีเมลกับตั้งรหัสผ่านของตัวเองลงไป
เช็คอีเมลเพื่อกดลิงก์ยืนยันและเปิดใช้งานบัญชี
พอเปิดใช้งานแล้ว ก็ล็อกอินเข้าแดชบอร์ดได้เลย

- ดึง URL ของ API:
ในแดชบอร์ด ให้กดที่ลิงก์ตัวอย่างเพื่อดูตัวอย่าง JSON response หรือไปที่ส่วน Example Request
คัดลอก URL จากหน้าตัวอย่างหรือจากแดชบอร์ดของเรา
เปลี่ยนสามตัวอักษรสุดท้าย (เช่น USD) เป็นสกุลเงินฐานที่เราต้องการ (เช่น EUR สำหรับยูโร)
ไปหาบรรทัดนี้ในสเก็ตช์ที่ให้มา:String url = "https://v6.exchangerate-api.com/v6/YOUR-API-KEY/latest/EUR";
แทนที่ `YOUR-API-KEY` ด้วยคีย์จริงของเรา และ `EUR` ด้วยสกุลเงินฐานที่เราต้องการ
- ขั้นตอนสุดท้าย:
- อัปเดตข้อมูล Wi-Fi:
หาบรรทัดเหล่านี้ในสเก็ตช์:#define WIFI_SSID "YOUR-SSID" #define WIFI_PASS "YOUR-PASSWORD"
แทนที่ `YOUR-SSID` ด้วยชื่อเครือข่าย Wi-Fi ของเรา
แทนที่ `YOUR-PASSWORD` ด้วยรหัสผ่าน Wi-Fi - อัปโหลดสเก็ตช์:
ต่อ ESP32 เข้ากับคอมด้วยสาย USB เลือกบอร์ดและพอร์ตที่ถูกต้องใน Arduino IDE แล้วอัปโหลดสเก็ตช์ได้เลย - รันโปรเจค:
พออัปโหลดเสร็จ ESP32 จะเชื่อมต่อกับ Wi-Fi, ดึงข้อมูลอัตราแลกเปลี่ยนจาก API และแสดงผลบนหน้าจอ OLED
ใช้ปุ่มกดที่เราต่อไว้เพื่อเลื่อนดูข้อมูลต่างๆ ได้เลย ง่ายมั้ยล่า
- อัปเดตข้อมูล Wi-Fi:
ทำตามขั้นตอนเหล่านี้ให้ครบ น้องก็จะได้จอแสดงอัตราแลกเปลี่ยนที่เชื่อมต่อ Wi-Fi ทำงานเรียบร้อย แสดงข้อมูลแบบเรียลไทม์ที่อัปเดตทุกวัน **จัดไปวัยรุ่น! สู้งานนะน้อง**
Engineering & Prototyping Insights
- XIAO ESP32-C3 Form Factor: การเลือกใช้ Seeed Studio XIAO นี่แหละที่บอกเลยว่าเรากำลังเข้าสู่ยุคของ IoT ขนาดจิ๋วแต่แจ๋ว แม้ตัวบอร์ดจะเล็กเท่าแท่งหัวแม่โป้ง แต่ข้างในมันอัดแน่นไปด้วยโปรเซสเซอร์ RISC-V 32-bit และวงจรชาร์จแบตเตอรี่ในตัว ทำให้มันเหมาะสุดๆ สำหรับการทำเครื่องมือตรวจสอบอัตราแลกเปลี่ยนแบบพกพาในกระเป๋า จัดไปวัยรุ่น!
- Display Longevity (Burn-in Prevention): พิกเซลของจอ OLED มันเสื่อมได้ถ้าปล่อยให้แสดงภาพนิ่งๆ เป็นพันๆ ชั่วโมงนะน้อง การตั้ง ตัวจับเวลาให้ปิดหน้าจออัตโนมัติทุก 5 นาที ในโค้ดนี้คือการตัดสินใจแบบช่างตัวจริง มันช่วยยืดอายุฮาร์ดแวร์ได้อีกเยอะ แถมยังลดกระแสไฟจาก ~20mA เหลือต่ำกว่า 500µA ตอนที่มันว่างงานอีกด้วย ห้ามช็อตนะตัวนี้!
- Error Resiliency: โค้ดของพี่มีลอจิกแบบ "fail-soft" อยู่ ถ้า Wi-Fi เชื่อมต่อไม่สำเร็จหรือ API ตอบกลับมาด้วยข้อผิดพลาด หน้าจอ OLED จะแสดงข้อความบอกปัญหาชัดเจน แทนที่จะปล่อยให้โปรเซสเซอร์ค้างตายซะเฉยๆ ผู้ใช้ก็แค่กดรีสตาร์ทหรือเช็คการตั้งค่าใหม่ได้เลย สบายๆ
- Scalability: สถาปัตยกรรมของโปรเจคนี้ถูกออกแบบมาให้ไม่ยึดติดกับสกุลเงินฐานใดๆ แค่เปลี่ยนสตริงใน URL นิดเดียว แดชบอร์ดทั้งระบบก็จะปรับตัวใหม่เพื่ออ้างอิงค่าเงินยูโร เยน หรือ Bitcoin ได้ทันที นี่แหละพลังของซอฟต์แวร์ในโลกการเงิน สู้งานนะน้อง!
How It Works:
- Setup and Initialization: ตอนเริ่มโปรเจค Arduino จะตั้งค่าการสื่อสารแบบ Serial และเตรียมจอ OLED ให้พร้อมใช้งาน รวมถึงตั้งค่าปุ่มกดสำหรับผู้ใช้ และตรวจสอบว่าจอแสดงผลทำงานถูกต้อง
- Data Retrieval: Arduino จะเชื่อมต่อกับเครือข่าย Wi-Fi และส่งคำขอ HTTP GET ไปดึงข้อมูลอัตราแลกเปลี่ยนจาก API ออนไลน์ โดยจะทำการดึงข้อมูลใหม่ทุกๆ 24 ชั่วโมงเพื่อให้มั่นใจว่าข้อมูลอัพเดทอยู่เสมอ
- Data Processing: เมื่อได้ข้อมูลมาแล้ว Arduino จะประมวลผลและจัดรูปแบบข้อมูล JSON ที่ได้รับมา ซึ่งรวมถึงการดึงข้อมูลที่เกี่ยวข้องและเตรียมมันให้พร้อมสำหรับแสดงผลบนหน้าจอ OLED
- Display Management: หน้าจอ OLED จะแสดงอัตราแลกเปลี่ยนและอนุญาตให้ผู้ใช้เลื่อนดูข้อมูลโดยใช้ปุ่มกด ถ้าไม่มีใครกดปุ่มเป็นเวลา 5 นาที หน้าจอจะปิดตัวเองอัตโนมัติเพื่อประหยัดพลังงาน และจะเปิดขึ้นมาใหม่เมื่อมีคนกดปุ่ม
- Error Handling: ระบบนี้มีการจัดการข้อผิดพลาดสำหรับปัญหาเครือข่ายและการดึงข้อมูลด้วย ถ้าเกิดข้อผิดพลาดขึ้น ข้อความที่เหมาะสมจะปรากฏบนหน้าจอ OLED และ Arduino จะพิมพ์รายละเอียดข้อผิดพลาดออกทาง Serial Monitor ให้ดู
Applications:
โปรเจคนี้เหมาะสุดๆ สำหรับการเรียนรู้เกี่ยวกับการแสดงผลข้อมูลแบบเรียลไทม์ การเชื่อมต่อเครือข่าย และการออกแบบอินเทอร์เฟซผู้ใช้ด้วย Arduino เหมาะสำหรับใช้ในการศึกษา โปรเจคของนักเล่น หรือใช้เป็นเครื่องมือจริงจังสำหรับตรวจสอบอัตราแลกเปลี่ยนเงินตราที่อัพเดททุกวัน
โปรเจคนี้เป็นโอเพ่นซอร์ส แก้ไขโค้ดและฮาร์ดแวร์ให้เข้ากับการใช้งานของตัวเองได้ตามสบายเลยนะ!