- OLED дисплей
- Необходими компоненти
- SPI Pin връзки между 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):
- Взаимодействие на SSD1306 OLED дисплей с Raspberry Pi
- Взаимодействие на SSD1306 OLED дисплей с Arduino
- Изградете интелигентен часовник чрез свързване на OLED дисплей с Android телефон с помощта на 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. 3-пинов OLED може да се използва в I2C режим на комуникация и 7-пинов OLED може да се използва или в SPI режим, или в I2C режим.
В този урок ще използваме “ Монохромен 7-пинов SSD1306 0.96 ” OLED дисплей, който е широк 128 пиксела и дълъг 64 пиксела. Този дисплей може да работи както на SPI, така и на I2C комуникационни протоколи. В този урок ще използваме протокол SPI. SSD1306 IC присъства на този OLED, което помага да се показват пикселите на екрана.
Необходими компоненти
- Монохромен 7-пинов SSD1306 0.96 ”OLED дисплей
- NodeMCU ESP8266
- Микро USB кабел
- Макет
- Кабели от мъжки към мъжки джъмпер
SPI Pin връзки между NodeMCU и OLED дисплей
По-долу е схемата за свързване на 7-пинов OLED дисплей с NodeMCU за комуникация чрез сериен комуникационен протокол SPI.
По-долу таблицата показва връзките между OLED дисплея и NodeMCU ESP8266. GND щифт отива към NodeMCU GND, VDD щифт може да бъде свързан към 3.3V или 5V, SCK е тактовият щифт на OLED дисплея, който е свързан с D5 на NodeMCU за SPI часовник. SDA щифтът, който е MOSI щифт на OLED от SPI интерфейс, отива към D7 на NodeMCU. ПИН за нулиране отива към D3. DC, командният щифт за данни е свързан към D2 на NodeMCU. Последният щифт е CS отива към D8, избор на чип на NodeMCU.
Не. |
Дисплей Oled |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3.3V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) или SDA (I2C) |
D7 |
5 |
НУЛИРАНЕ |
D3 |
6 |
DC |
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 според таблицата, показана abve. Сега, когато стартирате скицата след правилно свързване на OLED дисплея с NodeMCU, ще видите логото на Adafruit на OLED дисплея, което по подразбиране се записва в библиотеката. След логото на Adafruit той показва много други графики като линии, правоъгълници, триъгълник, кръгове, низове, числа, анимации и растерни изображения. Тук В този урок ще научим как да показваме всяко изображение на OLED с NodeMCU ESP8266.
Програмиране на NodeMCU за свързване на OLED
Както винаги пълен код е предоставен в края, тук сме обяснили кода подробно.
Стартирайте кода, като импортирате необходимите библиотеки. Тъй като използваме протокол SPI, следователно ще импортираме библиотека “SPI.h” и ще импортираме “Adafruit_GFX.h” и “Adafruit_SSD1306.h” за OLED дисплей.
#include
Нашият OLED размер е 128x64, така че настройваме ширината и височината на екрана съответно на 128 и 64. Така че дефинирайте променливите за OLED щифтове, свързани към NodeMCU за SPI комуникация.
#define SCREEN_WIDTH 128 // OLED дисплейна ширина, в пиксели #define SCREEN_HEIGHT 64 // OLED дисплейна височина, в пиксели // Декларация за SSD1306 дисплей, свързан чрез софтуер SPI (по подразбиране): #define OLED_MOSI D7 #define OLED_CLK D5 #define 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 (размер на шрифта), и определя цвета на текста и на позицията на курсора с помощта setTextColor и setCursor функция . Командата Display.display () се използва за прехвърляне на данни във вътрешната памет на контролера SSD1306. След прехвърлянето на екрана се показва пиксел. Сега можем да започнем да превъртаме текста по различни начини, като извикаме display.startscrollright (x-pos, y-pos) и display.startscrollleft (x-pos, y-pos) за времето, дадено във функцията за забавяне. Превъртането на текст може да бъде спряно с помощта на функцията display.stopscroll ().
void testscrolltext (void) {display.clearDisplay (); // изчистване на дисплейния екран на OLED display.setTextSize (2); // Начертайте 2X мащабен текстов дисплей.setTextColor (БЯЛ); 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 параметри (х-координират, у-координата, растерни масив, ширина, височина и цвят), за да се направи изображението на 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, 0xc 0xx, 0xc 0, 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, 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, 0xfe, 0x0f, 0x03, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 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, 0xe0, 0x3c, 0x03, 0x7f, 0xff, 0xff, 0xf 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x01, 0x01 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 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, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xx, 0xx0, 0xe 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80 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, 0x1 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, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0x00, 0x00, 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, 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, 0xff, 0xff, 0xff 0x03, 0xb0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0x18, 0x01, 0xff, 0xff, 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, 0xc0, 0xx, 0xff, 0xx0, 0xx 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, 0x00, 0x00, 0xx 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, 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, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xx 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, 0xff, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x07, 0x70, 0x00, 0xff, 0x01, 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, 0xe0, 0xe0, 0xe0 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, 0xf8, 0x00, 0x00, 0x66, 0x00, 0x1f, 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, 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, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 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, ЧЕРНО, БЯЛО); display.display ();
Преобразувайте изображението в растерни стойности
Онлайн Bitmap може да се генерира от http://javl.github.io/image2cpp/. Качете графичния файл, който искате да покажете на OLED, и задайте размер като 128x64. Ще бъде показано изображение за предварителен преглед и след това ще бъде генериран растерния масив.
Под скрийншота е показан процесът за генериране на растерна стойност на всяко изображение.
Накрая качете пълния код в NodeMCU ESP8266 и ще видите изображението да се показва на OLED екран. Тук показваме логото CircuitDigest на OLED дисплея.