TigerSchool.

Эксклюзивные шаблоны DLE скачать бесплатно для dle.
Красивейшие шаблоны joomla скачать бесплатно для Joomla.
Гениальные темы wordpress и шаблоны вордпресс.
Современная инвестиционная деятельность поможет в вашей деятельности.
Универсальный музыкальный портал с огромным выбором.
Квалифицированная помощь по юридическим вопросам и консультации по праву.
Присоединяйтесь в нашему городскому музыкальному клубу где отмечают праздники и торжества.
Самый грамотный юридический форум и юридическая помощь.
Искуствоведческий фото форум для истинных ценителей прекрасного.
Посетите наш туристический форум и найдите где можно красиво отдохнуть.
Приходите на уникальный форум о творчестве и находите друзей и собеседников.

Главная Новости

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

Опубликовано: 27.08.2018

Мы уже познакомились с разными видами дисплеев, включая популярный  символьный 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×64 GND VCC DO D1 RST DC
Ардуино Уно GND +5V 10 9 13 11

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 <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #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, для того чтобы вывести изображение нам необходимо его должным образом подготовить. На всякий случай, напомню алгоритм:

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

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

#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #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 дисплеем, рекомендуем выполнить несколько заданий.

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

Реклама

© 2013
Powered www.avtodrom-tv.ru © 2016
rss