Как подключить OLED I2C дисплей к ARDUINO

Содержание

Урок 9. Русский язык на OLED дисплее 128X64

Как подключить OLED I2C дисплей к ARDUINO

ВИДЕО редактируется.

Вы могли наблюдать, что в предыдущих уроках №7 и №8 уже использовался Русский шрифт. В этом уроке мы разберём некоторые проблемные моменты с которыми можно столкнуться при выводе Русских букв на OLED дисплей.

Нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека iarduino_OLED_txt (текстовая) – для вывода текста и цифр на OLED дисплеи.
  • Дополнительно можно установить библиотеку iarduino_OLED (графическая), но в данном уроке она использоваться не будет.Графическая библиотека поддерживает все функции текстовой и имеет дополнительные функции для работы с изображениями и графикой, но при этом она занимает больше памяти, как оперативной, так и памяти программ.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki – Установка библиотек в Arduino IDE.

Схема подключения:

OLED дисплей подключается к аппаратной или программной шине I2C Arduino.

Вывод Назначение OLED дисплей Arduino UNO
SCLЛиния тактирования шины I2CSCLA5
SDAЛиния данных шины I2CSDAA4
VccПитание (3,3 или 5 В)Vcc5V
GNDОбщийGNDGND

Схема установки дисплея при его подключении через 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.

В большинстве случаев это решит проблему кодировок.

Источник: https://lesson.iarduino.ru/page/urok-8-russkiy-yazyk-na-oled-displee-128x64/

Подключение дисплея LCD 1602 к arduino по i2c / IIC

Как подключить OLED I2C дисплей к ARDUINO

LCD дисплей – частый гость в проектах ардуино. Но в сложных схемах у нас может возникнуть проблема недостатка портов Arduino из-за необходимости подключить экран, у которого очень очень много контактов.

Выходом в этой ситуации может стать I2C /IIC переходник, который подключает практически стандартный для Arduino экран 1602 к платам Uno, Nano или Mega всего лишь при помощи 4 пинов.

В этой статье мы посмотрим, как можно подключить LCD экран с интерфейсом I2C, какие можно использовать библиотеки, напишем короткий скетч-пример и разберем типовые ошибки.

Жк дисплей arduino lcd 1602

Жидкокристаллический дисплей (Liquid Crystal Display) LCD 1602 является хорошим выбором для вывода строк символов в различных проектах. Он стоит недорого, есть различные модификации с разными цветами подсветки, вы можете легко скачать готовые библиотеки для скетчей Ардуино.

Но самым главным недостатком этого экрана является тот факт, что дисплей имеет 16 цифровых выводов, из которых обязательными являются минимум 6. Поэтому использование этого LCD экрана без i2c добавляет серьезные ограничения для плат Arduino Uno или Nano.

Если контактов не хватает, то вам придется покупать плату Arduino Mega или же сэкономить контакты, в том числе за счет подключения дисплея через i2c.

Краткое описание пинов LCD 1602

Давайте посмотрим на выводы LCD1602 повнимательней:

Каждый из выводов имеет свое назначение:

  1. Земля GND;
  2. Питание 5 В;
  3. Установка контрастности монитора;
  4. Команда, данные;
  5. Записывание и чтение данных;
  6. Enable;

7-14. Линии данных;

  1. Плюс подсветки;
  2. Минус подсветки.

Технические характеристики дисплея:

  • Символьный тип отображения, есть возможность загрузки символов;
  • Светодиодная подсветка;
  • Контроллер HD44780;
  • Напряжение питания 5В;
  • Формат 16х2 символов;
  • Диапазон рабочих температур от -20С до +70С, диапазон температур хранения от -30С до +80 С;
  • Угол обзора 180 градусов.

Схема подключения LCD к плате Ардуино без i2C

Стандартная схема присоединения монитора напрямую к микроконтроллеру Ардуино без I2C выглядит следующим образом.

