Съдържание:

OLED I2C дисплей Arduino/NodeMCU Урок: 15 стъпки
OLED I2C дисплей Arduino/NodeMCU Урок: 15 стъпки

Видео: OLED I2C дисплей Arduino/NodeMCU Урок: 15 стъпки

Видео: OLED I2C дисплей Arduino/NodeMCU Урок: 15 стъпки
Видео: Вывод картинки на oled дисплей и контроллер Arduino, Esp8266, ESP32 2024, Юли
Anonim
Image
Image

Първата програма, която пишете, когато започнете да изучавате a

новият език за програмиране е: "Hello World!".

Самата програма не прави нищо повече от отпечатване на текст „Hello World“на екрана.

И така, как да накараме нашия Arduino да покаже „Hello World!“?

В това видео ще ви покажа как да започнете с малките 0,91 (128x32) и 0,96 (128x64) I2C OLED дисплеи.

В мрежата има 100 уроци, обясняващи едно и също нещо по различни начини, но не можах да намеря такъв, който да ми разказва всичко за OLED дисплея и как да го използвам в различни сценарии. Отне ми известно време, за да разбера всичко. И така, реших, че трябва да създам урок за това, което съм научил, и да комбинирам всички функции и начини, по които OLED дисплеите могат да се използват в нашите проекти.

Стъпка 1: Неща, които ще научим днес

Хардуерни изисквания
Хардуерни изисквания

В това видео ще говорим за:

- Какво е OLED дисплей?

- Тогава ще разгледаме по -отблизо 0.91 (128x32) и 0.96 (128x64) I2C OLED дисплеи

- След това ще говорим за инсталиране на библиотеката Adafruit на вашата Arduino IDE

- Тогава ще свържем NodeMCU и Arduino към OLED дисплей

- След това ще разгледаме кода и ще покажем някои графики и текст върху него

- Ще говорим и за прилагане на персонализирани шрифтове и показване на изображения

- След това ще свържем множество OLED към микроконтролер, използвайки I2C мултиплексор

- И накрая, ще говорим за няколко често срещани грешки, които хората допускат, докато използват OLED дисплеите

Стъпка 2: Изискване към хардуера

За този урок се нуждаем от:

- Една дъска

- 0,91 "(128x32) и 0,96" (128x64) I2C OLED дисплеи

- Arduino UNO/NANO (каквото е удобно)

- NodeMCU

- TCA9548A I2C мултиплексор

- Няколко свързващи кабела

- и USB кабел за качване на кода

Стъпка 3: Какво е OLED дисплей?

Какво е OLED дисплей?
Какво е OLED дисплей?
Какво е OLED дисплей?
Какво е OLED дисплей?

OLED или органичен светодиод е излъчващ светлина

диод (LED), в който излъчващият електролуминесцентен слой е филм от органично съединение (милиони малки LED светлини), който излъчва светлина в отговор на електрически ток.

OLED се използват за създаване на цифрови дисплеи в устройства като телевизионни екрани, компютърни монитори, преносими системи като мобилни телефони, ръчни игрови конзоли и КПК. OLED дисплей работи без подсветка, защото излъчва видима светлина.

Стъпка 4:

Образ
Образ

Има много видове OLED дисплеи, налични в

пазар въз основа на тяхната

- Размери

- Цвят

- Марки

- Протокол

- SPI (сериен периферен интерфейс) или I2C

-Схема за управление на пасивна матрица (PMOLED) или активна матрица (AMOLED)

В този урок ще говоря за свързването на

син цвят 0.91 (128x32 OLED) и 0.96 (128x64 OLED) I2C OLDE дисплеи към Arduino NANO и NodeMCU. Технологията на шината I2C използва само 2 пина на MCU, така че имаме налични купи за други сензори.

Стъпка 5: По -отблизо

Поглед отблизо
Поглед отблизо
Поглед отблизо
Поглед отблизо
Поглед отблизо
Поглед отблизо

Нека разгледаме по -отблизо тези два дисплея.

В задната част на тези дисплеи има купчини SMD кондензатори и резистори, запоени на борда; но тъй като това е I2C устройство, ние се грижим само за тези 2 пина (SCL и SDA)

Дисплеят се свързва с Arduino, използвайки само четири проводника - два за захранване (VCC и GND) и два за данни (сериен часовник SCL и

серийни данни SDA), което прави окабеляването много лесно. Връзката за данни е I2C (I²C, IIC или Inter-Integrated Circuit) и този интерфейс се нарича още TWI (Two Wire Interface).

- Вградените щифтове могат да бъдат в различен ред, така че винаги проверявайте тройно, преди да го свържете към вашия проект.

- Работното напрежение е между 3v до 5v, но най -добре е да използвате указанията от листа с данни на производителя.

- Понякога трябва да използваме 2 дисплея в нашите проекти. И така, как можем да постигнем това?

Номерът е да имате конфигурируем адрес на дисплея си. Това устройство има конфигурируем адрес между 0x78 и 0x7A. Само чрез разпаяване на резистора 0Ohm от едната страна и свързването му от другата страна или просто чрез поставяне на глобална спойка можем да променим адреса. Ще говорим за това в дълбочина, когато свържем множество дисплеи към Arduino в по -късния раздел на този урок.

На снимката тези дисплеи изглеждат много големи. Но на практика те са малки. Те са направени от 128 x 32/64 отделни OLED пиксела и не изискват подсветка. Просто погледнете това и вижте колко е малко. Въпреки че са малки, те могат да бъдат много полезни във всякакви електронни проекти.

Стъпка 6: Библиотека

Библиотека
Библиотека
Библиотека
Библиотека
Библиотека
Библиотека

Налични са няколко библиотеки, които да ги контролират

дисплеи. В миналото съм използвал „библиотеката u8glib“, но намирам библиотеката AdaFruit за много лесна за разбиране и използване в нашите проекти. Така че, ще използвам библиотеката AdaFruit в този урок.

За да контролирате OLED дисплея, ще ви трябва библиотеката "adafruit_GFX.h" и "adafruit_SSD1306.h".

Има два начина, по които можете да изтеглите и инсталирате библиотеката във вашата Arduino IDE.

Метод 1

Отидете в „Библиотечен мениджър“и потърсете „adafruit_SSD1306“и „adafruit_gfx“

Изберете най -новата версия и натиснете бутона Инсталиране.

Веднъж инсталирани, можете да използвате тези библиотеки във вашата програма.

Метод 2

Тези две библиотеки могат да бъдат изтеглени и от github (имате нужда и от двете):

Ще дам връзките в описанието по -долу.

Дисплейната библиотека:

Библиотеката на GFX:

След като изтеглите, копирайте папката Adafruit_SSD1306-master от изтегления компресиран файл в папката на библиотеките на Arduino. Тази папка обикновено се намира в Documents> Arduino> libraries в системите на Windows. В Linux обикновено се намира в домашна папка> Arduino> библиотеки. Накрая в папката на библиотеката Arduino, преименувайте папката Adafruit_SSD1306-master на Adafruit_SSD1306. Дори и да не преименувате, това е добре.

Стъпка 7:

Образ
Образ

Сега, нека да разгледаме "Adafruit_SSD1306.h"

файл

Две неща, които трябва да знаем в тази библиотека:

1. Ако искате да използвате по -малкия дисплей, използвайте 128_32 по подразбиране, в противен случай за по -големия дисплей коментирайте 128_32 и разкомментирайте 128_64

2. Ако сте запоили адреса 0x7A на дъската (за което ще говорим по -късно), използвайте 7 -битовия адрес 0x3D за по -големите дисплеи, в противен случай използвайте адреса по подразбиране 0x3C. За по -малките дисплеи адресът е 0x3C.

Стъпка 8: Окабеляване на 128 X 64/32 OLED

Окабеляване 128 X 64/32 OLED
Окабеляване 128 X 64/32 OLED

Започваме, като свързваме NodeMCU към дисплея.

Първото и най -важно нещо, което трябва да се отбележи, е, че някои от дисплеите може да имат разменени щифтове за захранване GND и VCC. Проверете дисплея си, за да се уверите, че той е същият като изображението. Ако щифтовете са разменени, не забравяйте да промените връзките към Arduino или NodeMCU.

- NodeMCU OLED окабеляване

OLED VCC - NodeMCU 3.3V

OLED GND - NodeMCU GND

OLED SCL - NodeMCU D1

OLED SDA - NodeMCU D2

- Arduino Uno OLED окабеляване

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino Uno A5

OLED SDA - Arduino Uno A4

- Arduino MEGA 2560 OLED окабеляване

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino MEGA 2560 пин 21

OLED SDA - Arduino MEGA 2560 пин 20

Стъпка 9: Код

Код
Код
Код
Код
Код
Код
Код
Код

Библиотеката Adafruit идва с наистина добри примери и за двамата

128x32 и 128x64 дисплеи.

Библиотеката се намира под Файл> Примери> Adafruit SSD1306> и след това типа на дисплея в Arduino IDE.

Ще използваме примера 128x32 I2C и ще го променим, за да работи както с 128x64, така и с 128x32 дисплеи, като го закачим към Arduino и след това към NodeMCU платка.

Кодът започва с включването на двете библиотеки Adafruit. В този урок ще акцентирам само върху онези части от кода, които са ни необходими, за да заредим както платките, така и дисплеите. Ако искате да научите повече за кода, моля, оставете коментар в моя блог или в секцията за коментари по -долу и аз се опитвам да се свържа с вас.

- Първо ще заредим кода в Arduino Nano, свързан към 128x32 дисплей.

Можем да използваме кода такъв, какъвто е, без никакви промени.

128x32 използва адрес 0x3C, така че този бит изглежда добре тук, позволява да се провери двойно библиотеката на заглавките, да, той също използва адреса 0x3C и типът на дисплея е 128x32.

- Сега нека свържем дисплея 128x64. Както знаем, той използва адреса 0x3C по подразбиране, така че не е нужно да актуализираме адреса нито в кода, нито в библиотеката.

Трябва само да коментираме 128_32 и да декомментираме 128_64 в заглавната библиотека и да променим LCDHEIGHT на 64 в нашия код.

- Сега, за да стартираме същия код на NodeMCU, трябва да променим още един ред в нашия код.

Останалата част от "#define OLED_RESET 4"> "#define OLED_RESET LED_BUILTIN" е същата като Arduino

Почти за показване на всичко, което първо трябва да изчистим с помощта на предишния екран

display.clearDisplay (); // Изчистване на буфера

След това нарисувайте обекта

testdrawline (); // Чертая линия

Покажете го на хардуера

display.display (); // Направете ги видими на хардуера на дисплея!

Изчакайте известно време, преди да покажете следващия елемент.

забавяне (2000); // Изчакайте 2 секунди

В този пример показваме няколко елемента като текст, редове, кръгове, превъртащ се текст, триъгълници и др. Продължете, използвайте въображението си и покажете каквото искате на тези малки дисплеи.

Стъпка 10: Персонализиране на текст и добавяне на изображения

Персонализиране на текст и добавяне на изображения
Персонализиране на текст и добавяне на изображения
Персонализиране на текст и добавяне на изображения
Персонализиране на текст и добавяне на изображения
Персонализиране на текст и добавяне на изображения
Персонализиране на текст и добавяне на изображения

Понякога вашият код трябва да показва персонализирани шрифтове и

изображения. Ако сте много добри в картографирането на битове, тогава просто трябва да създадете байтови масиви, като включите или изключите малките светодиоди на дисплея, за да създадете персонализирани шрифтове и изображения.

Не съм много добър в тези картографиране и не искам да прекарвам часове в създаването на таблици с битови карти.

И така, какви са моите възможности? Обикновено използвам два уебсайта за генериране на персонализирани шрифтове и изображения. Връзките са предоставени в описанието по -долу.

Персонализирани шрифтове

Отидете на уебсайта за конвертор на шрифтове, изберете семейството на шрифта, стила, размера, версията на библиотеката като „Adafruit GFX Font“и след това натиснете бутона „Create“. От дясната страна на тази страница можете да видите как ще изглежда вашият шрифт на действителния дисплей.

Въз основа на вашия избор уеб страницата генерира заглавния файл на шрифтовете. Създайте файл, наречен "modified_font.h" в същата папка, където е вашият код, и копирайте и запазете генерирания код в него. След това просто трябва да включите заглавния файл във вашия код, за да използвате персонализирания шрифт.

#include "modified_font.h"

След това просто трябва да настроите шрифта, преди да покажете текста, за да приложите персонализирания шрифт към него.

display.setFont (& Your_Fonts_Name);

Можете да получите името на шрифта от заглавния файл, който току -що добавихте към вашия проект. Това е, лесно.

Паметта винаги е проблем, докато използвате персонализирани шрифтове, така че винаги вземайте предвид байтовете, които ще се консумират от паметта. Само не забравяйте, че Arduino UNO има само 32K памет.

Персонализирани изображения

За да покажете растерно изображение на екрана си, първо трябва да създадете изображение с размери 128 x 64/32.

Използвам стария добър "MS Paint", за да създам 128 x 64 растерно изображение, което след това ще кача на този уебсайт за конвертор на изображения. Уебсайтът преобразува изображения в байтови низове, които могат да се използват с Arduino и OLED дисплеи.

Започнете, като качите изображението на уебсайта. След това поставете отметка в квадратчето „Инвертиране на цветовете на изображението“и променете „Формат на изходния код“на „Arduino Code“, след това изберете ориентацията и натиснете бутона „Генериране на код“, за да генерирате байтовия масив. Разделът "Визуализация" ви показва как ще изглежда вашето изображение на действителния дисплей.

Включих кода заедно с този урок, който можете да използвате за показване на вашите изображения. Просто трябва да замените масива в моя код с този, който току -що сте генерирали, и след това да го заредите във вашия Arduino.

Стъпка 11: Свързване на 2 дисплея

Свързване на 2 дисплея
Свързване на 2 дисплея
Свързване на 2 дисплея
Свързване на 2 дисплея

Свързването на два дисплея с размери 128 x 64 към вашия проект е лесно.

Просто трябва да разпаявате резистора 0Ohm от адрес 0x78 и да го поставите на 0x7A и след това да използвате адреса 0x3D във вашия код вместо стандартния 0x3C.

Сигурно се чудите защо използваме адреса 0x3C и 0x3D, а не действителните 0x78 и 0x7A. Arduino приема 7-битов адрес, а не 8-битовите хардуерни адреси. Така че, първо трябва да преобразуваме 8-битовия адрес в двоичен и след това да отсечем най-малко значимия бит, за да получим 7-те бита. След това преобразувайте 7 -те бита в HEX, за да получите адресите 0x3C или 0x3D, които въвеждате в кода си.

Първо инициализирайте дисплея, като му дадете уникално име:

Adafruit_SSD1306 дисплей1 (OLED_REST);

Adafruit_SSD1306 дисплей2 (OLED_REST);

След това във вашия код използвайте дисплея 1 и дисплея 2, за да извикате операторите за начало с адресите на устройството в тях:

display1.begin (SSD1306_SWITCHCAPVCC, 0x3C); // показва 1 оперативен адрес 0x3C

display2.begin (SSD1306_SWITCHCAPVCC, 0x3D); // показва 2 оперативен адрес 0x3D

Това е, сега можете да продължите и да правите каквото искате, като използвате или Display 1, или Display 2 в останалата част от кода си. Предоставих пример с този урок.

Окабеляването е точно същото като това, което сме правили преди, почти просто трябва да добавите друг дисплей към същите I2C щифтове на Arduino или NodeMCU. Въз основа на адресите MCU след това изпраща данните по линията за данни I2C.

Стъпка 12: Свързване на повече от 2 дисплея

Свързване на повече от 2 дисплея
Свързване на повече от 2 дисплея
Свързване на повече от 2 дисплея
Свързване на повече от 2 дисплея
Свързване на повече от 2 дисплея
Свързване на повече от 2 дисплея

Какво ще стане, ако искате да свържете повече от 2 дисплея?

Arduino има ограничен брой щифтове и следователно не можете да имате повече от определено количество щитове, прикрепени към него. Освен това има само един чифт I2C автобуси.

И така, как можем да прикачим повече от 2 I2C дисплея към Arduino? Номерът е да използвате мултиплексор TCA9548.

TCA9548 позволява на един микроконтролер да комуникира с до '64 сензора ', всички със същия или различен I2C адрес, като присвоява уникален канал на всяка подчинена подчинена на сензора.

Когато говорим за изпращане на данни по 2 проводника до множество устройства, тогава се нуждаем от начин да ги адресираме. Това е същото като пощальона, който идва по един път и пуска пощенските пакети до различни къщи, защото на тях има написани различни адреси.

Мултиплексорът се свързва към 3V3, GND, SDA и SCL линии на микроконтролера. Подчинените сензори са свързани към един от осемте SCL/SDA подчинени порта на платката. Каналите се избират чрез изпращане на TCA9548A неговия I2C адрес (0x70 {по подразбиране} - 0x77), последван от номера на канала (0b00000001 - 0b10000000). Можете да имате максимум 8 от тези мултиплексори, свързани заедно на адреси 0x70-0x77, за да контролирате 64 от същите I2C адресирани части. Чрез свързване на трите адресни бита A0, A1 и A2 към VIN можете да получите различна комбинация от адреси. Ще обясня това задълбочено в следващия си урок за дъската за пробив TCA9548A. Засега нека просто свържем 8 OLED към тази платка и да разгледаме набързо кода.

Връзка:

VIN до 5V (или 3.3V)

GND към земята

Часовник SCL към I2C

SDA към I2C данни

След това свържете сензорите към VIN, GND и използвайте една от мултиплексираните шини SCn / SDn

Сега Int кодът позволява да започнем, като включим библиотеката "Wire" и като дефинираме адреса на мултиплексорите.

#include "Wire.h"

#включва

#define MUX_Address 0x70 // TCA9548A Адрес на енкодерите

След това трябва да изберем порта, към който искаме да комуникираме, и да изпратим данните на него с помощта на тази функция:

void tcaselect (uint8_t i) {

if (i> 7) връщане;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

След това ще инициализираме дисплея в секцията за настройка, като извикаме „u8g.begin ();“за всеки дисплей, прикрепен към MUX "tcaselect (i);"

След като се инициализираме, можем да правим каквото си искаме, само като извикаме функцията "tcaselect (i);" където "i" е стойността на мултиплексираната шина и след това изпраща данните и часовника съответно.

Стъпка 13: Предимства и недостатъци

Предимства и недостатъци
Предимства и недостатъци

Изображението на OLED е красиво. Въпреки това, OLED също имат

недостатъци. Тъй като OLED екраните съдържат органични материали, животът им е по -кратък от LCD дисплеите. Освен това много OLED дисплеи се изгарят, след като показват едно и също изображение за дълго време. След изгаряне изображението остава на екрана дори след показване на друго изображение. Затова не забравяйте да обновявате екрана на всеки няколко секунди. Водата може незабавно да повреди органичните материали на тези дисплеи.

Предимства

Няма нужда от подсветка

Дисплеите са много тънки и леки

Ниска консумация на енергия

Ъглите на видимост са по -широки от LCD

Яркостта и контрастът са страхотни

Висока скорост и ниско време за реакция

Наситено черен цвят

Недостатъци

Скъпа технология

Кратък жизнен цикъл

По-вероятно е OLEDS да изгорят

Повреда от вода

Стъпка 14: Чести грешки

Чести грешки
Чести грешки

За да завършим урока, нека поговорим за няколко често срещани грешки

хората правят, докато използват тези дисплеи:

- Винаги тройно проверявайте щифтовете, преди да ги използвате във вашия проект

- Вземете правилния адрес на библиотеката в заглавния файл и във вашия код

#define SSD1306_I2C_ADDRESS 0x3C // в Adafruit_SSD1306.h

и

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // във вашия код

Ако адресът е грешен, OLED няма да покаже нищо

- Размерът на дисплея трябва да бъде променен в драйвера, преди да може да се използва. Ако не се промени, ще получите съобщение за грешка, когато се опитвате да проверите кода

#error ("Височина неправилна, моля, поправете Adafruit_SSD1306.h!");

- Ако използвате NodeMCU, не забравяйте да смените OLED_RESET от 4 на LED_BUILTIN

#дефинирайте OLED_RESET LED_BUILTIN

Имам хора на сцената, които правят всякакви неща, използвайки този OLED дисплей. Някои дори са правили видео игри и всичко. Наистина не се интересувам от правенето на видео игра с този малък дисплей. Сега обаче ще ви оставя да изследвате въображението си и да излезете с невероятни идеи.

Стъпка 15: Връзки

- Блог:

- Добавяне на изображение:

- Персонализиран текст:

- Библиотека за показване на Adafruit:

-Библиотека на Adafruit GFX:

- библиотека u8glib: https://code.google.com/archive/p/u8glib/ или

Ако искате да използвате по -малкия дисплей, използвайте стандартния 128_32 иначе за по -големия дисплей коментирайте 128_32 и разкомментирайте 128X64 NO_ACK във вашия код (просто разкомментирайте типа на екрана, който използвате) (шрифтовете са в библиотеката с шрифтове)

Препоръчано: