Giới thiệu màn hình OLED 0.96 inch I2C

Xin chào mọi người! Hôm nay chúng ta sẽ cùng review cái màn hình oled 0.96in giao tiếp i2c này nha. Nhưng trước hết, ta hãy xem thử Oled là gì nha.

Màn hình OLED là gì?

OLED (viết tắt bởi Organic Light Emitting Diode: Diode phát sáng hữu cơ) đang trở thành đối thủ cạnh tranh cũng như ứng cử viên sáng giá thay thể màn hình LCD.

Màn hình OLED gồm những lớp như tấm nền, Anode, lớp hữu cơ, cathode. Và phát ra ánh sáng theo cách tương tự như đèn LED. Quá trình trên được gọi là phát lân quang điện tử.

Những ưu điểm có thể kể đến trên màn hình OLED là những lớp hữu cơ nhựa mỏng, nhẹ mềm dẻo hơn những lớp tinh thể trên LED hay LCD nhờ vậy mà có thể ứng dụng OLED để chế tạo màn hình gập cuộn được. Độ sáng của OLED cũng tốt hơn LED và không cần đèn nền như trên LCD nên sử dụng pin ít hơn. Góc nhìn cũng cài thiện hơn những công nghệ tiền nhiệm, khoảng 170 độ.

Nhược điểm có thể kể tới là tuổi thọ màn này khá thấp, giá thành sản xuất cao và rất dễ hỏng khi gặp nước. Nên dễ hiểu màn hình này chưa được ứng dụng nhiều.

Thông số kĩ thuật màn hình OLED 0.96inch I2C

  • Điện ấp sử dụng: 3V3 đến 5V (DC)
  • Công suất tiêu thụ: 0.04W
  • Góc hiển thị: Lớn hơn 160 độ (Em chưa hiểu chỗ này, bác nào giải thích hộ)
  • Độ phân giải: 128X64 pixel (Điểm ảnh)
  • Độ rộng màn hình: 0.96inch
  • Giao tiếp: I2C
  • Màu: Trắng và Đen
  • Driver: SSD1306

Sơ đồ nối chân

VCC 3V3 đến 5V
GND GND
SCL Xung clock - A5
SDA Truyền dữ liệu - A4

Code lập trình

Sau khi tham khảo qua một số thư viện arduino cho OLED này, mình thấy rằng thư viện này dễ tiếp cận nhất nên giới thiệu các bạn. Tải thư viện tại đây

Tải về, giải nén paste vào thư mục libraries của thư mục cài đặt arudino

Sau đây mình xin giới thiệu một số câu lệnh cơ bản của thư viện,

  •  *.init(0x3C);
    • Khởi động oled với địa chỉ i2c đó, loại mình đang đề cập có địa chỉ đó.
  • *.display();
    • Bắt đầu vẽ lên màn hình
  • *.clearDisplay();
    • Xóa hết màn hình
  • *.clearArea(x,y,w,h);
    • Xóa một vùng nào đó. x,y là tọa độ điểm bắt đầu của vùng đó (đỉnh trên cùng bên trái), w và h là chiều dài và cao của vùng cần xóa.
  • *.setCursor(x,y);
    • Đưa điểm bắt đầu vẽ lên màn hình tới x,y
  • *.setBrightness(brightness);
    • Chỉnh độ sáng của oled, 0->255
  • *.setTextSize(s);
    • Chỉnh size chữ, mặc định không dùng lệnh thì s=1.
  • *.setTextColor(c);

Hoặc

  • *.setTextColor(c,bg);
    • c là màu chữ, WHITE(1) hoặc BLACK(0)
    • bg là màu nền, WHITE(1) hoặc BLACK(0)
    • Nếu chỉ điền c thì bg tự động chỉnh ngược với c.
  • *.setRotation(r);
    • r nhập từ 0 đến 3. Bạn xem hình bên dưới sẽ hiểu, cái này khó giải thích.

image

  • *.getRotation();
    • Trả về giá trị từ 0-3 cho biến gán vào hàm này.
  • *.width();
    • Trả về giá trị chiều dài màn hình cho biến gán vào hàm này. Đối với loại này thì là 128.
  • *.height();
    • Trả về giá trị chiều dài màn hình cho biến gán vào hàm này. Đối với loại này thì là 64.
  • *.print();
  • *.println();
    • Hai hàm này giống trong serial, lưu ý: Sau hai hàm này phải thêm lệnh *.display(); để màn hình hiển thị.
  • *.drawPixel(x,y,c);
    • Vẽ 1 điểm tại x,y với c là màu của điểm (WHITE hoặc BLACK)
  • *.drawChar(x,y,char,color,bg,size);
    • Vẽ một kí tự
      • x, y: tọa độ điểm vẽ
      • char: kí tự cần vẽ
      • color: Màu kí tự (WHITE hoặc BLACK)
      • bg: Màu nền CỦA kí tự (WHITE hoặc BLACK)
      • size: Kích cỡ kí tự (Kích cỡ kí tự bằng (sizex5pixel) X (sizex7pixel))

 

Size kí tự là 1

Demo

  • *.drawLine(x0,y0,x1,y1,c);
  • *.drawFastHLine(x,y,w,c);
  • *.drawFastVLine(x,y,h,c);
    • Hàm 1 vẽ 1 đường thẳng từ (x0,y0) tới (x1,y1) với màu c (WHITE hoặc BLACK)
    • Hàm 2 vẽ 1 đường thẳng nằm ngang dài w tính từ điểm (x,y) sang bên phải với màu c (WHITE hoặc BLACK)
    • Hàm 3 vẽ 1 đường thẳng nằm dọc dài h tính từ điểm (x,y) xuống dưới với màu c (WHITE hoặc BLACK)

Demo

  • *.drawRect(x,y,w,h,c);
  • *.fillRect(x,y,w,h,c);
    • Hàm 1 cẽ 1 hình chữ nhật chỉ có viền
    • Hàm 2 vẽ 1 hình chữ nhật có viền và màu trong phần viền
    • (x,y) tọa độ điểm bắt đầu (Đỉnh trên cùng bên trái hình chữ nhật)
    • w,h chiều dài và rộng của hình chữ nhật
    • c là màu

Demo

  • *.drawRoundRect(x,y,w,h,radius,c);
  • *.fillRoundRect(x,y,w,h,radius,c);
    • 2 Hàm vẽ hình chữ nhật có đỉnh vo tròn, các tham số giống với hình chữ nhật chỉ có thêm radius là bán kính của phần tròn tại đỉnh.
    • Giải thích lằng nhằng, các bạn xem hình nha

  • *.drawTriangle(x0,y0,x1,y1,x2,y2,c);
  • *.fillTriangle(x0,y0,x1,y1,x2,y2,c);
    • Hai hàm vẽ hình tam giác
    • (x0,y0),(x1,y1),(x2,y2) là tọa độ 3 đỉnh tam giác
    • c là màu (WHITE hoặc BLACK)

Demo

  • *.drawCircle(x0,y0,r,c);
  • *.fillCircle(x0,y0,r,c);
    • Hai hàm vẽ hình tròn
    • x0,y0 là tọa độ tâm
    • r là bán kính
    • c là màu

Demo

  • *.drawBitmap(x,y,bitmap,w,h,c);
    • Vẽ 1 ảnh có sẵn được chuyển sang bitmap
    • (x,y) là tọa độ điểm bắt đầu
    • bitmap là tên biến chứa ma trận bitmap
    • w,h là chiều dài và rộng của ảnh
    • c là màu

Cách tạo file ma trận bitmap

Bước 1: Dùng Paint resize lại ảnh có kích thước phù hợp (Nhỏ hơn 128X64) và lưu lại với định dạng file giống hình

Bước 2: Tải phần mềm LCD assistant và mở nó lên

Bước 3: File>Load Image và chọn ảnh vừa resize

Bước 4: File>Save output và điền tên để lưu lại

Bước 5: Mở file vừa lưu bằng Notepad

Bước 6: Copy phần biến const unsigned char bitmap và paste vô file sketch arduino để lập trình. Lưu ý: Bạn phải thêm dòng lệnh "#include <avr/pgmspace.h>" để khai báo thư viện avr/pgmspace thì mới dùng bitmap được nha.

Demo

Cuối cùng mình xin đưa ra 1 ví dụ cho code lập trình con này nha

Kết luận

Như vậy là chúng ta đã vừa tìm hiểu xong màn hình oled 0.96inch i2c rồi. Với con oled này thì chúng ta có thể dùng tròn các dự án mini tiết kiệm diện tích và điện năng như đồng hồ,..v...v....Chúc các bạn sáng tạo và lập trình thật vui vẻ.

lên
7 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Sự khác biệt giữa vi xử lý và vi điều khiển

Chào! Hôm nay mình sẽ giúp các bạn tìm hiểu sự khác biệt giữa vi điều khiển (VĐK) và vi xử lí (VXL). Để từ đó ta sẽ có cái nhìn tổng quát về 2 loại vi mạch này. Không dài dòng nữa, zô luôn nha.

lên
33 thành viên đã đánh giá bài viết này hữu ích.

Tự làm Xe điều khiển từ xa bằng Remote TV - Điều khiển xe bằng Hồng Ngoại khó hay dễ?

Đây là bài viết đầu tiên của mình nên có sai sót gì mong mọi người đóng góp. Vào vấn đề thôi ! Hiện nay, trên cộng đồng của mình đã có bài viết hướng dẫn làm xe điều khiển với cách điều khiển là dùng sóng nrf hoặc sóng bluetooth. Hôm trước mình đọc bình luận của một bạn, bạn ấy nói rằng bạn chỉ có 1 con arduino và cũng không có sờ-mát-phôn(Mình cũng thế :D), nên không thể sử dụng 2 cách điều khiển trên. Vì vậy hôm nay mình xin viết bài viết hướng dẫn làm xe điều khiển bằng remote TV (Nói chính xác hơn là bằng tín hiệu hồng ngoại) nhằm giúp cho các bạn có số phận như mình và bạn ấy.

lên
29 thành viên đã đánh giá bài viết này hữu ích.