Giao tiếp I2C LCD với Raspberry Pi Pico hiển thị chữ và kí tự

Giao tiếp I2C LCD với Raspberry Pi Pico hiển thị chữ và kí tự

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách giao tiếp I2C LCD với Raspberry Pi Pico và cách hiển thị văn bản/số đơn giản và các ký tự tùy chỉnh trên LCD.  Màn hình LCD I2C là màn hình led 16×2, có nghĩa là có thể hiển thị 16 cột theo hai hàng ký tự. Các ký tự có thể là chữ và số, nhưng bạn có thể tạo các ký tự tùy chỉnh như các đồ họa cơ bản, biểu đồ cột đó. LCD có bộ điều khiển hd44780 và còn có mạch I2C được kết nối giúp dễ dàng giao tiếp theo giao thức I2C với bo mạch Pi Pico. LCD 16X2 cổ điển thì không có mạch I2C mười sáu chân.

Nếu muốn kết nối trực tiếp bảng mạch này với Raspberry Pi Pico, phải sử dụng ít nhất tám chân của bảng mạch, điều này sẽ rất lãng phí. Vì vậy, giải pháp tốt hơn là sử dụng màn hình LCD có giao thức I2C thay vì màn hình LCD 16×2 điển hình.  Trong bài hướng dẫn này, đang sử dụng LCD 16×2 có hỗ trợ giao thức I2C. Các LCD có kích thước bất kỳ cũng sẽ hoạt động giống nhau. Ưu điểm của việc sử dụng LCD có giao thức I2C là chỉ cần sử dụng 4 chân (bao gồm cả chân nguồn) của Raspberry Pi Pico để kết nối với màn hình này. 

Ở mặt sau của màn hình LCD tinh thể lỏng này, có thể thấy một biến trở.  Biến trở này được sử dụng để thay đổi độ sáng của màn hình LCD. Nó rất tiện dụng khi được sử dụng trong các điều kiện ánh sáng khác nhau.

  Yêu cầu thực hiện:

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã quen thuộc và đã cài đặt phiên bản Python 3 mới nhất cũng như thiết lập MicroPython trong Raspberry Pi Pico của bạn. Ngoài ra, bạn nên có phần mềm phát triển tích hợp (IDE) đang chạy để lập trình. Chúng ta sẽ sử dụng phần mềm Thonny IDE.

 Sơ đồ chân màn hình LCD I2C

 • Chân Ground

 • Chân Vcc

 • Chân SDA

 • Chân SCL

 Bây giờ hãy xem cách kết nối màn hình LCD với Raspberry Pi Pico.

 Kết nối LCD I2C với Raspberry Pi Pico

Màn hình LCD I2C sẽ được kết nối với Pi Pico bằng 4 chân (GND, VCC, SDA và SCL). 

Các chân giao tiếp I2C của Raspberry Pi Pico

Raspberry Pi Pico có hai bộ điều khiển I2C. Cả hai bộ điều khiển I2C đều có thể truy cập thông qua các chân GPIO của Raspberry Pi Pico. Bảng dưới đây là kết nối của các chân GPIO với cả hai bộ điều khiển I2C. Mỗi kết nối dây của bộ điều khiển có thể được cấu hình thông qua nhiều chân GPIO như trong hình. Nhưng trước khi sử dụng bộ điều khiển I2C, bạn nên cấu hình trong phần mềm các chân GPIO mà bạn muốn sử dụng chứ năng giao tiếp I2C cụ thể.

Các bộ giao tiếp I2C

Các chân GPIO

I2C0 – SDA

GP0/GP4/GP8/GP12/GP16/GP20

I2C0 – SCL

GP1/GP5/GP9/GP13/GP17/GP21

I2C1 – SDA

GP2/GP6/GP10/GP14/GP18/GP26

I2C1 – SCL

GP3/GP7/GP11/GP15/GP19/GP27

 

Các kết nối giữa hai thiết bị đang sử dụng tương ứng như bên dưới.

