Сделай сам своими руками
Лайфхаки, мастер-классы, полезные советы, рецепты.
Добавить мастер-класс
Главная » Электроника » Электроника своими руками » Как подключить 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 это Organic Light-Emitting Diode, т.е., полупроводниковый прибор из органических соединений, который начинает излучать свет при прохождении через него электрического тока.
  • ARDUINO - это платформа для обучения и построения систем автоматики и робототехники.
  • ArduinoIDE - среда разработки. Это бесплатная программа для программирования Arduino.
  • I2C – Inter-Integrated Circuits, межмикросхемная линия связи.
  • Скетч, он же, код, он же программа - терминология 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 (clock) и SDA (data), «Плюс» питания (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 адресов служебных. Общение ведется по этим адресам. Есть главный, он же Master, а есть ведомый, он же Slave, - Мастера запрашивают, ведомые отвечают, все просто.
Поскольку на нашем OLED-дисплей используется протокол связи I2C, а адрес может быть и не указан, мы сами попробуем узнать этот самый адрес.

Это можно сделать, загрузив коротенький скетч на свою плату Arduino с подключенным OLED. НО!
Не торопитесь сразу заливать скетч в Arduino! Давайте для начала загрузим «драйвера», т.е. подключим библиотеки, а для этого сразу перейдем к «Шагу №5», а затем вернемся и продолжим.

Шаг 4: Продолжение:


Скачать КОД Finder_I2C_Hex_Address.ino, загрузить в Arduino.
Открыть «Монитор порта», выставить скорость 9600 и если все правильно подключено, программа покажет адрес устройства, в моем случаи OLED с адресом 0x3F.
Как подключить OLED I2C дисплей к ARDUINO

Шаг 5: Загрузка и подключение библиотек


Для того чтобы все правильно заработало, а вам не пришлось изобретать велосипед, нужно подключить пару библиотек в среду ArduinoIDE, а именно: ADAFRUIT GFX и ADAFRUIT SSD1306, они необходимы для того чтобы Arduino смогла самостоятельно общаться с OLED дисплеем.
Вы можете подключить эти библиотеки, выполнив следующие шаги.
  • 1. В ArduinoIDE идем в меню Скетч / Sketch.
  • 2. Выбираем «Включить библиотеки» / Include Libraries.
  • 3.Выбираем «Управление библиотеками» / Managed Libraries.
  • 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.
Как подключить 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 display(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("Well done!");
display.display();

В конце не забудьте написать display.display, чтобы изображение вывелось на экран, иначе получите пустоту.
Если вы все сделали правильно, то на дисплеи появится сообщение.
Как подключить OLED I2C дисплей к ARDUINO

Здесь КОД Starting_with_Arduino_OLED.ino нашей программы:
code.zip [946 b] (cкачиваний: 5127)
Прокомментировать
Вконтакте Одноклассники
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
3+три=
Комментарии (10)
  1. Татошка
    #1 Татошка Гости 14 ноября 2018 21:18
    9
    Спасибо, Друг! Это мой первый залитый скетч и знакомство с Arduino. Не считая мигания Blink`а ))
  2. алишер
    #2 алишер Гости 28 июля 2019 19:35
    8
    А где скачать этот Finder_I2C_Hex_Address.ino код?
    1. Al
      #3 Al Гости 14 августа 2019 12:51
      11
      под рисунком есть ссылка "Здесь КОД Starting_with_Arduino_OLED.ino нашей программы:"
  3. Alex
    #4 Alex Гости 13 ноября 2019 20:01
    9
    Не VOID SETUP и не VOID LOOP, а void setup(); и void loop(); Язык Си - язык регистрозависимый.
  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. Ildar Xafizov
    #8 Ildar Xafizov Гости 19 апреля 2020 19:15
    5
    у меня такой вопрос. имеются 2 oled дисплея идентичные с вашим на фото(второе фото). не могу разобраться какими перемычками менять адрес?
  8. Гость Максим
    #9 Гость Максим Гости 31 октября 2020 18:53
    11
    Спасибо за статью. Но у меня возникла проблема: пиксели в буквах через один светятся и шрифт больше чем должен быть. Видимо ардуино не распознаёт разрешение экрана. Если у кого такая же проблема решается так:
    #define SCREEN_WIDTH 128 // OLED display width, in pixels
    #define SCREEN_HEIGHT 64 // OLED display height, in pixels
    Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  9. Дмитрий
    #10 Дмитрий Гости 9 мая 2021 19:35
    7
    Спасибо! Не всё сразу получилось. Действитеьно адрес был на дисплее 128*64 не 0х3D, ,а 0x3C. И Библитотеки переставил "из середины" версий. Не самую последнюю, т.к. было сообщение о критичном значении памяти (у меня Arduino Uno).
Ваш E-Mail: Ваш пароль:
Войти через:
Вконтакте Одноклассники