I2C LCD với ESP32 và ESP8266 sử dụng MicroPython

I2C LCD với ESP32 và ESP8266 sử dụng MicroPython

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

Vì vậy, bây giờ hãy bắt đầu với sơ đồ chân của màn hình này. Màn hình này có bốn chân:

  • Pin nối đất

  • Chân Vcc

  • SDA 

  • SCL

  • Bây giờ chúng ta hãy xem cách kết nối màn hình LCD này với bảng phát triển ESP32 và ESP8266.

  • Giao diện I2C LCD với ESP32 và ESP8266

  • Trong phần này, chúng tôi sẽ hướng dẫn bạn cách kết nối I2C LCD với ESP32 và ESP8266. Màn hình LCD I2C sẽ được kết nối với bảng ESP với 4 chân (GND, VCC, SDA và SCL).

  • Kết nối của I2C LCD với các bo mạch ESP rất dễ dàng. Chúng ta phải kết nối thiết bị đầu cuối VCC với chân Vin, nối đất với mặt đất (mặt bằng chung), SCL của cảm biến với SCL của mô-đun và SDA của cảm biến với chân SDA của các mô-đun ESP.

  • Chân I2C trong ESP32 cho SDA là GPIO21 và cho SCL là GPIO22. Trong khi đó, trong ESP8266, các chân I2C mặc định cho SDA là GPIO4 và đối với SCL là GPIO5.

  • Các kết nối giữa các thiết bị có thể được nhìn thấy bên dưới.

ESP32 ·

ESP8266 ·

I2C LCD

VCC = Vin

Vin

Vin

GPIO21 (I2C SDA)

GPIO4 (D2)

SDA

GPIO22 (I2C SCL)

GPIO5 (D1)

SCL

MẶT ĐẤT

MẶT ĐẤT

GND ·

Chân I32C ESP2

Các chân I2C đã nêu ở trên được đặt ở mặc định. Nếu chúng ta muốn thay đổi các chân GPIO, chúng ta phải đặt chúng trong mã. Các sơ đồ dưới đây cho thấy sơ đồ chân cho ESP32 và Esp8266 tương ứng.

Chân I8266C ESP2

Hình dưới đây cho thấy các chân I2C của ESP8266 NodeMCU:

Các thành phần cần thiết

Chúng tôi sẽ cần các thành phần sau để kết nối bảng ESP của chúng tôi với màn hình LCD I2C.

  1. ESP32 / ESP8266

  2. I2C LCD

  3. Dây kết nối

  4. Breadboard

Thực hiện theo sơ đồ bên dưới cho cả hai mô-đun ESP và kết nối chúng cho phù hợp. Nếu bạn đang sử dụng ESP32 cho dự án này, hãy kết nối thiết bị ESP32 với màn hình LCD I2C như thể hiện trong sơ đồ sơ đồ bên dưới:

Tương tự, bạn đang sử dụng ESP8266 NodeMCU cho dự án này, hãy kết nối thiết bị ESP8266 với màn hình LCD I2C như thể hiện trong sơ đồ sơ đồ bên dưới:

Chân VCC được kết nối với chân Vin từ ESP32 / ESP8266 để cấp nguồn. Cả hai căn cứ của hai thiết bị đều được kết nối chung. Chân SCL của I2C LCD được kết nối với chân SCL mặc định của bo mạch. Tương tự như vậy, chân SDA được kết nối với chân SDA mặc định của bảng.

Lấy địa chỉ LCD I2C

Khi bạn kết nối màn hình I2C của mình với ESP32 / ESP8266, bạn cần kiểm tra địa chỉ của nó. Bởi vì mọi thiết bị I2C đều có một địa chỉ được liên kết với nó. Đối với nhiều thiết bị của I2C LCD, địa chỉ mặc định được 0x27 trong đó 0x hiển thị định dạng hex của các số. Nhưng địa chỉ 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 miếng đệm A0, A1 và A2 trên bộ điều khiển I2C trên thiết bị này.

Bây giờ sao chép mã này và tải nó lên bảng của bạn với màn hình LCD I2C đã được kết nối với nó.

Mã này sẽ quét tìm bất kỳ thiết bị I2C nào được kết nối với ESP32 và sẽ chỉ định số lượng thiết bị có địa chỉ trong bảng điều khiển shell. Nếu sử dụng ESP8266, hãy thay thế chân SDA và SCL một cách thích hợp.

import machine

 

sdaPIN=machine.Pin(21)  #for ESP32

sclPIN=machine.Pin(22)

 

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

 

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

Thông báo này cho thấy địa chỉ của màn hình tinh thể lỏng đang 0x27. Rất có thể bạn sẽ nhận được cùng một địa chỉ cho LCD với 16 cột và 2 hàng.

Thư viện I2C LCD MicroPython

Đối với dự án này, chúng tôi sẽ yêu cầu hai thư viện: Sao chép cả hai thư viện này và lưu chúng trong thiết bị MicroPython của bạn với các tên tệp tương ứng. Mở một tệp mới trong 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 ESP32 / ESP8266 với tên lcd_api.py và i2c_lcd.py trong thư mục lib.

MicroPython Hiển thị Văn bản / Số trên I2C LCD

Trong phần này, chúng ta sẽ hiển thị một thông báo cùng với các con số trên màn hình.

import machine

from machine import Pin, SoftI2C

from lcd_api import LcdApi

from i2c_lcd import I2cLcd

from time import sleep

 

I2C_ADDR = 0x27

totalRows = 2

totalColumns = 16

 

i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)     #initializing the I2C method for ESP32

#i2c = I2C(scl=Pin(5), sda=Pin(4), freq=10000)       #initializing the I2C method for ESP8266

 

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

 

