Oled дисплеи и arduino

Содержание

OLED Memory Map

Regardless of the size of the OLED module, the SSD1306 driver has a built-in 1KB Graphic Display Data RAM (GDDRAM) for the screen which holds the bit pattern to be displayed. This 1K memory area is organized in 8 pages (from 0 to 7). Each page contains 128 columns/segments (block 0 to 127). And each column can store 8 bits of data (from 0 to 7). That surely tells us we have

8 pages x 128 segments x 8 bits of data = 8192 bits = 1024 bytes = 1KB memory

The whole 1K memory with pages, segments and data is highlighted below.

Each bit represents particular OLED pixel on the screen which can be turned ON or OFF programmatically.

The 128×64 OLED screen displays all the contents of RAM whereas 128×32 OLED screen displays only 4 pages (half content) of RAM.

Here are the complete specifications:

Display Technology OLED (Organic LED)
MCU Interface I2C / SPI
Screen Size 0.96 Inch Across
Resolution 128×64 pixels
Operating Voltage 3.3V – 5V
Operating Current 20mA max
Viewing Angle 160°
Characters Per Row 21
Number of Character Rows 7

Генерация пользовательских символов для LCD

Если вы находите символы на дисплее неподходящими и неинтересными, вы можете создать свои собственные символы (глиф) для своего ЖК-дисплея. Пользовательские символы чрезвычайно полезны в том случае, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.

Как мы уже обсуждали ранее в этом руководстве, символ на дисплее формируется в матрице 5×8 пикселей, поэтому вам нужно определить свой пользовательский символ в этой матрице. Для определения символа необходимо использовать функцию createChar() библиотеки LiquidCrystal.

Для использования  createChar()  сначала необходимо назначить массив из 8 байт. Каждый байт (учитывается только 5 бит) в массиве определяет одну строку символа в матрице 5×8. В то время как нули и единицы в байте указывают, какие пиксели в строке должны быть включены, а какие-выключены.

Генератор символов LCD

Создание собственного символа до сих пор было непросто! Поэтому было создано небольшое приложение под названием «Генератор пользовательских символов» для LCD.

Вы видите синюю сетку ниже? Вы можете нажать на любой из 5 × 8 пикселей, чтобы установить/очистить этот конкретный пиксель. И когда вы нажимаете на пиксели, код для символа генерируется рядом с сеткой. Этот код может быть непосредственно использован в вашем скетче Arduino.

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

Следующий скриншот демонстрирует, как вы можете использовать эти пользовательские символы на дисплее.

//  подключаем библиотеку LiquidCrystal:
#include <LiquidCrystal.h>

// Создаем LCD объект. Выводы: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// создадим несколько пользовательских символов
byte Heart = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

byte Bell = {
0b00100,
0b01110,
0b01110,
0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};


byte Alien = {
0b11111,
0b10101,
0b11111,
0b11111,
0b01110,
0b01010,
0b11011,
0b00000
};

byte Check = {
0b00000,
0b00001,
0b00011,
0b10110,
0b11100,
0b01000,
0b00000,
0b00000
};

byte Speaker = {
0b00001,
0b00011,
0b01111,
0b01111,
0b01111,
0b00011,
0b00001,
0b00000
};


byte Sound = {
0b00001,
0b00011,
0b00101,
0b01001,
0b01001,
0b01011,
0b11011,
0b11000
};


byte Skull = {
0b00000,
0b01110,
0b10101,
0b11011,
0b01110,
0b01110,
0b00000,
0b00000
};

byte Lock = {
0b01110,
0b10001,
0b10001,
0b11111,
0b11011,
0b11011,
0b11111,
0b00000
};

void setup() 
{
  // инициализируем LCD и устанавливаем количество столбцов и строк: 
  lcd.begin(16, 2);

  // создание нового символа
  lcd.createChar(0, Heart);
  // создание нового символа
  lcd.createChar(1, Bell);
  // создание нового символа
  lcd.createChar(2, Alien);
  // создание нового символа
  lcd.createChar(3, Check);
  // создание нового символа
  lcd.createChar(4, Speaker);
  // создание нового символа
  lcd.createChar(5, Sound);
  // создание нового символа
  lcd.createChar(6, Skull);
  // создание нового символа
  lcd.createChar(7, Lock);

  // Очищаем LCD дисплей 
  lcd.clear();

  // Печатаем сообщение на LCD.
  lcd.print("Custom Character");
}

