กลับไปหน้ารวมไฟล์
oled-exchange-rate-monitor-ab782c.md

ภาพรวม:

โปรเจกต์ Arduino ตัวนี้เป็นจอแสดงผลแบบอินเทอร์แอคทีฟที่โชว์อัตราแลกเปลี่ยนเงินตราแบบเรียลไทม์ โดยใช้การเชื่อมต่อ Wi-Fi และหน้าจอ OLED อัตราแลกเปลี่ยนจะอัปเดตทุก 24 ชั่วโมง ผู้ใช้สามารถเลื่อนดูข้อมูลและโต้ตอบกับจอแสดงผลได้ด้วยปุ่มกดจริง

"Cloud-Synced FX Monitor" นี่คือแดชบอร์ดทางการเงินสุดล้ำที่เชื่อมต่อ IoT นำตลาดเงินตราทั่วโลกมาวางไว้บนโต๊ะทำงานของคุณ ด้วยการดึงพลังจาก Wi-Fi stack ที่ฝังมากับ ESP32-C3 โปรเจกต์นี้จะเชื่อมต่อไปยัง RESTful API เพื่อดึงอัตราแลกเปลี่ยนสดๆ มาแสดงผลบน จอ OLED ขนาด 128x64 ที่คอนทราสต์สูง มันสาธิตหลักการพื้นฐานทางวิศวกรรม IoT: การโต้ตอบระหว่างไคลเอนต์และเซิร์ฟเวอร์ผ่าน HTTP, การแยกวิเคราะห์ JSON แบบอะซิงโครนัส และ การจัดการพลังงานอย่างชาญฉลาด ผ่านโหมด "หลับ" ของจอแสดงผลที่ทำงานตามเวลา

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

  1. อัปเดตทุกวัน: ระบบดึงอัตราแลกเปลี่ยนล่าสุดจาก API ออนไลน์ทุก 24 ชั่วโมง รับรองว่าจอแสดงผลจะสดใหม่เสมอ
  2. หน้าจอ OLED: แสดงข้อมูลบนจอ OLED 128x64 ให้ภาพชัด อ่านง่าย ไม่ปวดตา
  3. ควบคุมด้วยปุ่ม: ผู้ใช้สามารถเลื่อนดูข้อมูลที่แสดงด้วยปุ่มกดจริงสองปุ่ม ทำให้การเรียกดูข้อมูลเป็นเรื่องง่ายๆ
  4. จัดการจออัตโนมัติ: เพื่อประหยัดพลังงาน จอจะปิดตัวเองหลังจากไม่มีการใช้งาน 5 นาที และจะเปิดกลับมาใหม่ทันทีเมื่อกดปุ่ม
  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:

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

  1. บอร์ดไมโครคอนโทรลเลอร์: เราใช้ XIAO ESP32-C3 ในโปรเจกต์นี้เพราะขนาดกะทัดรัด พอดีกับเซ็ตอัพของเรา แต่ว่า บอร์ด ESP32 ตัวไหนก็ได้ที่มี Wi-Fi (หมายเหตุ: ไม่ใช่ ESP8266 นะ) ก็ใช้กับโปรเจกต์นี้ได้
  2. OLED Display: จอ OLED ขนาด 128x64 (ใช้ร่วมกับไลบรารี Adafruit SSD1306 ได้)
  3. Push Buttons: ปุ่มกด 2 ปุ่มสำหรับโต้ตอบกับน้องๆ
  4. Jumper Wires: สายจัมเปอร์สำหรับต่อวงจร อย่าลืมเตรียมมาให้พอนะ
  5. Breadboard: ถ้ามีก็ดี จะได้ต่อวงจรสะดวกๆ ไม่ต้องบัดกรี
  6. Power Supply: แหล่งจ่ายไฟที่พอสำหรับเลี้ยง ESP32 กับจอ OLED ของเรา

