- OLED displejs
- Nepieciešamās sastāvdaļas
- SPI tapu savienojumi starp NodeMCU un OLED displeju
- NodeMCU programmēšana OLED saskarnei
- Konvertējiet attēlu bitkartes vērtībās
Šajā apmācībā mēs saskarnēsim OLED displeju ar NodeMCU ESP8266. NodeMCU ir atvērtā pirmkoda IoT platforma, kas ietver programmaparatūru, kas darbojas ar zemu izmaksu Wi-Fi iespējotu ESP8266 Wi-Fi SoC no Espressif Systems. Tam ir GPIO tapas citu perifērijas ierīču savienošanai, un tas atbalsta seriālo komunikāciju, izmantojot SPI, I2C un UART tapas. Tam ir arī tapas ADC un PWM. Mēs iepriekš saskaramies ar OLED ar citu mikrokontrolleru, ieskaitot ESP saimes kontrolieri (ESP32):
- Saskarīgs SSD1306 OLED displejs ar Raspberry Pi
- Saskarīgs SSD1306 OLED displejs ar Arduino
- Veidojiet viedo pulksteni, izmantojot OLED displeja saskarni ar Android tālruni, izmantojot Arduino
- Interneta pulkstenis, izmantojot ESP32 un OLED displeju
Šajā apmācībā mēs izmantosim SPI protokolu, lai saskarētos ar vienkrāsainu 7 kontaktu SSD1306 0,96 OLED displeju ar NodeMCU un iemācīsimies attēlot attēlu OLED ekrānā ar NodeMCU ESP8266.
OLED displejs
Organiskais gaismu izstarojošais diods (OLED) ir sava veida gaismu izstarojošais diods, kurā gaismu izstarojošais slānis, kas izgatavots no organiskiem savienojumiem, izstaro gaismu, kad tiek piegādāta elektriskā strāva. Šis slānis ir novietots starp diviem elektrodiem. Šo tehnoloģiju izmanto displeja ekrānos, piemēram, datoros, televizoros, viedtālruņos utt. OLED displejiem ir sava gaisma, un tiem nav nepieciešams apgaismojums, piemēram, LCD, tāpēc tie ir energoefektīvi un tiek izmantoti ar daudziem mikrokontrolleriem. Vēl viena OLED displeju izmantošanas priekšrocība salīdzinājumā ar LCD ir lielas un labākas grafikas kvalitātes parādīšana OLED. Uzziniet vairāk par OLED displeja tehnoloģiju šeit.
Tirgū ir pieejami dažādi OLED displeji. Šos displejus raksturo, pamatojoties uz krāsu, tapu skaitu, kontroliera IC un ekrāna izmēru. Pamatojoties uz krāsu, OLED ir pieejami vienkrāsainā zilā, vienkrāsainā baltā un dzeltenā / zilā krāsā. Pamatojoties uz saziņu, galvenokārt ir pieejami divu veidu OLED - 3pin un 7pin. 3 kontaktu OLED var izmantot I2C sakaru režīmā un 7 kontaktu OLED var izmantot SPI vai I2C režīmā.
Šajā apmācībā mēs izmantosim “ Vienkrāsainu 7-pin SSD1306 0.96 ” OLED displeju, kura platums ir 128 pikseļi un garums - 64 pikseļi. Šis displejs var darboties gan ar SPI, gan I2C sakaru protokoliem. Šajā apmācībā mēs izmantosim SPI protokolu. Šajā OLED ir SSD1306 IC, kas palīdz attēlot pikseļus ekrānā.
Nepieciešamās sastāvdaļas
- Vienkrāsains 7 kontaktu SSD1306 0,96 ”OLED displejs
- MezglsMCU ESP8266
- Mikro USB kabelis
- Maizes dēlis
- Vīriešu un vīriešu džemperu vadi
SPI tapu savienojumi starp NodeMCU un OLED displeju
Zemāk ir shēma 7 kontaktu OLED displeja savienošanai ar NodeMCU, lai sazinātos, izmantojot SPI sērijas sakaru protokolu.
Zemāk esošajā tabulā parādīti savienojumi starp OLED displeju un NodeMCU ESP8266. GND tapa nonāk NodeMCU GND, VDD tapu var savienot ar 3.3V vai 5V, SCK ir OLED displeja pulksteņa tapa, kas savienota ar NodeMCU D5 SPI pulkstenim. SDA tapa, kas ir MOSI tapa SPI interfeisa OLED, nonāk NodeMCU D7. RESET tapa nonāk D3. DC, datu komandu tapa ir savienota ar NodeMCU D2. Pēdējā tapa ir CS, kas nonāk D8, izvēlieties mikroshēmu no NodeMCU.
Nē. |
Oled displejs |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3.3V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) vai SDA (I2C) |
D7 |
5 |
ATIESTATĪT |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Šeit OLED saskarnei ar NodeMCU izmantosim bibliotēku “ Adafruit _SSD1306.h” un “ Adafruit_GFX.h ”. Atveriet Arduino IDE un instalējiet jaunāko versiju no Arduino IDE ( Skice> Iekļaut bibliotēku> Pārvaldīt bibliotēkas vai Ctrl + Shift_I ).
Tā kā mūsu OLED displeja ID ir 128x64 pikseļu izmērs, mums ir jāmaina Adafruit_SSD1306 galvenes fails. Atveriet Arduino bibliotēkas, dodieties uz vietni Adafruit_SSD1306 un atveriet tās galvenes failu ( Adafruit _SSD1306.h ). Komentējiet rindiņu “ #define SSD1306_128_32 ” un noņemiet komentāru no rindiņas “#define SSD1306_128_64 ”, kā parādīts zemāk esošajā attēlā, un pēc tam saglabājiet failu. Pēc noklusējuma šai bibliotēkai ir “# define SSD1306_128_32 ”.
Visbeidzot mainiet piespraudes numurus “ ssd1306_128x64_spi ” Adafruit SSD1306 piemērā atbilstoši tabulai, kas parādīta abve. Tagad, palaižot skici pēc pareiza OLED displeja savienojuma ar NodeMCU, OLED displejā redzēsiet Adafruit logotipu, kas pēc noklusējuma tiek saglabāts bibliotēkā. Pēc Adafruit logotipa tas parāda daudzas citas grafikas, piemēram, līnijas, taisnstūrus, trīsstūri, apļus, virknes, skaitļus, animācijas un bitkartes. Šeit šajā apmācībā mēs uzzināsim, kā OLED attēlot jebkuru attēlu ar NodeMCU ESP8266.
NodeMCU programmēšana OLED saskarnei
Tā kā beigās vienmēr tiek norādīts pilnīgs kods, šeit mēs esam detalizēti izskaidrojuši kodu.
Sāciet kodu , importējot nepieciešamās bibliotēkas. Tā kā mēs izmantojam SPI protokolu, mēs importēsim “SPI.h” bibliotēku, kā arī “Adafruit_GFX.h” un “Adafruit_SSD1306.h” OLED displejam.
# iekļaut
Mūsu OLED izmērs ir 128x64, tāpēc mēs iestatām ekrāna platumu un augstumu attiecīgi 128 un 64. Tātad definējiet mainīgos OLED tapām, kas savienotas ar NodeMCU SPI komunikācijai.
#define SCREEN_WIDTH 128 // OLED displeja platums pikseļos #define SCREEN_HEIGHT 64 // OLED displeja augstums pikseļos // Deklarācija SSD1306 displejam, kas savienots, izmantojot programmatūras SPI (noklusējuma gadījums): #define OLED_MOSI D7 #define OLED_CLK D5 #define OLED_DC D2 #define OLED_CS D8 #define OLED_RESET D3 Adafruit_SSD1306 displejs (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Inicializējiet OLED displeju, izmantojot SSD1306_SWITCHCAPVCC, lai iekšēji ģenerētu 3,3 V displeja inicializēšanai.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("SSD1306 piešķiršana neizdevās")); priekš(;;); // neturpiniet, cilpa uz visiem laikiem }
OLED ekrāna displejs tiek notīrīts, pirms tiek parādīts kaut kas, izsaucot funkciju display.clearDisplay (). Mēs iestatījām fonta lielumu uz 2, izsaucot funkciju setTextSize (font-size), un iestatiet teksta krāsu un kursora pozīciju, izmantojot funkciju setTextColor un setCursor . Komanda Display.display () tiek izmantota datu pārsūtīšanai uz SSD1306 kontroliera iekšējo atmiņu. Pēc pārsūtīšanas ekrānā parādās pikseļi. Tagad mēs varam sākt ritināt tekstu dažādos veidos, izsaucot display.startscrollright (x-pos, y-pos) un display.startscrollleft (x-pos, y-pos) par laiku, kas norādīts kavēšanās funkcijā. Teksta ritināšanu var apturēt, izmantojot funkciju display.stopscroll ().
void testscrolltext (void) {display.clearDisplay (); // notīrīt OLED display.setTextSize (2) displeja ekrānu; // Zīmējiet 2X mēroga teksta displeju.setTextColor (WHITE); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // Rādīt sākotnējo teksta aizkavi (100); // Ritiniet dažādos virzienos, pauzējot pa vidu: display.startscrollright (0x00, 0x0F); kavēšanās (2000); display.stopscroll (); kavēšanās (1000); display.startscrollleft (0x00, 0x0F); kavēšanās (2000); display.stopscroll (); kavēšanās (1000); display.startscrolldiagright (0x00, 0x07); kavēšanās (2000); display.startscrolldiagleft (0x00, 0x07); kavēšanās (2000); display.stopscroll (); kavēšanās (1000); }
Mēs izsaucam funkciju display.drawBitmap (), kurai nepieciešami 6 parametri (x-koordinātas, y-koordinātas, bitkartes masīvs, platums, augstums un krāsa), lai zīmētu attēlu OLED. Tā kā mūsu displeja izmērs ir 128x64, platumu un augstumu mēs attiecīgi iestatām uz 128 un 64. Šeit bitkartes masīvā ir informācija par pikseļiem, lai zīmētu pikseļu uz ekrāna, lai izveidotu attēlu. Šo bitkartes masīvu var ģenerēt tiešsaistē, kas ir paskaidrots zemāk, vai ir pieejama daudz programmatūras, lai attēlu pārvērstu bitkartes masīvā.
const neparakstīta rakstzīme myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff 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, 0xc7, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x01, 0xcx, 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, 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, 0xe0, 0x3c, 0x03, 0x7f, 0xff 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, 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff 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, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff0 , 0xff, 0xff 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, 0x00, 0x00, 0xff 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, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 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, 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, 0xff, 0xuff 0xf8, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xff, 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, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 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, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xc0, 0x00, 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, 0xff, 0x80, 0x00, 0x03, 0x18, 0x01, 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, 0xc0, 0x00, 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, 0xff0, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00 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, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0x, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff 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, 0xffc, 0x00, 0x3f, 0xe0, 0x00, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x07, 0x70, 0x00, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xe0, 0x1b, 0xfc, 0x01, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff 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, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0xff, 0x00, 0x1x, 0xff 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, 0xff0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 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, 0xff, 0xff, 0xff, 0xff 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 ();
Konvertējiet attēlu bitkartes vērtībās
Tiešsaistes bitkarti var izveidot vietnē http://javl.github.io/image2cpp/. Augšupielādējiet attēla failu, kuru vēlaties parādīt OLED, un iestatiet izmēru 128x64. Tiks parādīts priekšskatījuma attēls, un pēc tam tiks ģenerēts bitkartes masīvs.
Zemāk ekrānuzņēmumos parādīts process, kā ģenerēt jebkura attēla bitkartes vērtību.
Visbeidzot augšupielādējiet pilnu kodu NodeMCU ESP8266, un jūs redzēsiet attēlu, kas tiek parādīts OLED ekrānā. Šeit mēs parādām CircuitDigest logotipu OLED displejā.