// Печатаем все пользовательские символы
void loop() 
{ 
  lcd.setCursor(0, 1);
  lcd.write(byte(0));

  lcd.setCursor(2, 1);
  lcd.write(byte(1));

  lcd.setCursor(4, 1);
  lcd.write(byte(2));

  lcd.setCursor(6, 1);
  lcd.write(byte(3));

  lcd.setCursor(8, 1);
  lcd.write(byte(4));

  lcd.setCursor(10, 1);
  lcd.write(byte(5));

  lcd.setCursor(12, 1);
  lcd.write(byte(6));

  lcd.setCursor(14, 1);
  lcd.write(byte(7));
}

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

byte Heart = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

В настройках мы должны создать пользовательский символ, используя функцию createChar(). Эта функция принимает два параметра. Первый — это число от 0 до 7, чтобы зарезервировать один из 8 поддерживаемых пользовательских символов. Второй параметр — это имя массива байтов.

// создание нового символа
lcd.createChar(0, Heart);

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

// byte(0) покажет символ Heart (сердце).
lcd.write(byte(0));

Назначение функций и переменных

Подключаем библиотеку:

#include <iarduino_OLED.h> // Подключаем библиотеку.
iarduino_OLED ОБЪЕКТ (  ); // Создаём объект (адрес по умолчанию 0x3C).

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

ОБЪЕКТ.begin(); // Инициализация работы с дисплеем.

Очистка экрана

ОБЪЕКТ.clrScr(  ); // Очистка экрана дисплея (параметр - флаг разрешающий залить дисплей).

Заливка дисплея

ОБЪЕКТ.fillScr(  ); // Заливка дисплея (параметр - цвет. 0-чёрный, 1-белый).

Инверсия экрана

ОБЪЕКТ.invScr(  ); // Инверсия цветов экрана (параметр - флаг разрешающий инверсию).

Инверсия текста

ОБЪЕКТ.invText(  ); // Инверсия цветов выводимого текста (параметр - флаг разр. инверсию).

Управление фоном текста

ОБЪЕКТ.bgText(  ); // Управление наличием фона у выводимого текста.

Управление фоном изображений

ОБЪЕКТ.bgImage(  ); // Управление наличием фона у выводимых изображений.

Выбор шрифта

ОБЪЕКТ.setFont( ШРИФТ ); // Выбор шрифта для выводимого текста (параметр - название шрифта).

Получение ширины символов

ОБЪЕКТ.getFontWidth(); // Получение ширины символов выбранного шрифта.

Получение высоты символов

ОБЪЕКТ.getFontHeight(); // Получение высоты символов выбранного шрифта.

Указание кодировки

ОБЪЕКТ.setCoding(  ); // Указание кодировки текста в скетче.

Установка курсора

ОБЪЕКТ.setCursor( X , Y ); // Установка курсора в указанную позицию на экране.

Сдвиг курсора

ОБЪЕКТ.setCursorShift( X , Y ); // Сдвиг курсора на указанное количество пикселей.

Вывод текста

ОБЪЕКТ.print( ТЕКСТ/ЧИСЛО    ); // Вывод текста или числа в указанную позицию.

Вывод изображения

ОБЪЕКТ.drawImage( КАРТИНКА    ); // Вывод изображения в указанную позицию.

Получение ширины изображения

ОБЪЕКТ.getImageWidth( КАРТИНКА  ); // Получение ширины изображения.

Получение высоты изображения

ОБЪЕКТ.getImageHeight( КАРТИНКА  ); // Получение высоты изображения.

Вывод точки

ОБЪЕКТ.drawPixel( X , Y  ); // Вывод точки в указанную позицию на экране.

Получение цвета точки

ОБЪЕКТ.getPixel( X , Y ); // Получение цвета точки в указанной позиции экрана.

Вывод линии

ОБЪЕКТ.drawLine( X1,Y1 , X2,Y2  ); // Вывод линии через две точки на экране.

Вывод прямоугольника

ОБЪЕКТ.drawRect( X1,Y1 , X2,Y2   ); // Вывод прямоугольника через две точки на экране.

Вывод круга

ОБЪЕКТ.drawCircle( X, Y   ); // Вывод круга в указанную точку на экране.

Управление обновлением

ОБЪЕКТ.autoUpdate(  ); // Управление обновлением (параметр - флаг разр. автообновление экрана).

Принудительное обновление данных на экране дисплея.

ОБЪЕКТ.update(); // Принудительное обновление данных на экране дисплея.

