במדריך הקודם, OLED מתממשק עם ESP32 באמצעות תקשורת SPI המשתמשת ב -5 פינים. במדריך זה אנו מתממשקים 16x2 LCD עם ESP32, באמצעות 2 פינים בלבד, בעזרת תקשורת I2C. זה מצמצם את מספר הפינים המשמשים את ESP32 כך שמספר גדול יותר של סיכות ESP32 יישארו פנויות לממשק חיישנים שונים.
מהו פרוטוקול תקשורת I2C?
המונח I2C מייצג " מעגלים אינטגרטיביים בין- לאומיים". בדרך כלל זה מסומן כ- IIC או בריבוע C או אפילו כפרוטוקול ממשק דו חוטי (TWI) במקומות מסוימים, אך כל זה אומר אותו דבר. I2C הוא פרוטוקול תקשורת סינכרוני, כלומר שני המכשירים שמשתפים את המידע חייבים לשתף אות שעון משותף. יש לו רק שני חוטים, SDA ו- SCL לשיתוף מידע, מתוכם SCL משמש לאות השעון ו- SDA משמש לשליחה וקבלה של נתונים.
אתה יכול לקנות מודול LCD I2C שבו I2C1602 בקר LCD מובנה או שאתה יכול פשוט לקנות בקר I2C לממשק 16x2 LCD עם ESP32.
חומרים נדרשים
- ESP32
- 16 * 2 תצוגת LCD
- בקר LCD I2C
- חוטים
- קרש לחם
מודול I2C
לבקר I2C יש IC PCF8574 המספק הרחבת קלט / פלט מרחוק לשימוש כללי באמצעות השעון הסידורי דו-כיווני באוטובוס I2C-bus (SCL) ונתונים סידוריים (SDA). זה יעיל מאוד IC וניתן להשתמש בו בלוחות שלטי LED, תצוגות, רפידות מפתח, בקרה תעשייתית וכו '. ישנם 8 פינים של קלט / פלט, 3 פינים (A0, A1, A2) לכתובת אוטובוס I2C ו- SDA, סיכות SCL.
לוח בקר LCD כולל פוטנציומטר מובנה לשליטה בניגודיות של LCD.
תרשימי סיכות של בקר IC ו- LCD מובאים להלן.
תרשים מעגל
חיבורים לממשק LCD עם ESP32 מובאים להלן
- חבר את סיכה 1-16 של מודול I2C לפין 1-16 של תצוגת LCD.
- סיכת SDA של מודול I2C -> סיכה SDA של ESP32 כלומר D21
- סיכת SCL של מודול I2C -> סיכת SCL של ESP32 כלומר D22
חיברתי 3V של ESP32 ל- 5V של I2C לצורך הדגמה בלבד, אך אנו זקוקים לאספקת 5V כדי שמודול I2C יציג נתונים כראוי, מכיוון ש- ESP32 יכול לתת רק 3.3 וולט הנמוך עבור מודול I2C והנתונים לא נראים בבירור. לכן, עדיף להשתמש באספקת 5V חיצונית.
אנו זקוקים לקבצי לוח עבור ESP32, כך שאם אתה חדש ב- ESP32, עקוב תחילה אחר תחילת העבודה עם מדריך ESP32 ואז קפץ לכאן. אתה יכול גם לחבר LCD עם ESP32 ללא I2C אבל זה ייקח יותר סיכות של ESP32.
קוד למציאת כתובת בקר I2C
לפני שנכנס לקוד הראשי עלינו למצוא תחילה את הכתובת של מודול I2C.
לבקר I2C יש ביט ADDRESS מובנה המשמש לבקרת אוטובוס I2C. כתובת ברירת המחדל היא 0x27 אך במקרים מסוימים היא יכולה להיות 0x3f. לכן, כדי לבדוק את הכתובת של בקר I2C, חבר את המעגל כמוצג לעיל העלה את הקוד הנתון למטה ופתח צג טורי, תראה את הכתובת בהקסדצימלי.
#לִכלוֹל
שים לב שאנחנו משתמשים בכתובת זו בקוד ממשק ה- LCD שלנו.
בבקר I2C, כפי שאתה יכול לראות ישנם שלושה מגשרים / רפידות הלחמה שכותרתו A0, A1 ו- A2. אלה משמשים לשינוי כתובת המודול. כך משתנה הכתובת מערך ברירת המחדל 0x27 או 0x3F, אם אתה מחבר את רפידות הכתובת יחד. (1 = לא מחובר. 0 = מחובר):
A0 |
A1 |
A2 |
כתובת 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 |
קוד ל- ESP32
ראשית אנו זקוקים לספריית LiquidCrystal_I2C עבור מודול LCD I2C. ספריית Liquidcrsytal רגילה לא תפעל מכיוון שאנחנו משתמשים ב- I2C כאן.
הורד ספרייה מ
הקוד כתוב באופן שכל מה שמוקלד על גבי צג סדרתי, יוצג על גבי LCD. Arduino IDE שימש לכתיבת והעלאת הקוד שלנו.
ראשית, עלינו לכלול ספריית חוטים לתקשורת I2C המגיעה עם Arduino IDE.
#לִכלוֹל
ואז עבור I2C LCD, כלול את LiquidCrystal_I2C.h שהורדת קודם לכן.
#לִכלוֹל
לאחר מכן הגדר את כתובת ה- LCD I2C ל- 0x27 או את הכתובת שקיבלת על ידי הפעלת קוד הסורק שניתן לעיל לתצוגה של 16 תווים דו-שורתיים
LiquidCrystal_I2C lcd (0x27, 16,2);
בשנת התקנת פונקציה, לאתחל את תקשורת LCD סדרה עבור 16 תווים 2 קווים להפעיל את התאורה האחורית. אם אתה רוצה לכבות את התאורה האחורית לשימוש LCD .noBacklight () ושינוי setCursor () פונקציה בהתאם להעדפותיך.
הגדרת חלל () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("שלום עולם!"); עיכוב (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); עיכוב (3000);
LCD יציג תחילה את ההוראות לשימוש בצג סידורי ויקליד את התווים שיוצגו.
הגדר את האפשרות Monitor Serial כ- "No Line End"
lcd.clear (); lcd.setCursor (0,0); lcd.print ("השתמש בצג סרתי"); lcd.setCursor (0,1); lcd.print ("סוג לתצוגה"); }
פונקציית הלולאה תבדוק באופן רציף את הנתונים הסידוריים הנכנסים מהיציאה הטורית באמצעות הפונקציה Serial.available (). אם יש הודעה, זה לחכות שנייה ולהדפיס את ההודעה על LCD באמצעות LCD .write () ו Serial.read () פונקציות.
לולאה בטלה () {{// כאשר תווים מגיעים מעל היציאה הטורית… אם (Serial.available ()) {עיכוב (100); // המתן מעט עד שההודעה כולה תגיע lcd.clear (); // נקה את המסך בזמן ש (Serial.available ()> 0) {// קרא את כל התווים הזמינים lcd.write (Serial.read ()); // להציג כל תו ב- LCD}}}}
קוד התחרות מופיע להלן, אז העלה את הקוד ופתח את המסך הטורי. לאחר מכן הקלד הודעה ולחץ על Enter. ההודעה שלך תוצג על גבי LCD.
אם אינך מקבל תגובה נכונה או אין תגובה על LCD, בדוק את כתובת בקר I2C שלך או סרוק אותה שוב עם הקוד הנתון לעיל כדי לקבל את הכתובת הנכונה.