Skip to content

ESP8266 – OLED

ESP8266 – OLED

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 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ơ, chính 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

Là màn hình loại nhỏ, kích thước tầm 0.96 inch cho tới 1.25 inch, được dùng khá rộng rãi trong các sản phẩm điện tử. Tấm nền được điều khiển bằng chip driver SSD1306. Chip này giao tiếp với các bộ điều khiển/MCU khác bằng giao tiếp LCD.

OLED SSD1306
Hình 1. OLED SSD1306

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).

i2cClock
Hình 2. I2C Clock
Mô hình mạng I2C
Hình 3. Mô hình mạng I2C

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 – D2 của ESP8266 với chân SDA của OLED, chân GPIO5 – D1 với SCL. Cấp nguồn 3v3 vào VCC và đấu GND cho OLED.

ESP8266 với OLED
Hình 4. NodeMCU với OLED

Bước 2: Cài đặt thư viện ESP8266 and ESP32 OLED driver for SSD1306 display

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();
}

Nạp chương trình cho board NodeMCU và xem kết quả hiển trị trên OLED.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *