Oled i2c дисплей 128х64 пикселя
Графический OLED дисплей

Данный дисплей был куплен в магазине Gearbest за свои деньги.
Скрины заказа
Заказ был сделан 02.12.2015, посылка дошла на удивление быстро, перед самым новым годом я забрал её на почте. Сейчас данный лот стоит на 47 центов дороже.Упаковка была стандартная для китайских магазинов, желтый пакет с пупырками внутри. Сам дисплей находился в запаянном антистатическом пакете.
Упаковка и внешний вид
На сам дисплей наклеена защитная пленка от царапин.Тут видно, что отсутствует резистор с нулевым сопротивлением в качестве перемычки BS1. Когда перепаивал её в другое положение, спружинил пинцет, и потерялась такая красивая перемычка, запаял обычную проволочную.
Технические характеристики дисплея: — Тип дисплея: OLED монохромный, в данном дисплее 2 цвета, желтый и голубой — Драйвер дисплея: SSD1306 — Разрешение: 128 х 64 пикселей — Размер дисплея: 0,96 дюйма — Углы обзора: >160° — Интерфейс подключения: 3-wire SPI, 4-wire SPI, I2C — Напряжение питания: 3,3 В — Потребляемый ток на пиксел: 100 мкА — Размеры: 33 мм х 33.5 мм
Картинка с габаритами
Электрическая схема
Даташит на драйвер SSD1306. Подключать данный дисплей будем к Digispark.
Что это такое и как его настроить на работу в Arduino IDE, можно прочитать в этом обзоре. От себя лишь сделаю ремарку. Настоятельно рекомендую использовать версию Arduino IDE 1.6.5. Сейчас на официальном сайте доступна версия 1.6.7, но с ней у меня постоянно сыпались ошибки. Теперь все собираем на одной макетке.
Подключается Digispark к дисплею следующим образом: — Т.к. подключать будем по шине I2C, необходимо перепаять перемычку BS1 в положение «1». — Vcc это питание дисплея, подаем 3,3В — GND тут понятно, это земля — DIN (SDA) подключаем к контакту P0 на Digispark (и подтягиваем к +5В резистором 4,7 К) — CLK (SCL) подключаем к контакту P2 на Digispark (и подтягиваем к +5В резистором 4,7 К) — CS подключаем к земле
— D/C тут нюанс, если на этот вывод подать «низкий» уровень, т.е. землю, то адрес дисплея будет 0x3C, если подать «высокий» уровень, т.е. подключить к 3,3В, то адрес дисплея будет 0x3D. Я подключил к земле.
— RES подтягиваем к питанию т.е. 3,3В Теперь загружаем стандартный скетч DigisparkOLED из папки примеров. Тут замечание, при необходимости нужно изменить адрес дисплея в файле DigisparkOLED.h на ваш. Вносите изменения в строку: #define SSD1306 0x3C // Slave address. По умолчанию там указан 0x3D. При попытке загрузить данный пример в ATtiny 85 вываливалась ошибка о нехватке памяти мк. Закомментируйте или удалите «картинки» в скетче, т.е. строчки: #include “img0_128x64c1.h” #include “digistump_128x64c1.h” и подправьте скетч, у меня получилось так:В итоге на дисплее увидим
Как видно, вывод 2 строчек текста на экран занимает 4062 байт, что составляет 67% памяти мк. Библиотека довольно прожорливая, если даже пожертвовать загрузчиком, памяти мк останется процентов 50, маловато однако.
Решено было найти или написать библиотеку «полегче». На просторах интернета была найдена библиотека TinySSD1306. Скачивал с этого сайта.
Распакуйте библиотеку в папку libraries ( если вы ставили Arduino IDE по умолчанию, то данная папка будет находится по такому пути: «C:Usersимя_пользователяAppDataRoamingArduino15packagesdigistumphardwareavr1.6.
5libraries» ). После перезапуска Arduino IDE, в папке примеров загружаете скетч ssd1306_demo.
Немного подправил данный скетч, чтобы просто вывести одну строку.Как видно, вывод одной строки у нас занял 2 138 байт, что занимает 35% памяти мк. Это совсем другое дело ? Если убрать загрузчик и использовать «голый» мк, то остается уйма места. Также я провел некоторые электрические тесты.
Потребляемый дисплеем ток составил 5,6 мА.Совместно с Digispark потребляемый ток составил 28,2 мА.Решил понизить частоту ATtiny до 1 Мгц. Потребляемый ток конструкции составил 16,5 мА.Думаю, что уменьшить ток потребления можно еще раза в 2, если использовать «голый» мк, т.к.
на плате Digispark есть еще и светодиод, потребляющий ток. А также можно понизить напряжение для ATtiny до 1,8В. В итоге: Дисплеем остался доволен. Высокие углы обзора, высокая контрастность, низкое энергопотребление. Для увеличения быстродействия есть возможность подключить по шине SPI.
Из минусов могу отметить отсутствие стабилизатора 3,3В на плате дисплея, хотя места там полно. В интернете читал, что данные дисплеи толерантны и к 5 Вольтам, но экспериментировать не стал, т.к. в даташит к контроллеру указано, что питание «логики» от 1,65 до 3,3В.
На этом все, постараюсь ответить на ваши вопросы, если будут таковые.
Еще раз всех с Новым годом и Рождеством!!
Урок 9. Русский язык на OLED дисплее 128X64

