Arduino OLED
Màn hình OLED (Organic Light-Emitting Diode) là một sự thay thế cho màn hình LCD. OLED rất nhẹ, gần như siêu mỏng như giấy, linh hoạt, và mang lại hình ảnh sáng hơn và sắc nét hơn.
Trong hướng dẫn này, chúng ta sẽ học:
- Cách sử dụng màn hình OLED với Arduino.
- Cách hiển thị văn bản và số trên OLED bằng Arduino.
- Cách căn giữa theo chiều dọc và chiều ngang cho văn bản và số trên OLED.
- Cách vẽ trên OLED bằng Arduino.
- Cách hiển thị hình ảnh trên OLED bằng Arduino.
Phần cứng cần chuẩn bị
| 1 | × | Arduino Uno R3 | ||
| 1 | × | USB 2.0 cable type A/B (for USB-A PC) | ||
| 1 | × | USB 2.0 cable type C/B (for USB-C PC) | ||
| 1 | × | SSD1306 I2C OLED Display 128x64 | ||
| 1 | × | SSD1306 I2C OLED Display 128x32 | ||
| 1 | × | dây jumper | ||
| 1 | × | (Khuyến nghị) Screw Terminal Block Shield for Arduino Uno | ||
| 1 | × | (Khuyến nghị) Breadboard Shield for Arduino Uno | ||
| 1 | × | (Khuyến nghị) Enclosure for Arduino Uno | ||
| 1 | × | (Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO |
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về Màn hình OLED
Có nhiều loại màn hình OLED. Chúng khác nhau về giao diện truyền thông, kích thước và màu sắc:
- Giao diện truyền thông: I2C, SPI
- Kích thước: 128×64, 128×32...
- Màu sắc: trắng, xanh lam, hai màu...

SPI thường nhanh hơn I2C nhưng đòi hỏi nhiều chân Arduino hơn. Trong khi I2C chỉ cần hai chân và có thể được dùng chung với các thiết bị I2C khác. Đó là sự đánh đổi giữa số chân và tốc độ truyền thông. Lựa chọn thuộc về bạn. Đối với OLED có giao diện I2C, có nhiều loại driver như SSD1306 và SH1106. Bài hướng dẫn này sử dụng màn hình OLED I2C SSD1306 128x64 và 128x32.
Sơ đồ chân của màn hình OLED I2C
- Chân GND: nên được kết nối với đất của Arduino
- Chân VCC: là nguồn cấp điện cho màn hình, mà chúng ta kết nối với chân 5V trên Arduino.
- Chân SCL: là chân xung nhịp (clock) cho giao diện I2C.
- Chân SDA: là chân dữ liệu nối tiếp cho giao diện I2C.

※ Lưu ý:
- Thứ tự các chân của module OLED có thể khác nhau giữa các nhà sản xuất và loại module. LUÔN SỬ DỤNG NHÃN ĐƯỢC IN TRÊN MODULE OLED. NHÌN KỸ!
- Hướng dẫn này sử dụng màn hình OLED có driver I2C SSD1306. Chúng tôi đã thử nghiệm với màn hình OLED từ DIYables. Nó hoạt động mà không gặp bất kỳ vấn đề gì.
Sơ đồ đấu dây
- Sơ đồ đấu nối giữa Arduino và OLED 128×64

This image is created using Fritzing. Click to enlarge image
- Sơ đồ nối dây giữa Arduino và OLED 128x32

This image is created using Fritzing. Click to enlarge image
- Sơ đồ đấu nối thực tế giữa Arduino và OLED 128x64

This image is created using Fritzing. Click to enlarge image
- Sơ đồ đấu nối thực tế giữa Arduino và OLED 128x32

This image is created using Fritzing. Click to enlarge image
Nếu bạn sử dụng Arduino khác với Uno, các chân sẽ khác nhau. Tham khảo bảng dưới đây cho các loại Arduino khác.
| OLED Module | Arduino Uno, Nano | Arduino Mega |
|---|---|---|
| Vin | 5V | 5V |
| GND | GND | GND |
| SDA | A4 | 20 |
| SCL | A5 | 21 |
Cách Sử Dụng OLED với Arduino
Cài đặt thư viện SSD1306 OLED
- Đi tới biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
- Tìm kiếm “SSD1306”, sau đó tìm thư viện SSD1306 của Adafruit.
- Nhấn nút Cài đặt để cài đặt thư viện.

- Bạn sẽ được yêu cầu cài đặt thêm một số phụ thuộc thư viện khác.
- Nhấp vào nút Cài đặt Tất cả để cài đặt tất cả các phụ thuộc thư viện.

Cách lập trình cho OLED
- Bao gồm thư viện
- Định nghĩa kích thước màn hình nếu OLED 123×64
- Xác định kích thước màn hình nếu OLED 128x32
- Khai báo một đối tượng OLED SSD1306
- Trong hàm setup(), khởi tạo màn hình OLED
- Và sau đó bạn có thể hiển thị văn bản, hình ảnh, vẽ đường ...
※ Lưu ý:
Từ nay trở đi, tất cả các mã được cung cấp cho OLED 128x64, nhưng bạn có thể dễ dàng điều chỉnh cho OLED 128x32 bằng cách thay đổi kích thước màn hình và điều chỉnh tọa độ nếu cần.
Mã Arduino - Hiển thị văn bản trên OLED
Dưới đây là một số hàm mà bạn có thể sử dụng để hiển thị văn bản trên màn hình OLED:
- oled.clearDisplay(): tất cả các pixel đều tắt
- oled.drawPixel(x,y, color): vẽ một pixel tại tọa độ x, y
- oled.setTextSize(n): thiết lập kích thước chữ, hỗ trợ từ 1 đến 8
- oled.setCursor(x,y): thiết lập tọa độ để bắt đầu viết văn bản
- oled.setTextColor(WHITE): thiết lập màu chữ
- oled.setTextColor(BLACK, WHITE): thiết lập màu chữ và màu nền
- oled.println(“message”): in ra chuỗi ký tự
- oled.println(number): in ra một số
- oled.println(number, HEX): in ra một số ở định dạng HEX
- oled.display(): gọi phương thức này để các thay đổi có hiệu lực
- oled.startscrollright(start, stop): cuộn chữ từ trái sang phải
- oled.startscrollleft(start, stop): cuộn chữ từ phải sang trái
- oled.startscrolldiagright(start, stop): cuộn chữ từ góc dưới bên trái đến góc trên bên phải
- oled.startscrolldiagleft(start, stop): cuộn chữ từ góc dưới bên phải đến góc trên bên trái
- oled.stopscroll(): dừng cuộn
Cách căn giữa theo chiều dọc và chiều ngang cho văn bản và số trên OLED
Mã Arduino - Vẽ trên OLED
Mã Arduino – Hiển thị hình ảnh
Để hiển thị hình ảnh trên màn hình OLED, trước tiên chúng ta phải chuyển đổi hình ảnh (ở bất kỳ định dạng nào) thành mảng bitmap. Việc chuyển đổi có thể được thực hiện bằng công cụ trực tuyến này (https://newbiely.com/online-tool/image-to-bitmap-converter). Hãy xem cách chuyển đổi hình ảnh thành mảng bitmap trong hình dưới đây. Tôi đã chuyển biểu tượng Arduino thành mảng bitmap.

Sau khi chuyển đổi, sao chép mã mảng và cập nhật mã mảng trong mảng ArduinoIcon ở đoạn mã bên dưới.
※ Lưu ý:
- Kích thước ảnh nên nhỏ hơn hoặc bằng kích thước màn hình.
- Nếu bạn muốn thích nghi mã ở trên với OLED 128x32, bạn cần điều chỉnh kích thước ảnh và thay đổi chiều rộng/chiều cao trong hàm oled.drawBitmap();
Khắc phục sự cố OLED
Nếu màn hình OLED không hiển thị gì cả, vui lòng thực hiện danh sách kiểm tra sau:
- đảm bảo rằng việc nối dây của bạn đúng.
- đảm bảo OLED I2C của bạn sử dụng trình điều khiển SSD1306.
- Kiểm tra địa chỉ I2C của OLED bằng cách chạy mã quét địa chỉ I2C dưới đây trên Arduino.
Kết quả trên Serial Monitor: