Oled là gì? Cách sử dụng OLED với ESP32

Bài viết này sẽ hướng dẫn các bạn cách cách hiển thị lên SSD1306 OLED Arduino bằng cách sử dụng Arduino IDE. Chúng tôi sẽ trình bày về cách viết một đoạn text, chỉnh phông chữ, vẽ hình khối và hiển thị hình ảnh bitmaps trên đó.

Giới thiệu về màn hình OLED Arduino:

Màn hình Oled Arduino

Màn hình Oled 0.96 inch giao tiếp I2C cho khả năng hiển thị đẹp, sang trọng, rõ nét vào ban ngày và khả năng tiết kiệm năng lượng tối đa với mức chi phí phù hợp, màn hình sử dụng giao tiếp I2C cho chất lượng đường truyền ổn định và rất dễ giao tiếp chỉ với 2 chân GPIO.

Thông số kỹ thuật:

  • Hỗ trợ cả 3.3V và 5V
  • Số điểm hiển thị: 128×64 điểm.
  • Độ rộng màn hình: 0.96 inch
  • Màu hiển thị: Trắng / Xanh Dương.
  • Giao tiếp: I2C
  • Driver: SSD1306
  • Tương thích với chuẩn cắm plug & play 4 pin Blocky Piece

CÁC THIẾT BỊ CẦN CÓ:

KẾT NỐI PHẦN CỨNG

Màn hình oled Arduino có nhiều loại và có 2 chuẩn kết nối chính là SPI và I2C. Màn hình Oled chúng ta sử dụng trong bài này sử dụng giao thức I2C bao gồm 2 dây là SCL và SDA. 

Kết nối như sau:

Kết nối màn hình Oled Arduino vào Node Wifi 32
Kết nối màn hình Oled Arduino và Board mạch Node Wifi 32

CÀI ĐẶT THƯ VIỆN:

Cài đặt thư viện OLED: chúng tôi sử dụng bộ thư viện SSD1306 library của Adafruit.  

Sau khi cài xong thư viện SSD1306 chúng ta cài tiếp thư viện GFX.

Cài thư viện GFX

Test hiển thị Oled Arduino với Node Wifi32:

Trong Arduino IDE, vào File > Examples > Adafruit SSD1306 và chọn ví dụ như hình:

Test hiển thị Oled Arduino

Nếu như Oled Arduino không có chân Reset thì bạn nên chỉnh giá trị OLED_RESET bằng -1 như bên dưới:

Code điều chỉnh giá trị Oled Reset

Biên dịch và nạp code, kết quả hiển thị trên Oled Arduino sẽ được như sau:

Nạp code

Nếu Oled Arduino không hiển thị được gì cả thì bạn hãy xem lại địa chỉ I2C:

Địa chỉ I2C mặc định của Oled Arduino là 0x3C 

Địa chỉ I2C mặc định

Hiển thị chữ “Hello, world!” lên Oled Arduino:

Nạp code

Nạp đoạn code sau vào Node Wifi 32:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 10);
  // Display static text
  display.println("Hello, world!");
  display.display();
}
void loop() {
}

Kết quả nhận được:

Oled Arduino hiển thị chữ "Hello, world!"
Màn hình Oled Arduino hiển thị chữ

Giải thích Code:

Đầu tiên, ta khai báo thư viện bằng hàm sau:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Sau đó, định nghĩa độ phân giải của màn hình Oled Arduino. Oled ta sử dụng có độ phân giải là  128 x 64 pixels:

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Sau đó, khởi tạo đối tượng hiển thị với chiều rộng và chiều cao được xác định trước đó bằng giao thức I2C (& Wire):

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

Trong hàm setup(), khởi tạo chức năng Serial, kiểm tra xem thử màn hình Oled Arduino đã được kết nối với ESP32 chưa, đúng địa chỉ chưa.

 if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }

Chờ khoảng 2s để màn hình Oled Arduino có đủ thời gian để khởi tạo trước khi ghi:

delay(2000);

Sau khi khởi tạo, xóa bộ đệm hiển thị:

display.clearDisplay(); 

Cài font size sử dụng hàm display.setTextSize():

