Андрей Смирнов
Время чтения: ~20 мин.
Просмотров: 3

Свой текст для OLED 128×64

В очередном своём проекте я решил использовать китайский OLED дисплей разрешением 128х64 точки с интерфейсом подключения I2C.

1487007876176129751.jpg

Но после курения весьма немногочисленных и однотипных гайдов по работе с такими экранами я понял, что круче руководств как подключить его к дуньке (4 провода, смех) и вывода на него стандартного примера, ничего во всеобъемлющем интернете толком то и нет… Да и ещё у него есть такой недостаток как скудность стандартных шрифтов – в стандартной библиотеке их всего 5, два из которых буквенные и три циферные, причём самый большой циферный выполнен в каком-то псевдоготическом стиле.

1487007893193932003.jpg

В общем ни один из стандартных шрифтов мне не подходил категорически. Ну чтож, подумал я, значит надо сделать свой шрифт с блекджеком и шлюхами. Дело за малым – найти гайд и бабахнуть. Но тут всплыла ещё одна проблема – гайдов по этому делу нет, только ссылки на мёртвые сайты, хождения вокруг да около, троллинг, закольцованные комментарии. Ныть на форумах я не собирался, ожидая что кто-то сделает всю работу за меня, поэтому принял решение расковырять библиотеку, а конкретнее файл DefaultFonts.c, лежащий в её папке. Итак, открываем его и видим портянку из шестнадцатеричного кода с комментами.

1487007990127217243.png

Ну думаю круто, сейчас возьму фотошоп, нарисую в монохроме шрифт, загоню его в прогу конвертер картинок в хекс-код, забью в наш DefaultFonts.c и дело в шляпе. Ок, рисую шрифт 20х40:

Сохраняю в картинку каждый символ, перегоняю его в хекс с помощью DotFactory (скрин наспех, делал уже потом, для данного поста, восьмёрка кривая, как видно по визуализатору, не исправлял настройки программы):

Вставляю в файл шрифта, в скопированный блок с новообозванным шрифтом. Затем загружаю в ардуино тестовый скетч и получаю сраку на дисплее (фото не делал, там просто россыпь хаотичных пикселей, как будто гном чихнул).

Значит не так всё просто как кажется… В конечном итоге разобрался и опишу процесс пошагово на примере одного символа.

Начну пожалуй с того, что каждый шрифт в файле DefaultFonts.c представляет собой блок с заголовком в виде:

Где MediumNumbers — имя шрифта, а набор из четырёх байтов — параметры. Итак по порядку:

0x0c — ширина шрифта, в данном случае 12 пикселей

0x10 — высота шрифта, тут равна 16ти пикселям

0x2d — порядковый номер первого символа согласно таблице ASCII

0x0d — общее количество символов в шрифте (блоке)

Теперь постараюсь ещё подробнее, чтобы не извращаться с дорисовкой ноликов, ширину принимаем кратной 4ке, то есть 4, 8, 12, 16 и тд. С высотой попроще, позже объясню как правильно её корректировать. Количество символов наверное можно не объяснять, в данном примере она равна 13ти и можно тупо посчитать строки — их ровно 13, справа даже комментарии есть какой символ зашифрован. По поводу кода символа согласно ASCII — ниже таблица, например если нужно чтобы шрифт начинался с двойки — пишем 0x32 (50 номер в десятичной), если например с буквы Q — пишем 0x51 (81 в десятичной).

В данном примере сделаем шрифт из одного символа, с размерами 24х32, который будет печататься на экран вместо цифры «0». Так как все делают метеостанции и умные дома, то решил нарисовать наспех такой символ:

Заметьте, картинка 24х30 пикселей, нестандартная высота для примера, цвет неважен. Хоть сине-зелёную сделайте.

Дальше валим её набок вправо, затем делим её справа налево на колонки по 8 пикселей, открываем любой текстовый редактор (или тетрадку). Я предпочитаю обычный Microsoft Word, где делаю таблицу из двух колонок — в первой у нас будут двоичные числа, во второй — перевод в 16тиричную. В принципе всё видно на картинках ниже:

