อัน จอแสดงผล OLED 0.91 " เป็นหน้าจอขนาดเล็กที่มีความคมชัดสูงเหมาะสำหรับ การแสดงข้อมูลข้อความกราฟิกและเซ็นเซอร์ ในโครงการ Arduino คู่มือนี้จะนำคุณผ่าน การเดินสายการเข้ารหัสและการแสดงข้อความและกราฟิก ใช้ โมดูล OLED ที่ใช้ SSD1306 กับ Arduino
1. สิ่งที่คุณต้องการ
✅ บอร์ด Arduino (uno, mega, nano ฯลฯ )
✅ จอแสดงผล OLED 0.91 "(SSD1306, I2C)
✅ สายจัมเปอร์
✅ Arduino IDE ติดตั้ง
🔹 บันทึก: บทช่วยสอนนี้มุ่งเน้นไปที่ การสื่อสาร i2cซึ่งใช้เท่านั้น สองสาย (SDA & SCL)ทำให้เหมาะสำหรับโครงการที่เรียบง่าย
2. การเดินสายไฟ 0.91 "OLED ไปยัง Arduino (โหมด I2C)
PIN หน้าจอ OLED | Arduino uno pin | Arduino Nano Pin |
---|---|---|
VCC | 5V | 5V |
gnd | gnd | gnd |
SDA | A4 (SDA) | A4 (SDA) |
SCL | A5 (SCL) | A5 (SCL) |
🔹 สำหรับ Arduino Mega: ใช้ SDA (PIN 20) และ SCL (PIN 21).
3. การติดตั้งไลบรารีที่จำเป็น
ก่อนการเข้ารหัสให้ติดตั้งไฟล์ Adafruit SSD1306 และ Adafruit GFX ห้องสมุด:
- เปิด Arduino ide.
- ไป ร่าง→รวมไลบรารี→จัดการไลบรารี.
- ค้นหา Adafruit SSD1306 และติดตั้ง
- ค้นหา Adafruit GFX และติดตั้ง
4. รหัสพื้นฐานเพื่อแสดงข้อความบน OLED
ตัวอย่างนี้เริ่มต้น OLED และจอแสดงผล "สวัสดี Arduino!".
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// 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 อย่างถูกต้อง).
✅ ตรวจสอบให้แน่ใจว่า ที่อยู่ OLED I2C คือ 0x3c (หรือลอง 0x3d).
✅ ใช้ สแกนเนอร์ i2c เพื่อตรวจจับอุปกรณ์:
#include <Wire.h>
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 เป็นวิธีที่ดีในการเพิ่ม เอาต์พุตภาพ ไปยังโครงการของคุณ ไม่ว่าคุณต้องการแสดง ข้อมูลข้อความกราฟิกหรือเซ็นเซอร์หน้าจอขนาดเล็กนี้มี ความคมชัดสูงและการใช้พลังงานต่ำ.