ขั้นตอนประกอบและตั้งค่า:

  1. ต่อฮาร์ดแวร์:
    **จอ OLED:** ต่อจอ OLED เข้ากับ ESP32 ผ่านอินเทอร์เฟซ I2C ตรวจสอบให้ดีว่าเราต่อสายไฟ (VCC กับ GND) และสายข้อมูล (SDA กับ SCL) ถูกต้องแล้ว
    **ปุ่มกด:** ต่อปุ่มกดเข้ากับขา GPIO สองขาบน ESP32 โดยกำหนดให้ขา Digital Pin 2 เป็นปุ่มเลื่อนขึ้น และขา Digital Pin 3 เป็นปุ่มเลื่อนลง และอย่าลืมต่อลงกราวด์ (GND) ด้วย
  1. ความเข้ากันได้ของไลบรารี:
    **ติดตั้งไลบรารีที่จำเป็น:** ต้องลงไลบรารีเหล่านี้ใน Arduino IDE ก่อน ไม่งั้นโปรเจคไม่รันนะจ๊ะ:
    Adafruit SSD1306
    Adafruit GFX
    WiFi
    HTTPClient
  1. ตั้งค่า API:
    1. ขอ API Key มา:
      เราใช้บริการจาก **ExchangeRate-API** ในโปรเจคนี้ รุ่นพื้นฐานฟรีหมดจด ใช้ได้เดือนละ 1500 ครั้ง เพียงพอสำหรับเราแล้ว

      น้องจะใช้เว็บอื่นสำหรับอัตราแลกเปลี่ยนก็ได้ ขอแค่ให้ข้อมูลมาในรูปแบบที่เข้ากันได้ แต่ถ้าใช้เว็บอื่น ก็ต้องมาแกะโค้ดปรับกันหน่อยนะ

      เข้าไปที่เว็บไซต์ของ ExchangeRate-API
      กดที่ปุ่ม "Get Free Key."

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

  1. ดึง 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` ด้วยสกุลเงินฐานที่เราต้องการ
  1. ขั้นตอนสุดท้าย:
    1. อัปเดตข้อมูล Wi-Fi:
      หาบรรทัดเหล่านี้ในสเก็ตช์:
      #define WIFI_SSID "YOUR-SSID"
      #define WIFI_PASS "YOUR-PASSWORD"
      แทนที่ `YOUR-SSID` ด้วยชื่อเครือข่าย Wi-Fi ของเรา
      แทนที่ `YOUR-PASSWORD` ด้วยรหัสผ่าน Wi-Fi
    2. อัปโหลดสเก็ตช์:
      ต่อ ESP32 เข้ากับคอมด้วยสาย USB เลือกบอร์ดและพอร์ตที่ถูกต้องใน Arduino IDE แล้วอัปโหลดสเก็ตช์ได้เลย
    3. รันโปรเจค:
      พออัปโหลดเสร็จ ESP32 จะเชื่อมต่อกับ Wi-Fi, ดึงข้อมูลอัตราแลกเปลี่ยนจาก API และแสดงผลบนหน้าจอ OLED
      ใช้ปุ่มกดที่เราต่อไว้เพื่อเลื่อนดูข้อมูลต่างๆ ได้เลย ง่ายมั้ยล่า

ทำตามขั้นตอนเหล่านี้ให้ครบ น้องก็จะได้จอแสดงอัตราแลกเปลี่ยนที่เชื่อมต่อ 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:

  1. Setup and Initialization: ตอนเริ่มโปรเจค Arduino จะตั้งค่าการสื่อสารแบบ Serial และเตรียมจอ OLED ให้พร้อมใช้งาน รวมถึงตั้งค่าปุ่มกดสำหรับผู้ใช้ และตรวจสอบว่าจอแสดงผลทำงานถูกต้อง
  2. Data Retrieval: Arduino จะเชื่อมต่อกับเครือข่าย Wi-Fi และส่งคำขอ HTTP GET ไปดึงข้อมูลอัตราแลกเปลี่ยนจาก API ออนไลน์ โดยจะทำการดึงข้อมูลใหม่ทุกๆ 24 ชั่วโมงเพื่อให้มั่นใจว่าข้อมูลอัพเดทอยู่เสมอ
  3. Data Processing: เมื่อได้ข้อมูลมาแล้ว Arduino จะประมวลผลและจัดรูปแบบข้อมูล JSON ที่ได้รับมา ซึ่งรวมถึงการดึงข้อมูลที่เกี่ยวข้องและเตรียมมันให้พร้อมสำหรับแสดงผลบนหน้าจอ OLED
  4. Display Management: หน้าจอ OLED จะแสดงอัตราแลกเปลี่ยนและอนุญาตให้ผู้ใช้เลื่อนดูข้อมูลโดยใช้ปุ่มกด ถ้าไม่มีใครกดปุ่มเป็นเวลา 5 นาที หน้าจอจะปิดตัวเองอัตโนมัติเพื่อประหยัดพลังงาน และจะเปิดขึ้นมาใหม่เมื่อมีคนกดปุ่ม
  5. Error Handling: ระบบนี้มีการจัดการข้อผิดพลาดสำหรับปัญหาเครือข่ายและการดึงข้อมูลด้วย ถ้าเกิดข้อผิดพลาดขึ้น ข้อความที่เหมาะสมจะปรากฏบนหน้าจอ OLED และ Arduino จะพิมพ์รายละเอียดข้อผิดพลาดออกทาง Serial Monitor ให้ดู

Applications:

โปรเจคนี้เหมาะสุดๆ สำหรับการเรียนรู้เกี่ยวกับการแสดงผลข้อมูลแบบเรียลไทม์ การเชื่อมต่อเครือข่าย และการออกแบบอินเทอร์เฟซผู้ใช้ด้วย Arduino เหมาะสำหรับใช้ในการศึกษา โปรเจคของนักเล่น หรือใช้เป็นเครื่องมือจริงจังสำหรับตรวจสอบอัตราแลกเปลี่ยนเงินตราที่อัพเดททุกวัน

โปรเจคนี้เป็นโอเพ่นซอร์ส แก้ไขโค้ดและฮาร์ดแวร์ให้เข้ากับการใช้งานของตัวเองได้ตามสบายเลยนะ!


ติดตามตลาดโลกได้ตลอดเวลาด้วยแดชบอร์ด IoT ที่ออกแบบเองแบบช่างๆ

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

title: "จอ OLED ตึงๆ โชว์อัตราแลกเปลี่ยนแบบเรียลไทม์"
description: "มาสร้างจอแสดงผลอัตราแลกเปลี่ยนเงินตราแบบอัพเดทสดๆ ด้วย ESP32 กับจอ OLED วัยรุ่น งานง่ายแต่หล่อ! ระบบจะดึงข้อมูลล่าสุดจาก API ออนไลน์มาโชว์ให้ดูแบบจัดไปทุกวัน"
author: "nante"
category: "Screens & Displays"
tags:
  - "Data Collection"
  - "Internet Of Things"
  - "Tools"
views: 697
likes: 2
price: 699
difficulty: "Intermediate"
components:
  - "1x Solder Iron"
  - "1x cables"
  - "1x Seeed Studio XIAO ESP32C3"
  - "1x SSD1306 OLED Display"
  - "1x Push Button"
  - "1x PCB"
  - "1x ESP32 Wroom"
  - "1x Breadboard, Plastic"
tools: []
apps:
  - "1x arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/c1151822-3dd9-4e8c-bc7e-91ae452ad6bc.ino"
documentationLinks: []
passwordHash: "0a556d55c0eb0507b0b758f60c024b2dee07ad2661d46306b438be0bd08949a4"
encryptedPayload: "U2FsdGVkX1+x3MDxpSjjOboz8qCwDtircPtTnX24jmTmicvTRGyY5pTKlmz6vifMuWSA3NHyz2cjZN5g+Q5uTPn9a51vLPI8yLJwdZQQXaQ="
seoDescription: "Build a Real-time Exchange Rate Monitor with ESP32 and OLED. Get daily updates via API. Easy Arduino project for financial data tracking."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/oled-exchange-rate-monitor-ab782c_cover.png"
lang: "en"