OLED дисплеи и Arduino
В статье рассмотрены монохромные OLED дисплеи с разрешением 128x64 и 128x32 пикселей.
Это небольшие экранчики, их диагональ составляет всего около 1”. Основное их преимущество – удобство чтения благодаря высокой контрастности OLED дисплея. Каждый OLED дисплей изготавливается из отдельных 128x64 или 128x32 белых органических (OLED) светодиодов. Каждый светодиод включается/выключается с помощью чипа управления. Так как дисплей сам является источником света, дополнительная подсветка не требуется. Во-первых, это обеспечивает высокую контрастность дисплея, а во-вторых – значительно снижает энергозатраты, необходимы для его питания.
В качестве драйвера в дисплее используется чип SSD1306, который позволяет передавать данные по протоколам I2C, SPI и 8-битному параллельному протоколу. Как правило, столь широкий выбор интерфейсов предоставляет дисплей с разрешающей способностью 128x64 пикселей. В OLED дисплеях с разрешающей способностью 128x32, доступен только протокол SPI. В статье ниже используется именно SPI для подключения, так как он наиболее универсальный и требует малого количества контактов.
Питание OLED дисплеев
OLED дисплею и драйверу необходимо питание 3.3 В и 3.3 В на питание логики, для передачи данных. Питание дисплеев зависит от того, как именно загружен экран, но в основном он тянет около 20 мА и требует напряжение питания 3.3 В. Встроенный драфвер представляет из себя простой переключатель, который преобразует 3.3 В – 5 В в управляющий сигнал для OLED дисплея. Вы можете запускать дисплей от одного источника питания 3.3 В или использовать 3.3 В для питания чипа и до 4.5 В для самого экрана. Или вы можете подключить 3.3 В к чипу и подать 7-9 В непосредственно на контакт питания OLED дисплея.

OLED 128x64 и 128x32 с готовым выходом 5 В
Если у вас версия OLED дисплея, которая старше v1 128x64, можете не ознакамливаться со следующим подразделом. У вас уже есть возможность запитать 5 В. Все 1.3" 128x64 и меленькие 128x32 SPI и I2C имеют на борту 5 В. Если у вас модель v2 0.96" 128x64 OLED дисплей с отметкой 5 В на передней части, его тоже можно подключать к 5 В. Если у вас более старая версия OLED дисплея - 0.96" (смотрите ниже), вам надо быть аккуратнее при подключении к мекроконтроллеру 5 В. OLED дисплей разработан таким образом, что он совместим с питанием 5 В. То есть вы можете подать питание в диапазоне 3-5 В, а встроенный регулятор сделает всю остальную «черную работу» за вас.
Все OLED экраны можно использовать с питанием и логикой 3.3 В.

Просто подключите контакт GND к «земле», а контакт Vin к источнику питания в диапазоне 3-5 В. В результате на контакте 3Vo будет 3.3 В.
0.96 128x64 OLED
Более старые версии OLED дисплеев 0.96" 128x64 использовать сложнее, так как по умолчанию они не совместимы с питанием 5 В. То есть, вам надо обеспечивать для них питание 3.3 В.

