Màn hình OLED 0.96 là một màn hình đang được sử dụng khá nhiều vì sự tiện lợi của chúng. Trong nội dung bài viết hôm nay, mình sẽ hướng dẫn các bạn cách để giả lập một đồng hồ trên OLED 0.96 và NodeMCU ESP8266. Cách ESP8266 kết nối màn hình OLED.
Mục lục
Tổng quan về màn hình OLED
OLED (Organic Light Emitting Diode) là loại màn hình hiển thị bao gồm một lớp vật liệu hữu cơ với chủ yếu là cacbon nằm giữa hai điện cực anot và catot. Chúng sẽ tự động phát sáng mỗi khi có dòng điện chạy qua. OLED sử dụng đi-ốt phát quang hữu cơ, vì thế nó không cần tới đèn nền chiếu sáng, do đó có lợi thế về kích thước cũng như tiết kiệm điện hơn so với các loại LCD. Và độ sáng tương đối tốt ở môi trường sáng tự nhiên.
Màn hình OLED SSD1306 sử dụng chuẩn giao tiếp bằng I2C, vì thế việc giao tiếp một cách dễ dàng và ổn định. Màn hình cho khả năng hiển thị đẹp, sang trọng, rõ nét và khả năng tiết kiệm pin rất tốt.

Giao tiếp I2C
I2C (Inter-Integrated Circuit) là một loại bus nối tiếp được phát triển bởi hãng Philips nhằm truyền nhận dữ liệu giữa các IC. I2C sử dụng 2 đường truyền tín hiệu, 1 đường xung nhịp đồng hồ (SCL) do Master phát đi và 1 đường truyền dữ liệu theo 2 hướng (SDA)


Mạch vật lý I2C là mạch cực thu hở, do đó để mạng I2C có thể hoạt động được, cần tối thiểu 2 cặp điện trở pull-up như trên hình. Thông thường 4k7, hoặc 1k2. Tùy thuộc vào tốc độ truyền và khoảng cách truyền.
Hiển thị màn hình OLED với ESP8266
Bước 1: Đấu nối
Nối chân GPIO4 của ESP8266 với chân SDA của OLED, chân GPIO5 với SCL. Cấp nguồn 3v3 vào VCC và đấu GND cho OLED. Tuy nhiên với board ESP8266 IoT Uno thì phần đấu nối đã ra sẵn header, bạn chỉ cần cắm OLED vào như hình

Bước 2: Cài đặt thư viện
ESP8266 and ESP32 OLED driver for SSD1306 display
, xem thêm Cài đặt thư viện Arduino
Bước 3: Lập trình
Chúng ta sẽ thực hiện hiển thị giả lập đồng hồ trên màn hình OLED.
#include <Wire.h>
#include "SSD1306.h"
SSD1306 display(0x3c, 4, 5);
int thoi_gian = 0;
void setup()
{
Serial.begin(115200);
display.init();
//display.flipScreenVertically(); //đảo chiều
display.setFont(ArialMT_Plain_10);
display.drawString(0, 0, "Hello world");
display.display();
delay(1000);
display.clear();
}
void loop()
{
int gio, phut, giay;
delay(1000);
thoi_gian ++;
gio = thoi_gian/3600;
phut = (thoi_gian%3600)/60;
giay = thoi_gian % 60;
display.clear();
display.drawString(0, 0, String(gio) + ":" + String(phut) + ":" + String(giay));
display.display();
}
Tổng kết
Thông qua các ví dụ mẫu về điều khiển đèn LED, nút nhấn và OLED, chúng ta có thể triển khai thêm nhiều ví dụ khác sử dụng GPIO của ESP8266. Để hiểu rõ hơn về cách làm việc của Arduino IDE, cách nạp chương trình, sử dụng thư viện …
Xem thêm: ESP8266/ESP32 đọc cảm biến DHT11 và gửi về Server