Как да свържете OLED I2C дисплей към ARDUINO

Въведение: Въведение в OLED I2C дисплей 128*64 / 128*32.
Как да свържете OLED I2C дисплей към ARDUINO

Здравейте! Като любител ентусиаст на електрониката, аз съм сигурен, че всичко, което правим - електронни играчки - домашни продукти или големи проекти - е всичко от любопитство и мързел. Любопитството се стреми да разбере и разбере необятното, непознатото, да разбере как работи там, какво прави, как се движи. И мързелът измисля какво да измисли, за да не стане, да не се приближи, да не вдигне, да не се изцапа или нещо друго важно.

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

За тези, които също имат подобно желание, ето кратко ръководство за свързване и тестване на малки и евтини OLED дисплеи.
След това ще говорим за един от моделите OLED дисплеи, широко достъпни за радиолюбители, управлявани от чипа SSD1306, с размер на екрана 0,96 инча и резолюция 128 * 64 или 128 * 32 пиксела. Тези дисплеи са идеални за малки любителски радио проекти и домашни проекти.
Как да свържете OLED I2C дисплей към ARDUINO

Стъпка 1: Основни понятия


Ще го свържем към Arduino UNO / NANO, а също така ще го програмираме през Arduino.
  • OLED е органичен светоизлъчващ диод, т.е. полупроводниково устройство, направено от органични съединения, което започва да излъчва светлина, когато през него преминава електрически ток.
  • ARDUINO е платформа за обучение и изграждане на системи за автоматизация и роботика.
  • ArduinoIDE - среда за разработка. Това е безплатна програма за програмиране на Arduino.
  • I2C – Междуинтегрални схеми, комуникационна линия между чипове.
  • Скица, известен още като код, известен още като програма - терминология на Arduino.

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

Стъпка 2: Аксесоари


Трябват ни само четири неща:
  • 1. Самият OLED дисплей е 0,96” (можете да го купите от Aliexpress или Ebay, дълъг е, но евтин!).
  • 2. Arduino UNO / Nano (на същото място като дисплея).
  • 3. Свързващи проводници (пак там).
  • 4. Компютър или лаптоп с инсталиран ArduinoIDE.

Как да свържете OLED I2C дисплей към ARDUINO

Като цяло купуването на части за различни проекти в Aliexpress и Ebay е много готино нещо, докато работите върху един проект, части за друг вече са на път. Основното нещо е да не забравите да направите поръчка.

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


Дисплеят се управлява от чип SSD1306, който поддържа пет комуникационни протокола, единият от които е I2C. Данните, използващи този протокол, се предават само по два проводника и колкото по-малко кабели има в кутията, толкова по-добре, така че ни подхожда доста добре.Но! Има модули с SPI протокол и дори с превключване на протоколи, така че бъдете внимателни, когато купувате този модул.
Как да свържете OLED I2C дисплей към ARDUINO

Използвани щифтове:
OLED дисплей - SCL/SCK (часовник) и SDA (данни), “плюс” мощност (VCC) и “минус” мощност (GND).
Как да свържете OLED I2C дисплей към ARDUINO

Използвани щифтове:
Arduino UNO - SCL/SCK на A5 и SSD на A4, “Плюс” мощност (+5V) и “Минус” мощност (GND).
Свързване на дисплея към Arduino:
  • Vcc - 5V
  • GND - GND
  • SDA-A4
  • SCL-A5

Как да свържете OLED I2C дисплей към ARDUINO

Стъпка 4: I2C скенер


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

Общо в шината могат да се използват до 127 адреса - 119 за устройства и 8 сервизни адреса. На тези адреси се осъществява комуникация. Има главен, известен още като господар, и има роб, известен още като роб - господарите питат, робите отговарят, всичко е просто.
Тъй като нашият OLED дисплей използва комуникационния протокол I2C и адресът може да не е посочен, ще се опитаме сами да намерим точно този адрес.

Можете да направите това, като качите кратка скица на вашата платка Arduino със свързан OLED. НО!
Не бързайте да качвате скицата в Arduino веднага! Нека първо изтеглим “драйверите”, т.е. нека свържем библиотеките и за да направим това, веднага ще преминем към „Стъпка № 5“, след което ще се върнем и ще продължим.

Стъпка 4: Продължение:


Изтеглете CODE Finder_I2C_Hex_Address.ino, качете в Arduino.
Отворете “Port Monitor”, задайте скоростта на 9600 и ако всичко е свързано правилно, програмата ще покаже адреса на устройството, в моя случай OLED с адрес 0x3F.
Как да свържете OLED I2C дисплей към ARDUINO

Стъпка 5: Изтеглете и свържете библиотеки


За да работи всичко правилно и не е нужно да преоткривате колелото, трябва да свържете няколко библиотеки към средата на ArduinoIDE, а именно: ADAFRUIT GFX и ADAFRUIT SSD1306, те са необходими, за да може Arduino да комуникира самостоятелно с OLED дисплей.
Можете да включите тези библиотеки, като следвате тези стъпки.
  • 1. В ArduinoIDE отидете в менюто Sketch.
  • 2. Изберете „Включване на библиотеки“.
  • 3. Изберете „Управление на библиотеки“.
  • 4. Намерете ADAFRUIT GFX и ги инсталирайте.
  • 5. Намерете ADAFRUIT SSD1306 и ги инсталирайте.

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

Друг начин за инсталиране на библиотеки е да намерите, изтеглите и инсталирате тези библиотеки сами.
За Github пример:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit_SSD1306

Това са същите библиотеки на Adafruit, но подобни библиотеки могат лесно да се търсят в търсачките по искане на OLED I2C. Много ентусиасти пишат библиотеки „за себе си“ и след това ги публикуват в мрежата. Коя библиотека да използвате зависи от вас.
За да може дисплеят да показва руски букви, са необходими и специални библиотеки, но това е отделна тема за отделна статия.
След като библиотеките са инсталирани, можете да се върнете към стъпка 4 и най-накрая да разберете шестнадесетичния адрес на вашия дисплей.

Стъпка 6: Тестване на дисплея


За да проверите дали всичко работи според очакванията, стартирайте тестовия пример от ArduinoIDE.
За това:
Отидете на ФАЙЛ > ПРИМЕРИ > SSD 1306 > Изберете 128x64 i2c
Ако получите „Грешка“, опитайте да изберете SSD 1306 > 128x32 i2c.
Ако „Грешка“ възникне отново, опитайте да промените I2C адреса на ред 61 от демо кода и го заменете с адреса на вашия дисплей, който сте определили в стъпка #4.
Ако грешката се появи отново, можете да опитате да редактирате файла Adafruit_SSD1306.h, той се намира в папката Arduino libraries.
Как да свържете OLED I2C дисплей към ARDUINO

Отворете файла Adafruit_SSD1306.h в текстов редактор и намерете редовете:
//#define SSD1306_128_64

#define SSD1306_128_32

// #define SSD1306_96_16 

Разкоментирайте реда:
#define SSD1306_128_64. 

Трябва да изглежда така:
#define SSD1306_128_64

//#define SSD1306_128_32

// #define SSD1306_96_16

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

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

Стъпка 7: Напишете свое собствено съобщение


За да напишете свое собствено съобщение, първо създайте нова скица в средата за програмиране ArduinoIDE.
В заглавката включваме 4 библиотеки:
#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

След това пишем протокола за нулиране:
#define OLED_RESET 4

Adafruit_SSD1306 дисплей (OLED_RESET);

В VOID SETUP посочваме шестнадесетичния адрес на нашия дисплей 0x3C, който научихме в „Стъпка № 4“.
След това инициализираме дисплея и го изчистваме:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.clearDisplay();

След това във VOID LOOP пишем основния код, тоест нашето съобщение, което искаме да покажем на дисплея.
За да направите това, ние описваме размера на текста, цвета на текста, позицията на курсора и накрая показваме съобщението с помощта на командата println:
display.setTextSize(2);

display.setTextColor(WHITE);

display.setCursor(0,0);

display.println("Браво!");

display.display();