I2C LCD

Raspberry Pi Pico

VCC

Chân VBUS Là chân nguồn được cấp từ cổng microUSB

SDA

GP0 (I2C0 SDA)

SCL

GP1 (I2C0 SCL)

GND

GND

Chân VCC được kết nối với chân VBUS từ Raspberry Pi Pico để cấp nguồn. Cả hai chân nguồn của hai thiết bị được kết nối chung. Chân SCL của I2C LCD được kết nối với chân I2C0 SCL của Pi Pico.  Tương tự, chân SDA được kết nối với chân I2C0 SDA của Pi Pico.

Chúng tôi đã sử dụng các kết nối giống như được chỉ định trong bảng trên. Tuy nhiên, bạn cũng có thể sử dụng các kết hợp chân SDA/SCL khác. 

Lấy địa chỉ thanh ghi của LCD I2C

 Khi kết nối màn hình I2C với Raspberry Pi Pico, bạn cần kiểm tra địa chỉ than ghi của nó. Bởi vì mọi linh kiện I2C đều có một địa chỉ được liên kết tương ứng. Đối với nhiều linh kiện I2C LCD, địa chỉ mặc định là 0x27 trong đó 0x hiển thị định dạng hex của các số. Nhưng địa chỉ thanh ghi cũng có thể khác nhau trong một số trường hợp. Địa chỉ này phụ thuộc vào vị trí của các miếng đệm A0, A1 và A2 trên bộ điều khiển I2C của linh kiện.

 Bây giờ hãy sao chép code dưới đây và load lên bo mạch Raspberry với màn hình LCD I2C đã được kết nối trước đó.

 Code này sẽ quét mọi linh kiện I2C và sẽ chỉ định số lượng linh kiện có địa chỉ trong shell console. 

import machine

sdaPIN=machine.Pin(0)

sclPIN=machine.Pin(1)

i2c=machine.I2C(0,sda=sdaPIN, scl=sclPIN, freq=400000)

 

devices = i2c.scan()

if len(devices) == 0:

 print("No i2c device !")

else:

 print('i2c devices found:',len(devices))

for device in devices:

 print("At address: ",hex(device))

Dòng thông báo này hiển thị địa chỉ mặc định của màn hình LCD là 0x27. Rất có thể bạn sẽ nhận được cùng một địa chỉ giống như trên.

Thư viện hỗ trợ lập trình MicroPython LCD I2C

Ở đây, sẽ yêu cầu hai thư viện: lcd_api.py và i2c_lcd.py. Sao chép cả hai thư viện này và lưu vào mạch Raspberry Pi Pico của bạn với tên tệp tương ứng. Mở một tệp mới trong phần mềm Thonny. Sao chép các thư viện từ các liên kết được cung cấp ở trên. Lưu chúng vào Raspberry Pi Pico với tên lcd_api.py và i2c_lcd.py trong thư mục lib.

Hiển thị văn bản/số trên màn hình LCD I2C bằng Raspberry Pi Pico. 

Ở phần này chúng ta sẽ hiển thị 1 tin nhắn và số lên màn hình

import machine

from machine import I2C

from lcd_api import LcdApi

from i2c_lcd import I2cLcd

from time import sleep

 

I2C_ADDR = 0x27

totalRows = 2

totalColumns = 16

 

i2c = I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=400000)

lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns)

 

while True:

    lcd.putstr("Lets Count 0-10!")

    sleep(2)

    lcd.clear()

    for i in range(10):

        lcd.putstr(str(i))

        sleep(1)

        lcd.clear()

Code này sẽ hiển thị thông báo “Lets Count 0-10!" trong hai giây.  Sau đó, nó sẽ xóa màn hình LCD và hiển thị các số từ 0 đến 10 với độ trễ 1 giây.

 Giải thích code:

 Đầu tiên, chúng ta sẽ import module I2C và cũng import module sleep để có thể thêm độ trễ giữa các tin nhắn trên màn hình. Ngoài ra, hãy import LcdApi từ thư viện lcd_api vừa tải lên bảng của mình và I2clcd từ thư viện i2c_lcd.

