OLED I2C คืออะไร? วิธีใช้งานกับ Arduino
OLED (Organic Light-Emitting Diode) คือเทคโนโลยีจอแสดงผลที่แต่ละพิกเซลสามารถเปล่งแสงได้ด้วยตัวเอง โดยใช้หลอด LED ขนาดเล็กจำนวนมากในการสร้างภาพ ทำให้ไม่ต้องอาศัยไฟส่องสว่างจากด้านหลัง (Backlight) เหมือนจอ LCD ทั่วไป ผลลัพธ์ที่ได้คือภาพที่คมชัด มี Contrast สูง และประหยัดพลังงานกว่า
สำหรับงาน DIY กับ Arduino จอ OLED มักจะมาในรูปแบบโมดูลขนาดเล็ก (เช่น 0.96 นิ้ว หรือ 1.3 นิ้ว) และนิยมใช้การสื่อสารแบบ I2C (Inter-Integrated Circuit) ซึ่งใช้สายสัญญาณเพียง 2 เส้น (SDA และ SCL) ทำให้การต่อวงจรนั้นง่ายและประหยัดขาของไมโครคอนโทรลเลอร์อย่างมาก
สเปคของ OLED I2C Module (0.96 นิ้ว)
ขนาดจอ |
0.96 นิ้ว (หรือ 1.3 นิ้ว) |
ความละเอียด |
128x64 พิกเซล (หรือ 128x32) |
สีที่แสดง |
โมโนโครม (ส่วนใหญ่เป็นสีขาว, ฟ้า, หรือเหลือง) |
แรงดันไฟเลี้ยง |
3.3V – 5V (ใช้กับ Arduino ได้โดยตรง) |
โปรโตคอลสื่อสาร |
I2C (ขา SDA / SCL) |
ชิปควบคุมจอ |
SSD1306 (เป็นรุ่นที่นิยมที่สุด) |
จำนวนขา |
4 ขา: VCC, GND, SDA, SCL |
กระแสที่ใช้ |
น้อยมาก (ประมาณ 20mA) |
การใช้งานกับ Arduino
การเริ่มต้นใช้งานจอ OLED กับ Arduino มี 3 ขั้นตอนหลักๆ คือ ติดตั้งไลบรารี, ต่อสาย, และอัปโหลดโค้ด
✅ 1. การติดตั้งไลบรารี (Library Installation)
ก่อนจะเขียนโค้ดได้ เราต้องติดตั้งไลบรารีที่จำเป็นก่อนผ่านโปรแกรม Arduino IDE:
- ไปที่เมนู Tools > Manage Libraries...
- ในช่องค้นหา พิมพ์ "Adafruit SSD1306" แล้วกด Install
- โปรแกรมจะถามให้ติดตั้งไลบรารีที่เกี่ยวข้อง (Dependencies) คือ "Adafruit GFX Library" ให้กด Install all
✅ 2. การต่อสาย (กับ Arduino Uno/Nano)
ขาบนจอ OLED |
ต่อกับขาบน Arduino |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
(หมายเหตุ: หากใช้บอร์ดรุ่นอื่น เช่น ESP8266/ESP32 ตำแหน่งของขา SDA/SCL อาจแตกต่างออกไป กรุณาตรวจสอบ Pinout ของบอร์ดนั้นๆ)
✅ 3. ตัวอย่างโค้ดแสดงข้อความ
โค้ดนี้จะแสดงคำว่า "Hello!" บนจอ OLED:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// กำหนดขนาดจอ
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// สร้าง object ของจอ โดยระบุขนาดและขา I2C
// -1 หมายถึงใช้ขา Reset ของ Hardware
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
// เริ่มต้นการทำงานของจอ ที่ I2C address 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // วนลูปไม่รู้จบหากหาจอไม่เจอ
}
// ล้างค่าในหน้าจอ
display.clearDisplay();
// ตั้งค่าการแสดงผล
display.setTextSize(2); // ขนาดตัวอักษร
display.setTextColor(SSD1306_WHITE); // สีตัวอักษร
display.setCursor(0, 10); // ตำแหน่งเริ่มต้น (x, y)
// พิมพ์ข้อความลงใน buffer
display.println("Hello!");
// แสดงผลจาก buffer ออกมาที่หน้าจอจริง
display.display();
}
void loop() {
// ไม่ต้องทำอะไรใน loop เพราะข้อความจะค้างอยู่บนจอ
}
หมายเหตุ: I2C Address ของจอ OLED ส่วนใหญ่คือ 0x3C
แต่บางรุ่นอาจเป็น 0x3D
หากโค้ดไม่ทำงาน ให้ลองเปลี่ยนค่าในบรรทัด display.begin(...)
ดู
การประยุกต์ใช้งาน
- แสดงค่าที่อ่านได้จากเซนเซอร์ต่างๆ เช่น อุณหภูมิ, ความชื้น, คุณภาพอากาศ (ค่าฝุ่น PM2.5)
- ใช้เป็นหน้าจอสำหรับสร้างเมนู เพื่อควบคุมการทำงานของโปรเจกต์
- แสดงสถานะการทำงานของระบบ เช่น สถานะการเชื่อมต่อ Wi-Fi, IP Address, หรือข้อความแจ้งเตือน
- สร้างนาฬิกาดิจิทัล, ตัวนับเวลา, หรือสกอร์บอร์ดขนาดเล็ก
ข้อดีของ OLED I2C
-
ภาพคมชัดมาก: เนื่องจากแต่ละพิกเซลเปล่งแสงเอง ทำให้มี Contrast สูง ตัวหนังสือคมชัดแม้มองในที่มืด
-
ประหยัดพลังงาน: เพราะไม่ต้องใช้ไฟ Backlight เหมือนจอ LCD พิกเซลสีดำคือการ "ไม่เปล่งแสง" จึงกินไฟน้อยมาก
-
ใช้สายน้อย: การสื่อสารแบบ I2C ใช้เพียง 2 เส้น (SDA, SCL) ทำให้เหลือขา GPIO ของ Arduino ไปใช้งานกับอุปกรณ์อื่นได้อีกเยอะ