ESP8266 Màn hình OLED SSD1309 128×64 | Hướng dẫn OLED I2C 2,42 inch
Hướng dẫn này sẽ chỉ cho bạn cách sử dụng ESP8266 với màn hình OLED I2C SSD1309 kích thước 2,42 inch (2,4") có độ phân giải 128×64. Cụ thể, chúng ta sẽ tìm hiểu:
- Cách kết nối màn hình OLED SSD1309 2,42 inch với ESP8266.
- Cách lập trình ESP8266 để hiển thị văn bản trên màn hình OLED SSD1309.
- Cách lập trình ESP8266 để vẽ hình trên OLED SSD1309.
- Cách bật cuộn phần cứng trên OLED SSD1309 với ESP8266.
- Cách lập trình ESP8266 để hiển thị hình bitmap trên OLED SSD1309.
- Cách điều chỉnh độ sáng và độ tương phản của OLED SSD1309.
- Cách sử dụng phông chữ bên ngoài với màn hình OLED SSD1309.

Phần cứng cần chuẩn bị
| 1 | × | ESP8266 NodeMCU ESP-12E | ||
| 1 | × | Recommended: ESP8266 NodeMCU ESP-12E (Uno-form) | ||
| 1 | × | USB Cable Type-A to Type-C (for USB-A PC) | ||
| 1 | × | USB Cable Type-C to Type-C (for USB-C PC) | ||
| 1 | × | SSD1309 I2C OLED Display 2.42 inch 128x64 | ||
| 1 | × | dây jumper | ||
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP8266 | ||
| 1 | × | (Khuyến nghị) Power Splitter for ESP8266 Type-C |
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Giới thiệu về Màn hình OLED SSD1309
SSD1309 là một chip điều khiển màn hình OLED đơn sắc. Phiên bản 2,42 inch cung cấp độ phân giải 128×64 pixel. Nó giao tiếp qua giao thức I2C, chỉ cần hai chân (SDA và SCL) cùng với các kết nối nguồn. Điều này làm cho nó lý tưởng cho các dự án ESP8266 có số chân hạn chế.
Các đặc điểm nổi bật của OLED SSD1309:
- Kích thước màn hình: 2.42 inch (đường chéo)
- Độ phân giải: 128×64 pixel
- Giao tiếp: I2C (giao diện 2 dây)
- Địa chỉ I2C mặc định: 0x3C
- Điện áp hoạt động: tương thích với 3.3V hoặc 5V (ESP8266 dùng 3.3V)
- Hỗ trợ cuộn phần cứng tích hợp
- Điều chỉnh độ tương phản/độ sáng
- Tiêu thụ điện năng thấp
Sơ đồ chân của màn hình OLED SSD1309
Mô-đun OLED I2C SSD1309 2,42 inch thường có 4 chân:
- GND: Chân đất - kết nối với GND của ESP8266
- VCC: Chân nguồn - kết nối với ESP8266 3.3V
- SDA: Dòng dữ liệu I2C - kết nối với ESP8266 D2 (GPIO4)
- SCL: Dòng xung nhịp I2C - kết nối với ESP8266 D1 (GPIO5)

※ Lưu ý:
- Các chân của một mô-đun OLED có thể khác nhau giữa các nhà sản xuất và loại mô-đun. Việc luôn tham khảo nhãn in trên mô-đun OLED là rất quan trọng. Chú ý!
- Hướng dẫn này sử dụng màn hình OLED có driver SSD1309 I2C. Chúng tôi đã thử nghiệm nó với màn hình OLED từ DIYables và nó hoạt động hoàn hảo.
Sơ đồ đấu dây
Kết nối màn hình OLED SSD1309 2,42 inch với ESP8266 theo sơ đồ đấu nối này:

This image is created using Fritzing. Click to enlarge image
Xem thêm Sơ đồ chân ESP8266 và Cách cấp nguồn cho ESP8266.
| SSD1309 OLED | ESP8266 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | D2 (GPIO4) |
| SCL | D1 (GPIO5) |
Cách sử dụng màn hình OLED SSD1309 với ESP8266
Cài đặt thư viện DIYables_OLED_SSD1309
- Nhấn vào biểu tượng Thư viện ở thanh điều hướng bên trái của Arduino IDE.
- Nhập DIYables_OLED_SSD1309 vào hộp tìm kiếm và tìm thư viện do DIYables cung cấp.
- Nhấn nút Cài đặt để thêm thư viện.

Thư viện DIYables_OLED_SSD1309 phụ thuộc vào thư viện Adafruit_GFX. Nếu Adafruit_GFX chưa được cài đặt, Arduino IDE sẽ tự động nhắc bạn cài đặt nó khi bạn cài đặt DIYables_OLED_SSD1309.
Mã ESP8266 - Hiển thị "Hello World" trên OLED SSD1309
Mã dưới đây cho thấy cách hiển thị văn bản trên màn hình OLED SSD1309 2,42 inch:
Giải thích
- Bao gồm các thư viện cần thiết và định nghĩa các hằng số
- Tạo đối tượng hiển thị với địa chỉ I2C 0x3C
- Khởi tạo màn hình trong setup()
- Thiết lập kích thước chữ, màu chữ và vị trí con trỏ
- In văn bản vào bộ đệm hiển thị bằng print() và println()
- Gọi display.display() để đẩy nội dung từ bộ đệm lên màn hình
※ Lưu ý:
Macro F() lưu trữ chuỗi ký tự trong bộ nhớ flash thay vì RAM. Điều này giúp tiết kiệm RAM quý giá trên ESP8266.
Mã ESP8266 - Hiển thị văn bản với các định dạng khác nhau
Đoạn mã này cho thấy việc hiển thị văn bản với các kích thước khác nhau và định dạng số:
Mã ESP8266 - Vẽ các hình dạng trên OLED SSD1309
Đoạn mã dưới đây cho thấy cách vẽ các điểm ảnh, các đường thẳng, hình chữ nhật, hình tròn và hình tam giác:
Các hàm vẽ có sẵn:
- drawPixel(x, y, color) - Vẽ một pixel đơn
- drawLine(x0, y0, x1, y1, color) - Vẽ một đường thẳng
- drawRect(x, y, w, h, color) - Vẽ viền hình chữ nhật
- fillRect(x, y, w, h, color) - Vẽ hình chữ nhật được tô đầy
- drawRoundRect(x, y, w, h, radius, color) - Vẽ hình chữ nhật bo tròn
- drawCircle(x, y, radius, color) - Vẽ đường viền hình tròn
- fillCircle(x, y, radius, color) - Vẽ hình tròn được tô đầy
- drawTriangle(x0, y0, x1, y1, x2, y2, color) - Vẽ đường viền tam giác
- fillTriangle(x0, y0, x1, y1, x2, y2, color) - Vẽ tam giác được tô đầy
Mã ESP8266 - Cuộn phần cứng trên OLED SSD1309
SSD1309 hỗ trợ cuộn dựa trên phần cứng. Mã này trình diễn cả bốn hướng cuộn:
Các chức năng cuộn:
- startscrollright(start, stop) - Cuộn sang phải
- startscrollleft(start, stop) - Cuộn sang trái
- startscrolldiagright(start, stop) - Cuộn chéo sang phải
- startscrolldiagleft(start, stop) - Cuộn chéo sang trái
- stopscroll() - Dừng cuộn
Các tham số bắt đầu và kết thúc xác định phạm vi trang (0x00 đến 0x07 cho chế độ toàn màn hình).
Mã ESP8266 - Hiển thị hình bitmap trên OLED SSD1309
Đoạn mã này cho thấy cách hiển thị các hình ảnh bitmap được lưu trong bộ nhớ chương trình:
Để hiển thị hình ảnh:
- Chuyển đổi hình ảnh của bạn thành một mảng bitmap đen trắng (sử dụng công cụ trực tuyến hoặc image2cpp)
- Lưu mảng vào PROGMEM để tiết kiệm RAM
- Sử dụng drawBitmap(x, y, bitmap, width, height, color) để hiển thị
Mã ESP8266 - Điều chỉnh Độ sáng/Độ tương phản
Điều khiển độ sáng và độ tương phản của màn hình OLED SSD1309:
Các chức năng điều khiển độ sáng:
- setContrast(value) - Thiết lập mức độ tương phản (0-255, lớn hơn = sáng hơn)
- dim(true/false) - Chuyển nhanh giữa chế độ mờ và độ sáng bình thường
- invertDisplay(true/false) - Đảo ngược mọi pixel (đen↔trắng)
Mã ESP8266 - Sử dụng phông chữ bên ngoài
Thư viện Adafruit_GFX bao gồm các kiểu chữ FreeFont. Mã này trình diễn ba phông chữ khác nhau:
※ Lưu ý:
Các tệp FreeFont có dung lượng lớn. ESP8266 có bộ nhớ flash hạn chế (thông thường là 4 MB). Chỉ sử dụng các phông chữ bạn cần, hoặc xem xét sử dụng kích thước phông chữ nhỏ hơn nếu bộ nhớ bị giới hạn.
Sử dụng phông chữ:
- Bao gồm tệp tiêu đề font: #include <Fonts/FreeSans9pt7b.h>
- Đặt phông chữ: display.setFont(&FreeSans9pt7b)
- Đặt lại về mặc định: display.setFont(NULL)
- Khi sử dụng phông chữ ngoài, tọa độ Y đại diện cho đường cơ sở, không phải đỉnh
Khắc phục sự cố
Nếu màn hình OLED không hoạt động, hãy thử các bước sau:
Kiểm tra địa chỉ I2C
Địa chỉ I2C mặc định là 0x3C, nhưng một số mô-đun sử dụng 0x3D. Chạy trình quét I2C này để tìm địa chỉ chính xác:
Please provide the English content inside the code block to translate to Vietnamese.
#include
void setup() {
Serial.begin(115200);
Wire.begin();
Serial.println("Máy quét I2C");
Số byte = 0;
for (byte i = 1; i < 127; i++) {
Wire.beginTransmission(i);
if (Wire.endTransmission() == 0) {
Serial.print("Đã tìm thấy thiết bị I2C tại 0x");
nếu (i < 16) Serial.print("0");
Serial.println(i, HEX);
đếm++;
}
}
Serial.print("Đã tìm thấy ");
Serial.print(count);
Serial.println(" thiết bị");
dấu ngoặc nhọn đóng
void loop() {}
Please provide the English content to translate into Vietnamese.
Nếu màn hình của bạn sử dụng 0x3D, hãy thay đổi SCREEN_ADDRESS thành 0x3D trong mã.
Kiểm tra dây điện
Kiểm tra kết nối:
- VCC → 3.3V (không phải 5V cho ESP8266)
- GND → GND
- SDA → D2 (GPIO4)
- SCL → D1 (GPIO5)
Kiểm tra nguồn điện
Hãy đảm bảo ESP8266 nhận đủ nguồn điện qua cáp USB hoặc nguồn cấp ngoài.