- תצוגת OLED
- רכיבים נדרשים
- חיבורי פין SPI בין NodeMCU לתצוגת OLED
- תכנות NodeMCU לממשק OLED
- המרת תמונה לערכי מפת סיביות
במדריך זה נתממש את תצוגת OLED עם NodeMCU ESP8266. NodeMCU היא פלטפורמת IoT קוד פתוח הכוללת קושחה הפועלת במחיר נמוך בעל יכולת Wi-Fi ESP8266 Wi-Fi SoC מבית Espressif Systems. יש לו סיכות GPIO לחיבור ציוד היקפי אחר והוא תומך בתקשורת טורית באמצעות סיכות SPI, I2C ו- UART. יש לו גם סיכות עבור ADC ו- PWM. בעבר התממשקנו OLED עם מיקרו-בקר אחר כולל הבקר ממשפחת ESP (ESP32):
- ממשק תצוגת OLED SSD1306 עם פטל פטל
- ממשק תצוגת OLED SSD1306 עם Arduino
- בנה שעון חכם על ידי ממשק תצוגת OLED עם טלפון אנדרואיד באמצעות Arduino
- שעון אינטרנט באמצעות ESP32 ותצוגת OLED
במדריך זה נשתמש בפרוטוקול SPI לממשק מונוכרום 7 פינים SSD1306 0.96 תצוגת OLED עם NodeMCU ונלמד להציג תמונה על מסך OLED עם NodeMCU ESP8266.
תצוגת OLED
דיודה פולטת אור אורגנית (OLED) היא סוג של דיודה פולטת אור בה שכבה פולטת אור אשר עשויה תרכובת אורגנית פולטת אור כאשר מסופק זרם חשמלי. שכבה זו ממוקמת בין שתי אלקטרודות. טכנולוגיה זו משמשת במסכי תצוגה כמו מחשבים, טלוויזיות, סמארטפונים וכו '. תצוגות OLED כוללות אור משלהן ואינן זקוקות לתאורה אחורית כמו ב- LCD, לכן הן חסכוניות בחשמל ומשמשות למיקרו-בקרים רבים. יתרון נוסף בשימוש בתצוגות OLED על גבי LCD הוא הצגת גרפיקה באיכות טובה וטובה יותר על גבי OLED. למידע נוסף על טכנולוגיית תצוגת OLED כאן.
ישנם סוגים שונים של תצוגות OLED הזמינות בשוק. תצוגות אלו מאופיינות על בסיס צבע, מספר פינים, בקר IC וגודל המסך. על בסיס צבע, ניתן להשיג OLED בצבעי כחול מונוכרום, לבן מונוכרום וצהוב / כחול. ועל בסיס תקשורת קיימים בעיקר שני סוגים של OLED - 3pin ו- 7pin. ניתן להשתמש ב- OLED עם 3 פינים במצב תקשורת I2C וניתן להשתמש ב- OLED עם 7 פינים במצב SPI או במצב I2C.
במדריך זה נשתמש בתצוגת OLED " מונוכרום 7 פינים SSD1306 0.96 " אשר רוחבה 128 פיקסלים ואורכה 64 פיקסלים. תצוגה זו יכולה לעבוד על פרוטוקולי תקשורת SPI ו- I2C. נשתמש בפרוטוקול SPI במדריך זה. SSD1306 IC קיים ב- OLED זה שעוזר להציג את הפיקסלים על המסך.
רכיבים נדרשים
- מונוכרום 7 פינים SSD1306 0.96 ”OLED
- NodeMCU ESP8266
- כבל מיקרו USB
- קרש לחם
- חוטי מגשר בין זכר לזכר
חיבורי פין SPI בין NodeMCU לתצוגת OLED
להלן תרשים המעגלים לחיבור תצוגת OLED 7 פינים עם NodeMCU כדי לתקשר באמצעות פרוטוקול תקשורת טורית SPI.
הטבלה שלהלן מציגה את החיבורים בין תצוגת OLED ו- NodeMCU ESP8266. סיכה GND עוברת ל- NodeMCU GND, ניתן לחבר סיכה VDD ל -3.3 V או 5 V, SCK הוא סיכת השעון בתצוגת OLED המחוברת ל- D5 של NodeMCU לשעון SPI. סיכת SDA שהיא סיכת MOSI בממשק OLED של SPI עוברת ל- D7 של NodeMCU. סיכת RESET עוברת ל- D3. DC, סיכת פקודת הנתונים מחוברת ל- D2 של NodeMCU. הסיכה האחרונה היא CS הולך ל- D8, בחירת שבבים של NodeMCU.
לא. |
תצוגת אולד |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3.3 וולט |
3 |
SCK |
D5 |
4 |
MOSI (SPI) או SDA (I2C) |
D7 |
5 |
אִתחוּל |
D3 |
6 |
זֶרֶם יָשָׁר |
D2 |
7 |
CS |
D8 |
כאן נשתמש בספריות " Adafruit _SSD1306.h" ו- " Adafruit_GFX.h " לצורך ממשק OLED עם NodeMCU. פתח את Arduino IDE והתקן את הגרסה האחרונה מ- Arduino IDE ( סקיצה> כלול ספרייה> נהל ספריות או Ctrl + Shift_I ).
מאז גודל הפיקסלים של מזהה התצוגה OLED שלנו 128x64, לכן עלינו לשנות את קובץ הכותרת של Adafruit_SSD1306. פתח את ספריות Arduino, עבור אל Adafruit_SSD1306 ופתח את קובץ הכותרת שלו ( Adafruit _SSD1306.h ). הגב את השורה " #define SSD1306_128_32 " ובטל את התגובה של השורה "#define SSD1306_128_64 " כפי שמוצג בתמונה למטה ואז שמור את הקובץ. כברירת מחדל, הספרייה הזו מגיעה עם "# define SSD1306_128_32 ".
לבסוף שנה את מספרי הסיכות בדוגמה " ssd1306_128x64_spi " Adafruit SSD1306 בהתאם לטבלה המוצגת לעיל. כעת, כאשר תריץ את הסקיצה לאחר חיבור נכון של תצוגת OLED עם NodeMCU, תראה את הלוגו של Adafruit בתצוגת OLED שנשמר כברירת מחדל בספריה. אחרי הלוגו של Adafruit הוא מציג גרפיקה רבות אחרות כמו קווים, מלבנים, משולש, עיגולים, מחרוזות, מספרים, אנימציות ומפת סיביות. כאן במדריך זה נלמד כיצד להציג כל תמונה ב- OLED באמצעות NodeMCU ESP8266.
תכנות NodeMCU לממשק OLED
כמו תמיד ניתן בסוף קוד שלם, כאן הסברנו את הקוד בפירוט.
התחל את הקוד על ידי ייבוא ספריות נחוצות. מכיוון שאנו משתמשים בפרוטוקול SPI, אנו נייבא את ספריית "SPI.h" ונייבא גם את "Adafruit_GFX.h" ו- "Adafruit_SSD1306.h" לתצוגת OLED.
#לִכלוֹל
גודל ה- OLED שלנו הוא 128x64 ולכן אנו מגדירים את רוחב המסך וגובהו כ 128 ו- 64 בהתאמה. אז הגדירו את המשתנים לסיכות OLED המחוברות ל- NodeMCU לתקשורת SPI.
# הגדר SCREEN_WIDTH 128 // רוחב תצוגת OLED, בפיקסלים # הגדר SCREEN_HEIGHT 64 // גובה תצוגת OLED, בפיקסלים // הצהרה לתצוגה SSD1306 המחוברת באמצעות תוכנת SPI (מקרה ברירת מחדל): # הגדר OLED_MOSI D7 # הגדר OLED_CLK D5 # הגדר OLED_DC D2 #define OLED_CS D8 #define OLED_RESET D3 Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
אתחל את תצוגת ה- OLED באמצעות SSD1306_SWITCHCAPVCC כדי ליצור 3.3V פנימית כדי לאתחל את התצוגה.
אם (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("הקצאת SSD1306 נכשלה")); ל(;;); // אל תמשיך, לולאה לנצח }
תצוגת מסך OLED מנוקה לפני הצגת דבר על ידי קריאה לפונקציה display.clearDisplay (). אנו להגדיר את גודל הגופן 2 -ידי קריאה לפונקציה setTextSize (font-size), וכן להגדיר את צבע הטקסט ואת מיקום הסמן באמצעות setTextColor ו setCursor פונקציה . הפקודה Display.display () משמשת להעברת נתונים לזיכרון הפנימי של בקר SSD1306. לאחר ההעברה, הפיקסל מופיע על המסך. כעת אנו יכולים להתחיל לגלול את הטקסט בדרכים שונות על ידי קריאה ל- display.startscrollright (x-pos, y-pos) ו- display.startscrollleft (x-pos, y-pos) למשך הזמן שניתן בפונקציית השהיה. ניתן להפסיק את גלילת הטקסט באמצעות display.stopscroll ().
בטל רול טקסט (חלל) {display.clearDisplay (); // נקה את מסך התצוגה של תצוגת OLED.setTextSize (2); // צייר תצוגת טקסט בקנה מידה X. setTextColor (WHITE); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // הצג עיכוב טקסט ראשוני (100); // גלול לכיוונים שונים, תוך השהיה בין לבין: display.startscrollright (0x00, 0x0F); עיכוב (2000); display.stopscroll (); עיכוב (1000); display.startscrollleft (0x00, 0x0F); עיכוב (2000); display.stopscroll (); עיכוב (1000); display.startscrolldiagright (0x00, 0x07); עיכוב (2000); display.startscrolldiagleft (0x00, 0x07); עיכוב (2000); display.stopscroll (); עיכוב (1000); }
אנו קוראים לפונקציה display.drawBitmap () שלוקחת 6 פרמטרים (קואורדינטות x, קואורדינטות y, מערך מפת סיביות, רוחב, גובה וצבע) כדי לצייר את התמונה ב- OLED. מכיוון שגודל התצוגה שלנו הוא 128x64 ולכן הגדרנו את הרוחב והגובה כ- 128 ו- 64 בהתאמה. כאן מערך מפת הסיביות מכיל את מידע הפיקסלים כדי לצייר את הפיקסל על המסך כדי ליצור את התמונה. ניתן ליצור מערך מפת סיביות זה באופן מקוון שמוסבר להלן או שישנן תוכנות רבות הזמינות להמרת תמונה למערך מפת סיביות.
const חתום char myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x01, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0x03, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1e, 0x03, 0x3f, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x03, 0x3f, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3c, 0x03, 0x7f, 0x, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0xff, 0x, 0xff , 0xff , 0xff , 0xff , 0xff , 0xfe , 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0x0, 0x0 0x00, 0x00, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xe0, 0x00, 0x0f, 0x00, 0x7e, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xc0, 0x3f, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xf9, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xf9, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xe0, 0x06, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x01, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1e, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3c, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7c, 0x03, 0x3f, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xb0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0x03, 0x18, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff , 0x80, 0x00, 0x03, 0xbc, 0x07 , 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x03 , 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0f, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0xe0, 0x00, 0x1f, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0x70, 0x00, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0x1b, 0xfc, 0x01, 0xff, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x67, 0x00, 0x0f , 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7E, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; display.drawBitmap (35, 0, myBitmap, 128, 64, BLACK, WHITE); display.display ();
המרת תמונה לערכי מפת סיביות
ניתן ליצור מפת סיביות מקוונת מ- http://javl.github.io/image2cpp/. העלה את קובץ התמונה שברצונך להציג ב- OLED והגדר את הגודל 128x64. תוצג תמונת תצוגה מקדימה ואז ייווצר מערך מפת סיביות.
להלן צילומי מסך מראה את התהליך להפקת ערך מפת הסיביות של כל תמונה.
לבסוף העלה את הקוד השלם ל- NodeMCU ESP8266 ותראה תמונה המוצגת על מסך OLED. כאן אנו מציגים לוגו CircuitDigest בתצוגת OLED.