import machine

from machine import I2C

from lcd_api import LcdApi

from i2c_lcd import I2cLcd

from time import sleep

Tiếp theo chỉ định địa chỉ của LCD I2C của bạn. Chúng tôi đã chạy và biết được địa chỉ bản mạch của chúng tôi là 0x27.

 Ngoài ra, totalRows và totalColumns chỉ định số lượng hàng và cột của màn hình mà trong trường hợp này là 16×2. Nếu muốn sử dụng màn hình có kích thước khác, bạn cần thay đổi số ở đây cho phù hợp, ví dụ: màn hình 20×4.

I2C_ADDR = 0x27

totalRows = 2

totalColumns = 16

Khởi tạo I2C

 Tiếp theo, chúng ta sẽ khởi tạo các chân I2C GPIO cho SCL và SDA tương ứng.  Chúng tôi đã sử dụng các chân I2C0 SCL và I2C0 SDA.

 Chúng tôi đã tạo một phương thức I2C() có bốn tham số. Tham số đầu tiên là kênh I2C sử dụng. Tham số thứ hai chỉ định chân I2C GPIO của bo mạch được kết nối với đường SDA. Tham số thứ ba chỉ định chân I2C GPIO của bo mạch được kết nối với đường SCL. Tham số cuối cùng là kết nối tần số.

 Chúng tôi đang đặt SCL trên chân 1 và SDA trên chân 0.

i2c = I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=400000)

Khởi tạo LCD

Dòng này được sử dụng để khởi tạo kết nối I2C của thư viện bằng cách tạo object ‘lcd’.  Đối số đầu tiên của hàm I2cLcd() là một object i2c đã khai báo trước đó, đối số thứ hai là địa chỉ của màn hình LCD I2C. Đối số thứ ba và thứ tư là kích thước số cột và số hàng.

lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns)

Hiển thị chữ và số

Tiếp theo, chạy một vòng lặp vô hạn bên trong, lần đầu tiên hiển thị thông báo “Lets Count 0-10!” trong 2 giây. Sau đó, xóa màn hình bằng phương thức clear() trong object LCD. Sau đó, sử dụng vòng lặp for để hiển thị các số từ 0 đến 10 sau mỗi 1 giây. Sau khi mỗi số được hiển thị, đợi một giây, sau đó clear() sẽ xóa văn bản..

while True:

    lcd.putstr("Lets Count 0-10!")

    sleep(2)

    lcd.clear()

    for i in range(10):

        lcd.putstr(str(i))

        sleep(1)

        lcd.clear()

Chạy chương trình

Để kiểm tra chương trình này với Raspberry Pi Pico, hãy tải tệp main.py này lên bảng mạch của bạn. Khi code được tải lên bảng, hãy điều chỉnh độ sáng của màn hình thông qua chiết áp cho đến khi màn hình LCD bắt đầu hiển thị các thông điệp:

Hiển thị các kí tự trên I2C LCD sử dụng Raspberry Pi Pico

Trong phần này, Sẽ hiển thị các ký tự tùy chỉnh trên màn hình LCD.

 Đối với màn hình LCD 16×2 đang sử dụng, chúng ta cũng có tùy chọn hiển thị các ký tự tùy chỉnh. Trong màn hình LCD, mỗi khối sẽ là 5×8 pixel. Chúng có thể được sử dụng để hiển thị các ký tự tùy chỉnh bằng cách đặt trạng thái của từng pixel bên trong một mảng byte.

 Có một cách rất đơn giản để tạo mảng byte ký tự tùy chỉnh của riêng bạn. Tham khảo trình tạo ký tự tùy chỉnh sau: (LCD Custom Character Generator).

 Mở trang web trên ra và chọn loại dữ liệu là 'Hex'. 

Chỉ định ký tự tùy chỉnh mà bạn muốn hiển thị bằng cách nhấp vào các pixel trong khối pixel 5×8 và biến byte tương ứng sẽ được tạo.

 Trong trường hợp này sẽ hiển thị ký tự trái tim trên màn hình. Chúng tôi sẽ cần giá trị hex được đánh dấu trong hình chữ nhật màu đỏ bên dưới để tạo thành mảng byte của chúng tôi. Chúng tôi sẽ sử dụng các giá trị này bên trong mảng byte trong khi lập trình Raspberry Pi Pico để hiển thị các ký tự tùy chỉnh. 

Tương tự như vậy, bạn có thể tạo các ký tự tùy chỉnh theo sở thích của mình từ trình tạo này và chỉ cần sao chép các số hex để điền vào mảng byte trong khi lập trình bảng của bạn trong MicroPython.

 Hãy xem tập lệnh MicroPython để hiển thị các ký tự tùy chỉnh trên màn hình LCD I2C với Raspberry Pi Pico. 

MicroPython hiển thị kí tự tùy chỉnh trên I2C LCD

import machine

from machine import I2C

from lcd_api import LcdApi

from i2c_lcd import I2cLcd

 

I2C_ADDR = 0x27

totalRows = 2

totalColumns = 16

 

i2c = I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=400000)

lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns)

 

heart = bytearray([0x00,0x00,0x1B,0x1F,0x1F,0x0E,0x04,0x00])

face = bytearray([0x00,0x00,0x0A,0x00,0x11,0x0E,0x00,0x00])

lcd.custom_char(0, heart)

lcd.custom_char(1, face)

lcd.putstr(chr(0)+" WELCOME "+chr(1))

Code này hiển thị thông báo ‘WELCOME’ ở giữa ký tự tùy chỉnh trái tim và ký tự tùy chỉnh mặt cười. 

Cách Code hoạt động

Tạo một mảng phụ cho trái tim với các giá trị hex thu được từ Trình tạo ký tự tùy chỉnh LCD.

heart = bytearray([0x00,0x00,0x1B,0x1F,0x1F,0x0E,0x04,0x00])

Tương tự như vậy, cũng tạo một mảng phụ khác cho mặt cười với các giá trị hex thu được từ Trình tạo ký tự tùy chỉnh LCD.

face = bytearray([0x00,0x00,0x0A,0x00,0x11,0x0E,0x00,0x00])

Tiếp theo, tạo ký tự tùy chỉnh bằng cách gọi hàm lcd.custom_char() và chuyển một số trong khoảng từ 0-7 (vị trí được phân bổ) và biến chứa bytearray làm tham số bên trong nó.

lcd.custom_char(0, heart)

lcd.custom_char(1, face)

Chúng tôi sẽ hiển thị ký tự trái tim theo sau là 'WELCOME', sau đó là ký tự mặt cười trên màn hình.

lcd.putstr(chr(0)+" WELCOME "+chr(1))

Thực hiện chạy hệ thống

Để kiểm tra chương trình này với Raspberry Pi Pico, hãy tải tệp main.py này lên bảng của bạn. Sau khi code được tải lên bảng mạch, hãy điều chỉnh độ sáng của màn hình thông qua chiết áp cho đến khi màn hình LCD bắt đầu hiển thị thông báo. 

>>> 100+ Mã Sản Phẩm Dây Rút: https://mecsu.vn/san-pham/day-rut-nhua.5op

>>> 1000+ Mã Sản Phẩm Đầu Cosse: https://mecsu.vn/san-pham/dau-cosse.Q1j

Bài viết cùng chuyên mục

NHANH

NHANH

Vì Đổi mới liên tục nên Nhanh hơn

ĐÚNG

ĐÚNG

Coi trọng và ưu tiên việc làm Đúng

ĐỦ

ĐỦ

Tìm và mua Đủ Đơn hàng hơn

KỊP THỜI

KỊP THỜI

Hiệu suất tối ưu bởi Kịp Thời hơn