display.setTextSize(1);

Cài màu chữ sử dụng hàm display.setTextColor():

display.setTextColor(WHITE);

Đưa con trỏ đến vị trí cần ghi bằng hàm display.setCursor(x, y) với x là hàng còn y là cột:

display.setCursor(0, 10);

Hiển thị dòng chữ “Hello, world!” lên màn hình Oled Arduino:

   display.println("Hello, world!");
  display.display();

Scrolling Text:

Thư viện Adafruit OLED cung cấp những phương pháp hữu dụng dễ dàng scroll text:

  • startscrollright(0x00, 0x0F): scroll text từ trái sang phải
  • startscrollleft(0x00, 0x0F): scroll text từ phải sang trái
  • startscrolldiagright(0x00, 0x07): scroll text từ góc dưới bên trái sang góc trên bên phải
  • startscrolldiagleft(0x00, 0x07): scroll text từ góc dưới bên phải sang góc trên bên trái

Code:

#include 
#include 
#include 
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  // Display static text
  display.println("Scrolling Hello");
  display.display();
  delay(100);
}
void loop() {
  // Scroll in various directions, pausing in-between:
  display.startscrollright(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrollleft(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrolldiagright(0x00, 0x07);
  delay(2000);
  display.startscrolldiagleft(0x00, 0x07);
  delay(2000);
  display.stopscroll();
  delay(1000);
}

Sử dụng nhiều kiểu chữ khác nhau:

Thư viện Adafruit GFX cho phép chúng ta sử dụng một số phông chữ thay thế bên cạnh các phông chữ có sẵn. Mỗi phông chữ có sẵn in đậm, nghiêng và ở các kích cỡ khác nhau.

Kích thước được thiết lập bởi phông chữ thực tế. Vì vậy phương thức setTextSize() không hoạt động với các phông chữ này.

Bạn có thể chọn những phông chữ bên dưới:

Các font chữ

Để sử dụng 1 trong những phông chữ trên thì bạn phải include nó trong sketch, ví dụ:

#include <Fonts/FreeSerif12pt7b.h>

Tiếp theo, bạn cần phải sử dụng hàm setFont():

display.setFont(&FreeSerif12pt7b);

Để sử dụng lại phông chữ ban đầu chỉ cần gọi lại hàm setFont() không đối số.

display.setFont();

Upload đoạn ví dụ sau để hiểu rõ hơn:

#include 
#include 
#include 
#include 
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("SSD1306 allocation failed");
    for (;;);
  }
  delay(2000);
  display.setFont(&FreeSerif9pt7b);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("Hello, world!");
  display.display();
  delay(2000);
}
void loop() {
}

Bây giờ chữ “Hello, world!” đã được hiển thị với phông chữ FreeSerif trên màn hình Oled Arduino:

Oled Arduino hiển thị chữ "Hello, world!"
Oled Arduino hiển thị chữ “Hello, world!”

Vẽ hình trên Oled:

Vẽ 1 pixel

Vẽ 1 pixel trên Oled Arduino
Vẽ 1 pixel trên Oled Arduino

Để vẽ 1 pixel, bạn có thể dùng hàm drawPixel(x, y, color). Với x, y là vị trí mà pixel xuất hiện cùng với màu sắc của nó. Ví dụ:

display.drawPixel(64, 32, WHITE);

Vẽ 1 đường thẳng

Vẽ 1 đường thẳng với Oled Arduino
Vẽ 1 đường thẳng với Oled Arduino

Dùng hàm drawLine(x1, y1, x2, y2, color) để tạo 1 đường thẳng. x1,y1 là tọa độ điểm bắt đầu, x2,y2 là tọa độ điểm kết thúc của đường thẳng. Ví dụ:

display.drawLine(0, 0, 127, 20, WHITE);

Vẽ 1 hình chữ nhật

Vẽ hình chữ nhật
Vẽ hình chữ nhật

Hàm drawRect(x, y, width, height, color) cung cấp một cách dễ dàng để vẽ một hình chữ nhật với x,y là tọa độ góc trên cùng bên trái của hình chữ nhật với chiều rộng, chiều cao và màu sắc. Ví dụ:

display.drawRect(10, 10, 50, 30, WHITE);

Bạn có thể sử dụng hàm fillRect(x, y, width, height, color) để vẽ 1 hình chữ nhật được lấp đầy. Ví dụ:

Hình chữ nhật tô full màu

Thư viện cũng cung cấp các hàm vẽ hình chữ nhật với góc được bo tròn như là: drawRoundRect() và fillRoundRect(). Các hàm này chấp nhận các đối số như các hàm trước đó cộng với bán kính của góc bo. Ví dụ:

display.drawRoundRect(10, 10, 30, 50, 2, WHITE);
Vẽ hình chữ nhật trên Oled Arduino

Lấp đầy hình chữ nhật trên:

display.fillRoundRect(10, 10, 30, 50, 2, WHITE);
Tô màu hình chữ nhật

Vẽ 1 mình tròn

Ve 1 hình tròn trên Oled Arduino

Để vẽ hình tròn chúng ta sử dụng hàm drawCircle(x, y, radius, color). Với x,y là vị trí tâm của đường tròn, radius là bán kính cùng với màu sắc của hình tròn. Ví dụ:

display.drawCircle(64, 32, 10, WHITE);

Cũng như các phương pháp trên, để lấp đầy hình tròn này chúng ta dùng hàm:

display.fillCircle(64, 32, 10, WHITE);
Lấp đầy hình tròn

Vẽ 1 mình tam giác

Vẽ hình tam giác trên màn hình Oled Arduino

Sử dụng hàm drawTriangle(x1, y1, x2, y2, x3, y3, color) để vẽ hình tam giác. x,y lần lượt là tọa độ 3 đỉnh của tam giác. Ví dụ:

display.drawTriangle(10, 10, 55, 20, 5, 40, WHITE);

Để lấp đầy hình tam giác đó dùng hàm:

display.fillTriangle(10, 10, 55, 20, 5, 40, WHITE);
Tô màu hình tam giác trên màn hình Oled

Đảo ngược màu sắc

Thư viện cung cấp một phương thức bổ sung mà bạn có thể dùng với văn bản là invertDisplay(). Truyền True nếu muốn đảo ngược màu sắc của màn hình hoặc False để quay lại màu ban đầu:

display.invertDisplay(true);
Đảo ngược màu sắc trên Oled

Code:

#include 
#include 
#include 
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  delay(5000); // Pause for 2 seconds
  // Clear the buffer
  display.clearDisplay();
  // Draw a single pixel in white
  display.drawPixel(64, 32, WHITE);
  display.display();
  delay(5000);
  // Draw line
  display.clearDisplay();
  display.drawLine(0, 0, 127, 20, WHITE);
  display.display();
  delay(5000);
  // Draw rectangle
  display.clearDisplay();
  display.drawRect(30, 10, 50, 30, WHITE);
  display.display();
  delay(5000);
  // Fill rectangle
  display.fillRect(30, 10, 50, 30, WHITE);
  display.display();
  delay(5000);
  // Draw round rectangle
  display.clearDisplay();
  display.drawRoundRect(10, 10, 30, 50, 2, WHITE);
  display.display();
  delay(5000);
  // Fill round rectangle
  display.clearDisplay();
  display.fillRoundRect(10, 10, 30, 50, 2, WHITE);
  display.display();
  delay(5000);
  // Draw circle
  display.clearDisplay();
  display.drawCircle(64, 32, 10, WHITE);
  display.display();
  delay(5000);
  // Fill circle
  display.fillCircle(64, 32, 10, WHITE);
  display.display();
  delay(5000);
  // Draw triangle
  display.clearDisplay();
  display.drawTriangle(10, 10, 55, 20, 5, 40, WHITE);
  display.display();
  delay(5000);
  // Fill triangle
  display.fillTriangle(10, 10, 55, 20, 5, 40, WHITE);
  display.display();
  delay(5000);
  // Invert and restore display, pausing in-between
  display.invertDisplay(true);
  delay(5000);
  display.invertDisplay(false);
  delay(5000);
}
void loop() {
}

Hiển thị hình ảnh Bitmap trên Oled:

Bạn có thể hiển thị hình ảnh bitmap đơn sắc 128 x 64 trên màn hình Oled. Sau đây, OhStem sẽ hướng dẫn bạn:

Trước tiên, sử dụng một phần mềm để điều chỉnh kích thước của ảnh và lưu nó dưới dạng monologue bitmap. Nếu trên máy tính Windows, bạn có thể sử dụng Paint.

Lưu ảnh dưới dạng bitmap bằng Paint

Sau đó bạn lưu hình lại với đuôi .bmp (monologue bitmap)

Cài đặt phần mềm LCD Image Converter.

Link lcd-image-converter download | SourceForge.net

Mở phần mềm ra và chọn ảnh, chúng ta sẽ có giao diện

Giao diện phần mềm LCD Image Converter

Vào Image → Import import hình đã thay đổi kích thước trước đó 

Vào Options → Conversion vào mục Prepare chọn như hình:

Chọn vào mục Prepare

Mục Image chọn:

Chọn mục Image

Sau khi chọn Oke, vào mục File → Convert. File sau khi convert có đuôi .c

Copy đoạn mã array vào được code như bên dưới:

#include 
#include 
#include 
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
static const uint8_t image_data_Saraarray[1024] = {
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x14, 0x9e, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x6d, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xfb, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xd7, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xef, 0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xdf, 0xff, 0x90, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xbf, 0xff, 0xd0, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1d, 0x7f, 0xff, 0xd0, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x1b, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x02, 0xa7, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0x80, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0x07, 0xff, 0xf8, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0e, 0x01, 0xff, 0xc0, 0x38, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1c, 0x46, 0xff, 0xb1, 0x18, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0x97, 0xff, 0xc0, 0x7a, 0x07, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0x81, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xfc, 0x81, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0x83, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xbf, 0xff, 0xfe, 0xff, 0xfd, 0x01, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0x03, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x3f, 0xff, 0xdc, 0xff, 0xfa, 0x03, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xd8, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xd0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x02, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xb0, 0x00, 0x0f, 0xf5, 0xff, 0xd7, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xb0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x5f, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xa0, 0x00, 0x0f, 0xfb, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xfd, 0xff, 0xdf, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x87, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x43, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x73, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xfe, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, 0x7b, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xfd, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x33, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xfd, 0xe0, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x27, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x67, 0xff, 0xe0, 0x00, 0x00, 0x1b, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xfd, 0x40, 0x00, 0x00, 0xf3, 0xff, 0xc4, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00, 0xfc, 0xff, 0x8c, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x7f, 0x3c, 0x3c, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x7c, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff,
  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff
};
void setup() {
  Serial.begin(115200);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  delay(2000); // Pause for 2 seconds
  // Clear the buffer.
  display.clearDisplay();
  // Draw bitmap on the screen
  display.drawBitmap(0, 0, image_data_Saraarray, 128, 64, 1);
  display.display();
}
void loop() {
}

Sau khi upload code, kết quả nhận được như sau:

Kết quả hiển thị hình ảnh trên màn hình Oled Arduino
Kết quả hiển thị hình ảnh trên màn hình Oled Arduino

Tổng kết

Trên đây, OhStem đã hướng dẫn bạn những cách cơ bản để hiển thị lên màn hình Oled Arduino các loại ký tự, hình ảnh,… mà bạn thích. Bây giờ, bạn có thể áp dụng để màn hình Oled hiển thị những thứ bạn muốn. Rất đơn giản phải không nào?

Để xem tất cả các bài hướng dẫn về lập trình Arduino, bạn truy cập vào đây nhé: Tổng hợp các bài hướng dẫn về Arduino. Nếu bạn có bất kỳ ý kiến đóng góp hoặc thắc mắc gì, bạn có thể để lại comment phía dưới hoặc liên hệ với OhStem qua Fanpage để được hỗ trợ nhé

Tags: màn hình Oled Arduino, Oled Arduino, Oled và Arduino

Những bài liên quan

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 *

Fill out this field
Fill out this field
Vui lòng nhập địa chỉ email hợp lệ.
You need to agree with the terms to proceed