Из-за большого количества подключаемых контактов может не хватить места для присоединения нужных элементов. Использование I2C уменьшает количество проводов до 4, а занятых пинов до 2.

Где купить i2c 1602 экраны для ардуино

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

Описание протокола I2C

Прежде чем обсуждать подключение дисплея к ардуино через i2c-переходник, давайте вкратце поговорим о самом протоколе i2C.

I2C / IIC(Inter-Integrated Circuit) – это протокол, изначально создававшийся для связи интегральных микросхем внутри электронного устройства. Разработка принадлежит фирме Philips.

В основе i2c  протокола является использование 8-битной шины, которая нужна для связи блоков в управляющей электронике, и системе адресации, благодаря которой можно общаться по одним и тем же проводам с несколькими устройствами.

Мы просто передаем данные то одному, то другому устройству, добавляя к пакетам данных идентификатор нужного элемента.

Самая простая схема I2C может содержать одно ведущее устройство (чаще всего это микроконтроллер Ардуино) и несколько ведомых (например, дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух устройств с одинаковым адресом в одной схеме быть не должно.

Плата Arduino поддерживает i2c на аппаратном уровне. Вы можете использовать пины A4 и A5 для подключения устройств по данному протоколу.

В работе I2C можно выделить несколько преимуществ:

  • Для работы требуется всего 2 линии – SDA (линия данных) и SCL (линия синхронизации).
  • Подключение большого количества ведущих приборов.
  • Уменьшение времени разработки.
  • Для управления всем набором устройств требуется только один микроконтроллер.
  • Возможное число подключаемых микросхем к одной шине ограничивается только предельной емкостью.
  • Высокая степень сохранности данных из-за специального фильтра подавляющего всплески, встроенного в схемы.
  • Простая процедура диагностики возникающих сбоев, быстрая отладка неисправностей.
  • Шина уже интегрирована в саму Arduino, поэтому не нужно разрабатывать дополнительно шинный интерфейс.

Недостатки:

  • Существует емкостное ограничение на линии – 400 пФ.
  • Трудное программирование контроллера I2C, если на шине имеется несколько различных устройств.
  • При большом количестве устройств возникает трудности локализации сбоя, если одно из них ошибочно устанавливает состояние низкого уровня.

Модуль i2c для LCD 1602 Arduino

Самый быстрый и удобный способ использования i2c дисплея в ардуино – это покупка готового экрана со встроенной поддержкой протокола. Но таких экранов не очень много истоят они не дешево.

А вот разнообразных стандартных экранов выпущено уже огромное количество.

Поэтому самым доступным и популярным сегодня вариантом является покупка и использование отдельного I2C модуля – переходника, который выглядит вот так:

С одной стороны модуля мы видим выводы i2c – земля, питание и 2 для передачи данных. С другой переходника видим разъемы внешнего питания. И, естественно, на плате есть множество ножек, с помощью которых модуль припаивается к стандартным выводам экрана.

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

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

Подключение ЖК экрана к Ардуино по I2C

Для подключения необходимы сама плата Ардуино, дисплей, макетная плата, соединительные провода и потенциометр.

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

Жидкокристаллический монитор с поддержкой i2c подключается к плате при помощи четырех проводов – два провода для данных, два провода для питания.

  • Вывод GND подключается к GND на плате.
  • Вывод VCC – на 5V.
  • SCL подключается к пину A5.
  • SDA подключается к пину A.

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

Библиотеки для работы с i2c LCD дисплеем

Для взаимодействие Arduino c LCD 1602 по шине I2C вам потребуются как минимум две библиотеки:

  • Библиотека Wire.h для работы с I2C уже имеется в стандартной программе Arduino IDE.
  • Библиотека LiquidCrystal_I2C.h, которая включает в себя большое разнообразие команд для управления монитором по шине I2C и позволяет сделать скетч проще и короче. Нужно дополнительно установить библиотеку После подключения дисплея нужно дополнительно установить библиотеку LiquidCrystal_I2C.h

Скачать библиотеку для работы с экраном I2C LiquidCrystal_I2C.

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

#include #include // Подключение библиотеки //#include // Подключение альтернативной библиотеки LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 – 2 строки по 16 символов в каждой //LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574 void setup() { lcd.init(); // Инициализация дисплея lcd.backlight(); // Подключение подсветки lcd.setCursor(0,0); // Установка курсора в начало первой строки lcd.print(“Hello”); // Набор текста на первой строке lcd.setCursor(0,1); // Установка курсора в начало второй строки lcd.print(“ArduinoMaster”); // Набор текста на второй строке } void loop() { }

12345678910111213141516171819#include#include // Подключение библиотеки//#include // Подключение альтернативной библиотекиLiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 – 2 строки по 16 символов в каждой//LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574void setup(){  lcd.init();                      // Инициализация дисплея    lcd.backlight();                 // Подключение подсветки  lcd.setCursor(0,0);              // Установка курсора в начало первой строки  lcd.print(“Hello”);       // Набор текста на первой строке  lcd.setCursor(0,1);              // Установка курсора в начало второй строки  lcd.print(“ArduinoMaster”);       // Набор текста на второй строке}void loop(){}

Описание функций и методов библиотеки LiquidCrystal_I2C:

  • home() и clear() – первая функция позволяет вернуть курсор в начало экрана, вторая тоже, но при этом удаляет все, что было на мониторе до этого.
  • write(ch) – позволяет вывести одиночный символ ch на экран.
  • cursor() и noCursor() – показывает/скрывает курсор на экране.
  • blink() и noBlink() – курсор мигает/не мигает (если до этого было включено его отображение).
  • display() и noDisplay() – позволяет подключить/отключить дисплей.
  • scrollDisplayLeft() и scrollDisplayRight() – прокручивает экран на один знак влево/вправо.
  • autoscroll() и noAutoscroll() – позволяет включить/выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
  • leftToRight() и rightToLeft() – Установка направление выводимого текста – слева направо или справа налево.
  • createChar(ch, bitmap) – создает символ с кодом ch (0 – 7), используя массив битовых масок bitmap для создания черных и белых точек.

Альтернативная библиотека для работы с i2c дисплеем

В некоторых случаях при использовании указанной библиотеки с устройствами, оснащенными контроллерами PCF8574 могут возникать ошибки. В этом случае в качестве альтернативы можно предложить библиотеку LiquidCrystal_PCF8574.h. Она расширяет LiquidCrystal_I2C, поэтому проблем с ее использованием быть не должно.

Скачать библиотеку можно на нашем сайте. Библиотека также встроена в  последние версии Arduino IDE.

Проблемы подключения i2c lcd дисплея

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

Во-первых, можно увеличить или уменьшить контрастность монитора. Часто символы просто не видны из-за режима контрастности и подсветки.

Если это не помогло, то проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный i2c переходник, то проверьте еще раз качество пайки контактов.

Другой часто встречающейся причиной отсутствия текста на экране может стать неправильный i2c адрес. Попробуйте сперва поменять в скетче адрес устройства с 0x27 0x20 или на 0x3F.

У разных производителей могут быть зашиты разные адреса по умолчанию.

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

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

Заключение

В этой статье мы рассмотрели основные вопросы использования LCD экрана в сложных проектах ардуино, когда нам нужно экономить свободные пины на плате. Простой и недорогой переходник i2c позволит подключить LCD экран 1602, занимая всего 2 аналоговых пина.

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

Источник: https://ArduinoMaster.ru/datchiki-arduino/lcd-i2c-arduino-displey-ekran/

OLED дисплеи и Arduino

Как подключить OLED I2C дисплей к ARDUINO

В статье рассмотрены монохромные OLED дисплеи с разрешением 128×64 и 128×32 пикселей.

Это небольшие экранчики, их диагональ составляет всего около 1”. Основное их преимущество – удобство чтения благодаря высокой контрастности OLED дисплея. Каждый OLED дисплей изготавливается из отдельных 128×64 или 128×32 белых органических (OLED) светодиодов.

Каждый светодиод включается/выключается с помощью чипа управления. Так как дисплей сам является источником света, дополнительная подсветка не требуется.

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

В качестве драйвера в дисплее используется чип SSD1306, который позволяет передавать данные по протоколам I2C, SPI и 8-битному параллельному протоколу.

Как правило, столь широкий выбор интерфейсов предоставляет дисплей с разрешающей способностью 128×64 пикселей. В OLED дисплеях с разрешающей способностью 128×32, доступен только протокол 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 128×64 и 128×32 с готовым выходом 5 В

Если у вас версия OLED дисплея, которая старше v1 128×64, можете не ознакамливаться со следующим подразделом. У вас уже есть возможность запитать 5 В. Все 1.3″ 128×64 и меленькие 128×32 SPI и I2C имеют на борту 5 В. Если у вас модель v2 0.

96″ 128×64 OLED дисплей с отметкой 5 В на передней части, его тоже можно подключать к 5 В. Если у вас более старая версия OLED дисплея – 0.96″ (смотрите ниже), вам надо быть аккуратнее при подключении к мекроконтроллеру 5 В. OLED дисплей разработан таким образом, что он совместим с питанием 5 В.

То есть вы можете подать питание в диапазоне 3-5 В, а встроенный регулятор сделает всю остальную «черную работу» за вас.

Все OLED экраны можно использовать с питанием и логикой 3.3 В.

Просто подключите контакт GND к «земле», а контакт Vin к источнику питания в диапазоне 3-5 В. В результате на контакте 3Vo будет 3.3 В.

0.96 128×64 OLED

Более старые версии OLED дисплеев 0.96″ 128×64 использовать сложнее, так как по умолчанию они не совместимы с питанием 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 дисплее. Контакты не будут работать без распайки!

Начните с установки рельсы на 8 контактов на вашу монтажную плату. Рельса устанавливается в макетку своими длинными ногами.

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

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

I2C или SPI

Одна из хороших особенностей OLED экранов 128×64 – это то, что они могут использовать 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 экрана 128×32 по SPI

OLED экран 128×32 очень просто подключается по 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 экран 128×32, убедитесь, что вы раскомментировали строку “#define SSD1306_128_32” в верхней части скетча Adafruit_SSD1306.h. Раскомментировав эту строку, вы изменяете размер буфера.

Подключение OLED экрана 128×32 по I2C

OLED экран 128×32 можно легко подключить и по 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

Подключение старого 128×64 OLED экрана V 1.0

Эта схема подключения рассчитана на более старые 0.96″ OLED экраны, которые поставляются с модулем согласования уровней. Если у вас V2.0, то используйте другую схему подключения.

Версия V1 128×64 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. Это подключение соответствует скетчу-примеру. После того как, приведенное подключение отработает, можете поэксперементировать с другими контактами/пинами.

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

Источник: http://arduino-diy.com/arduino-oled-displey

Ардуино: графический OLED дисплей

Как подключить OLED I2C дисплей к ARDUINO

Мы уже познакомились с разными видами дисплеев, включая популярный символьный 1602 и не менее популярный графический ЖК дисплей от телефона Nokia 5110. Они хороши для решения своих утилитарных задач.

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

На втором дисплее, от Nokia 5110, можно рисовать графики, геометрические фигуры, даже вывести черно-белую картинку.

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

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

А еще, OLED технология позволяет делать гибкие матрицы!

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

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

Также OLED применяют в дисплеях для мобильных устройств, например в одной из модификаций Google Nexus.

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

1. Подключение OLED дисплея к Ардуино

Мы будем экспериментировать с популярными в DIY среде монохромными OLED дисплеями на основе контроллера SSD1306. Есть разные версии, с разным цветом свечения и разным разрешением. Наш дисплейчик имеет диагональ 0.96 дюйма и разрешение 128 x 64 точек. Матрица разделена на две части с разными цветами. Верхний блок — 128×16 имеет желтый цвет, нижний — 128×48 — голубой.

Дисплейные модули OLED могут иметь разные интерфейсы для связи с контроллером. В нашем распоряжении оказался модуль с SPI шиной, у которого было распаяно шесть ног:

  • GND — земля;
  • VCC — питание 5 В;
  • DO — синхросигнал;
  • D1 — входные данные (MOSI);
  • RST — сброс (Reset);
  • DC — выбор режима (Data/Command select).

Схема подключения к Ардуино:

OLED дисплей 128×64GNDVCCDOD1RSTDC
Ардуино УноGND+5V1091311

2. Программа. Вывод текста

Для управления дисплеем нам потребуются две библиотеки:

1) Adafruit_GFX_Library — мы её уже ставили, когда подключали Nokia 5110
https://github.com/adafruit/Adafruit-GFX-Library/archive/master.zip

