A 0.91" OLED หน้าจอ เป็นหน้าจอขนาดเล็กที่มีคอนทราสต์สูง เหมาะอย่างยิ่งสำหรับ การแสดงข้อความ กราฟิก และข้อมูลจากเซ็นเซอร์ ในโปรเจกต์ Arduino. คู่มือนี้จะพาคุณทำตามขั้นตอน การเดินสายไฟ, การเขียนโค้ด, และการแสดงผลข้อความและกราฟิก โดยใช้ โมดูล OLED ที่ใช้ไดรเวอร์ SSD1306 กับ Arduino.
1. สิ่งที่คุณต้องมี
✅ บอร์ด Arduino (Uno, Mega, Nano, ฯลฯ)
✅ 0.91" OLED จอแสดงผล (SSD1306, I2C)
✅ สายจัมเปอร์
✅ ติดตั้ง Arduino IDE แล้ว
🔹 หมายเหตุ: บทแนะนำนี้มุ่งเน้นที่ การสื่อสาร I2C, ซึ่งใช้เพียง สายสองเส้น (SDA & SCL), ทำให้เหมาะอย่างยิ่งสำหรับโปรเจกต์ง่ายๆ.
2. การเดินสายไฟ 0.91" OLED ไปยัง Arduino (โหมด I2C)
| ขาจอแสดงผล OLED | พิน Arduino Uno | ขา Arduino Nano |
|---|---|---|
| VCC | 5V | 5V |
| GND | GND | GND |
| SDA | A4 (SDA) | A4 (SDA) |
| SCL | A5 (SCL) | A5 (SCL) |
🔹 สำหรับ Arduino Mega: ใช้ SDA (ขา 20) และ SCL (ขา 21).
3. การติดตั้งไลบรารีที่จำเป็น
ก่อนเริ่มเขียนโค้ด ให้ติดตั้ง Adafruit SSD1306 และ Adafruit GFX ไลบรารี:
- เปิด Arduino IDE.
- ไปที่ สเก็ตช์ → รวมไลบรารี → จัดการไลบรารี.
- ค้นหา Adafruit SSD1306 และติดตั้งมัน.
- ค้นหา Adafruit GFX และติดตั้งมัน.
4. โค้ดพื้นฐานสำหรับแสดงข้อความบน OLED
ตัวอย่างนี้เริ่มต้นการทำงานของ OLED และแสดงผล "สวัสดี, Arduino!".
#include
#include
#include
// Define OLED screen size
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
// Initialize OLED display (I2C address 0x3C)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
// Start OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 allocation failed");
for (;;);
}
display.clearDisplay(); // Clear buffer
display.setTextSize(1); // Text size
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 10);
display.println("Hello, Arduino!");
display.display(); // Show text on screen
}
void loop() {
// Nothing here (text is static)
}
🔹 โค้ดนี้ทำอะไร:
✔ เริ่มต้นการ จอแสดงผล SSD1306.
✔ พิมพ์ "สวัสดี, Arduino!" บนหน้าจอ.
✔ การใช้งาน ที่อยู่ I2C 0x3C (บางโมดูลอาจใช้ 0x3D).
5. การแสดงผลกราฟิก (เส้น, วงกลม, รูปภาพ)
เพื่อวาด รูปทรง, แก้ไขโค้ดโดยใช้ ฟังก์ชันของ Adafruit GFX.
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
// Draw a rectangle
display.drawRect(10, 10, 50, 20, SSD1306_WHITE);
// Draw a filled circle
display.fillCircle(90, 16, 10, SSD1306_WHITE);
display.display();
}
void loop() {}
🔹 ฟังก์ชันวาดภาพอื่น ๆ:
✔ display.drawLine(x1, y1, x2, y2, color); → วาดเส้น
✔ display.drawCircle(x, y, radius, color); → วาดวงกลม
✔ display.drawRect(x, y, width, height, color); → วาดสี่เหลี่ยมผืนผ้า
6. ตัวอย่างข้อความเลื่อน
ตัวอย่างนี้เลื่อนข้อความ ตามแนวนอน ทั่วทั้งหน้าจอ OLED.
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 10);
display.println("Scrolling Text...");
display.display();
// Start scrolling
display.startscrollleft(0x00, 0x0F);
}
void loop() {}
🔹 ฟังก์ชันการเลื่อน:
✔ display.startscrollleft(start, stop); → เลื่อนข้อความ ซ้าย
✔ display.startscrollright(start, stop); → เลื่อนข้อความ ถูกต้อง
✔ display.stopscroll(); → หยุดการเลื่อน
7. เคล็ดลับการแก้ไขปัญหา
ปัญหา: หน้าจอไม่แสดงอะไรเลย
✅ ตรวจสอบ การเดินสาย (เชื่อมต่อ SDA & SCL อย่างถูกต้อง).
✅ ตรวจสอบให้แน่ใจว่า ที่อยู่ I2C ของ OLED คือ 0x3C (หรือลอง 0x3D).
✅ ใช้ สแกนเนอร์ I2C เพื่อตรวจจับอุปกรณ์:
#include
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("Scanning...");
for (byte address = 8; address < 120; address++) {
Wire.beginTransmission(address);
if (Wire.endTransmission() == 0) {
Serial.print("Found I2C device at 0x");
Serial.println(address, HEX);
}
}
}
void loop() {}
ปัญหา: ข้อความมีขนาดเล็กเกินไปหรือใหญ่เกินไป.
✅ ปรับ display.setTextSize(1); (เพิ่มเพื่อให้ข้อความใหญ่ขึ้น).
8. การประยุกต์ใช้ในทางปฏิบัติ
✔ การแสดงข้อมูลเซ็นเซอร์ – แสดงการอ่านค่าแบบเรียลไทม์จาก DHT11, BMP280, ฯลฯ
✔ จอแสดงผลนาฬิกา – ใช้ร่วมกับ DS3231 โมดูล RTC เพื่อทำนาฬิกาดิจิทัล.
✔ ระบบเมนู – ใช้ปุ่มเพื่อนำทางผ่านเมนู.
✔ ตัวบ่งชี้แรงดันแบตเตอรี่ – ตรวจสอบระดับพลังงานในโปรเจกต์แบบพกพา.
9. บทสรุป
การใช้ 0.91" OLED กับ Arduino เป็นวิธีที่ยอดเยี่ยมในการเพิ่ม เอาต์พุตแบบภาพ ไปยังโปรเจ็กต์ของคุณ ไม่ว่าคุณต้องการจะแสดง ข้อความ, กราฟิก, หรือข้อมูลเซ็นเซอร์, หน้าจอขนาดเล็กนี้มอบ คอนทราสต์สูงและใช้พลังงานต่ำ.




1 ความคิดเห็น
Sres. buenas noches, gracias a su amables enseñanzas al menos yo he podido programar mis arduinos para escribir en pantallas OLED.
Ahora se me presenta otro reto, programar un arduino nano V3.0 con pantalla OLED 128 × 32 integrada, seria que nos ayudara si es que tienen el IDE para hacerlo?
Saludos afectuosos desde México.
Atte Fernando Soriano López