Skip to contentSkip to main navigation Skip to footer

Arduino и OLED дисплей

Описание


Набор GyverKIT комплектуется графическим OLED дисплеем:

Характеристики:

  • Разрешение: 128×64 пикселя
  • Диагональ: 0.96″
  • Контроллер: SSD1306
  • Подключение: I2C

Подключение


Модуль подключается на шину I2C и питание, как и любой другой модуль такого типа:

  • Arduino: SDA – A4, SCL – A5
  • Wemos: SDA – D2, SCL – D1

Библиотеки


Для данного дисплея существует несколько библиотек:

  • u8glib – мощная, но очень тяжёлая библиотека от olikraus
  • Adafruit_SSD1306 – библиотека от adafruit
  • GyverOLED – наша библиотека. Очень лёгкая и быстрая, поддерживает русский шрифт

В примерах на этом сайте мы будем использовать GyverOLED. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverOLED . Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

Примеры


Библиотека имеет два режима работы: с буфером и без буфера:

  • С буфером: занимает больше оперативной памяти, но позволяет выводить новые данные с наложением на старые. Требует вызова update() для применения изменений. Инициализация: GyverOLED<SSD1306_128x32, OLED_BUFFER> oled;
  • Без буфера: на дисплей сразу выводится указанная графика, заменяя текущее отображение. Инициализация: GyverOLED<SSD1306_128x32, OLED_NO_BUFFER> oled;

Библиотека умеет делать print() любых типов данных и текста. Позицию вывода можно установить двумя способами:

  • setCursor(x, y) – пиксель по горизонтали (0.. 127), строка по вертикали (0.. 7). Одна строка – 8 пикселей
  • setCursorXY(x, y) – пиксель по горизонтали (0.. 127), пиксель по вертикали (0.. 63)
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;

void setup() {
  oled.init();        // инициализация
  oled.clear();       // очистка
  oled.setScale(3);   // масштаб текста (1..4)
  oled.home();        // курсор в 0,0
  oled.print("Привет!");

  delay(1000);

  oled.setScale(1);
  // курсор на начало 3 строки
  oled.setCursor(0, 3);
  oled.print("GyverOLED v1.3.2");

  // курсор на (20, 50)
  oled.setCursorXY(20, 50);
  float pi = 3.14;
  oled.print("PI = ");
  oled.print(pi);
}
void loop() {
}

Можно выводить простую графику:

  • dot(int x, int y, byte fill) – точка (заливка 1/0)
  • line(int x0, int y0, int x1, int y1, byte fill) – линия (x0, y0, x1, y1)
  • rect(int x0, int y0, int x1, int y1, byte fill) – прямоугольник (лев. верхн, прав. нижн)
  • roundRect(int x0, int y0, int x1, int y1, byte fill) – прямоугольник скруглённый (лев. верхн, прав. нижн)
  • circle(int x, int y, int radius, byte fill) – окружность (центр х, центр у, радиус, заливка)
  • bezier(int* arr, uint8_t size, uint8_t dense, uint8_t fill) – кривая Безье
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;

void setup() {
  oled.init();        // инициализация
  oled.clear();       // очистка
  
  // прямоугольник, углы (0, 0) и (30, 50), обводка
  oled.rect(0, 0, 30, 50, OLED_STROKE);

  // окружность, центр (80, 30), радиус 10, заливка
  oled.circle(80, 30, 10, OLED_FILL);
}

void loop() {
}

Остальные возможности смотри в документации и встроенных примерах.

Домашнее задание


  • Изучить документацию на GyverOLED
  • Загрузить примеры

Полезный пример?

Похожие примеры
12 Комментариев
  • А можно примеров схем для библиотеки u8glib ? Не понимаю вообще как там конструктор работает. U8GLIB_SSD1306_128X64 u8g( 19, 20) Вешаю на 19 и 20 пины SCL и SDA и фиг мне там.

  • А как в этой библиотеке вывести ну допустим символ градуса? По аналогии как в LCD не получается…

    • нужно вручную отрисовывать, символа дисплея нет в стандартном ASCII. Отрисовать при помощи drawByte(битмап, размер), предварительно отрисовав сам битмап. По аналогии со встроенным примером drawBattery

      • Если подключить энкодер и экран вместе, энкодер перестает работать почти полностью. Отрисовка занимает много времени и идет пропуск даже с таймерами. Все на столько плохо. что и часть условий просто игнорируются в потоке лупа… И это на 8266. Попробую на прерывания повесить, но лучше не станет, основной блок пролетает. Нужна задержка очень большая задержка.

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

  • Друзья, помогите разобраться. В данных дисплеях есть пин SCL , а есть SCK. для подключения в Ардуино это критично? Они взаимозаменяемы при одной и той же прошивке? Я тут совершенный чайник, прошу помочь

  • GyverOled -Удобная библиотека, легко разобраться, все работает но крайне не хватает шрифта среднего между первым и вторым. Либо буквы мелкие либо на пол экрана(oled 128×32). Хотя бы цифры добавить.

    • Поддерживаю, чего то среднего не хватает. А так библиотека супер, спасибо)

  • Можно ли используя данную библиотеку сделать игру подобную Mini Pong на ATTiny85? Или она тоже будет громоздкой для данного контроллера?

Оставить комментарий

Ваш адрес email не будет опубликован.