2) Adafruit_SSD1306 — библиотека для управления именно OLED дисплеями
https://github.com/adafruit/Adafruit_SSD1306

Устанавливаем обе библиотеки в Arduino IDE, и пробуем вывести наш любимый «Hello world!»:

#include #include #include #include #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); void setup() { // инициализация и очистка дисплея display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); display.display(); delay(1000); display.setTextSize(1); // установка размера шрифта display.setTextColor(WHITE); // установка цвета текста display.setCursor(0,0); // установка курсора display.println(“Hello, world!”); display.display(); } void loop() { }

Загружаем программу на Ардуино Уно, и получаем вот такую яркую надпись очень мелким шрифтом:

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

3. Программа. Вывод изображения

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

  1. создаем в любом графическом редакторе черно-белую картинку с разрешением 128 x 64 точки;
  2. сохраняем в формате BMP с 256 цветами (так умеет делать mspaint);
  3. конвертируем картинку в массив байт с помощью онлайн сервиса: http://git.robotclass.ru/tools/bmptobin.html

Осталось вставить полученный массив данных в программу:

#include #include #include #include #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); const unsigned char PROGMEM logoBmp[] = { 0x0,0x0,0x0,0x0,0x3,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xe,0x3f,0xff,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x1f,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x3f,0xff,0xff,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x7f,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x7f,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x3f,0xf8,0x7,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x3f,0xe0,0x3,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x7f,0xf0,0x0,0x3f,0xc0,0x0,0xff,0x0,0xff,0xe0,0x0,0x1f,0xf8,0x7,0xff,0xfe, 0x7f,0xfe,0x0,0x7f,0x80,0x0,0xff,0x0,0xff,0xf8,0x0,0x7f,0xfe,0x7,0xff,0xfe, 0x7f,0xff,0x0,0x7f,0x0,0x0,0x7f,0x0,0xff,0xfc,0x1,0xff,0xff,0x7,0xff,0xfe, 0x7f,0xff,0x81,0xff,0x0,0x0,0x3f,0xe0,0xff,0xfe,0x3,0xff,0xff,0x87,0xff,0xfe, 0x7c,0x3f,0x83,0xff,0x0,0x0,0x3f,0xf0,0xf8,0x7f,0x7,0xf8,0x1f,0xc0,0x1f,0x80, 0x7c,0xf,0x83,0xfe,0x0,0x0,0x3f,0xf0,0xf8,0x3f,0x7,0xe0,0x7,0xe0,0x1f,0x80, 0x7c,0xf,0x83,0xfe,0x0,0x0,0x3f,0xf0,0xf8,0x3f,0xf,0xc0,0x7,0xe0,0x1f,0x80, 0x7c,0xf,0x83,0xfe,0x0,0x0,0x3f,0xf0,0xf8,0x3f,0xf,0x80,0x3,0xf0,0x1f,0x80, 0x7c,0x1f,0x83,0xfe,0x0,0x0,0x3f,0xf0,0xf8,0x3e,0x1f,0x80,0x3,0xf0,0x1f,0x80, 0x7c,0x3f,0x83,0xfe,0x0,0x0,0x3f,0xf0,0xf8,0xfe,0x1f,0x80,0x1,0xf0,0x1f,0x80, 0x7f,0xff,0x1,0xff,0x0,0x0,0x3f,0xe0,0xff,0xfc,0x1f,0x0,0x1,0xf0,0x1f,0x80, 0x7f,0xfe,0x0,0x7f,0x0,0x0,0x3f,0x80,0xff,0xfc,0x1f,0x0,0x1,0xf0,0x1f,0x80, 0x7f,0xfc,0x0,0x7f,0x80,0x0,0x7f,0x0,0xff,0xfe,0x1f,0x0,0x1,0xf0,0x1f,0x80, 0x7f,0xf0,0x0,0x3f,0x80,0x0,0xff,0x0,0xff,0xff,0x1f,0x0,0x1,0xf0,0x1f,0x80, 0x7d,0xf8,0x0,0x3f,0xc0,0x1,0xff,0x0,0xf8,0x3f,0x9f,0x80,0x1,0xf0,0x1f,0x80, 0x7c,0xfc,0x0,0x1f,0xf0,0x3,0xfe,0x0,0xf8,0xf,0x9f,0x80,0x1,0xf0,0x1f,0x80, 0x7c,0xfc,0x0,0x3f,0xfc,0xf,0xfe,0x0,0xf8,0xf,0x8f,0x80,0x3,0xf0,0x1f,0x80, 0x7c,0x7e,0x0,0x7f,0xff,0xff,0xff,0x0,0xf8,0xf,0x8f,0xc0,0x3,0xe0,0x1f,0x80, 0x7c,0x3f,0x0,0x7f,0xff,0xff,0xff,0x0,0xf8,0x1f,0x8f,0xe0,0x7,0xe0,0x1f,0x80, 0x7c,0x3f,0x0,0x3f,0xff,0xff,0xff,0x0,0xf8,0x1f,0x87,0xf0,0x1f,0xc0,0x1f,0x80, 0x7c,0x1f,0x80,0x1f,0xff,0xff,0xfe,0x0,0xff,0xff,0x3,0xff,0xff,0x80,0x1f,0x80, 0x7c,0xf,0xc0,0xf,0xff,0xff,0xfc,0x0,0xff,0xfe,0x1,0xff,0xff,0x80,0x1f,0x80, 0x7c,0x7,0xe0,0x6,0x3f,0xfe,0x38,0x0,0xff,0xfc,0x0,0xff,0xfe,0x0,0x1f,0x80, 0x7c,0x7,0xe0,0x0,0x7,0xf8,0x0,0x0,0xff,0xf0,0x0,0x3f,0xf8,0x0,0x1f,0x80, 0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x7,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x3,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x7c,0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0x1,0xe0,0x0,0x0,0x0,0x0, 0x3,0xff,0xc1,0xf0,0x0,0x3,0xe0,0x0,0x7f,0xf0,0xf,0xfe,0x0,0x0,0x0,0x0, 0x7,0xff,0xc1,0xf0,0x0,0x7,0xe0,0x0,0xff,0xf0,0x1f,0xfe,0x0,0x0,0x0,0x0, 0xf,0xff,0xc1,0xf0,0x0,0x7,0xf0,0x1,0xff,0xf0,0x3f,0xfe,0x0,0x0,0x0,0x0, 0x1f,0xff,0xc1,0xf0,0x0,0x7,0xf0,0x1,0xff,0xf0,0x3f,0xfe,0x0,0x0,0x0,0x0, 0x3f,0x80,0xc1,0xf0,0x0,0xf,0xf0,0x3,0xf0,0x30,0x7e,0xe,0x0,0x0,0x0,0x0, 0x7e,0x0,0x1,0xf0,0x0,0xf,0xf8,0x3,0xe0,0x0,0x7c,0x0,0x0,0x0,0x0,0x0, 0x7e,0x0,0x1,0xf0,0x0,0x1f,0xf8,0x3,0xe0,0x0,0x7c,0x0,0x0,0x0,0x0,0x0, 0x7c,0x0,0x1,0xf0,0x0,0x1f,0xfc,0x3,0xf0,0x0,0x7e,0x0,0x0,0x0,0x0,0x0, 0xfc,0x0,0x1,0xf0,0x0,0x1f,0x7c,0x3,0xfc,0x0,0x7f,0x80,0x0,0x0,0x0,0x0, 0xf8,0x0,0x1,0xf0,0x0,0x3e,0x7c,0x1,0xff,0x0,0x3f,0xe0,0x0,0x0,0x0,0x0, 0xf8,0x0,0x1,0xf0,0x0,0x3e,0x3e,0x0,0xff,0xc0,0x1f,0xf8,0x0,0x0,0x0,0x0, 0xf8,0x0,0x1,0xf0,0x0,0x3e,0x3e,0x0,0x7f,0xe0,0xf,0xfc,0x0,0x0,0x0,0x0, 0xf8,0x0,0x1,0xf0,0x0,0x7f,0xff,0x0,0x1f,0xf0,0x3,0xfe,0x0,0x0,0x0,0x0, 0xf8,0x0,0x1,0xf0,0x0,0x7f,0xff,0x0,0x7,0xf8,0x0,0xff,0x0,0x0,0x0,0x0, 0xfc,0x0,0x1,0xf0,0x0,0xff,0xff,0x0,0x1,0xf8,0x0,0x3f,0x0,0x0,0x0,0x0, 0xfc,0x0,0x1,0xf0,0x0,0xff,0xff,0x80,0x0,0xf8,0x0,0x1f,0x0,0x0,0x0,0x0, 0x7e,0x0,0x1,0xf0,0x0,0xff,0xff,0x82,0x0,0xf8,0x40,0x1f,0x0,0x0,0x0,0x0, 0x7f,0x0,0x41,0xf0,0x1,0xf8,0xf,0xc3,0x80,0xf8,0x70,0x1f,0x0,0x0,0x0,0x0, 0x3f,0x83,0xc1,0xf0,0x1,0xf0,0x7,0xc3,0xe1,0xf8,0x7c,0x3f,0x0,0x0,0x0,0x0, 0x1f,0xff,0xc1,0xff,0xe3,0xf0,0x7,0xc3,0xff,0xf0,0x7f,0xfe,0x0,0x0,0x0,0x0, 0xf,0xff,0xc1,0xff,0xe3,0xe0,0x7,0xe3,0xff,0xf0,0x7f,0xfe,0x0,0x0,0x0,0x0, 0x7,0xff,0xc1,0xff,0xe3,0xe0,0x3,0xe1,0xff,0xe0,0x3f,0xfc,0x0,0x0,0x0,0x0 }; void setup() { // инициализация и очистка дисплея display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); display.display(); delay(1000); // отрисовка изображения display.drawBitmap(0, 0, logoBmp, 128, 64, WHITE); display.display(); } void loop() { }

Результат выполнения этой программы можно найти в самом верху этой статьи. А если немного усложнить программу, и выводить по-очереди две картинки, получим простую анимацию.

Итак, OLED дисплей побежден. Готовимся к новым урокам, к новым знаниям!

Задания

Чтобы развить навыки работы с OLED дисплеем, рекомендуем выполнить несколько заданий.

  1. Собрать на базе акселерометра и OLED дисплея строительный электронный уровень. Ставим прибор на тестируемую поверхность, и он показывает в какую сторону и насколько градусов она наклонена. Факт наклона можно отобразить окружностью, смещенной относительно центра в виде перекрестья.
  2. Самые продвинутые могут сделать игру «змейка». Для игры потребуется дисплей, Ардуино Уно (или любя другая), 4 тактовые кнопки и зуммер.

Источник: http://robotclass.ru/tutorials/arduino_oled/

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.