Cách kết nối màn hình OLED I2C với ARDUINO

Giới thiệu: Giới thiệu về màn hình OLED I2C 128*64 / 128*32.
Cách kết nối màn hình OLED I2C với ARDUINO

Xin chào! Là một người đam mê điện tử nghiệp dư, tôi chắc chắn rằng mọi việc chúng ta làm - đồ chơi điện tử - sản phẩm tự chế, hay dự án lớn - đều xuất phát từ sự tò mò và lười biếng. Sự tò mò cố gắng tìm hiểu và thấu hiểu những điều rộng lớn, chưa biết, để tìm ra cách nó hoạt động ở đó, nó làm gì, nó di chuyển như thế nào. Và sự lười biếng phát minh ra thứ gì đó để không đứng dậy, không đến gần, không nhấc máy, không bị bẩn hoặc bất cứ điều gì quan trọng khác.

Vì việc xem thông tin tốt hơn là tìm hiểu điều gì sắp xảy ra trong thiết bị của chúng ta hoặc đã xảy ra hoặc đang xảy ra nên chúng ta chắc chắn sẽ muốn nhận được thông tin hữu ích nhất này từ bộ vi điều khiển, cảm biến hoặc các thiết bị khác. Và trong mọi trường hợp, tôi muốn nhận bất kỳ tin nhắn nào, chẳng hạn như câu hỏi, cảnh báo, lời nhắc, biểu tượng cảm xúc, ngôi sao, trái tim và những thứ tương tự.

Đối với những người cũng có mong muốn tương tự, đây là hướng dẫn ngắn gọn về cách kết nối và thử nghiệm màn hình OLED nhỏ và rẻ tiền.
Tiếp theo, chúng ta sẽ nói về một trong những mẫu màn hình OLED được cung cấp rộng rãi cho những người yêu thích radio, được điều khiển bởi chip SSD1306, có kích thước màn hình 0,96 inch và độ phân giải 128 * 64 hoặc 128 * 32 pixel. Những màn hình này lý tưởng cho các thiết kế radio nghiệp dư nhỏ và các dự án tự chế.
Cách kết nối màn hình OLED I2C với ARDUINO

Bước 1: Khái niệm cơ bản


Chúng tôi sẽ kết nối nó với Arduino UNO / NANO và chúng tôi cũng sẽ lập trình nó thông qua Arduino.
  • OLED là Điốt phát sáng hữu cơ, tức là một thiết bị bán dẫn được làm từ các hợp chất hữu cơ bắt đầu phát ra ánh sáng khi có dòng điện đi qua nó.
  • ARDUINO là một nền tảng đào tạo và xây dựng các hệ thống tự động hóa và robot.
  • ArduinoIDE - môi trường phát triển. Đây là một chương trình lập trình Arduino miễn phí.
  • I2C – Mạch tích hợp liên mạch, đường truyền liên chip.
  • Phác thảo, hay còn gọi là mã, hay còn gọi là chương trình - Thuật ngữ Arduino.

Làm theo hướng dẫn để hiểu cách kết nối và định cấu hình đúng cách màn hình OLED với Arduino cũng như cách hiển thị thông báo tùy chỉnh trên màn hình.
Chúng tôi làm mọi thứ từng bước một.

Bước 2: Phụ kiện


Chúng ta chỉ cần bốn điều:
  • 1. Bản thân màn hình OLED là 0,96 ”(bạn có thể mua nó trên Aliexpress hoặc Ebay, nó dài nhưng rẻ!).
  • 2. Arduino UNO / Nano (cùng vị trí với màn hình).
  • 3. Dây nối (ibid.).
  • 4. Máy tính hoặc laptop có cài đặt ArduinoIDE.

Cách kết nối màn hình OLED I2C với ARDUINO

Nhìn chung, việc mua các bộ phận cho các dự án khác nhau trên Aliexpress và Ebay là một điều rất thú vị, trong khi bạn đang làm việc trên một dự án thì các bộ phận cho một dự án khác đã sẵn sàng. Điều chính là không quên đặt hàng.

Bước 3: Kết nối màn hình


Màn hình được điều khiển bởi chip SSD1306, hỗ trợ năm giao thức truyền thông, một trong số đó là I2C. Dữ liệu sử dụng giao thức này chỉ được truyền qua hai dây và càng ít dây trong trường hợp càng tốt, vì vậy nó khá phù hợp với chúng tôi.Nhưng! Có những mô-đun có giao thức SPI và thậm chí có cả chuyển đổi giao thức, vì vậy hãy cẩn thận khi mua mô-đun này.
Cách kết nối màn hình OLED I2C với ARDUINO

Pin được sử dụng:
Màn hình OLED - SCL/SCK (đồng hồ) và SDA (dữ liệu), nguồn “Cộng” (VCC) và nguồn “Trừ” (GND).
Cách kết nối màn hình OLED I2C với ARDUINO

Pin được sử dụng:
Arduino UNO - SCL/SCK trên A5 và SSD trên A4, nguồn “Cộng” (+5V) và nguồn “Trừ” (GND).
Kết nối màn hình với Arduino:
  • Vcc - 5V
  • GND - GND
  • SDA-A4
  • SCL-A5

Cách kết nối màn hình OLED I2C với ARDUINO

Bước 4: Máy quét I2C


Mỗi thiết bị trên bus I2C có một địa chỉ thập lục phân, không thể thay đổi, được nối dây cứng, mọi nhà sản xuất có trách nhiệm phải chỉ rõ địa chỉ đó ở đâu đó trên vỏ hoặc trong hướng dẫn. Có những mô-đun với công tắc và nút nhảy có thể được sử dụng để thay đổi địa chỉ, nhưng... nếu thiết bị đó rẻ đến mức đáng hổ thẹn, thì nhà sản xuất có thể không thèm xử lý một chi tiết nhỏ như vậy, vì vậy bạn sẽ phải hãy tự xác định nó.

Tổng cộng, có thể sử dụng tối đa 127 địa chỉ trên xe buýt - 119 cho thiết bị và 8 địa chỉ dịch vụ. Truyền thông được thực hiện tại các địa chỉ này. Có một người chính, hay còn gọi là Master, và có một nô lệ, hay còn gọi là Slave - Master hỏi, nô lệ trả lời, mọi thứ đều đơn giản.
Vì màn hình OLED của chúng tôi sử dụng giao thức giao tiếp I2C và địa chỉ có thể không được chỉ định nên chúng tôi sẽ cố gắng tự mình tìm ra địa chỉ này.

Bạn có thể thực hiện việc này bằng cách tải một bản phác thảo ngắn lên bo mạch Arduino có kết nối OLED. NHƯNG!
Đừng vội tải bản phác thảo lên Arduino ngay lập tức! Trước tiên hãy tải xuống “trình điều khiển”, tức là. hãy kết nối các thư viện và để thực hiện điều này, chúng ta sẽ chuyển ngay đến “Bước số 5”, sau đó quay lại và tiếp tục.

Bước 4: Tiếp theo:


Tải xuống CODE Finder_I2C_Hex_Address.ino, tải lên Arduino.
Mở “Port Monitor”, đặt tốc độ thành 9600 và nếu mọi thứ được kết nối chính xác, chương trình sẽ hiển thị địa chỉ thiết bị, trong trường hợp của tôi là OLED có địa chỉ 0x3F.
Cách kết nối màn hình OLED I2C với ARDUINO

Bước 5: Tải xuống và kết nối thư viện


Để mọi thứ hoạt động chính xác và bạn không cần phải phát minh lại bánh xe, bạn cần kết nối một vài thư viện với môi trường ArduinoIDE, cụ thể là: ADAFRUIT GFX và ADAFRUIT SSD1306, chúng cần thiết để Arduino có thể giao tiếp độc lập với màn hình OLED.
Bạn có thể bao gồm các thư viện này bằng cách làm theo các bước sau.
  • 1. Trong ArduinoIDE, hãy chuyển đến menu Sketch.
  • 2. Chọn “Bao gồm thư viện”.
  • 3.Chọn “Quản lý thư viện”.
  • 4. Tìm ADAFRUIT GFX và cài đặt chúng.
  • 5. Tìm ADAFRUIT SSD1306 và cài đặt chúng.

Với các phiên bản mới nhất của thư viện, màn hình của tôi hoạt động không ổn định, tất nhiên điều này có thể là do tay tôi bị cong, nhưng sau khi tôi cài đặt phiên bản đầu tiên của các thư viện này, mọi thứ bắt đầu trở nên mượt mà và đẹp mắt. Vì lý do nào đó, những dòng của Pushkin hiện lên trong đầu tôi:
...và kinh nghiệm, đứa con của những sai lầm khó khăn,
và thiên tài, người bạn của những nghịch lý.

Một cách khác để cài đặt thư viện là tự tìm, tải xuống và cài đặt các thư viện này.
Đối với ví dụ Github:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit_SSD1306

Đây là những thư viện Adafruit giống nhau, nhưng có thể dễ dàng tìm kiếm các thư viện tương tự trong các công cụ tìm kiếm theo yêu cầu của OLED I2C. Nhiều người đam mê viết thư viện “cho chính họ” và sau đó đăng chúng lên web. Việc sử dụng thư viện nào là tùy thuộc vào bạn.
Để màn hình hiển thị các chữ cái tiếng Nga, cũng cần có các thư viện đặc biệt, nhưng đây là một chủ đề riêng cho một bài viết riêng.
Sau khi cài đặt các thư viện, bạn có thể quay lại bước 4 và cuối cùng tìm ra địa chỉ thập lục phân của màn hình.

Bước 6: Kiểm tra hiển thị


Để kiểm tra xem mọi thứ có hoạt động như mong đợi hay không, hãy chạy ví dụ thử nghiệm từ ArduinoIDE.
Đối với điều này:
Vào FILE > VÍ DỤ > SSD 1306 > Chọn 128x64 i2c
Nếu bạn gặp "Lỗi", hãy thử chọn SSD 1306 > 128x32 i2c.
Nếu "Lỗi" xảy ra lần nữa, hãy thử thay đổi địa chỉ I2C trên dòng 61 của mã demo và thay thế bằng địa chỉ màn hình mà bạn đã xác định ở bước #4.
Nếu lỗi xảy ra lần nữa, bạn có thể thử chỉnh sửa tệp Adafruit_SSD1306.h, nó nằm trong thư mục thư viện Arduino.
Cách kết nối màn hình OLED I2C với ARDUINO

Mở tệp Adafruit_SSD1306.h trong trình soạn thảo văn bản và tìm các dòng:
//#định nghĩa SSD1306_128_64

#định nghĩa SSD1306_128_32

// #xác định SSD1306_96_16 

Bỏ ghi chú dòng:
#xác định SSD1306_128_64. 

Nó sẽ giống như thế này:
#định nghĩa SSD1306_128_64

//#định nghĩa SSD1306_128_32

// #xác định SSD1306_96_16

Nếu lỗi xảy ra lần nữa, bạn cần kiểm tra lại các kết nối chính xác.
Sau khi quá trình tải xuống hoàn tất, bạn sẽ thấy hình ảnh động thử nghiệm trên màn hình, điều đó có nghĩa là bạn đã thiết lập thành công màn hình OLED của mình.

Khi bạn đã hoàn toàn thích thú với hoạt ảnh này, bạn có thể chuyển sang bước tiếp theo.

Bước 7: Viết tin nhắn của riêng bạn


Để viết thông điệp của riêng bạn, trước tiên hãy tạo một bản phác thảo mới trong môi trường lập trình ArduinoIDE.
Trong tiêu đề chúng tôi bao gồm 4 thư viện:
#include <SPI.h>

#include <Dây.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

Sau đó chúng tôi viết giao thức thiết lập lại:
#define OLED_RESET 4

Màn hình Adaf nhung_SSD1306 (OLED_RESET);

Trong VOID SETUP, chúng tôi chỉ ra địa chỉ thập lục phân của màn hình 0x3C mà chúng tôi đã học ở “Bước số 4”.
Sau đó, chúng tôi khởi tạo màn hình và xóa nó:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.clearDisplay();

Tiếp theo, trong VOID LOOP, chúng tôi viết mã chính, tức là thông báo mà chúng tôi muốn hiển thị trên màn hình.
Để thực hiện việc này, chúng tôi mô tả kích thước văn bản, màu văn bản, vị trí con trỏ và cuối cùng, hiển thị thông báo bằng lệnh println:
display.setTextSize(2);

display.setTextColor(TRẮNG);

display.setCursor(0,0);

display.println("Làm tốt lắm!");

display.display();

Cuối cùng đừng quên viết hiển thị.displayđể hình ảnh được hiển thị trên màn hình, nếu không bạn sẽ bị trống.
Nếu bạn đã làm mọi thứ chính xác, một thông báo sẽ xuất hiện trên màn hình.
Cách kết nối màn hình OLED I2C với ARDUINO

Đây là MÃ Beginning_with_Arduino_OLED.ino của chương trình của chúng tôi:
code.zip [946 b] (số lượt tải xuống: 4908)
Bình luận
  • cà vạtnụ cườicườiđỏ mặtcườithư giãn thoải máinhếch mép cười
    trái tim_mắthôn_timhôn_đóng_mắtđỏ bừngan tâmthỏa mãncười toe toét
    nháy mắtlè lưỡi nháy mắtbị mắc kẹt_out_tongue_closed_eyescười toe toéthôn nhaubị mắc kẹt_out_tongueđang ngủ
    lo lắngcau màyđau khổopen_mouthnhăn nhóbối rốiim lặng
    vô cảmkhông hài lòngmồ hôi_nụ cườimồ hôithất vọng_nhẹ nhõmmệt mỏithụ động
    thất vọngbối rốiđáng sợlạnh_mồ hôikiên trìkhócnức nở
    vui sướngkinh ngạcla hétkhuôn mặt mệt mỏitức giậncơn thịnh nộchiến thắng
    buồn ngủừmmặt nạkính râmmặt chóng mặtimpmỉm cười_imp
    mặt trung lậpkhông_miệngvô tội
4 trừ một =
Bình luận (10)
  1. Tatoshka
    #1 Tatoshka Khách Ngày 14 tháng 11 năm 2018 21:18
    9
    Cảm ơn bạn! Đây là bản phác thảo và giới thiệu được tải lên đầu tiên của tôi về Arduino. Ngoài việc nhấp nháy Blink))
  2. Alisher
    #2 Alisher Khách Ngày 28 tháng 7 năm 2019 19:35
    8
    Tôi có thể tải xuống mã Finder_I2C_Hex_Address.ino này ở đâu?
    1. Al
      #3 Al Khách Ngày 14 tháng 8 năm 2019 12:51
      11
      bên dưới hình ảnh có một liên kết "Đây là MÃ Beginning_with_Arduino_OLED.ino của chương trình của chúng tôi:"
  3. Alex
    #4 Alex Khách Ngày 13 tháng 11 năm 2019 20:01
    9
    Không phải VOID SETUP hoặc VOID LOOP, mà là void setup(); và void loop(); Ngôn ngữ C là ngôn ngữ phân biệt chữ hoa chữ thường.
  4. Khách mời Alex
    #5 Khách mời Alex Khách Ngày 14 tháng 1 năm 2020 03:00
    6
    >Bước 4: ... trong trường hợp của tôi là OLED có địa chỉ 0x3F.
    và sau đó
    >Trong VOID SETUP... địa chỉ màn hình của chúng tôi 0x3C, điều mà chúng ta đã học ở “Bước #4”.
    Làm như thế nào?
  5. Khách mời Alex
    #6 Khách mời Alex Khách Ngày 14 tháng 1 năm 2020 03:10
    9
    Cảm ơn! Tôi đã làm mọi thứ theo hướng dẫn trên Atmega328 Pro Mini và kiểm tra 0,96 đã mua. Cả hai đều hoạt động. Arduino IDE 1.8.10
  6. Người đọc
    #7 Người đọc Khách Ngày 3 tháng 3 năm 2020 21:50
    4
    Cảm ơn bạn, hướng dẫn, mọi thứ đều hoạt động!
  7. Ildar Xafizov
    #8 Ildar Xafizov Khách Ngày 19 tháng 4 năm 2020 19:15
    5
    Tôi có một câu hỏi. Có 2 màn hình OLED giống hệt màn hình của bạn trong ảnh (ảnh thứ hai). Tôi không thể tìm ra jumper nào để sử dụng để thay đổi địa chỉ?
  8. Khách mời Maxim
    #9 Khách mời Maxim Khách 31 Tháng 10 2020 18:53
    11
    Cảm ơn bạn cho bài viết.Nhưng tôi gặp một vấn đề: các pixel trong các chữ cái phát sáng lẫn nhau và phông chữ lớn hơn mức cần thiết. Rõ ràng Arduino không nhận ra độ phân giải màn hình. Nếu có ai gặp vấn đề tương tự thì đây là cách giải quyết:
    #define SCREEN_WIDTH 128 // Chiều rộng màn hình OLED, tính bằng pixel
    #define SCREEN_HEIGHT 64 // Chiều cao màn hình OLED, tính bằng pixel
    Màn hình Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  9. Dmitry
    #10 Dmitry Khách Ngày 9 tháng 5 năm 2021 19:35
    7
    Cảm ơn! Không phải mọi thứ đều diễn ra ngay lập tức. Thật vậy, địa chỉ trên màn hình là 128*64, không phải 0x3D mà là 0x3C. Và tôi đã sắp xếp lại các Thư viện “từ giữa” các phiên bản. Không phải là cái mới nhất, bởi vì... có một thông báo về giá trị quan trọng của bộ nhớ (Tôi có Arduino Uno).