while True:

    lcd.putstr("I2C LCD Tutorial")

    sleep(2)

    lcd.clear()

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

    sleep(2)

    lcd.clear()

    for i in range(11):

        lcd.putstr(str(i))

        sleep(1)

        lcd.clear()

Mã này sẽ hiển thị thông báo "Hướng dẫn I2C LCT" trong hai giây. Màn hình sẽ xóa. Sau đó, một thông báo khác "Cho phép đếm 0-10!" sẽ được hiển thị trong hai giây. Sau đó, nó sẽ xóa màn hình LCD và hiển thị số từ 0 đến 10 sau thời gian trễ 1 giây.

Mã hoạt động như thế nào?

Bây giờ chúng ta sẽ thấy hoạt động của code.

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

import machine

from machine import SoftI2C, Pin

from lcd_api import LcdApi

from i2c_lcd import I2cLcd

from time import sleep

Tiếp theo chỉ định địa chỉ của thiết bị LCD I2C của bạn. Chúng tôi đã chạy bản phác thảo được đưa ra trước đó và thấy bản phác thảo của chúng tôi là 0x27.

Ngoài ra, totalRows và totalColumns chỉ định số hàng và cột của màn hình mà trong trường hợp của chúng tôi là 16×2. Nếu bạn 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

Đối tượng i2c

Bây giờ, chúng ta khởi tạo phương thức SoftI2C bằng cách đưa ra ba đối số cho nó. Đối số đầu tiên chỉ định chân GPIO cho SCL. Điều này được đưa ra dưới dạng GPIO22 cho ESP32 và GPIO5 cho ESP8266. Tham số thứ hai chỉ định chân GPIO cho SDA. Điều này được đưa ra dưới dạng GPIO21 cho ESP32 và GPIO4 cho ESP8266. Hãy nhớ rằng, đây là các chân I2C mặc định cho SCL và SDA mà chúng tôi đã sử dụng cho cả hai bảng ESP tương ứng. Tham số thứ ba chỉ định tần số tối đa cho SCL được sử dụng.

i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)     #initializing the I2C method for ESP32

#i2c = I2C(scl=Pin(5), sda=Pin(4), freq=10000)       #initializing the I2C method for ESP8266

Đối tượng LCD

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

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

Hiển thị văn bản/số

Tiếp theo, chúng tôi chạy một vòng lặp vô hạn bên trong mà đầu tiên chúng tôi hiển thị thông báo "Hướng dẫn LCD I2C" trong 2 giây. Sau đó hiển thị "Cho phép đếm 0-10!" trong 2 giây sau khi xóa màn hình. Sau đó, chúng tôi xóa màn hình bằng phương thức clear () trên đối tượng lcd. Sau đó, chúng tôi sử dụng vòng lặp for để hiển thị các số từ 0 đến 10 sau thời gian trễ 1 giây mỗi lần. Sau mỗi số được hiển thị, hãy đợi một giây, sau đó xóa() sẽ xóa văn bản.

while True:

    lcd.putstr("I2C LCD Tutorial")

    sleep(2)

    lcd.clear()

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

    sleep(2)

    lcd.clear()

    for i in range(11):

        lcd.putstr(str(i))

        sleep(1)

        lcd.clear()

Demonstration

Để kiểm tra chương trình này với ESP32 / ESP8266, hãy tải tệp main.py này lên bảng của bạn. Sau khi mã đượ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 LCD bắt đầu hiển thị các thông báo:

Để kiểm tra chương trình này với ESP32 / ESP8266, hãy tải tệp main.py này lên bảng của bạn. Sau khi mã đượ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 LCD bắt đầu hiển thị các thông báo:

Hiển thị các ký tự tùy chỉnh trên I2C LCD bằng ESP32 / ESP8266 MicroPython

Trong phần này, chúng tôi 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 mà chúng tôi đang sử dụng, chúng tôi cũng có tùy chọn hiển thị các ký tự tùy chỉnh. Trong màn hình LCD cụ thể này, mỗi khối bao gồm 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 mỗi pixel bên trong mảng byte.

Trang web sau đây mở ra. Chọn loại dữ liệu là 'Hex'.

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

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

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 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 ESP32 / ESP8266

MicroPython Hiển thị ký tự tùy chỉnh trên màn hình LCD I2C

import machine

from machine import SoftI2C, Pin

from lcd_api import LcdApi

from i2c_lcd import I2cLcd

 

I2C_ADDR = 0x27

totalRows = 2

totalColumns = 16

 

i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)     #initializing the I2C method for ESP32

#i2c = I2C(scl=Pin(5), sda=Pin(4), freq=10000)       #initializing the I2C method for ESP8266

 

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)+" ESP32 with I2C LCD "+chr(1))

Mã này hiển thị thông báo 'ESP32 với màn hình LCD I2C' ở giữa ký tự tùy chỉnh trái tim và ký tự tùy chỉnh mặt cười.

Mã hoạt động như thế nào?

Hầu hết các mã tương tự như bản phác thảo trước đó. Hãy để chúng tôi giải thích các phần mà nhân vật tùy chỉnh có liên quan.

Tạo một bytearray cho một 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, chúng tôi cũng tạo một bytearray 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, chúng ta sẽ tạo ký tự tùy chỉnh bằng cách gọi lcd.custom_char() và truyền một số 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à 'ESP32 với I2C LCD' theo sau là nhân vật mặt cười trên màn hình.

lcd.putstr(chr(0)+" ESP32 with I2C LCD "+chr(1))

Demonstration

Để kiểm tra chương trình này với ESP32 / ESP8266, hãy tải tệp main.py này lên bảng của bạn. Sau khi mã đượ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 LCD bắt đầu hiển thị thông báo.

ESP32 và ESP8266 với màn hình hiển thị ký tự tùy chỉnh I2C LCD

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