- VDD - для питания логики 3.3 В. Значение напряжения должно быть 3 или 3.3 В.
- VBAT – это вход для изменения напряжения в диапазоне от 3.3 до 4.2 В.
- VCC – это контакт значения напряжения high для OLED экрана. Если вы используете встроенный преобразователь напряжения, этот контакт подключать не надо. Если вы не используете внутренний преобразователь, подключите его к источнику питания 7-9 В – постоянный ток.
Рекомендуется соединить контакты VDD и VBAT вместе и подключить к 3.3 В, а контакт VCC оставить неподключенным.
Библиотека Arduino и примеры
Для использования небольших монохромных OLED дисплеев вам надо будет установить библиотеки Arduino. Код из библиотеки, которая приведена ниже поддерживает работу с любыми моделями плат Arduino. Кроме того, его можно легко адаптировать и под другие микроконтроллеры. Для передачи данных используется SPI стандарт передачи данных.
Скачать библиотеку для работы OLED дисплея можно на Github - библиотека Adafruit SSD1306. Кликните кнопку DOWNLOAD в левом верхнем углу, извлеките архив и переименуйте папку в Adafruit_SSD1306. Проверьте, чтобы в папке содержались файлы Adafruit_SSD1306.cpp и Adafruit_SSD1306.h, а также папка examples.
Переместите папку Adafruit_SSD1306 в папку Arduino /libraries. Если папка не существует, вам надо ее создать. В Windows путь будет следующим: (home folder)\My Documents\Arduino\libraries, а для Mac или Linux: (home folder)/Documents/Arduino/libraries. Если у вас возникли трудности с библиотеками, ознакомьтесь с полным гайдом по работе и установке библиотек на нашем сайте Arduino-diy.com.
Аналогичную процедуру вам надо будет провести с Github - библиотека Adafurit_GFX.
После установки библиотек Adafruit_SSD1306 и Adafruit_GFX, перезапустите Arduino IDE. Загрузить пример скетча можно через меню: File→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306...
После того как вы завершили подключение дисплея в соответствии с рекомендациями, которые приведены выше, можете загружать скетч на ваш Arduino.
Библиотека не сможет определить размер экрана на уровне кода. Указать размер надо в header файле. Перейдите в папку с библиотекой и откройте файл Adafruit_SSD1306.h. Сверху в нем есть пояснения по адаптации библиотеки к различным дисплеям.


Создание растровых изображений
Вы можете легко создать растровые изображения для отображения на OLED дисплее с помощью LCD assistant software. Сначала создайте изображение с помощью любого фоторедактора (Photoshop, Paint и т.п.). Сохраните это изображение в формате Monochrome Bitmap (bmp):

Установите следующие параметры:

И импортируйте ваше монохромное растровое изображение. Сохраните его (Save output) в cpp файл:

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

Подключение OLED дисплея 128x64
Паяем контакты
Перед подключением надо установить и спаять контакты на OLED дисплее. Контакты не будут работать без распайки!
Начните с установки рельсы на 8 контактов на вашу монтажную плату. Рельса устанавливается в макетку своими длинными ногами.

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

Теперь спаяйте 8 контактов с 8-ю отверстиями!

I2C или SPI
Одна из хороших особенностей OLED экранов 128x64 – это то, что они могут использовать I2C или SPI протоколы. SPI отрабатывает быстрее, чем I2C, но для подключения надо больше контактов. Кроме того, наладить SPI на некоторых микроконтроллерах проще, чем I2C.
Подключение OLED по I2C
Экран может подключаться по I2C протоколу к любому микроконтроллеру, который поддерживает этот формат. Так как I2C интерфейс используется только для 'соединения' дисплея, у вас останется 512 байт RAM памяти на микроконтроллере. Но передать данные с OLED дисплея не получится.
Для начала вам надо соединить два контакта на задней части платы OLED экрана. Оба контакта должны быть 'замкнуты' (с помощью распайки), чтобы I2C начал работать!

После этого подключите контакты к Arduino
- GND идет к GND(земля)
- Vin идет к 5V
- Data к I2C SDA (на Uno - это A4, на Mega - это 20, а на Leonardo - digital 2)
- Clk к I2C SCL (на Uno - это A5, на Mega - это 21, а на Leonardo - digital 3)
- RST к 4 (позже вы можете изменить этот пин в коде программы)
Это подключение совпадает с примером, который есть в библиотеке. После того как предложенный вариант отработает, вы можете попробовать другой контакт для Reset (вы не можете поменять контакты SCA и SCL).
Пример находится в: File→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306_128x64_i2c example
Подключение OLED по SPI
По умолчанию плата предусматривает использование SPI, но если вы до этого использовали I2C, вам надо разомкнуть контакты, которые вы замыкали в предыдущем пункте!

После этого подключите контакты к Arduino
- GND идет к ground (земля)
- Vin идет к 5V
- Data к digital 9
- CLK к digital 10
- D/C к digital 11
- RST к digital 13
- CS к digital 12
Это подключение совпадает с примером скетча, который предложен в библиотеке. После запуска и проверке, можете менять пины и программу.
Пример находится в: File→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306_128x64_spi example
Подключение OLED дисплея 128x32
Подключение OLED экрана 128x32 по SPI
OLED экран 128x32 очень просто подключается по SPI так как в нем есть встроенный модуль согласования уровней. Сначала возьмите рельсу 0.1" с 8 контактами.

Установите контакты на макетной плате длинной стороной, а сверху OLED экран. После этого припаяйте рельсу к OLED PCB.

После этого подключите Arduino - GND подключается к ground (земля), Vin подключается к 5V, DATA к digital 9, CLK к digital 10, D/C к digital 11, RST к digital 13 и CS к digital 12.
Скетч соответствует тому, как вы подключили экран к Arduino. После проверки работоспособности можете попробовать подключить другие контакты.
Пример находится в: File→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306_128x32_SPI example
Если вы используете OLED экран 128x32, убедитесь, что вы раскомментировали строку "#define SSD1306_128_32" в верхней части скетча Adafruit_SSD1306.h. Раскомментировав эту строку, вы изменяете размер буфера.
Подключение OLED экрана 128x32 по I2C
OLED экран 128x32 можно легко подключить и по I2C. Опять-таки, причина в наличии модуля согласования уровней и регулятора. Сначала возьмите рельсу 0.1" на 6 контактов.
Установите рельсу длинными контактами на макетной плате

Сверху установите OLED экран

Припаяйте рельсу к OLED PCB

Теперь подключите контакты к Arduino
- GND к GND
- Vin к 5V
- SDA к I2C Data (на Uno - это A4, на Mega - это 20, а на Leonardo - digital 2)
- SCL к I2C Clock(на Uno - A5, на Mega - это 21, а на Leonardo - digital 3)
- RST к 4 (вы можете изменить эти контакты в скетче дальше)

Это подключение соответствует тому, которое требуется для работы скетча примера. После того, как пример отработал, вы можете изменить пин RST. Вы не можете изменить контакты I2C, так как они 'зафиксированы' на уровне электросхемы.
Пример находится в: File→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306_128x32_i2c example
Подключение старого 128x64 OLED экрана V 1.0
Эта схема подключения рассчитана на более старые 0.96" OLED экраны, которые поставляются с модулем согласования уровней. Если у вас V2.0, то используйте другую схему подключения.
Версия V1 128x64 OLED экрана работает от 3.3 В и не имеет встроенного модуля согласования уровней, так что для использования этого экрана с 5 В микроконтроллером, вам понадобится внешний модуль согласования. Если ваш микроконтроллер поддерживает 3.3 В, вы можете пропустить дальнейшие шаги.
Предполагается, что вы будете использовать монтажную плату. Возьмите рельсу 0.1" с 10 контактами

Установите контакты длинными ногами на макетную млату, а потом сверху – левую рельсу контактов OLED экрана.

Припаяйте контакты

Соедините VDD и VBAT (они подключатся к 3.3 В). GND подключается к GND.

Установите модуль согласования уровней CD4050 таким образом, чтобы пин 1 был сверху

Подключите пин 10 к пину D/C, пин 12 к CLK (SPI время) и пин 15 к DAT (SPI данные).

Подключите пин 2 к RES (сброс) и пин 4 к CS (выбор чипа). Пин 1 идет к 3.3 В, а пин 8 к земле.

Вы можете подключить входы модуля согласования уровней к любым контактам, но в данном случае мы подключили digital 13 к контакту 3 модуля согласования, 12 к пину 5, 11 к пину 9, 10 к пину 11 и 9 к пину 14. Это подключение соответствует скетчу-примеру. После того как, приведенное подключение отработает, можете поэксперементировать с другими контактами/пинами.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!