Забиваем в таблицу числа в виде ХХХХХХХХ (8 бит или 1 байт) согласно заполненности цветом, у меня белый — 0, чёрный — 1. Занятие муторное, но нормальных программ для этого дела я не нашёл, наверное плохо искал.

В итоге получаем 4 блока, нумерация идёт справа налево, повторюсь. В фотошопе прекрасно видно — фон как раз таки состоит из клеток 8х8 пикселей.

После того, как все значения записаны в двоичном коде — переводим их в шестнадцатиричную систему счисления, я делаю это с помощью калькулятора из 10ой винды, можно приспособить любой онлайн конвертер или прогу BinDecHex. В принципе наверное можно забить в файл шрифтов и в двоичном коде, но я не пробовал, можете попробовать и отписаться. В двоичном формате наверняка портянка получится дай боже.

Не забываем отделять все числа запятыми!

Когда мучения закончатся — вставляем полученное содержимое в файл DefaultFonts.c в новый свеженький блок:

Обзовём шрифт Symbol, параметры будут «0x18, 0x20, 0x30, 0x01,» что равнозначно 24х32 пикселя, 48 стартовый номер (цифра «0») и всего 1 символ в шрифте.

Далее осталось дело за малым — накидать скетч и залить в ардуино:

В итоге получаем это:

Толком сфокусироваться не смог, дисплей слишком контрастный, да и поздно было) Но в принципе видно что всё у нас вышло.

Как обычно замечу что на гениальность не претендую, возможно есть способы быстрее и продуктивнее. Но этот пост позволит разобраться в принципах формирования шрифта в этой библиотеке. Гайд не исчерпывающий и для меня остались некоторые пробелы — почему например нельзя сделать шрифт произвольного размера, допустим 37х21. Если ответ на этот вопрос появится в комментариях — буду рад. Так же если имеются дополнения и вопросы — пишите, не стесняйтесь.

554

Сегодня мы рассмотрим подключение OLED I2C дисплея с размером экрана 0,96″ и разрешением 128*64 точек к плате Arduino UNO.

OLED L2C дисплей (фронт)

OLED L2C display (тыл)

Заказать дисплей на Алиэкспресс  128X64 OLED LCD LED

В OLED (Organic Light-Emitting Diode) дисплеях используется технология в которой светодиоды сами излучают свет без дополнительного подсвечивания как например в LCD дисплеях. Дисплей OLED состоит из тонкой многослойной органической пленки, помещенной между анодом и катодом. OLED обладает высоким потенциалом применения практически для всех типов дисплеев и рассматривается в качестве конечной технологии для следующего поколения плоских дисплеев. Качество отображения информации, дешевизна и идеальные углы обзора OLED дисплея делают его лидером среди дисплеев.

Особенности OLED L2C дисплея

  • Не требуется подсветка дисплея
  • Высокое разрешение: 128 * 64 пикселей.
  • Угол обзора: больше 160 градусов.
  • Полностью совместим с Arduino, контроллерами 51 серии,  MSP430 серии, STM32 / 2, КСО IC и т.д.
  • Ультра-низкое энергопотребление: при полном свечении экрана 0.08W
  • Рабочее напряжение: 3V ~ 5 В постоянного тока.
  • Рабочая температура: -30 C ~ 70 C.
  • I2C / IIC интерфейс, нужно только 2 провода.
  • Драйвер IC: SSD1306.
  • Размер платы: 2.7см х 2.8см.
  • Размер дисплея: 2.7см х 1,95см  (0,96″ дюйма)
  • Подключение OLED L2C дисплея

    VCC —– +5v  (+5 вольт ,но работает и от 3х вольт — проверено на есп 8266) GND —–  GND (земля)SDA —– pin SDA  (pin A4 для Arduino nano V3)SCL —–  pin SCL (pin A5 для Arduino nano V3)

    Библиотеки для OLED L2C дисплея

    Скачаит с гитхаба библиотеку Adafruit_SSD1306

    После удачного скачивания и установки библиотек, приступаем к тестовому запуску нашего дисплея

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

    загружаем наш скетч и смотрим есть ли у нас отображение на дисплее информации как на видео

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

    После загрузки скетча открываем монитор порта, устанавливаем скорость 115200 бод

    Меню L2C сканера

    после чего, в SerialPort отправляем S , для полного сканирования и ищем наше устройство.

    Результат полного сканирования

    для отображения только подключенных устройств, сначала отправляем P, а потом S

    результат сканирования подключенных устройств

    Теперь запоминаем или копируем адрес нашего OLED l2C дисплея и в тестовом скетче ищем строку с записью адреса нашего дисплея

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

    Так же не забываем о экономии при покупке товаров на Алиєкспресс с помощью кэшбэка 

    Для веб администраторов и владельцев пабликов  главная страница ePN

    Для пользователей покупающих на Алиэкспресс с быстрым выводом %главная страница ePN Cashback

    Удобный плагин кэшбеэка браузерный плагин ePN Cashback