ВИДЕО редактируется.
Вы могли наблюдать, что в предыдущих уроках №7 и №8 уже использовался Русский шрифт. В этом уроке мы разберём некоторые проблемные моменты с которыми можно столкнуться при выводе Русских букв на OLED дисплей.
Нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
- Библиотека iarduino_OLED_txt (текстовая) – для вывода текста и цифр на OLED дисплеи.
- Дополнительно можно установить библиотеку iarduino_OLED (графическая), но в данном уроке она использоваться не будет.Графическая библиотека поддерживает все функции текстовой и имеет дополнительные функции для работы с изображениями и графикой, но при этом она занимает больше памяти, как оперативной, так и памяти программ.
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki – Установка библиотек в Arduino IDE.
Схема подключения:
OLED дисплей подключается к аппаратной или программной шине I2C Arduino.
ВыводНазначениеOLED дисплейArduino UNO SCL Линия тактирования шины I2C SCL A5 SDA Линия данных шины I2C SDA A4 Vcc Питание (3,3 или 5 В) Vcc 5V GND Общий GND GNDСхема установки дисплея при его подключении через Trema Set Shield.
Код программы:
#include // Подключаем библиотеку iarduino_OLED_txt.
iarduino_OLED_txt myOLED(0x78); // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x78 (если учитывать бит RW=0). //
extern uint8_t SmallFontRus[]; // Подключаем шрифт SmallFontRus. //
void setup(){ // myOLED.begin(); // Инициируем работу с дисплеем. myOLED.
setFont(SmallFontRus); // Указываем шрифт который требуется использовать для вывода цифр и текста.
// myOLED.setCoding(TXT_UTF8); // Указываем кодировку текста в скетче. Если на дисплее не отображается Русский алфавит, то …
} // раскомментируйте функцию setCoding и замените параметр TXT_UTF8, на TXT_CP866 или TXT_WIN1251.
//
void loop(){ // myOLED.clrScr(); // Чистим экран. myOLED.print( “Большие буквы:” , 0, 0); // Выводим текст начиная с 0 столбца 0 строки. myOLED.print( “ABCDEFGHIJKLM” , OLED_C, 2); // Выводим текст по центру 2 строки. myOLED.print( “NOPQRSTUVWXYZ” , OLED_C, 3); // Выводим текст по центру 3 строки. myOLED.
print( “АБВГДЕЁЖЗИЙКЛМНОП” , OLED_C, 5); // Выводим текст по центру 5 строки. myOLED.print( “РСТУФХЦЧШЩЪЫЬЭЮЯ” , OLED_C, 6); // Выводим текст по центру 6 строки. delay(3000); // Ждём 3 секунды. // myOLED.clrScr(); // Чистим экран. myOLED.print( “Маленькие буквы:” , 0, 0); // Выводим текст начиная с 0 столбца 0 строки. myOLED.
print( “abcdefghijklm” , OLED_C, 2); // Выводим текст по центру 2 строки. myOLED.print( “nopqrstuvwxyz” , OLED_C, 3); // Выводим текст по центру 3 строки. myOLED.print( “абвгдеёжзийклмноп” , OLED_C, 5); // Выводим текст по центру 5 строки. myOLED.print( “рстуфхцчшщъыьэюя” , OLED_C, 6); // Выводим текст по центру 6 строки.
delay(3000); // Ждём 3 секунды. // myOLED.clrScr(); // Чистим экран. myOLED.print( “Символы:” , 0, 0); // Выводим текст начиная с 0 столбца 0 строки. myOLED.print( “{}[]()?!#$%&*” , OLED_C, 3); // Выводим текст по центру 3 строки. myOLED.print( “~`'”^_-+=,.:;|/” , OLED_C, 5); // Выводим текст по центру 5 строки.
delay(3000); // Ждём 3 секунды. // myOLED.clrScr(); // Чистим экран. myOLED.print( “Цифры:” , 0, 0); // Выводим текст начиная с 0 столбца 0 строки. myOLED.print( “1234567890” , 6, 2); // Выводим текст начиная с 6 столбца 2 строки. myOLED.print( 1234567890 , 6, 3); // Выводим число начиная с 6 столбца 3 строки. myOLED.
print(-1234567890 , 0, 4); // Выводим число начиная с 0 столбца 4 строки. myOLED.print( 12345.7890 , 6, 5); // Выводим число начиная с 6 столбца 5 строки. delay(3000); // Ждём 3 секунды.
} //
Алгоритм работы программы:
В коде setup() происходит инициализация дисплея (подготовка дисплея к работе) и подключение шрифта «SmallFontRus» (в библиотеке имеется несколько предустановленных шрифтов, которые подключаются перед использованием). Со списком шрифтов и описанием всех функций библиотек iarduino_OLED и iarduino_OLED_txt, можно ознакомиться в разделе Wiki – OLED экран 128×64 / 0,96”.
Код loop() разбит на 4 части. Каждая часть начинается с очистки экрана функцией clrScr(), после чего следуют несколько функций print() для вывода текста или чисел на экран дисплея. Все части выполняются друг за другом с 3 секундной задержкой выполняемой функциями delay().
В результате на дисплее поочерёдно будут появляться: большие буквы (включая Русские), маленькие буквы (включая Русские), символы и цифры.
Проблемы при выводе Русских букв:
Кодировка:
Первая и основная проблема это кодировка в которой скетч передаётся компилятору. Разные версии Arduino IDE хранят скетч в различных кодировках. Даже последняя версия Arduino IDE 1.8.
5 (на момент написания данного урока) для ОС Windows, передаёт компилятору скетч в кодировке UTF-8 (если скетч был сохранён в файл *.ino) или в кодировке Windows-1251 (если скетч не был сохранён).
Но ни скетч, ни библиотеки используемые в нём, не знают в какой кодировке они будут переданы компилятору. Вот и получается что один и тот же скетч, оперируя Русскими буквами, может работать по разному.
Примечание:
Что такое кодировка?
Компьютер, как и контроллер (в т.ч. Arduino) хранит, получает и передаёт данные в виде 1 и 0. Из набора 1 и 0 можно точно составить числа, но нельзя однозначно составить буквы.
Кодировка это представление букв числами (по их порядковому номеру), которыми уже может оперировать компьютер или контроллер. Например, «А» – 1, «Б» – 2, «В» – 3 и т.д., тогда слово «ПРИВЕТ» можно передать, принять или сохранить, как набор чисел: 17,18,10,3,6,20.
Так как буквы можно располагать по разному (сначала символы или числа, или буквы другого языка и т.д.), то и порядковые номера (числа) у букв будут разные, вот и получилось, что придумано множество кодировок.
Исторически сложилось что Латинские буквы имеют одинаковые порядковые номера в большинстве кодировок: «A»…«Z» = 65…90, «a»…«z» = 97…122, а Кириллические буквы не только имеют различные номера, но могут быть разбросаны, или вообще отсутствуют в кодировках.
Решение:
В библиотеках iarduino_OLED и iarduino_OLED_txt, мы предусмотрели функцию setCoding(), которая может принимать в качестве единственного аргумента, одно из значений: TXT_UTF8, TXT_CP866, TXT_WIN1251, определяющее текущую кодировку скетча.
Эта функция закомментирована в 3 строке кода setup программы данного урока. Если Русский текст на дисплее отображается некорректно, то раскомментируйте строку с функцией setCoding и замените параметр TXT_UTF8, на TXT_CP866 или TXT_WIN1251.
В большинстве случаев это решит проблему кодировок.
myOLED.setCoding(TXT_WIN1251); // Указываем что текст скетча представлен в кодировке Windows-1251.
Если функция setCoding() Вам не помогла, тогда вызовите функцию setCoding() с параметром false, а Русские буквы указывайте их кодом, как это показано в следующем разделе данного урока: «Недостаточно памяти».
При желании укажите в комментариях к уроку свою версию ОС, версию Arduino IDE и какую кодировку использует Ваша Arduino IDE (если Вы не знаете какую кодировку использует Arduino IDE, то напишите какие символы отображаются на дисплее вместо строчных и прописных Русских букв). Мы постараемся добавить Вашу кодировку в библиотеки.
Недостаточно оперативной памяти:
Вторая, но не менее важная проблема заключается в том, что строки занимают много оперативной памяти. Каждая буква строки занимает минимум 1 байт. Особенно актуальна эта проблема при создании различных пунктов меню.
Решение:
Наиболее эффективным решением данной проблемы является хранение строк не в области оперативной памяти, а в области памяти программ, так как объем памяти программ гораздо больше. Для этого указывайте строки в качестве аргумента функции F(). Строки указанные таким образом будут храниться в области памяти программ:
myOLED.print( F(“Строка для дисплея”) ); // Вывод строки на дисплей.
Serial.print( F(“Строка для монитора”) ); // Вывод строки в монитор последовательного порта.
Недостаточно оперативной памяти или памяти программ:
Если Вы работаете со строками на Русском языке в Arduino IDE, которая хранит скетч в кодировке UTF-8. Вы уже храните строки в области памяти программ (или оставили строки в области оперативной памяти). Вы все равно можете освободить до половины памяти занимаемой строками!
Дело в том, что в кодировке UTF-8 каждая Русская буква занимает целых 2 байта. Если указывать Русские символы кодом в той кодировке, где они занимают 1 байт, можно освободить половину памяти занимаемой строками, вне зависимости от того, в каком типе памяти они хранятся.
Символы в шрифтах для библиотек iarduino_OLED и iarduino_OLED_txt располагаются в соответствии с кодировкой CP866, значит хранить и выводить Ваши строки на экран дисплея можно в этой кодировке:
myOLED.setCoding(false); // Отменяем текущую кодировку, так как Русские буквы будем указывать кодом.
myOLED.print(“200340244343250255256 iArduino”); // Выводим текст “Ардуино iArduino”. Вместо Русских букв используем их код в кодировке CP866.
Примечание:
Как указывать символ или букву по его коду в строках скетчей?
Для начала нужно узнать коды всех символов той кодировки, в которой Вы желаете их указывать, таблицы символов различных кодировок можно найти в интернете. Для кодировки CP866, Русские символы имеют следующие коды:
Для вывода любого символа нужно указать его код в 8-ричной системе счисления, которому должен предшествовать обратный слеш «». Данное правило действует для любых строк в Arduino IDE.
В строке «Ардуино iArduino» из примера выше, первая буква – «A», имеет код 128. Если перевести 128 в 8-ричную систему счисления, получится (200)8.
Значит букву «А» можно записать как «200», букву «р» как «340», букву «д» как «244» и т.д.
Для перевода чисел из 10-тичной в 8-ричную систему предлагаем воспользоваться стандартным калькулятором Windows. Откройте калькулятор, выберите вид калькулятора – «Программист» и введите число, Вы увидите его представление в разных системах счисления: HEX(16), DEC(10), OCT(8) и BIN(2).
Но если Вы желаете научиться быстро переводить числа между системами счисления 2, 4, 8, 10, 16, без калькулятора, то посмотрите Урок 32 – перевод чисел между системами счисления.
Ссылки:
Подключение OLED дисплея SSD1306 к Wemos D1 — DRIVE2

Сегодня мы научимся подключать популярный OLED дисплей на контроллере SSD1306 с разрешением 128×64 пикселей и диагональю 0.96 дюйма.
В продаже существует несколько вариантов таких дисплеев с возможностью подключения по шинам SPI и I2C. Я использую вариант с I2C, как наиболее простой.
Соединим дисплей с нашей платой Wemos D1 следующим способом: VCC -> 3V3, GND -> GND, SCL -> D1, SDA -> D2.
Настройка IDE и первое включение
Теперь необходимо добавить библиотеку для работы с этим дисплеем. В Arduino IDE открываем «Менеджер библиотек», «Скетч -> Подключить библиотеку -> Управлять библиотеками…».
Находим в списке библиотеку «ESP8266 Oled Driver for SSD1306 display» и устанавливаем её.
Давайте что ни будь нарисуем на нашем дисплее. Откройте пример SSD1306SimpleDemo из меню «Файл — Примеры — ESP8266 and ESP32 Oled Draver for SSD1306 display».
Найдите в коде строчку инициализации дисплея, впишите I2C пины к которым он подключён, в нашем случае это D2 и D1, и запустите пример.Если всё сделано правильно, то вы увидите примерно следующую картину.
Анимашка — ardulogic.ru/uploads/5921ea175b356.gif
Это конечно всё очень здорово, но мы же хотим выводить на экран свой текст и картинки.
Кастомные шрифт и изображения
Создайте новый проект и добавьте в него две вкладки font.h и image.h, как вы наверно уже догадались в них мы будем хранить изображение и шрифт.
Перейдите по ссылке oleddisplay.squix.ch/ и выберете какой-нибудь шрифт, у меня это будет Chewy, и нажмите кнопку «Create». Скопируйте код шрифта в файл font.h.
Теперь возьмите любую черно белою картинку размером меньше 128х64 пикселей, и загрузите её в конвертер www.online-utility.org/image/convert/to/XBM, в результате он создаст текстовый файл содержимое которого необходимо скопировать в файл image.h.
Основной код программы у нас будет таким:
//————————————-
#include “SSD1306.h”
#include “font.h” // Файл с шрифтом
#include “image.h” // Файл с картинкой
// Инициализируем дисплей подключенный к пинам D2 и D1
SSD1306 display(0x3c, D2, D1);
void setup() {// Первоначальные настройки дисплеяdisplay.init();display.flipScreenVertically();display.setFont(ArialMT_Plain_10);
}
void loop() {
// create more fonts at oleddisplay.squix.ch/display.clear(); // Очищаем экран от предыдущих данныхdisplay.setTextAlignment(TEXT_ALIGN_CENTER); // Выравниваем текст по центруdisplay.
setFont(Chewy_24); // Подключаем созданный нами шрифтdisplay.drawString(64, 8, “ARDULOGIC”); // Первая строка в координаты 64 по оси X и 8 по оси Ydisplay.drawString(64, 32, “2017”); // Вторая строкаdisplay.
display(); // Выводим все на экран
delay(2000);
// see blog.squix.org/2015/05/es…cu-how-to-create-xbm.htmldisplay.clear();display.drawXbm(26, 0, Volk_width, Volk_height, Volk_bits); // Рисуем нашу картинкуdisplay.display();
delay(2000);
display.clear();display.setTextAlignment(TEXT_ALIGN_CENTER);display.setFont(ArialMT_Plain_24); // Стандартный шрифт из библиотекиdisplay.drawString(64, 8, “GT-VOLK”);display.drawString(64, 32, “DRIVE2”);display.display();delay(2000);}
//————————————-
Запускаем скетч и любуемся результатом!
Анимашка — ardulogic.ru/uploads/5921eade8af9c.gif
Полный код скетча и оригинал статьи как всегда можно посмотреть у меня на сайте: ardulogic.ru/posts/podklu…spleya-ssd1306-k-wemos-d1
OLED графический монохромный дисплей SSD1306 – 17 Июня 2015 – Студия DIY

Характеристики
- Тип дисплея: OLED (на основе органических светодиодов);
- Разрешение экрана: 128×64;
- Угол обзора: > 160°;
- Высокий коэффициент контрастности ( 10000: 1 );
- Малое время отклика < 10 мкс
- Низкое энергопотребление: до 0.08W (При свечении всего экрана);
- Яркость ( кд / м2 ) 120(min)
- Напряжение: 3V и 5V;
- Широкий рабочий температурный диапазон (-40 ℃ ~ 85 ℃ )
- Размер: 27.0mm x 27.0mm x 4.1mm;
- I2C/IIC Интерфейс;
- Встроенный драйвер IC: SSD1306.
Сам дисплей поддерживает три вида интерфейса: — 8-bit 6800/8080-series parallel interface — 3 /4 wire Serial Peripheral Interface
— I2C Interface
Документация на дисплей
Внешний вид модуля
На плате установлен стабилизатор напряжения XC6206 в корпусе SOT-23 с надписью «662k»
Принципиальная схема, от несколько другого модуля (SPI/I2C)
Подключение к Ардуино
Arduino MEGA 2560Arduino UNO R3Arduino Leonardo OLED I2C дисплей
Pin 20
Pin A4
Pin 2
SDA
Pin 21
Pin A5
Pin 3
SCL
GND
GND
GND
GND
+5V
+5V
+5V
+5V
Скетч
Для работы необходимо загрузить библиотеки и подключить их к Arduino. Скачиваем и распаковываем архив в папку Arduino с libraries. Потребуются библиотеки Adafruit_SSD1306, Adafruit-GFX-Library, Wire и SPI.
Запускаем Arduino и выбираем Файл→Примеры→Adafruit_SSD1306-master→ssd1306_128x64_i2c.
Если ничего не происходит, то попробуйте поменять адрес с 0x3D на 0x3С в строке:
display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // initialize with the I2C addr 0x3D (for the 128×64)
если всё же дисплей никак не отреагировал и ничего не отображает, тогда загружаем скетч MultiSpeedI2CScanner
После загрузки скетча открываем монитор порта, устанавливаем скорость 115200 бод, после чего, в SerialPort отправляем S , для полного сканирования и ищем наше устройство, или для отображения только подключенных устройств, сначала отправляем P, а потом S.
Копируем адрес нашего OLED l2C дисплея и в тестовом скетче находим строку с записью адреса нашего дисплея и меняем на найденный адрес.
Всё работает, но есть проблема с русским шрифтом, его нет.
Но есть переделанная библиотека с русскими и украинскими шрифтами для OLED I2C дисплея от Іван Мартинюка. (Оригинальная библиотека для работы OLED I2C дисплея на базе контроллера чипа SSD1306 с разрешением экрана 128х64 пикселей)
Библиотека для дисплея OLED I2C дисплея с поддержкой русских и украинских шрифтов OLED I2C UKR RUS FONTS. После скачивания библиотеки, переместим папку OLED_I2C внутри архива в папку с библиотеками Arduino IDE, установим библиотеку и запустим любой из примеров для проверки работоспособности. Также есть дополнения к этой библиотеке.
Библиотека OLED StatusIcons является дополнением к библиотеке OLED_I2C, и предназначена для вывода статусных иконок вверху OLED дисплея.
И ещё одно дополнение к библиотеке OLED I2C OLED SPIflash, требует установки библиотеки SPIflash (Библиотека для работы с Microchip / SST последовательной флэш-памятью дисплеев)
Есть особенности при наборе русского или украинского текста. В строке которая будет отвечать за вывод текста после кавычек, набираем текст русскими символами при английской раскладке клавиатуры на компьютере
myOLED.print(“Z gbie gj heccrb!”, 0, 0); // вывод текста Я пишу по русски
Если появится желание добавить свою картинку, то можно воспользоваться программой LCD Assistant
Сначала сделайте свою картинку с помощью какого-либо графического редактора , таких как Photoshop или Paint и сохраните как монохромное изображение в формате *.BMP. Загрузите изображение в LCD Assistant Более подробно по использованию графики будет немного позже в отдельной статье.
Подключение OLED дисплея SSD1306 к Wemos D1

Сегодня мы научимся подключать популярный OLED дисплей на контроллере SSD1306 с разрешением 128×64 пикселей и диагональю 0.96 дюйма. В продаже существует несколько вариантов таких дисплеев с возможностью подключения по шинам SPI и I2C. Я использую вариант с I2C, как наиболее простой.
Соединим дисплей с нашей платой Wemos D1 следующим способом: VCC -> 3V3, GND -> GND, SCL -> D1, SDA -> D2.
Настройка IDE и первое включение
Теперь, необходимо добавить библиотеку для работы с этим дисплеем. В Arduino IDE открываем «Менеджер библиотек», «Скетч – Подключить библиотеку – Управлять библиотеками…».
Находим в списке библиотеку «ESP8266 Oled Driver for SSD1306 display» и устанавливаем её.
Давайте что-нибудь нарисуем на нашем дисплее. Откройте пример SSD1306SimpleDemo из меню «Файл – Примеры – ESP8266 and ESP32 Oled Draver for SSD1306 display».
Найдите в коде строчку инициализации дисплея, впишите I2C пины, к которым он подключён, в нашем случае это D2 и D1, и запустите пример.
Если всё сделано правильно, то вы увидите примерно следующую картину.
Это, конечно, всё очень здорово, но мы же хотим выводить на экран свой текст и картинки.
Кастомные шрифт и изображения
Создайте новый проект и добавьте в него две вкладки font.h и image.h, как вы наверно уже догадались, в них мы будем хранить изображение и шрифт.
Перейдите по ссылке http://oleddisplay.squix.ch/ и выберите какой-нибудь шрифт, у меня это будет Chewy, и нажмите кнопку «Create». Скопируйте код шрифта в файл font.h.
Теперь возьмите любую черно-белую картинку размером меньше 128х64 пикселей, и загрузите её в конвертер https://www.online-utility.org/image/convert/to/XBM, в результате он создаст текстовый файл, содержимое которого необходимо скопировать в файл image.h.
Основной код программы у нас будет таким:
#include “SSD1306.h” #include “font.h” // Файл с шрифтом #include “image.h” // Файл с картинкой // Инициализируем дисплей подключенный к пинам D2 и D1 SSD1306 display(0x3c, D2, D1); void setup() { // Первоначальные настройки дисплея display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_10); } void loop() { // create more fonts at http://oleddisplay.squix.ch/ display.clear(); // Очищаем экран от предыдущих данных display.setTextAlignment(TEXT_ALIGN_CENTER); // Выравниваем текст по центру display.setFont(Chewy_24); // Подключаем созданный нами шрифт display.drawString(64, 8, “ARDULOGIC”); // Первая строка в координаты 64 по оси X и 8 по оси Y display.drawString(64, 32, “2017”); // Вторая строка display.display(); // Выводим все на экран delay(2000); // see http://blog.squix.org/2015/05/esp8266-nodemcu-how-to-create-xbm.html display.clear(); display.drawXbm(26, 0, Volk_width, Volk_height, Volk_bits); // Рисуем нашу картинку display.display(); delay(2000); display.clear(); display.setTextAlignment(TEXT_ALIGN_CENTER); display.setFont(ArialMT_Plain_24); // Стандартный шрифт из библиотеки display.drawString(64, 8, “GT-VOLK”); display.drawString(64, 32, “DRIVE2”); display.display(); delay(2000); }
Запускаем скетч и любуемся результатом!
Скачать полную версию скетча: SSD1306Hello.zip
Самый «плохой» Arduino дисплей OLED LCD Display I2C 0.96 IIC Serial 128X64

Почитав отзывы и посмотрев обзоры я решил заказать самый «лучший» дисплей i2c. Я конечно понимал что он маленький но не настолько, просто крохотный и информацию на нём можно рассмотрев только с очень хорошим зрением. По сути я не представляю где его можно использовать.
Возможно в проекте наручных часов? При его цене в среднем 350 руб можно купить гораздо более достойные варианты. И под конец я его раздавил просто сжав пальцами, как оказалось он достаточно хрупкий (.
Немного модифицированная мной библиотека для этого дисплейчика OLED_I2C_UKR_RUS Библиотека взято от сюда http://arduino-pr


