OLED-дисплей 128×64: подключение к Arduino и русский шрифт

Поиск адреса OLED-дисплея на шине I2C, библиотеки Adafruit SSD1306 и OLED_I2C, вывод кириллицы и пример часов на DS3231.
Чем OLED отличается от ЖК-индикатора
OLED-дисплеи всё чаще заменяют в проектах Arduino простые ЖК-индикаторы, хотя и стоят дороже. Причина в принципе работы: пиксели ЖК-экрана подсвечиваются, а у OLED каждый пиксель светится сам. Картинка получается более контрастной и насыщенной, сохраняется при взгляде под углом, а энергии такой экран потребляет немного.

Подключение и адрес на шине I2C
Дисплей подключается к плате по шине I2C.

Сначала выясняют адрес модуля. Для этого на плату загружают скетч-сканер: он использует библиотеку Wire, перебирает адреса от 0 до 127, каждому отправляет запрос и печатает в монитор порта (скорость 9600) либо адрес ответившего устройства, либо прочерк. Таблица обновляется каждые три секунды. В рассматриваемом примере дисплей обнаруживается по адресу 0x3C.
Библиотеки
Для такого дисплея существует несколько библиотек. Самая известная из них Adafruit SSD1306, в её составе есть примеры вывода графики.

Другой вариант — библиотека OLED_I2C. В ней объект экрана создаётся строкой OLED display(SDA, SCL, 8), а основные действия выполняются методами begin(), clrScr(), setFont(), print() и update().

Вывод русского текста
Библиотека OLED_I2C поддерживает кириллицу. Шрифт объявляется строкой extern uint8_t RusFont[]; и выбирается в нужном месте вызовом display.setFont(RusFont).
Особенность в том, что русские слова в скетче набираются не кириллицей, а латинскими символами в английской раскладке клавиатуры, то есть нажимаются те же клавиши, что и при русском наборе. Так, слово «Обзор» записывается как J,pjh, а фраза «Русский шрифт» как Heccrbq ihban. В вызове print после текста указывают выравнивание (например, CENTER) и вертикальную координату строки. Демонстрационный скетч очищает экран, выводит пять строк по центру с шагом 10 пикселей, держит их 5 секунд, затем стирает и через 2 секунды повторяет.
Пример: часы на OLED-дисплее
Практическое применение — экран часов. Время берётся с микросхемы DS3231, для чего в скетч добавлены библиотеки Wire, Time и DS1307RTC. Раз в секунду программа читает время, приводит часы, минуты и секунды к двузначному виду и выводит три строки: время, дату через косую черту и день недели. Для времени и даты используется шрифт SmallFont, для дня недели RusFont; названия дней заранее записаны в массив тем же способом, в английской раскладке.