ข้ามไปที่เนื้อหา

OLED Display (SSD1306 / SH1106)

พื้นฐานการสื่อสาร

จอ OLED ส่วนใหญ่เชื่อมต่อผ่าน โปรโตคอล I2C ควรศึกษาการตั้งค่า Address และการเดินสายสัญญาณเบื้องต้น

OLED Display

📋 ภาพรวม

จอ OLED (Organic Light-Emitting Diode) ขนาด 0.96 นิ้ว หรือ 1.3 นิ้ว เป็นที่นิยมมากเพราะให้ภาพที่คมชัด ประหยัดพลังงาน และสามารถวาดรูปหรือแสดงกราฟิกได้ โดยเชื่อมต่อผ่านโปรโตคอล I2C

ขนาดที่พบบ่อย

  • 128 x 64 px: ความละเอียดมาตรฐาน
  • 128 x 32 px: ทรงผอมกะทัดรัด

🔌 การต่อสาย (I2C)

OLED Module        Arduino Uno
───────────        ───────────
VCC          →     3.3V หรือ 5V
GND          →     GND
SCL          →     A5
SDA          →     A4
OLED Module        ESP32
───────────        ─────
VCC          →     3.3V
GND          →     GND
SCL          →     GPIO 22
SDA          →     GPIO 21

💻 โค้ดตัวอย่าง

แนะนำให้ใช้ Library: Adafruit SSD1306 และ Adafruit GFX

Arduino / ESP32

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // ความกว้างจอ
#define SCREEN_HEIGHT 64 // ความสูงจอ

// ประกาศตัวแปรหน้าจอ
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);

  // เริ่มต้นหน้าจอที่ Address 0x3C
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }

  display.clearDisplay();     // ลบภาพในบัฟเฟอร์
  display.setTextSize(1);      // ขนาดตัวอักษร 1
  display.setTextColor(WHITE); // สีตัวอักษร
  display.setCursor(0, 10);    // ตำแหน่งเริ่มเขียน
  display.println("OLED TESTING...");
  display.println("GhostMicro DIY");
  display.display();           // สั่งให้จอแสดงผลข้อมูลจากบัฟเฟอร์
}

void loop() {
}

🛠️ โปรเจค DIY

1. นาฬิกาตั้งโต๊ะดิจิทัล

ใช้ร่วมกับโมดูล DS3231 (RTC) เพื่อแสดงเวลาและวันที่ที่แม่นยำ

2. จอแสดงกราฟระดับสัญญาน (Signal Monitor)

วาดเส้นกราฟ (Line, Bar) เพื่อแสดงการเปลี่ยนแปลงของค่าเซ็นเซอร์ เช่น ความเข้มแสง หรือระดับเสียง

⚠️ ข้อควรระวัง

ต้องสั่ง display.display()

Adafruit Library จะเก็บข้อมูลไว้ใน Buffer ใน Memory ก่อน ข้อมูลจะไม่ปรากฏบนจอจนกว่าคุณจะใช้คำสั่ง display.display()

การแสดงภาษาไทย

จอ OLED แบบนี้ไม่ได้รองรับภาษาไทยโดยตรง หากต้องการแสดงภาษาไทยต้องใช้ Library เสริม เช่น U8g2 หรือแปลงฟอนต์เป็น Bitmap รูปภาพ