Текущая позиция курсора по оси X.

Переменная ОБЪЕКТ.numX // Принимает и возвращает текущую позицию курсора по оси X.

Текущая позиция курсора по оси Y.

Переменная ОБЪЕКТ.numY// Принимает и возвращает текущую позицию курсора по оси Y.

Для вывода только текстов и чисел, воспользуйтесь библиотекой iarduino_OLED_txt.

Исходный код программы

Чтобы в программе подключить ЖК дисплей к ARDUINO UNO, необходимо сделать следующие несколько вещей:

Arduino

#include <LiquidCrystal.h>
lcd.begin(16, 2);
LiquidCrystal lcd(0, 1, 8, 9, 10, 11);
lcd.print(«hello, world!»);

1
2
3
4

#include <LiquidCrystal.h>

lcd.begin(16,2);

LiquidCrystallcd(,1,8,9,10,11);

lcd.print(«hello, world!»);

В первую очередь мы должны подключить заголовочный файл (‘#include <LiquidCrystal.h>’), в котором находятся все необходимые инструкции для взаимодействия с ЖК дисплеем, что значительно упростит взаимодействие с ним в 4 битном режиме. Используя этот заголовочный файл нам не нужно будет передавать в ЖК дисплей бит за битом и нам не нужно будет самим программировать какие-либо функции для взаимодействия с ЖК дисплеем.

Во второй строчке мы должны сказать плате ARDUINO UNO какой тип ЖК дисплея мы собираемся использовать, поскольку существует достаточно большое число типов подобных дисплеев, например, 20×4, 16×2, 16×1 и т.д. В нашем проекте мы собираемся подключать к ARDUINO UNO ЖК дисплей 16х2, поэтому мы и должны записать команду ‘lcd.begin(16, 2);’. А если бы мы подключали ЖК дисплей 16х1, то в этом случае изменилась бы и команда соответствующим образом — ‘lcd.begin(16, 1);’.

В следующей инструкции мы сообщаем плате ARDUINO UNO к каким контактам мы подсоединили ЖК дисплей. В нашем случае мы использовали контакты ЖК дисплея “RS, En, D4, D5, D6, D7”, которые подсоединены к контактам «0, 1, 8, 9, 10, 11» ARDUINO UNO, поэтому и приведенная команда выглядит следующим образом — “LiquidCrystal lcd(0, 1, 8, 9, 10, 11);”.

Для того, чтобы напечатать на экране дисплея строку символов, мы использовали команду lcd.print(«hello, world!»), которая выводит на экран дисплея строку ‘hello, world!’.

Как мы видим из представленного кода, нам не нужно заботиться больше ни о каких аспектах взаимодействия с ЖК дисплеем, нам нужно просто инициализировать ЖК дисплей в программе и тогда плата ARDUINO UNO будет готова к отображению информации на экране дисплея.

Далее представлен исходный код программы (с комментариями) для взаимодействия платы ARDUINO UNO с ЖК дисплеем 16х2.

Arduino

#include <LiquidCrystal.h> // инициализируем библиотеку для взаимодействия с ЖК дисплеем
LiquidCrystal lcd(0, 1, 8, 9, 10, 11); /// сообщаем Arduino номера контактов, к которым подключен ЖК дисплей — REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN
void setup()
{
// устанавливаем число столбцов и строк для ЖК дисплея
lcd.begin(16, 2);
}

void loop()
{
// устанавливаем курсор в нулевой столбец первой строки
lcd.print(» CIRCUIT DIGEST»); //печатаем строку
lcd.setCursor(0, 1); // устанавливаем курсор в нулевой столбец второй строки
lcd.print(«http://www.circuitdigest.com/»);//печатаем строку
delay(750); //задержка на 0.75 сек
lcd.scrollDisplayLeft();// переключаем данные на ЖК дисплее
lcd.setCursor(0, 0);// устанавливаем курсор в нулевой столбец первой строки
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#include <LiquidCrystal.h> // инициализируем библиотеку для взаимодействия с ЖК дисплеем

LiquidCrystallcd(,1,8,9,10,11);/// сообщаем Arduino номера контактов, к которым подключен ЖК дисплей — REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN

voidsetup()

{

// устанавливаем число столбцов и строк для ЖК дисплея  

lcd.begin(16,2);

}

voidloop()

{

// устанавливаем курсор в нулевой столбец первой строки  

lcd.print(»   CIRCUIT DIGEST»);//печатаем строку

lcd.setCursor(,1);// устанавливаем курсор в нулевой столбец второй строки  

lcd.print(«http://www.circuitdigest.com/»);//печатаем строку

delay(750);//задержка на 0.75 сек

lcd.scrollDisplayLeft();// переключаем данные на ЖК дисплее

lcd.setCursor(,);// устанавливаем курсор в нулевой столбец первой строки  

}

Практика

Теперь мы переходим к интересным вещам. Давайте проверим ЖК-дисплей. Сначала подключим контакты 5В и GND от Arduino Uno к шинам электропитания макетной платы. Затем  подключим  LCD 1602.  Данный LCD имеет две отдельные линии питания:

  1. Контакт 1 и контакт 2 для питания самого LCD 1602
  2. Контакт 15 и контакт 16 для подсветки LCD 1602

Подсоедините контакты 1 и 16 LCD на минус питания, а контакты 2 и 15 к + 5В.

Далее необходимо подключить контакт 3, который отвечает за контрастность и яркость дисплея. Для точной настройки контрастности необходимо подключить крайние выводы потенциометра сопротивлением 10 кОм к 5В и GND, а  центральный контакт (бегунок) потенциометра к контакту 3 на LCD дисплея.

Регулировка контрастности ЖК-дисплея с помощью потенциометра

Теперь включите Arduino и вы увидите подсветку. Поворачивая ручку потенциометра, вы должны заметить появление первой линии прямоугольников. Если это произойдет, поздравляем! Ваш ЖК-дисплей работает правильно.

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

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

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

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

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

Как подключить LCD дисплей 1602 к Arduino

При сборке своего металлоискателя у меня на руках оказался LCD дисплей 1602, построенный на контроллера HD44780. Решил не упустить возможность и подключить его к своему китайскому аналогу Arduino UNO.

Вот такой дисплей 1602 будем сегодня подключать к Arduino.

Купить подобный экран можно за $1.25.

Цифры «1602» говорят о том, что дисплей состоит из 2-х строк, по 16 символов. Это довольно распространённый экран, с применением которого народ конструирует часы, тестеры и прочие гаджеты. Дисплей бывает с зелёной и голубой подсветкой.

  • К дисплею я припаял гребёнку контактов, что бы можно было легко подключать провода.

Подключать дисплей 1602 к Arduino будем через 4-битный вариант параллельного интерфейса. Существует вариант и 8-битного интерфейса,  но при нём задействуется больше проводов, а выигрыша в этом мы не увидим.

Кроме дисплея  и Arduino, нам понадобятся провода и переменный резистор на 10кОм. Резистор подойдёт любой марки, лишь бы был необходимого номинала.

Питание на дисплей подаётся  через 1-й (VSS) и 2-й (VDD) выводы. К выводам 15 (А) и 16 (K) — подаётся питание на подсветку дисплея.

Поскольку для питания и подсветки используется одно напряжение +5В, запитаем их от пинов Arduino «5V» и «GND».

Главное не перепутать полярность, иначе можно спалить электронику дисплея.

3-й вывод (V0) подключаем к ножке переменного резистора, им будем управлять контрастностью дисплея. Резистор можно не использовать, а вывод «V0» подключить к GND. В таком случае контрастность будет максимальной и не будет возможности её плавной регулировки.

5-й вывод (RW) используется для чтения с дисплея либо для записи в него. Поскольку мы будем только писать в дисплей, соединим этот вывод с землёй (GND).

Выводы:  4-й (RS), 6-й (E), 11-й (D4), 12-й (D5), 13-й (D6), 14-й ( D7) подключаем к цифровым пинам Arduino. Не обязательно использовать пины те же что и у меня, можно подключить к любым цифровым, главное затем правильно их выставить в скетче.

  1. Моя подключённая Ардуина, осталось соединить её с компьютером через USB и залить скетч.
  2. В примете будем использовать скетч из стандартного набора.
  • В Arduino IDE выбираем «Файл» — «Образцы» — «LiquidCrystal» — «HelloWorld».
  • Давайте посмотрим на код скетча.

В строке «LiquidCrystal lcd», в скобках, выставлены цифровые пины, которые задействованы на Arduino. Пины выставляются в такой последовательности: RS, E, DB4, DB5, DB6, DB7. Если вы задействовали другие цифровые пины, при подключении дисплея, впишите их в нужной последовательности в скобках.

В строке «lcd.print(«hello, world!»);» выводится приветствие на дисплей, по-умолчанию это надпись «hello, world!», её можно поменять на любую свою, пишем на латинице.

Загружаем скетч в Arduino и вот результат. Вместо «hello, world!» я вписал свой сайт. Строкой ниже, таймер производит отсчёт времени.

How to Connect the Geekcreit 0.91 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.

Geekcreit 128 x 32 0.91 Inch OLED Display I2C/TWI Pinout

Arduino Uno to 0.91 Inch 128 x 32 OLED Wiring

The image below shows how to connect the Geekcreit 0.91 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

How to Connect the Geekcreit 128 x 32 0.96 Inch OLED I2C Display to Arduino – Wiring Diagram

Arduino MEGA 2560 0.91 Inch 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

SPECIFICATIONS

Interface Pin Function

No. Symbol Function
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

General Specification

Item Dimension Unit
Dot Matrix 128 x 64
Module dimension 26.70 × 19.26 ×1.26 mm
Active Area 21.74 × 10.86 mm
Pixel Size 0.148 × 0.148 mm
Pixel Pitch 0.170 × 0.170 mm
Display Mode Passive Matrix
Display Color Monochrome
Drive Duty 1/64 Duty
Controller IC SH1106
Interface 6800, 8080, SPI, I2C
Size 0.96 inch

Absolute Maximum Ratings

Parameter Symbol Min Max Unit
Supply Voltage for Logic VDD1 -0.3 3.6 V
Power supply for charge pump circuit VDD2 -0.3 4.8 V
Supply Voltage for Display VPP -0.3 14.5 V
Operating Temperature TOP -40 +80 °C
Storage Temperature TSTG -40 +85 °C

Electronical Characteristics

DC Electrical Characteristics

Item Symbol Condition Min Typ Max Unit
Supply Voltage for Logic 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
High Level Input VIH 0.8xVDD1 VDD1 V
Low Level Input VIL VSS 0.2xVDD1 V
High Level Output VOH 0.8xVDD1 VDD1 V
Low Level Output 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 inch oled, oled 0.96, oled 0.96″

Описание

Winstar OLED WEO012864A представляет собой модуль дисплея с пассивной матрицей OLED-1,54 дюйма (128×64 точек). WEO012864A обладает размером модуля 42.04 x 27.22 мм, с активной площадью 35.05 x 17.51 мм. WEO012864A имеет встроенный IC SSD1309, с поддержкой 6800/8080 8-бит, I2C и 4-wire интерфейсов. OLED-дисплей WEO012864A имеет COG структуру и является качественным ультратонким дисплеем с отсутствием необходимости в подсветки (сам излучает); Так же преимуществами этих дисплеев является легкий вес и низкое энергопотребление. Этот 1,54-дюймовый OLED  модуль подходит для: измерительных приборов, POS систем, Облачных/IoT систем, умных устройств, энергетических систем, автомобилестроении, коммуникационных систем, медицинских устройств и т.д.
В настоящее время WEO012864A доступен в белом, желтом и оранжевом цветах. Модуль WEO012864A может работать при температурах от -40 ° С до + 80С; а температура хранения — от -40С до + 85С. 

Немного о принципах работы OLED дсиплея

Термин OLED расшифровывается как “Organic Light emitting diode”, что в переводе означает органический светоизлучающий диод. Подобные светодиоды применяются в большинстве телевизоров, выпускаемых в настоящее время. В данном проекте мы будем использовать монохромный 4-контактный OLED дисплей SSD1306 с диагональю 0.96”. Этот дисплей может работать только по протоколу I2C. Внешний вид данного дисплея и назначение его контактов показаны на следующем рисунке и таблице.

Наименование контакта Назначение контакта
VCC 3.3v
GND земля
SDA SDA (Physical pin 3)
SCL SCL (Physical pin 5)

Для работы с OLED дисплеями сообществом Arduino разработано множество библиотек, мы этом проекте применили одну из этих библиотек — Adafruit_SSD1306 Library. Она достаточно проста в использовании и имеет много возможностей для работы с графикой. Также в этом проекте нам понадобится еще одна библиотека, которую необходимо будет скачать и установить — GFX Graphics Library.

Modifying Adafruit SSD1306 Library

Adafruit’s SSD1306 Library isn’t set up for the 128×64 OLED displays (the one we are using right now). The display size must be changed in the Adafruit_SSD1306.h header file to make it work for us. If it is not changed, an error message saying #error (“Height incorrect, please fix Adafruit_SSD1306.h!”); may appear when attempting to verify the example sketch in the Arduino IDE:

In order to change the Adafruit_SSD1306.h header file, open your sketchbook location. It’s generally My Documents > Arduino. Now go to libraries > Adafruit_SSD1306

Open Adafruit_SSD1306.h file in a text editor. Scroll down the file to find the section with the SSD1306 Displays or directly go to line no. 73. Comment out #define SSD1306_128_32 and uncomment #define SSD1306_128_64 so that the code in this section looks like this:

That’s it. Now save the file and restart your Arduino IDE.

Элементы платы

Дисплей

Дисплей MT-16S2H-I умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.

Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 16 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.

Контроллер дисплея

Матрица индикатора подключена к встроенному чипу КБ1013ВГ6 с драйвером расширителя портов, которые выполняют роль посредника между экраном и микроконтроллером.

Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.

I²C-расширитель

Для экономии пинов микроконтроллера на плате дисплея также распаян дополнительный преобразователь интерфейсов INF8574A: микросхема позволит общаться экрану и управляющей плате по двум проводам через интерфейс I²C.

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

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

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
4 RS Выбор регистра
5 R/W Выбор режима записи или чтения
6 E Разрешение обращений к индикатору (а также строб данных)
7 DB0 Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме)
8 DB1 Шина данных (8-ми битный режим)
9 DB2 Шина данных (8-ми битный режим)
10 DB3 Шина данных (8-ми битный режим)
11 DB4 Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме)
12 DB5 Шина данных (8-ми и 4-х битные режимы)
13 DB6 Шина данных (8-ми и 4-х битные режимы)
14 DB7 Шина данных (8-ми и 4-х битные режимы)
15 LED+ Питания подсветки (+)
16 LED– Питания подсветки (–)
17 SDA Последовательная шина данных
18 SCL Последовательная линия тактированния

Обратите внимания, что физические контакты подсветки экрана и , также интерфейс шины I²C и расположены не в порядком соотношении с другими пинами экрана.

Питание

Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт

Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей текстовый экран 16×2 / I²C / 3,3 В.

Интерфейс передачи данных

Дисплей может работать в трёх режимах:

  • 8-битный режим — в нём используются и младшие и старшие биты (-)
  • 4-битный режим — в нём используются только младшие биты (-)
  • I²C режим — данные передаются по протоколу I²C/TWI. Адрес дисплея .

Использовать восьмибитный и четырёхбитный режим в данном дисплее не целесообразно. Ведь главное достоинство этой модели именно возможность подключения через I²C.
Если всё-таки есть необходимость использовать 4-битный или 8-битный режим, читайте документацию на текстовый экран 16×2.

Объединение питания

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

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
15 LED+ Питания подсветки (+)
16 LED– Питания подсветки (–)

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

Мы взяли этот шаг на себя и спаяли перемычки самостоятельно.

Выбор адреса

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

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

Капнув припоем на контактные площадки, мы получим один из семи дополнительных адресов:

  • нет припоя, соответственно нет электрического контакта.
  • есть припой, соответственно есть электрический контакт.
J2 J1 J0 Адрес
L L L 0x38
L L H 0x39
L H L 0x3A
L H H 0x3B
H L L 0x3C
H L H 0x3D
H H L 0x3E
H H H 0x3F

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

OLED (Organic Light-Emitting Diode) — это полупроводниковый прибор, излучающий свет при прохождении через него электрического тока. Управление модулем осуществляет с помощью чипа SSD1306, который поддерживает пять разных протоколов связи. Встречаются модули не только с протоколом IIC, но и с протоколом SPI, и даже олед дисплеи с возможностью выбора (переключения) между этими двумя протоколами.

Характеристики OLED I2C 128×64 / 128×32

  • Цвет экрана — монохромный;
  • Разрешение — 128×64 или 128×32;
  • Графический чип — SSD1306;
  • Интерфейс — I2C или SPI;
  • Питание модуля — от 3 до 5 В;
  • Размер модуля — 27x27x4 мм.

Распиновка OLED SPI и дисплея OLED IIC

Главным плюсом OLED 128×64 iic является работа модуля без подсветки, за счет чего обеспечивается низкое потребление тока этим модулем. А высокое разрешение OLED 128×64 px Arduino позволяет вывести на дисплей большее количество информации, в отличии от текстового экрана 1602. Для подключения используется четыре разъема — два провода для питания (5V и GND) и два провода для шины IIC (SDA и SCL).