Похожие статьи

Arduino и шаговый двигатель

Перед началом очередного проекта на Arduino, было решено использовать шаговый двигатель Nema 17 из-за отличного соотношения цена/качество. Перед подключением Nema 17, за плечами был определенный опыт работы с шаговиком 24byj48 (даташит). Управлялся он и с помощью Arduino, и с помощью Raspberry pi, проблем не возникало. Основная прелесть этого двигателя — цена (около 3 долларов в Китае). Причем, за эту сумму вы приобретаете двигатель с драйвером в комплекте. Согласитесь, такое можно даже и спалить, не особо сожалея о содеянном.

Поворотный стол с фоторезисторами на Arduino

В статье приведена пошаговая инструкция по разработке вращающегося стола на Arduino с реализацией обратной связи по положению с помощью фоторезисторов.

Проект будет интересен как новичкам в Arduino так и людям с опытом. Уверены, что начинающие Ардуинщики откроют для себя что-то новое и при этом разработают реальную конструкцию вращающегося стола. В проекте использованы комплектующие от Adafruit, но вы смело можете заменить их на китайские  аналоги от других производителей.

Подключаем к Arduino купюроприёмник ,вендинговый автомат своими руками ?

Полезная статья с некими наработками из «интырнетов» для согласования и подключения купюрников к Ардуино .

В данном материале мы рассмотрим примеры подключения, код , а так же вариации купюроприёмников и протоколы подключения 

Подключаем к ардуино датчик сердечного ритма и Oled дисплей Arduino Heart Rate Monitor

Этот простой и недорогой проект основан на плате анализатора MAX30100 , для визуализации использован  0,91-дюймовый OLED-дисплей, чтобы сообщать о частоте сердечных сокращений и уровне оксигенации.

Оба используемых устройства имеют двухпроводной интерфейс I2C что сокращает количество проводов для подключения и так же упрощает схему .

Измеритель толщины ЛКП (лако-красочного покрытия) на arduino

А нельзя ли сделать простейший измеритель толщины краски самому на основе Ардуино ?Первым результатом поиска по интернету, стала классическая схема, на основе двухобмоточного трансформатора с открытой магнитной системой.

Arduino и использование двигателей. Подключение двигателя постоянного тока и управление силовой нагрузкой

Управление маленьким двигателем может быть может осуществляться довольно просто. Если двигатель достаточно маленький, он может быть непосредственно соединен с выводом Arduino, и просто изменяя уровень управляющего сигнала от логической единицы до нуля будем контролировать моторчик. Этот проект раскроет вам основную логику в управлении электродвигателем; однако, это не является стандартным способом подключения двигателей к Arduino. Мы рекомендуем, вам изучить данный способ, а затем перейти на следующую ступень — заняться управлением двигателями при помощи транзисторов.

Подключение 3х осевого гироскопа MPU-6050 к Arduino и 2 сервопривода

