Графический OLED-дисплей 128х64

Содержание

How to Connect the Geekcreit 0.96 Inch I2C OLED Display to Arduino

The first and most important thing to note is that some of the displays may have the GND and VCC power pins swapped around. Check your display to make sure that it is the same as the image below. If the pins are swapped, make sure to change the connections to the Arduino – OLED VCC connects to 5V on the Arduino, OLED GND to GND on the Arduino.

Caution! Make sure that you connect the power pins correctly. Some modules have GND and VCC swapped around. Don’t blow up your display!

Also make sure that your display is 5V compatible as this one is.

Графический OLED-дисплей 128х64Geekcreit 0.96 Inch OLED Display I2C/TWI Pinout

Arduino Uno OLED Wiring

The image below shows how to connect the Geekcreit 0.96 inch OLED I2C display to Arduino. Pin connections are as follows for wiring the OLED display to an Arduino Uno.

  • OLED GND – Arduino GND
  • OLED VCC – Arduino 5V
  • OLED SCL – Arduino Uno A5
  • OLED SDA – Arduino Uno A4

Графический OLED-дисплей 128х64How to Connect the Geekcreit 0.96 Inch OLED I2C Display to Arduino – Wiring Diagram

Arduino MEGA 2560 OLED Wiring

Pin connections for wiring an Arduino MEGA 2560 to the OLED display are as follows.

  • OLED GND – Arduino GND
  • OLED VCC – Arduino 5V
  • OLED SCL – Arduino MEGA 2560 pin 21
  • OLED SDA – Arduino MEGA 2560 pin 20

Установка библиотеки для модуля OLED

Контроллер SSD1306 OLED дисплея имеет гибкие, но сложные драйверы. Для использования контроллера SSD1306 необходимы огромные знания по адресации памяти. К счастью,  была написана библиотека Adafruit SSD1306, которая позволяет довольно простыми и понятными командами управлять OLED дисплеем.

Чтобы установить библиотеку, перейдите в раздел Sketch > Include Library > Manage Libraries…. Подождите, пока менеджер библиотеки загрузит индекс библиотек и обновит список установленных библиотек.

Графический OLED-дисплей 128х64

Отфильтруйте результаты поиска, введя adafruit ssd1306. Там должна быть пара записей. Ищите Adafruit SSD1306 от Adafruit. Нажмите на эту запись, а затем выберите Установить.

Графический OLED-дисплей 128х64

Библиотека Adafruit SSD1306 представляет собой аппаратную библиотеку, которая выполняет функции более низкого уровня. Она должна быть сопряжена с библиотекой Adafruit GFX для отображения графических примитивов, таких как точки, линии, круги, прямоугольники и т. д. Также установите и эту библиотеку.

Графический OLED-дисплей 128х64

Running the Adafruit Example Sketch

If the libraries for the display were installed correctly, example programs for the display will be found in the Arduino IDE under File → Examples → Adafruit SSD1306 – open the ssd1306_128x64_i2c sketch under this menu.

The I²C address must be changed in this sketch in order for it to work with the Geekcreit display. Change the address from 0x3D to 0x3C as shown in the code below. This address is not 0x78 or 0x7A as printed on the back of the OLED board.

