OLED дисплеи на сегодняшний день являются самыми совершенными типами дисплеев, и причин тому много: широкие углы обзора, низкое энергопотребление, малая толщина дисплеев и отсутствие необходимости во внешней подсветке.

Ассортимент на сегодня не очень широк, чаще всего используется радиолюбителями 0,96" OLED 126*64 точек. Размер модуля 27*27 миллиметров, размер самого дисплея 26,7*19,3 миллиметра, при этом активное рабочее поле дисплея составляет всего 10,9*21,75 миллиметра, пиксели расположены с шагом 0,17 миллиметра, размер пикселя же всего 0,154*0,154 миллиметра.
Все доступные цвет представлены на картинке - белый, синий, желтый и жовто-блакитный.

OLED 0,96" display

Чип SSD1306 поддерживает много протоколов связи, но нам интересны те, что имеют 4 вывода и используют протокол I2C

I2C протокол передачи данных


Принцип работы I2C основан на двухпроводной схеме, которая включает в себя:

  • SDA (Serial Data Line) — линия данных, по которой передаются данные.
  • SCL (Serial Clock Line) — линия тактовых импульсов, которая синхронизирует передачу данных.
В схеме может быть только один мастер(ведущий), а все остальные подчиненные(ведомые). Мастер инициирует передачу данных, генерируя тактовые импульсы и управляющие сигналы, в то время как подчиненные отвечают на запросы мастера.

В интерфейсе I2C линии SDA и SCL подключены к питанию через подтягивающие резисторы, обычно находящиеся на мастерском устройстве (например, на микроконтроллере). Эти резисторы обеспечивают состояние высокого уровня на линиях данных и тактовых импульсов в отсутствие активного сигнала от мастера или ведомого устройства.

Особенности построения I2C:
  • Адресация: Каждое устройство на шине I2C имеет уникальный адрес, который используется для идентификации устройств. Адрес может быть 7-битным или 10-битным.
  • Скорость передачи: Стандартный режим передачи данных — до 100 кбит/с, быстрый режим — до 400 кбит/с, высокоскоростной режим — до 3,4 Мбит/с.
  • Четкая синхронизация: данные принимаются всегда правильно, потому что есть синхронизация по тактовому сигналу SCL.

Библиотека Ардуино OLED_I2C

Довольно простая библиотека для среды Ардуино, была создана для упрощения использования OLED-дисплеев с разрешением 128x32 и 128x64 пикселей на базе контроллера SSD1306 с Arduino, chipKit, ESP8266 или ESP32. С новым дисплеем на SSD1315 проверил тоже работает.

Библиотека умеет выводить шрифты, графические примитивы - точки, линии, прямоугольники, овалы и т.д. Единственно нет возможности повернуть дисплей набок для вывода текста.

Устанавливается через менеджер библиотек Ардуино. Есть версии с русским и украинским шрифтами.



#include <OLED_I2C.h> 
OLED  myOLED(SDA, SCL);   
extern uint8_t RusFont[]; // подключаем "Русский шрифт"

void setup()
{
  myOLED.begin(); //инициализируем дисплей
}
void loop()
{
  myOLED.clrScr(); // Стираем все с экрана
  myOLED.setFont(RusFont); // устанавливаем Русский шрифт

  myOLED.invert(true); // Фон экрана белый
  myOLED.print("Lj,hj gj;fkjdfnm!", CENTER, 0); // Выводим надпись "Добро пожаловать!" по центру
  myOLED.print("D yfi", CENTER, 18); // Выводим надпись "В наш" по центру с отступом от верха 18 пикселей
  myOLED.print("Bynthytn-vfufpby", CENTER, 28); // Выводим надпись "Интернет-магазин" по центру с отступом от верха 28 пикселей
  myOLED.print("JJJ RbR", CENTER, 56 ); // Выводим надпись "ООО КиК" по центру с отступом от верха 56 пикселей
  myOLED.update(); // Обновляем информацию на дисплее
  myOLED.clrScr(); // Стираем все с экрана

  delay(3000); // Пауза 3 секунды
  
  myOLED.invert(false); // Фон экрана черный
  myOLED.setFont(RusFont); // устанавливаем Русский шрифт
  myOLED.print("Lj,hj gj;fkjdfnm!", CENTER, 0); // Выводим надпись "Добро пожаловать!" по центру
  myOLED.print("Yf yfi gjhnfk", CENTER, 18); // Выводим надпись "На наш портал" по центру с отступом от верха 18 пикселей
  myOLED.print("Bynthytn-vfufpby", CENTER, 28); // Выводим надпись "Интернет-магазин" по центру с отступом от верха 28 пикселей
  myOLED.print("JJJ RbR", CENTER, 56 ); // Выводим надпись "ООО КиК" по центру с отступом от верха 56 пикселей
  myOLED.update(); // Обновляем информацию на дисплее

  delay(3000); // Пауза 3 секунды
}

Русский шрифт в скетче показан абракадаброй, набирать русский текст нужно русскими буквами, переключившись на английскую раскладку!

Версия библиотеки с русским шрифтом устарела, по этому лучше просто взять недостающие шрифты из файла DefaultFonts.c  и дописать их в файл с таким же именем из загруженной библиотеки. Правда нужно иметь в виду, что в случае выхода новой версии, наша измененная затрется! Хотя апдейтов не было аж с 2019 года.

В случае Arduino UNO такой дисплей можно воткнуть напрямую в плату не использую проводов! Для этого используются выводы GND, D2, D3 и D4. В скетче в функцию инициализации добавляем установку на втором выводе высокого уровня (вместо подключения к выводам 5В)

  pinMode(2, OUTPUT);    // Цифровой выход 2 - исходящий 
  digitalWrite(2, HIGH); // Присваиваем используя оператор digitalWrite порту 2                                  значение HIGH, это значит на пин 2 ардуино подаст 5В  

И объявление 

OLED  myOLED(SDA, SCL);  

меняем на

myOLED(4, 3, 4); // SDA - 4pin, SCL - 3pin 

Кстати в таком режиме мы можем контролировать работу всего дисплея и например включать его по команде на непродолжительное время, тем самым компенсируя главный недостаток OLED экранов - быстрое выгорание при работе.