- Giao thức truyền thông I2C là gì?
- Vật liệu thiết yếu
- Mô-đun I2C
- Sơ đồ mạch
- Mã để tìm địa chỉ bộ điều khiển I2C
- Mã cho ESP32
Trong hướng dẫn trước, OLED được giao tiếp với ESP32 bằng giao tiếp SPI sử dụng 5 chân. Trong hướng dẫn này, chúng tôi giao tiếp LCD 16x2 với ESP32, chỉ sử dụng 2 chân, với sự trợ giúp của giao tiếp I2C. Nó làm giảm số lượng chân được sử dụng bởi ESP32 để số lượng chân ESP32 vẫn còn trống nhiều hơn để giao tiếp với các cảm biến khác nhau.
Giao thức truyền thông I2C là gì?
Thuật ngữ I2C là viết tắt của “ Inter Integrated Circuits”. Nó thường được ký hiệu là IIC hoặc I bình phương C hoặc thậm chí là giao thức giao diện 2 dây (TWI) ở một số nơi nhưng tất cả đều có nghĩa giống nhau. I2C là một giao thức truyền thông đồng bộ, có nghĩa là cả hai thiết bị đang chia sẻ thông tin phải chia sẻ một tín hiệu đồng hồ chung. Nó chỉ có hai dây, SDA và SCL để chia sẻ thông tin, trong đó SCL được sử dụng cho tín hiệu đồng hồ và SDA được sử dụng để gửi và nhận dữ liệu.
Bạn có thể mua mô-đun LCD I2C trong đó Bộ điều khiển LCD I2C1602 được tích hợp sẵn hoặc bạn chỉ cần mua bộ điều khiển I2C để giao tiếp LCD 16x2 với ESP32.
Vật liệu thiết yếu
- ESP32
- Màn hình LCD 16 * 2
- Bộ điều khiển LCD I2C
- Dây điện
- Breadboard
Mô-đun I2C
Bộ điều khiển I2C có IC PCF8574 cung cấp khả năng mở rộng I / O từ xa có mục đích chung thông qua đồng hồ nối tiếp bus I2C hai chiều (SCL) và dữ liệu nối tiếp (SDA). Nó là IC rất hữu ích và có thể được sử dụng trong bảng hiệu LED, màn hình, bàn phím, điều khiển công nghiệp, v.v. Có 8 chân I / O, 3 chân (A0, A1, A2) cho địa chỉ bus I2C và chân SDA, SCL.
Bảng điều khiển LCD có chiết áp sẵn có để kiểm soát độ tương phản của LCD.
Sơ đồ chân của IC và bộ điều khiển LCD được đưa ra dưới đây.
Sơ đồ mạch
Các kết nối cho giao diện LCD với ESP32 được đưa ra bên dưới
- kết nối chân 1-16 của mô-đun I2C với chân 1-16 của màn hình LCD.
- Chân SDA của mô-đun I2C -> Chân SDA của ESP32 tức là D21
- Chân SCL của mô-đun I2C -> Chân SCL của ESP32 tức là D22
Tôi đã kết nối 3v của ESP32 với 5v của I2C chỉ để trình diễn nhưng chúng tôi cần nguồn cung cấp 5V cho mô-đun I2C để hiển thị dữ liệu đúng cách, vì ESP32 chỉ có thể cung cấp 3,3 volt thấp cho mô-đun I2C và dữ liệu sẽ không hiển thị rõ ràng. Vì vậy, tốt hơn là sử dụng nguồn cung cấp 5V bên ngoài.
Chúng tôi cần các tệp bảng cho ESP32, vì vậy nếu bạn chưa quen với ESP32 thì trước tiên hãy làm theo Hướng dẫn Bắt đầu với ESP32 và sau đó quay lại đây. Bạn cũng có thể kết nối LCD với ESP32 mà không cần I2C nhưng sẽ tốn nhiều chân của ESP32 hơn.
Mã để tìm địa chỉ bộ điều khiển I2C
Trước khi đi vào mã chính, trước tiên chúng ta phải tìm địa chỉ của mô-đun I2C.
Bộ điều khiển I2C có bit ADDRESS có sẵn được sử dụng để điều khiển bus I2C. ĐỊA CHỈ mặc định là 0x27 nhưng trong một số trường hợp, nó có thể là 0x3f. Vì vậy, để kiểm tra địa chỉ của bộ điều khiển I2C, hãy kết nối mạch điện như hình trên tải lên mã đã cho bên dưới và mở màn hình nối tiếp, Bạn sẽ thấy địa chỉ ở dạng thập lục phân.
#include
Lưu ý rằng chúng tôi sử dụng Địa chỉ này trong mã giao diện LCD của chúng tôi.
Trong bộ điều khiển I2C, như bạn có thể thấy có ba jumper / miếng hàn có nhãn là A0, A1 và A2. Chúng được sử dụng để thay đổi địa chỉ của mô-đun. Đây là cách địa chỉ thay đổi từ giá trị mặc định 0x27 hoặc 0x3F, nếu bạn kết nối các miếng địa chỉ với nhau. (1 = Chưa kết nối. 0 = Đã kết nối):
A0 |
A1 |
A2 |
Địa chỉ HEX |
1 |
1 |
1 |
0x27 |
0 |
1 |
1 |
0x26 |
1 |
0 |
1 |
0x25 |
0 |
0 |
1 |
0x24 |
1 |
1 |
0 |
0x23 |
0 |
1 |
0 |
0x22 |
1 |
0 |
0 |
0x21 |
0 |
0 |
0 |
0x20 |
Mã cho ESP32
Đầu tiên chúng ta cần một thư viện LiquidCrystal_I2C cho mô-đun LCD I2C. Thư viện Liquidcrsytal thông thường sẽ không hoạt động vì chúng tôi đang sử dụng I2C ở đây.
Tải xuống thư viện từ https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library này
Mã được viết theo cách mà bất cứ thứ gì được nhập trên màn hình nối tiếp, sẽ được hiển thị trên màn hình LCD. Arduino IDE đã được sử dụng để viết và tải lên mã của chúng tôi.
Đầu tiên, chúng ta phải bao gồm thư viện dây cho giao tiếp I2C đi kèm với Arduino IDE.
#include
Sau đó, đối với LCD I2C, hãy bao gồm LiquidCrystal_I2C.h đã được tải xuống trước đó.
#include
Sau đó đặt địa chỉ LCD I2C thành 0x27 hoặc địa chỉ bạn nhận được bằng cách chạy mã máy quét được cung cấp ở trên để hiển thị dòng 16 ký tự 2 dòng
Màn hình LCD LiquidCrystal_I2C (0x27, 16,2);
Trong chức năng thiết lập , khởi tạo giao tiếp nối tiếp và màn hình LCD 16 ký tự 2 dòng và bật đèn nền. Nếu bạn muốn tắt việc sử dụng đèn nền LCD .noBacklight () và thay đổi setCursor () chức năng theo sở thích của bạn.
void setup () { Serial.begin (9600); lcd.init (); LCD đèn nền(); lcd.setCursor (0,0); lcd.print ("Hello, world!"); chậm trễ (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); chậm trễ (3000);
Đầu tiên LCD sẽ hiển thị hướng dẫn sử dụng Serial Monitor và nhập các ký tự để hiển thị.
Đặt tùy chọn Serial Monitor thành "No Line Ending"
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Sử dụng Ser. Monitor"); lcd.setCursor (0,1); lcd.print ("Loại để hiển thị"); }
chức năng vòng lặp sẽ liên tục kiểm tra bất kỳ dữ liệu nối tiếp nào đến từ cổng nối tiếp bằng cách sử dụng hàm Serial.available (). Nếu có một thông điệp, nó chờ đợi thứ hai và in thông báo trên màn hình LCD sử dụng LCD .write () và Serial.read () chức năng.
void loop () {{// khi các ký tự đến cổng nối tiếp… if (Serial.available ()) {delay (100); // đợi một chút để toàn bộ thông báo đến lcd.clear (); // xóa màn hình while (Serial.available ()> 0) {// đọc tất cả các ký tự có sẵn lcd.write (Serial.read ()); // hiển thị từng ký tự lên LCD}}}}
Mã cạnh tranh được cung cấp bên dưới, vì vậy hãy tải mã lên và mở màn hình nối tiếp. Sau đó nhập tin nhắn và nhấn enter. Tin nhắn của bạn sẽ được hiển thị trên màn hình LCD.
Nếu bạn không nhận được phản hồi thích hợp hoặc không có phản hồi trên màn hình LCD, hãy kiểm tra địa chỉ bộ điều khiển I2C của bạn hoặc quét lại bằng mã đã cho ở trên để lấy địa chỉ chính xác.