void setup()   {                
  Serial.begin(9600);

  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  //display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  // initialize with the I2C addr 0x3D (for the 128x64)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // changed this to 0x3C to make it work
  // init done

As shown above, the address was changed to 0x3C in display.begin(). The original line of code is shown above it and is commented out.

After making the changes, the sketch can be uploaded to the Arduino. When building the sketch for an Arduino Uno the IDE will display a low memory warning message, but the sketch will still run.

If the changes to the driver and example sketch were made correctly and the OLED display is wired to the Arduino correctly, the sketch should start running. The example program starts by showing the Adafruit logo, it then turns on a single pixel. Various graphics and text functions are then displayed.

You can help the Starting Electronics website by making a donation:

Any donation is much appreciated and used to pay the running costs of this website. Click the button below to make a donation.

Работа схемы

Схема устройства представлена на следующем рисунке.

Графический OLED-дисплей 128х64

В данном проекте мы будем устанавливать связь по протоколу SPI между OLED дисплеем и платой Arduino. Поскольку OLED дисплеи успешно работают с напряжениями 3V-5V это значит что они потребляют мало электроэнергии и не требуют внешнего источника питания. Достаточно просто сделать соединения, показанные на схеме. Дополнительно эти необходимые соединения продублированы в следующей таблице.

Номер контакта Наименование контакта К какому контакту Arduino необходимо подключить
1 Gnd, Ground Ground
2 Vdd, Vcc, 5V 5V
3 SCK, D0,SCL,CLK 10
4 SDA, D1,MOSI 9
5 RES, RST,RESET 13
6 DC, A0 11
7 CS, Chip Select 12

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

Проверка работоспособности экрана

При первом подключении экрана к Arduino стоит убедиться в том, что он корректно работает:

  • Правильно подключены пины управления
  • Сам экран и его драйвер не повреждены
  • Объект экрана правильно инициализирован в программе

Как это сделать?

1. В Arduino IDE открыть: Файл -> Примеры

Графический OLED-дисплей 128х64

2. Пролистать вниз до U8glib и выбрать пункт GraphicsTest:

Графический OLED-дисплей 128х64

3. Посмотреть тип своего дисплея.

Раскомментировать инициализацию, с названием, похожим на наименование подключаемого дисплея. Если не сработало – попробовать другую похожую инициализацию.

Если закончились все похожие инициализации – проверить правильность подключения дисплея и повторить предпредыдущий пункт.

Если и тут не сработало — перепроверить тип и наименование дисплея, повторить предпредпредыдущий пункт. Если даже так не сработает – убедиться, что плата Arduino жива и звать шамана.

Графический OLED-дисплей 128х64

4. Загрузить код в Arduino и смотреть на демонстрацию возможностей библиотеки.

Общие сведения об OLED дисплеях

OLED означает “Organic Light emitting diode“, что переводится как органический светоизлучающий диод, или, более коротко – органический светодиод. OLED дисплеи для радиолюбителей изготавливаются по той же самой технологии, что и большинство современных телевизоров, но имеют гораздо меньше пикселов по сравнению с ними. Но устройства на их основе (в том числе и с использованием Arduino) смотрятся потрясающе.

Графический OLED-дисплей 128х64 Графический OLED-дисплей 128х64

В нашем проекте мы будем использовать монохромный 7-пиновый SSD1306 0.96” OLED дисплей. Причина, по которой мы выбрали данный дисплей, заключается в том, что он может работать с тремя разными протоколами связи, трехпроводный SPI (Serial Peripheral Interface — последовательный интерфейс) режим, четырехпроводный SPI режим и режим IIC. В данной статье мы рассмотрим его подключение по четырехпроводному SPI режиму как самому скоростному из приведенных.

Контакты дисплея и выполняемые ими функции описаны в следующей таблице.

Номер контакта Название контакта Альтернативное название контакта Назначение контакта
1 Gnd Ground земля
2 Vdd Vcc, 5V напряжение питания (в диапазоне 3-5 В)
3 SCK D0, SCL, CLK контакт синхронизации (clock pin). Применяется в интерфейсах I2C и SPI
4 SDA D1, MOSI контакт данных. Применяется в интерфейсах I2C и SPI
5 RES RST, RESET контакт сброса модуля. Применяется в интерфейсе SPI
6 DC A0 контакт команд (Data Command pin). Применяется в интерфейсе SPI
7 CS Chip Select (выбор чипа) используется когда несколько устройств взаимодействуют по интерфейсу SPI
Популярные статьи  Простое, надежное и необычное столярное соединение

Сообществом Arduino разработано достаточно много библиотек для работы с подобными дисплеями. Мы выбрали из них библиотеку Adafruit_SSD1306 как весьма простую и в то же время содержащую достаточно много полезных функций. Но если ваш проект имеет жесткие ограничения по памяти/скорости, то тогда вам лучше использовать библиотеку U8g поскольку она работает быстрее и занимает меньше места в памяти.

Служебные функции

Поворот экрана

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

Синтаксис:

  • setRot90() – поворот на 90 градусов
  • setRot180() – поворот на 180 градусов
  • setRot270() – поворот на 270 градусов

Пример:

u8g.setFont(u8g_font_unifont);  
u8g.setPrintPos(0, 20); 
u8g.print("Hello World!");

Графический OLED-дисплей 128х64

u8g.setRot90();
u8g.setFont(u8g_font_unifont);  
u8g.setPrintPos(0, 20); 
u8g.print("Hello World!");

Графический OLED-дисплей 128х64

u8g.setRot180();
u8g.setFont(u8g_font_unifont); 
u8g.setPrintPos(0, 20);
u8g.print("Hello World!");

Графический OLED-дисплей 128х64

u8g.setRot270();
u8g.setFont(u8g_font_unifont); 
u8g.setPrintPos(0, 20);
u8g.print("Hello World!");

Графический OLED-дисплей 128х64

Функция undoRotation отменяет поворот экрана, возвращая его в исходное положение.

Синтаксис: undoRotation().

Пример:

u8g. undoRotation();

Изменение цвета

Функция setColorIndex задает цвет пикселя.

Синтаксис: setColorIndex(uint8_t color_index).

Где:

  • color_index – цвет пикселя,
  • 0 – пиксель не горит,
  • 1 – пиксель горит.

Пример:

u8g.setColorIndex(1);
u8g.drawBox(10, 10, 60, 20);
u8g.setColorIndex(0);
u8g.setFont(u8g_font_unifont);
u8g.setPrintPos(10, 30);
u8g.print("Hello World!");

Графический OLED-дисплей 128х64

Масштабирование

Функция setScale2x2 уменьшает разрешение дисплея в 2 раза. Если раньше 1 точка занимала один пиксель, то теперь она занимает 4.

Синтаксис: setScale2x2().

Пример:

u8g.setFont(u8g_font_unifont);
u8g.setPrintPos(0, 20);
u8g.print("Hello World!");
u8g.drawPixel(30, 30);

Графический OLED-дисплей 128х64

u8g.setFont(u8g_font_unifont);
u8g.setScale2x2();
u8g.setPrintPos(0, 20);
u8g.print("Hello World!");
u8g.drawPixel(30, 30);

Графический OLED-дисплей 128х64

Функция undoScale отменяет действие функции setScale2x2.

Синтаксис: undoScale().

Пример:

u8g.undoScale();

Основные функции будут описаны ниже. Полный список можно посмотреть на GitHub автора библиотеки.

Элементы дисплея

Графический OLED-дисплей 128х64

Дисплей

Дисплей MT-12864J выполнен на монохромной жидкокристаллической матрице с разрешением 128×64 пикселей. Каждый пиксель поддерживает только два состояния: включён или выключен, 1 или 0, true или false.

Матрица экрана подключена к , который выполняет роль посредника между экраном и управляющим микроконтроллером.

Драйвер дисплея

В систему драйвера входит три чипа: два контроллера сегментов KS0108 и один контроллер общих линий KS0107.

  • KS0108 LCD Segment Driver — это контроллер сегментов ЖК-дисплея с 64-канальным выходом. Для управления графическим дисплеем разрешением 128×64 пикселей, требуется два таких чипа. Первый KS0108 для управления левой половиной сегментов SEG1–SEG64, а второй KS0108 для управления правой половиной сегментов SEG65–SEG128. Доступ к двум половинам дисплея осуществляется индивидуально посредством сигнальных линий CS1 и CS2.
  • KS0107 LCD Common Driver — это контроллер общих линий индикатора ЖК-дисплея с 64-канальным выходом, который управляет общими линиями матрицы COM1–COM64 и генерирует временные сигналы для синхронизации с двумя сегментными контроллерами KS0108.

Графический OLED-дисплей 128х64

Контакты подключения

На плате дисплея выведено 20 контактов для подключения питания и взаимодействия с управляющей электроникой.

Вывод Обозначение Описание Подключение
1 VCC Питание дисплея Подключите к питанию 5 В.
2 GND Общая земля Подключите к земле.
3 VO Контрастность экрана Подключите к средней ноге потенциометра.
4-11 D0-D7 Линии данных Подключите к пинам ввода-вывода микроконтроллера.
12 CS1 Выбор контроллера #1 KS0108 (сегменты 1–64) Подключите к пину ввода-вывода микроконтроллера.
13 CS2 Выбор контроллера #2 KS0108 (сегменты 65–128) Подключите к пину ввода-вывода микроконтроллера.
14 RST Сброс содержимого дисплея Подключите к пину ввода-вывода микроконтроллера.
15 RW Выбор режима: запись или чтение Подключите к пину ввода-вывода микроконтроллера. Если не планируете считывать информацию с дисплея подключите к земле.
16 DC Выбор режима: данные или команда Подключите к пину ввода-вывода микроконтроллера.
17 EN Строб разрешения записи или чтение данных Подключите к пину ввода-вывода микроконтроллера.
18 VEE Выход отрицательного напряжения Подключите к одной из крайних ног потенциометра.
19 LED A Анод питания подсветки «+» Подключите к питанию 5 В.
20 LED K Катод питания подсветки «–» Подключите к земле.

Техническое описание

Функции контроллера контактного интерфейса

No. Символы Описание
1 NC No connection
2 C1N Connect to charge pump capacitor.
These pins are not used and should be disconnected when Vpp is supplied externally.
3 C1P
4 C2P Connect to charge pump capacitor.
These pins are not used and should be disconnected when Vpp is supplied externally.
5 C2N
6 VDD2 3.0 – 4.7V power supply pad for Power supply for charge pump circuit.
This pin should be disconnected when VPP is supplied externally
7 NC No connection
8 VSS Ground.
9 VDD1 Power supply input: 1.65 — 3.5V
10 NC No connection
11 IM1 These are the MPU interface mode select pads.
  8080 12C 6800 4-wire SPI
IM1 1 1
IM2 1 1
12 IM2
13 CSB This pad is the chip select input. When CSB = “L”, then the chip select becomes active, and data/command I/O is enabled.
14 RESB This is a reset signal input pad. When RES is set to “L”, the settings are initialized. The reset operation is performed by the RES signal level.
15 A0 This is the Data/Command control pad that determines whether the data bits are data or a command.
A0 = “H”: the inputs at D0 to D7 are treated as display data.
A0 = “L”: the inputs at D0 to D7 are transferred to the command registers.
In I2C interface, this pad serves as SA0 to distinguish the different address of OLED driver.
16 WRB This is a MPU interface input pad.
When connected to an 8080 MPU, this is active LOW. This pad connects to the 8080 MPU WR signal. The signals on the data bus are latched at the rising edge of the WR signal.
When connected to a 6800 Series MPU: This is the read/write control signal input terminal.
When R/W = “H”: Read.
When R/W = “L”: Write.
17 RDB This is a MPU interface input pad.
When connected to an 8080 series MPU, it is active LOW. This pad is connected to the RD signal of the 8080 series MPU, and the data bus is in an output status when this signal is “L”.
When connected to a 6800 series MPU , this is active HIGH. This is used as an enable clock input of the 6800 series MPU.
When RD = “H”: Enable.
When RD = “L”: Disable.
18 D0 This is an 8-bit bi-directional data bus that connects to an 8-bit or 16-bit standard MPU data bus.
When the serial interface is selected, then D0 serves as the serial clock input pad (SCL) and D1 serves as the serial data input pad (SI). At this time, D2 to D7 are set to high impedance.
When the I2C interface is selected, then D0 serves as the serial clock input pad (SCL) and D1 serves as the serial data input pad (SDAI). At this time, D2 to D7 are set to high impedance.
19 D1
20 D2
21 D3
22 D4
23 D5
24 D6
25 D7
26 IREF This is a segment current reference pad. A resistor should be connected between this pad and VSS. Set the current at 18.75uA.
27 VCOMH This is a pad for the voltage output high level for common signals.
A capacitor should be connected between this pad and VSS.
28 VPP OLED panel power supply. Generated by internal charge pump.
Connect to capacitor. It could be supplied externally.
29 NC No connection
30 NC No connection

Механические характеристики

Наименование Измерения Единица
Разрешение 128 x 64
Габариты 26.70 × 19.26 ×1.26 mm
Активная область 21.74 × 10.86 mm
Размер пикселя 0.148 × 0.148 mm
Шаг пикселя 0.170 × 0.170 mm
Матрица Пассивная
Цвет дисплея монохромные
Рабочий цикл 1/64 Duty
IC-Контроллер SH1106
Интерфейс 6800, 8080, SPI, I2C
Диагональ 0.96 дюйма

Абсолютные максимальные значения

Параметр Символы Минимальный Максимальный Единица
Напряжение питания логических схем VDD1 -0.3 3.6 V
Power supply for charge pump circuit VDD2 -0.3 4.8 V
Напряжение питания дисплея VPP -0.3 14.5 V
Диапазон рабочих температур TOP -40 +80 °C
Температура хранения TSTG -40 +85 °C

Электронные характеристики

DC Электронные характеристики

Наименование Символы Кондиция Минимальный Типичный Максимальный Единица
Напряжение питания логических схем VDD1 2.8 3.0 3.3 V
Power supply for charge pump circuit VDD2 3.5 3.8 4.2 V
Charge Pump Output Voltage for Display
(Generated by Internal DC/DC)
Charge Pump
VPP
7.5 8 8.5 V
Вход высокого уровня VIH 0.8xVDD1 VDD1 V
Вход низкого уровня VIL VSS 0.2xVDD1 V
Выход высокого уровня VOH 0.8xVDD1 VDD1 V
Выход низкого уровня VOL VSS 0.2xVDD1 V
Operating Current for VDD2 Display 50% ON IDD2 10 16 mA
Популярные статьи  Сдалай сам модель АвтоСаней своими руками

FPC Options:

Drawing FPC Length PIN Pitch ZIF FPC or HOTBAR FPC Interface FPC No. Create Date
13 30 0.7 HOTBAR FPC 6800, 8080, 4-Wire SPI, I2C FPC2070003001XXXXX09 20180613
40.95 30 0.5 ZIF  6800, 8080, SPI, I2C FPC2050003011XXXXX23 20190412

Search keyword: 128×64 oled, oled 128×64, 0.96 oled, 0.96″ oled, 0.96 дюйма oled, oled 0.96, oled 0.96″

Подключение OLED дисплея 128×32

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

OLED экран 128×32 очень просто подключается по SPI так как в нем есть встроенный модуль согласования уровней. Сначала возьмите рельсу 0.1″ с 8 контактами.

Графический OLED-дисплей 128х64

Установите контакты на макетной плате длинной стороной, а сверху OLED экран. После этого припаяйте рельсу к OLED PCB.

Графический OLED-дисплей 128х64

После этого подключите 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-дисплей 128х64

Сверху установите OLED экран

Графический OLED-дисплей 128х64

Припаяйте рельсу к OLED PCB

Графический OLED-дисплей 128х64

Теперь подключите контакты к 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 (вы можете изменить эти контакты в скетче дальше)

Графический OLED-дисплей 128х64

Это подключение соответствует тому, которое требуется для работы скетча примера. После того, как пример отработал, вы можете изменить пин RST. Вы не можете изменить контакты I2C, так как они ‘зафиксированы’ на уровне электросхемы.

Пример находится в: File→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306_128x32_i2c example

Питание 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

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 В.

Графический OLED-дисплей 128х64

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

0.96 128×64 OLED

Более старые версии OLED дисплеев 0.96″ 128×64 использовать сложнее, так как по умолчанию они не совместимы с питанием 5 В. То есть, вам надо обеспечивать для них питание 3.3 В.

Графический OLED-дисплей 128х64

  • VDD — для питания логики 3.3 В. Значение напряжения должно быть 3 или 3.3 В.
  • VBAT – это вход для изменения напряжения в диапазоне от 3.3 до 4.2 В.
  • VCC – это контакт значения напряжения high для OLED экрана. Если вы используете встроенный преобразователь напряжения, этот контакт подключать не надо. Если вы не используете внутренний преобразователь, подключите его к источнику питания 7-9 В – постоянный ток.

Рекомендуется соединить контакты VDD и VBAT вместе и подключить к 3.3 В, а контакт VCC оставить неподключенным.

Использование

// ===== СЕРВИС =====
void init();                    // инициализация
void clear();                   // очистить дисплей
void clear(int x0, int y0, int x1, int y1); // очистить область
void setContrast(uint8_t value);    // яркость 0-255 (умолч. 127)
void setPower(bool mode);       // вкл/выкл
void flipH(bool mode);          // отразить по горизонтали
void invertDisplay(bool mode);  // инвертировать дисплей
void flipV(bool mode);          // отразить по вертикали

// ===== ПЕЧАТЬ =====
// наследует класс Print, то есть print/println любой тип данных

void autoPrintln(bool mode);    // автоматически переносить текст
void home();                    // отправить курсор в 0,0
void setCursor(int x, int y);   // поставить курсор для символа столбец 0-127, строка 0-8(4)
void setCursorXY(int x, int y); // поставить курсор для символа столбец 0-127, пиксель 0-63(31)
void setScale(uint8_t scale);   // масштаб шрифта (1-4)
void invertText(bool inv);      // инвертировать текст (0-1)
bool isEnd();                   // возвращает true, если дисплей "кончился" - при побуквенном выводе

void textMode(byte mode);       // режим отрисовки текста
BUF_ADD - добавить
BUF_SUBTRACT - вычесть
BUF_REPLACE - заменить

// ===== ГРАФИКА =====
// далее fill:
OLED_CLEAR - очистить область под фигурой
OLED_FILL - залить фигуру
OLED_STROKE - обвести фигуру

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

// вывести битмап
// invert - BITMAP_NORMAL/BITMAP_INVERT инвертировать
// mode BUF_ADD / BUF_SUBTRACT / BUF_REPLACE
void drawBitmap(int x, int y, const uint8_t *frame, int width, int height, uint8_t invert = , byte mode = );

void fill(uint8_t data);                        // залить весь дисплей указанным байтом
void drawByte(uint8_t data);                    // шлёт байт в "столбик" setCursor() и setCursorXY()
void drawBytes(uint8_t* data, byte size);       // вывести одномерный байтовый массив (линейный битмап высотой 8)
void update();                                  // полностью обновить дисплей из буфера
void update(int x0, int y0, int x1, int y1);    // выборочно обновить дисплей из буфера (x0, y0, x1, y1)

Arduino OLED I²C Libraries for SSD1306 and Graphics Functions

Two Arduino libraries must be installed to start using the display. The SSD1306 driver library is used to initialize the display and provide low level display functions. The GFX library provides graphics functions for displaying text, drawing lines and circles, etc. Both these libraries are available from Adafruit.

Install the SSD1306 Driver Library

Download the Adafruit_SSD1306 library which is saved to your computer in a file called Adafruit_SSD1306-master.zip.

Copy the Adafruit_SSD1306-master folder from the downloaded zipped file into the Arduino libraries folder. This folder is usually found at Documents → Arduino → libraries on Windows systems. On Linux it is usually found at home folder → Arduino → libraries.

Finally in the Arduino library folder, rename the Adafruit_SSD1306-master folder to Adafruit_SSD1306.

Install the GFX Library

Download the Adafruit_GFX library which is saved to your computer in a file called Adafruit-GFX-Library-master.zip.

Copy the Adafruit-GFX-Library-master folder from the downloaded zipped file to the Arduino library folder as done for the SSD1306 driver above.

In the Arduino library folder rename the Adafruit-GFX-Library-master folder to Adafruit_GFX.

Verifying the Library Installation

After installing the libraries, your Arduino library folder should look as follows.

Популярные статьи  Простой способ выкрутить сломанный болт или шпильку

Графический OLED-дисплей 128х64Arduino Library Folder with New Libraries Installed

The contents of the two library folders should look as follows, with the SSD1306 driver library folder on the left and GFX library on the right.

Графический OLED-дисплей 128х64Adafruit SSD1306 and GFX Library Folders

Finding the OLED Libraries in Arduino

If the Arduino IDE was open during the library installation, close it first and then restart it.

In the Arduino IDE, find the libraries under the Sketch → Include Library menu from the top menu bar. When the mouse cursor is hovered above the Include Library menu item, the new libraries can be found on the pop-out menu. In Windows the libraries appeared under «Contributed libraries» near the top of the pop-out menu on my system. On my Linux computer the libraries appeared under the «Recommended libraries» section of the pop-out menu near the bottom.

Modifying the SSD1306 Driver

The SSD1306 driver isn’t set up for the Geekcreit OLED display by default. The display size must be changed in the driver before it can be used. If it is not changed, an error message will appear when attempting to verify the example sketch (see the section below) in the Arduino IDE:#error («Height incorrect, please fix Adafruit_SSD1306.h!»);

Open the Adafruit_SSD1306 folder that was just installed in the Arduino libraries folder. Find Adafruit_SSD1306.h and open it in a text editor. Scroll down the file to find the section with the header SSD1306 Displays or search for for this term in the text editor to find it quickly. Comment out #define SSD1306_128_32 and uncomment #define SSD1306_128_64 so that the code in this section looks as follows.

/*=========================================================================
    SSD1306 Displays
    -----------------------------------------------------------------------
    The driver is used in multiple displays (128x64, 128x32, etc.).
    Select the appropriate display below to create an appropriately
    sized framebuffer, etc.

    SSD1306_128_64  128x64 pixel display

    SSD1306_128_32  128x32 pixel display

    SSD1306_96_16

    -----------------------------------------------------------------------*/
   #define SSD1306_128_64
//   #define SSD1306_128_32
//   #define SSD1306_96_16
/*=========================================================================*/

Save the file after making the changes.

Подключение модуля OLED к Arduino Uno

Прежде чем мы перейдем к загрузке кода и отправке данных на дисплей, давайте подключим дисплей к Arduino Uno.

Схема подключения довольно проста. Начните с подключения контакта VCC к выходу 5V на Arduino и GND к земле

Теперь остались выводы, которые используются для связи по I2C. Обратите внимание, что каждая плата Arduino имеет разные контакты I2C

На платах Arduino с маркировкой R3 SDA (линия передачи данных) и SCL (линия синхронизации) находятся на разъемах рядом с выводом AREF. Они также известны как A5 (SCL) и A4 (SDA).

Если у вас MEGA, контакты будут другие! Используйте цифровые 21 (SCL) и 20 (SDA).

Графический OLED-дисплей 128х64

На следующей схеме показано как все должно быть подключено:

Графический OLED-дисплей 128х64

Подключение OLED дисплея 128×64

Паяем контакты

Перед подключением надо установить и спаять контакты на OLED дисплее. Контакты не будут работать без распайки!

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

Графический OLED-дисплей 128х64

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

Графический OLED-дисплей 128х64

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

Графический OLED-дисплей 128х64

I2C или SPI

Одна из хороших особенностей OLED экранов 128×64 – это то, что они могут использовать I2C или SPI протоколы. SPI отрабатывает быстрее, чем I2C, но для подключения надо больше контактов. Кроме того, наладить SPI на некоторых микроконтроллерах проще, чем I2C.

Подключение OLED по I2C

Экран может подключаться по I2C протоколу к любому микроконтроллеру, который поддерживает этот формат. Так как I2C интерфейс используется только для ‘соединения’ дисплея, у вас останется 512 байт RAM памяти на микроконтроллере. Но передать данные с OLED дисплея не получится.

Для начала вам надо соединить два контакта на задней части платы OLED экрана. Оба контакта должны быть ‘замкнуты’ (с помощью распайки), чтобы I2C начал работать!

Графический OLED-дисплей 128х64

После этого подключите контакты к 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, вам надо разомкнуть контакты, которые вы замыкали в предыдущем пункте!

Графический OLED-дисплей 128х64

После этого подключите контакты к 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

Библиотека Arduino и примеры

Для использования небольших монохромных OLED дисплеев вам надо будет установить библиотеки Arduino. Код из библиотеки, которая приведена ниже поддерживает работу с любыми моделями плат Arduino. Кроме того, его можно легко адаптировать и под другие микроконтроллеры. Для передачи данных используется SPI стандарт передачи данных.

Переместите папку Adafruit_SSD1306 в папку Arduino /libraries. Если папка не существует, вам надо ее создать. В Windows путь будет следующим: (home folder)\My Documents\Arduino\libraries, а для Mac или Linux: (home folder)/Documents/Arduino/libraries. Если у вас возникли трудности с библиотеками, ознакомьтесь с полным гайдом по работе и установке библиотек на нашем сайте Arduino-diy.com.

После установки библиотек Adafruit_SSD1306 и Adafruit_GFX, перезапустите Arduino IDE. Загрузить пример скетча можно через меню: File→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306…

После того как вы завершили подключение дисплея в соответствии с рекомендациями, которые приведены выше, можете загружать скетч на ваш Arduino.

Библиотека не сможет определить размер экрана на уровне кода. Указать размер надо в header файле. Перейдите в папку с библиотекой и откройте файл Adafruit_SSD1306.h. Сверху в нем есть пояснения по адаптации библиотеки к различным дисплеям.

Графический OLED-дисплей 128х64Графический OLED-дисплей 128х64

Работаем с библиотекой

Библиотека U8glib позволяет в различных комбинациях:

  1. Рисовать на экране планиметрические объекты.
  2. Выводить заготовленную картинку.
  3. Писать различными шрифтами (выбор очень велик)

Теперь рассмотрим по порядку функционал.

Инициализация

Для начала необходимо подключить саму библиотеку

#include "U8glib.h"

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

Для этого посмотрите модель и разрешение своего дисплея и раскомментируйте строку, подходящую по названию

Графический OLED-дисплей 128х64

В моем случае это:

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI

Дисплей с разрешением 128 на 64 пикселя, подключается по интерфейсу I2C:

VCC <–> 5V

GND <-> GND

SCL <–> A5

SDA <–> A4

Данная библиотека в отличии от других не требует объявлений в: void setup(void).

Служебные функции могут быть вызваны в любом месте программы, а вот функции отрисовки должны всегда вызываться в цикле отрисовки:

u8g.firstPage();  
  do {
    // функции отрисовки
  } while( u8g.nextPage() );

Иногда бывает удобнее занести их в какую-то одну функцию и вызывать потом только ее:

void draw(void) { 
  u8g.setFont(u8g_font_unifont); 
  u8g.setPrintPos(0, 20); 
  u8g.print("Hello World!");
}

void setup(void) {
}

void loop(void) {
  u8g.firstPage();  
  do {
    draw();
    // функции отрисовки
  } while( u8g.nextPage() );
  delay(500);
}

Система координат

Дисплей работает в декартовой системе координат. Начало координат (0,0) находится в левом верхнем углу дисплея. Ось Х параллельна более длинной грани дисплея и идет от левого края к правому, ось У параллельна более короткой грани дисплея и идет от верхней грани к нижней.

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

Оцените статью
( Пока оценок нет )
Добавить комментарий