Накрая не забравяйте да напишете дисплей.дисплейтака че изображението да се показва на екрана, в противен случай ще получите празнота.
Ако сте направили всичко правилно, на дисплеите ще се появи съобщение.
Как да свържете OLED I2C дисплей към ARDUINO

Ето КОДА Starting_with_Arduino_OLED.ino на нашата програма:
code.zip [946 b] (изтегляния: 4908)
Коментирайте
  • папионкаУсмихни сесмее сеИзчервяванеусмивкаотпуснат отпуснатусмивка
    сърце_очиkissing_heartцелуване_затворени_очизачервенаоблекченудовлетворенусмивка
    намигвамизплезен_език_намигащо_окоизплезен език затворени очиухиленцелуванеизплезен_езикспящ
    притесненнамръщенизмъченотворена устагримасаобърканпритихнал
    безизразеннезабавенsweat_smileпотразочарован_облекченуморенпасивен
    разочарованобърканстрахливстудена потупорствамплачаридание
    радостудивенвикуморено_лицеядосаняросттриумф
    сънливвкусномаскаслънчеви очилазамаяно_лицеимпусмихнат_имп
    неутрално_лицеno_mouthневинен
4 минус едно =
Коментари (10)
  1. Татошка
    #1 Татошка гости 14 ноември 2018 21:18 ч
    9
    Благодаря ти приятел! Това е първата ми качена скица и въведение в Arduino. Освен да мига Blink))
  2. Алишер
    #2 Алишер гости 28 юли 2019 г. 19:35 ч
    8
    Къде мога да изтегля този код Finder_I2C_Hex_Address.ino?
    1. Ал
      #3 Ал гости 14 август 2019 г. 12:51 ч
      11
      под снимката има връзка "Ето Стартиране_с_Arduino_OLED.ino КОДА на нашата програма:"
  3. Алекс
    #4 Алекс гости 13 ноември 2019 г. 20:01 ч
    9
    Не VOID SETUP или VOID LOOP, а void setup(); и void loop(); Езикът C е чувствителен към регистъра на буквите.
  4. Гост Алекс
    #5 Гост Алекс гости 14 януари 2020 г. 03:00 ч
    6
    > Стъпка 4: ... в моя случай OLED с адрес 0x3F.
    и тогава
    >В VOID SETUP... адресът на нашия дисплей 0x3C, което научихме в „Стъпка #4“.
    Как е това?
  5. Гост Алекс
    #6 Гост Алекс гости 14 януари 2020 г. 03:10 ч
    9
    Благодаря ти! Направих всичко според инструкциите на Atmega328 Pro Mini и проверих закупения 0.96". И двете се оказаха работещи. Arduino IDE 1.8.10
  6. Читател
    #7 Читател гости 3 март 2020 г. 21:50 ч
    4
    Благодаря, поучително, всичко работи!
  7. Илдар Хафизов
    #8 Илдар Хафизов гости 19 април 2020 г. 19:15 ч
    5
    Имам въпрос. На снимката (втора снимка) има 2 OLED дисплея, идентични с вашия. Не мога да разбера кои джъмпери да използвам за промяна на адреса?
  8. Гост Максим
    #9 Гост Максим гости 31 октомври 2020 г. 18:53 ч
    11
    Благодаря ви за статията.Но имам проблем: пикселите в буквите светят един след друг и шрифтът е по-голям, отколкото трябва. Очевидно Arduino не разпознава разделителната способност на екрана. Ако някой има същия проблем, ето как да го реши:
    #define SCREEN_WIDTH 128 // Ширина на OLED дисплей, в пиксели
    #define SCREEN_HEIGHT 64 // Височина на OLED дисплей, в пиксели
    Adafruit_SSD1306 дисплей (SCREEN_WIDTH, SCREEN_HEIGHT, &кабел, OLED_RESET);
  9. Дмитрий
    #10 Дмитрий гости 9 май 2021 г. 19:35 ч
    7
    Благодаря ти! Не всичко се получи веднага. Наистина адресът на дисплея беше 128*64, не 0x3D, а 0x3C. И пренаредих библиотеките "от средата" на версиите. Не най-новата, защото... имаше съобщение за критичната стойност на паметта (имам Arduino Uno).