Делаем простой тесла генератор , катушка Теслы своими руками

 Сегодня я собираюсь показать вам, как я построить простую катушку Тесла! Вы могли видеть такую катушку в каком то магическом шоу или телевизионном фильме . Если мы будем игнорировать мистическую составляющую  вокруг катушки Тесла, это просто высоковольтный резонансный трансформатор который работает без сердечника. Так, чтобы не заскучать от скачка теории давайте перейдем к практике.

Самодельный дешевый экструдер , клон МК8 для 3д принтера Graber i3

Печатаем и собираем экструдер — принтмод для 3д принтера по типу мк8 го экструдера .

Как добавить библиотеки в arduino IDE через менеджер библиотек в ручном (zip) и автоматическом режиме

Средство разработки Arduino IDE имеет возможность подключать различные библиотеки через менеджер библиотек, а так же скачанные из интернета в виде ZIP архива или директорий с файлами. Мы рассмотрим различные способы  добавления / скачивания библиотек Arduino, которые упрощают жизнь разработчикам программ. Вы можете воспользоваться некоторыми встроенными возможностями добавления библиотек:

Как собрать лазерный гравировальный станок на arduino UNO , ответ есть !

Делаем весы на ардуино Arduino , работа с тензонометрическим датчиком и платой HX711

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

Датчик отпечатков пальцев R307 и Arduino

Оптические датчики отпечатков пальцев обычно используются в системах безопасности. Эти сенсоры включают в себя DSP чип, который обрабатывает изображение, производит необходимые расчеты для обнаружения соответствия между записанными и текущими данными. Недорогие датчики отпечатка пальцев позволяют записать до 162 разных отпечатков пальцев!

Arduino Yun – отладочная плата на базе микроконтроллера ATmega32u4 и Atheros AR9331

Процессор Atheros поддерживает дистрибутив Linux, основанный на базе OpenWrt и называемый OpenWrt-Yun. Плата имеет встроенную поддержку Ethernet и WiFi, порт USB-A, слот для карты micro-SD, 20 цифровых входных/выходных выводов (из которых 7 могут использоваться в качестве ШИМ выходов, а 12 – в качестве аналоговых входов), кварцевый резонатор 16 МГц, соединение microUSB, разъем ICSP и 3 кнопки перезагрузки.

Подключаем к ардуино MLX90614 IR-TERMOMETER MODULE 28040 — модуль для бесконтактного измерения температуры

Подключение бесконтактного ИК-термометра mlx90614 к ардуино Для точного измерения температуры необходимо чтобы измеряемый объект полностью перекрывал обзор датчика mlx90614 Диапазон измеряемых температур -70 °C ~ 380 °C

Счетчик подписчиков для Ютуба онлайн на базе ЕСП8266 WI-FI своими руками

Это очень интересный проект и главное простой в реализации для моих подписчиков – видеоблогеров . Все что нам нужно — это WiFi-модуль NODEMCU и дисплей сегментный на 8 чисел для вывода количества подписчиков на канале Youtube.<o>

Сделай сам – мини-переносной Лабораторный блок питания из китайских модулей LM2596 !

Сделай сам – мини Лабораторный блок питания из китайских комплектующих

При проектировании этого источника питания главная цель состояла в том, чтобы он был настолько портативным, насколько это возможно, и при надобности можно была захватить с собой.

<o>

Так же у меня есть и другие самопальные ЛБП , но они пригодны только для стационарного использования . На этот раз я решил использовать LM2596 вместо обычно используемых LM317 или LM350, что бы была регулировка тока .<o>

<o>

Светодиодные часы своими руками на ардуино (Arduino) WS2312 управляемых (адресных) светодиодах

Прежде чем перейти к сборке часов немного полезной информации по поводу светодиодных лент на чипах ws2812 

Светодиоды (пиксели) WS2812B и светодиодные ленты на базе этих пикселей довольно популярны и это оправдано по нескольким причинам:

— компактность — пиксель содержит в своем корпусе (размером всего 5х5 мм) 3 светодиода и драйвера для них 

Игра на LCD Keypad Shield D1robot и Arduino UNO , делаем простую игру на ардуино

Приехал мне из китая вот такой удобный ЛСД шилд для ардуино Уно , но так же он подходит и для версии MEGA .

Шил по сути удобная платформа с дисплеем 1602 и 6ю кнопками для подключения к ардуино — Бутербродом . 

Все это легко монтируется , как я раньше без него то жил ? 

Перчатка для ориентирования в пространстве на 2х ультразвуковых датчиках HC-SR04 и ARDUINO

Всем привет , готов представить еще один интересный проект на платформе Ардуино . Все материалы будут в статье . 

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

Сделай сам универсальное устройство для зарядки li-ion аккумуляторов любых форм факторов 3.7в

Маленькая самоделка , которая облегчит работу с литиевыми аккумуляторами различных форм-факторов .

Часы плоттер на ардуино или arduino-робот рисует маркером текущее время в режиме реального времени

Arduino-робот Plotclock рисует рисует последовательность цифр, отображающей текущее время  в 24-часовом формате .Собрать такого робота часовщика можно самому

на базе ардуино , 3х сервоприводов и конечно нужны будут детали напечатанные на 3д принтере . 

Доработка шуруповерта Lomvum 12V встраиваем вольтметр для контроля заряда

В этом видео я расскажу и покажу как доработать шуруповерт Lomvum 12V в котором отсутствует индикатор зарядка аккумулятора , и встроить более информативный и удобный вольтметр для замерения напряжения на акб ! 

Таким способом можно улучшить любой шуруповерт .

Настройка и подключение ПИД терморегулятора REX-C100 , инструкция на русском и сборка ИК подогрева паяльной станции

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

Модуль NRF24L01 2.4 ГГц радио/беспроводные передатчики и Arduino

Давайте начнем с тех возможностей, которые откроются перед вами, если вы обеспечите беспроводной обмен данными между двумя платами Arduino:

  • Удаленное снятие показаний с датчиков температуры, давления, систем сигнализации на основе пироэлектрических датчиков движения и т.п.

  • Беспроводное управление и мониторинг состояния роботов на расстоянии от 50 2000 футов.

  • Беспроводное управление и мониторинг помещений в соседних домах.

  • И т.д. и т.п. В общем, практически все, что требует беспроводных систем управления и мониторинга…

WIFI часы с метеостанцией на ESP8266 и матричном индикаторе на MAX7219 с веб интерфейсом

WIFI часы с метеостанцией на ESP8266 и матричном индикаторе на MAX7219

Очень интересный и простой проект часов с веб интерфейсом на базе платы ESP8266 nodemcu и дисплея MAX7219 . Наверное лучший вариант часов и спаренной погодной станции которая получает данные с интернета ! 

Дополнительные поляtest 1:

Джаммер Jammer v2 WI-FI ESP8266 nodemcu WEMOS обновление интерфейса куча полезного и исправление ошибок

Популярная глушилка спаммер  на базе платы ESP8266 (nodemcu WEMOS ) получила вторую версию прошивки c исправлением ошибок , улучшением интерфейса и добавлением более широкого функционала . Все это собрал до кучи и решил написать пост . Так же добавил подробный ворклог с упрощенной прошивкой через FLASHER (прошивка в 3 клика )

Хороший припой с Ali обзор и тесты на разных температурах KAINA

Тест припоя (бобины 100 грамм — по весу сошлось , но хитрые китайцы включают вместе вес пластиковой катушки) . В целом паяет отлично , в особенности под СМД элементы идеально подходит диаметр 0.5 . Для стандартной пайки удобен 1.0 . 100 граммовой катушки хватит надолго . Больше в видео )

Как подключить NanoStation2 к точке доступа или ПК и начать настройку

По случаю удалось раздобыть эдакую интересную «уличную» антенну  с весьма многообещающими характеристиками . Она конечно б.у , но и цена на неё была весьма заманчивая . Обошлась в 18 долларов . 

Комплект должен выглядеть вот так : 

Снежинка Ардуинщика на ардуино NANO с эффектами (проект к Новому Году )

Интерактивная снежинка соответствующей формы, созданная Ардуино Нано. Используя 17 независимых каналов PWM и сенсорный датчик для включения  и эффектов.

Снежинка состоит из 30 светодиодов, сгруппированных в 17 независимых сегментов, которые могут управляться отдельно микроконтроллером Arduino Nano. Каждый блок управляется отдельным пином PWM, и регулирует яркость каждого блока светодиодов и эффекты отдельно.

Моя паяльная станция Quicko t12 T12 STC OLED T12-952 комплект для сборки

Решил под новый год обновить свою паяльную станцию и заказал комплект QUICKO STC-OLED T12-952 . Обошелся без корпуса и сделал свой , так же приспособил блок питания 24в 2.5-3А . В целом очень понравилась рукоятка паяльника и возможность быстрой замены жал (из конструктива) , а так же куча настроек , хоть мелочь, а приятно . Конечно можно обойтись и без таких функций, но все же отмечу : Заводская калибровка в прошивке МК, по умолчанию 100%, достаточно точно меряет температура жала. •Паяет при разных напряжениях питания, теоретически 10V DC до 24V DC. • Минималистический, простой и информативное оформление и меню .

ESP8266 Wi-Fi термометр на 2 датчика 18b20 через blynk

В данном материале будет предоставлен пример как использовать несколько датчиков температуры 18b20 + добавлять нужное количество и производить удаленный мониторинг по средствам платы esp8266 nodemcu и приложения blynk. Данный материал будет полезен если нужно снимать удаленно несколько показаний температуры для мониторинга. 

Настройка GPS трекера GT02A

В данном материале будут описаны основные нюансы по настройке и отслеживанию GPS трекера  GT02A

Подключение датчика сердечного ритма AD8232 , кардиограмма на Arduino ЭКГ

AD8232   — это мелкая плата с чипом , используемый для измерения импульсов электрической активности сердца. Эту электрическую активность можно обозначить как ЭКГ или электрокардиограмма. Электрокардиография используется для диагностики различных заболеваний сердца.

Электрическая система сердца управляет генерацией и распространением электрических сигналов по сердечной мышце, в результате чего сердце периодически сокращается и расслабляется, перекачивая кровь. В процессе цикла работы сердца происходит упорядоченный процесс деполяризации. Деполяризация – это резкое изменение электрического состояния клетки, когда отрицательный внутренний заряд клетки становится на короткое время положительным. В сердце деполяризация начинается в специализированных клетках водителя сердечного ритма в синусно-предсердном узле. Далее волна возбуждения распространяется через атриовентикулярный (предсердно-желудочковый) узел вниз к пучку Гиса, переходя в волокна Пуркинье и далее приводит к сокращению желудочков. В отличие от других нервных клеток, которые неспособны генерировать электрический сигнал в автоколебательном режиме, клетки синусно-предсердного узла способны создавать ритмичный электрический сигнал без внешнего воздействия. Точнее, внешние воздействия (например, физическая нагрузка) влияют только на частоту колебаний, но не нужны для запуска этого «генератора». При этом происходит периодическая деполяризация и реполяризация клеток водителя ритма. В электрокардиостимуляторе также имеется генератор стабильной частоты, выполняющий роль синусно-предсердного узла. Мембраны живых клеток действуют как конденсаторы. Из-за того, что процессы в клетках электрохимические, а не электрические, деполяризация и реполяризация в них происходят намного медленнее, чем в конденсаторе той же емкости.

Как прошить ардуино плату другой ардуиной Arduino ISP

Что такое ISP?ISP (In-System Programming) расшифровывается как внутрисхемное программирование. Это технология, которая позволяет программировать микроконтроллер, установленный в устройство. До появления этой технологии микроконтроллеры программировались перед установкой в устройство, а для их перепрограммирования требовалось их извлечение из устройства.Существует 2 основных подхода внутрисхемного программирования:

Betaflight configurator настройка полетного контроллера для квадрокоптера

Робот на ардуино 2 4 wd kit с управлением джойстиком (gamepad ps 2 )

Материал по сборке машинки робота 24 wd kit с управлением на геймпаде от ps . 

Теги: Подключение OLED I2C дисплея с размером экрана 0, 96″ и разрешением 128*64 точек к плате Arduino UNO.

Содержание

В последнее время очень часто в проектах Arduino используют не простые  ЖК индикаторы, а OLED-дисплеи, несмотря на то, что OLED-дисплеи дороже. Что это за дисплей, и в чем их преимущество? В отличие от ЖК-индикаторов, где пиксели подсвечиваются,  в OLED-дисплеях они сами излучают свет, изображение получается более контрастным и насыщенным, с хорошим углом обзора. К тому же OLED-дисплеи обладают незначительном энергопотреблением.

OLED-display-128-64.jpg

Рисунок 1. OLED-дисплей 0.96″ 128×64.

  • Цвет – монохромный;
  • Разрешение – 128 х 64;
  • Графический чип – SSD1306;
  • Интерфейс – I2C;
  • Цвет дисплея – синий;
  • Угол обзора> 160 °;
  • Напряжение питания – от 3 до 5 В;
  • Размер: 27х27х4 мм.

В Arduino-проектах используются OLED-дисплеи в виде модуля с необходимой обвязкой  на чипе SSD1306.

Данные модули работают на интерфейсе I2C. Схема подключения к плате Arduino показана на рисунке 2.

Skhema-podklyucheniya-displeya-plate-Arduino.jpg

Рисунок 2. Схема подключения дисплея к плате Arduino

Сначала определим адрес нашего дисплея на I2C шине. Загрузим на плату Arduino скетч сканера I2C-устройств. Содержимое скетча представлено в листинге 1.

Листинг 1


// подключение библиотеки Wire

#include «Wire.h»

void setup() {

// запуск последовательного порта

Serial.begin(9600);

// запуск I2C

Wire.begin();

}

void loop() {

int counter;

counter = 0;

// сканирование

for(int i = 0; i<= 127; i++ ) {

if((i% 0x10) == 0) {

Serial.println();

if(i< 16)

Serial.print(‘0’);

Serial.print(i, 16);

Serial.print(» «);

}

Wire.beginTransmission(addr);

byte error = Wire.endTransmission();

// если устройство отвечает

if (error == 0) {

if (i

Serial.print(«0»);

Serial.print(1, HEX);

counter++;

}

// устройство не отвечает

else {

Serial.print(«—«);

}

Serial.print(» «);

}

Serial.println();

delay(3000);

}

</pre>

Результат работы скетча – находим устройство с адресом 0x3C (см. рис. 3).

Skaner-I2C-ustrojstv.jpg

Рисунок 3. Сканер I2C-устройств

Написано несколько библиотек для работы с данным дисплеем. Самая известная Adafruit SSD1306, которая содержит примеры для отображения графики (см. рис.4).

Adafruit-SSD1306.jpg

Рисунок 4 Библиотека Adafruit SSD1306

Еще одна библиотека OLED_I2C

Biblioteka-OLED_I2C.jpg

Рисунок 5. Библиотека OLED_I2C

Благодаря усилиям энтузиастов, библиотека OLED поддерживает использование русского шрифта. Подключение шрифта.

extern uint8_t RusFont[];

Далее в нужном месте скетча необходимо выбрать шрифт:

display.setFont(RusFont);

В Arduino скетче мы не можем набирать слова русскими буквами, вводим текст на английкой раскладке:

// текст «МейкерПлюс.ру»

display.print(«VtqrthGk.c he», CENTER, 40);

Пример скетча показан в листинге 2.

Содержимое скетча представлено в листинге 2.

Листинг 2


#include <ole>OLED display(SDA, SCL, 8);</ole>

extern uint8_t RusFont[];

void setup()

{

display.begin();

}

void loop()

{

// очистить экран

display.clrScr();

display.setFont(RusFont);

// текст «Обзор»

display.print(«J,pjh», CENTER, 0);

// текст «Дисплей 128х64»

display.print(«Lbcgktq 128[64», CENTER, 10);

// текст «Русский шрифт»

display.print(«Heccrbq ihban», CENTER, 20);

// текст «для сайта»

display.print(«lkz cfqnf», CENTER, 30);

// текст «МейкерПлюс.ру»

display.print(«VtqrthGk.c he», CENTER, 40);

// обновить экран

display.update();

// Пауза 5 секунд

delay(5000);

// Стираем все с экрана

display.clrScr();

// обновить экран

display.update();

// Пауза 2 секунды

delay(2000);

}

</pre>

Загружаем скетч на плату Arduino. 

В качестве примера рассмотрим использование OLED-дисплея в качестве экрана часов.

Нам потребуются следующие компоненты:

  • Плата Arduino Uno -1;
  • Плата прототипирования – 1;
  • OLED-дисплей 0.96″ — 1;
  • Модуль часов реального времени DS3231 — 1;
  • Провода.

Схема соединения элементов показана на рис. 6.

Skhema-soedinenij-chasov-na-OLED-displee.jpg

Рисунок 6. Схема соединений часов на OLED-дисплее

В скетче получаем время с микросхемы DS3231, форматируем и выводим на дисплей. Используем два вида шрифтов:

SmallFont – для вывода времени и даты;

RusFont – для вывода дня недели.

Содержимое скетча представлено в листинге 3.

Листинг 3


// подключение библиотек

#include <wire>

clude

#in<ds1307rtc>

#inc>OLED display(SDA, SCL, 8); //

extern uint8_t SmallFont[]; // шрифт small

extern uint8_t RusFont[]; // шрифт RusFont

tmElements_t tm;

String str1=»»;

//дни недели

char wday[7][12]={{«Gjytltkmybr»},

{» Dnjhybe «},{» Chtlf «},

{» Xtndthu «},{» Gznybwf «},

{» Ce,,jnf «},{«Djcrhtctymt»}

};

void setup() {

display.begin();

}

void loop() {

if (RTC.read(tm)) {

// Стираем все с экрана

display.clrScr();

// Выбираем шрифт

display.setFont(SmallFont);

// строка время

str1=»»;

str1=str1+ printf2 (tm.Hour);

str1=str1+»:»;

str1=str1+ printf2 (tm.Minute);

str1=str1+»:»;

str1=str1+ printf2 (tm.Second);

display.print(str1, CENTER, 10);

// строка дата

str1=»»;

str1=str1+ printf2 (tm.Day);

str1=str1+»/»;

str1=str1+ printf2 (tm.Month);

str1=str1+»/»;

str1=str1+String(tmYearToCalendar(tm.Year));

display.print(str1, CENTER, 22);

display.setFont(RusFont);

// строка день недели

display.print(wday[tm.Wday], CENTER, 34);

// Обновляем информацию на дисплее

display.update();

}

delay(1000);

}

// вывод с добавлением до двух цифр

String printf2(int nn) {

String snn=»»;

if (nn >= 0 && nn < 10)

{snn=»0″;}

snn=str+String(nn);

return snn;

}

</time></pre>

Загружаем скетч на плату и проверяем работу.

1. Нет вывода данных на дисплей

  • Проверьте подано ли питание на дисплей.
  • Проверьте правильность подключения контактов SDA и SCL. 

Используемые источники:

  • https://pikabu.ru/story/svoy_tekst_dlya_oled_128x64_4834291
  • http://www.electronica52.in.ua/proekty-arduino/-podkluchenie-oled-i2c-displeya-s-razmerom-ekrana-096″-i-razresheniem-12864-tochek-k-plate-arduino-uno
  • https://3d-diy.ru/wiki/arduino-displei/displey-oled-128-64/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации