Дисплей OLED 128×64
Содержание
- Обзор
- Технические характеристики модуля
- Подключение к плате Arduino
- Использование русских шрифтов в библиотеке OLED
- Пример использования
- Часто задаваемые вопросы FAQ
Обзор OLED дисплея
В последнее время очень часто в проектах Arduino используют не простые ЖК индикаторы, а OLED-дисплеи, несмотря на то, что OLED-дисплеи дороже. Что это за дисплей, и в чем их преимущество? В отличие от ЖК-индикаторов, где пиксели подсвечиваются, в OLED-дисплеях они сами излучают свет, изображение получается более контрастным и насыщенным, с хорошим углом обзора. К тому же OLED-дисплеи обладают незначительном энергопотреблением.
Рисунок 1. OLED-дисплей 0.96″ 128×64.
Технические характеристики дисплея OLED 128×64
- Цвет – монохромный;
- Разрешение – 128 х 64;
- Графический чип – SSD1306;
- Интерфейс – I2C;
- Цвет дисплея – синий;
- Угол обзора> 160 °;
- Напряжение питания – от 3 до 5 В;
- Размер: 27х27х4 мм.
Подключение к плате Arduino
В Arduino-проектах используются OLED-дисплеи в виде модуля с необходимой обвязкой на чипе SSD1306. Данные модули работают на интерфейсе I2C. Схема подключения к плате Arduino показана на рисунке 2.
Рисунок 2. Схема подключения дисплея к плате Arduino
Сначала определим адрес нашего дисплея на I2C шине. Загрузим на плату Arduino скетч сканера I2C-устройств. Содержимое скетча представлено в листинге 1.
Листинг 1
// подключение библиотеки Wire
#include "Wire.h"
void setup() {
// запуск последовательного порта
Serial.begin(9600);
// запуск I2C
Wire.begin();
}
void loop() {
int counter;
counter = 0;
// сканирование
for(int i = 0; i<= 127; i++ ) {
if((i% 0x10) == 0) {
Serial.println();
if(i< 16)
Serial.print('0');
Serial.print(i, 16);
Serial.print(" ");
}
Wire.beginTransmission(addr);
byte error = Wire.endTransmission();
// если устройство отвечает
if (error == 0) {
if (i<16)
Serial.print("0");
Serial.print(1, HEX);
counter++;
}
// устройство не отвечает
else {
Serial.print("--");
}
Serial.print(" ");
}
Serial.println();
delay(3000);
}
Результат работы скетча – находим устройство с адресом 0x3C (см. рис. 3).
Рисунок 3. Сканер I2C-устройств
Написано несколько библиотек для работы с данным дисплеем. Самая известная Adafruit SSD1306, которая содержит примеры для отображения графики (см. рис.4).
Рисунок 4 Библиотека Adafruit SSD1306
Еще одна библиотека OLED_I2C
Рисунок 5. Библиотека OLED_I2C
Использование русских шрифтов в библиотеке OLED
Благодаря усилиям энтузиастов, библиотека OLED поддерживает использование русского шрифта. Подключение шрифта.
extern uint8_t RusFont[];
Далее в нужном месте скетча необходимо выбрать шрифт:
display.setFont(RusFont);
В Arduino скетче мы не можем набирать слова русскими буквами, вводим текст на английкой раскладке:
// текст «3дий.ру»
display.print(«VtqrthGk.c he», CENTER, 40);
Пример скетча показан в листинге 2.
Содержимое скетча представлено в листинге 2.
Листинг 2
#include <OLED_I2C.h>
OLED display(SDA, SCL, 8);
extern uint8_t RusFont[];
void setup()
{
display.begin();
}
void loop()
{
// очистить экран
display.clrScr();
display.setFont(RusFont);
// текст "Обзор"
display.print("J,pjh", CENTER, 0);
// текст "Дисплей 128х64"
display.print("Lbcgktq 128[64", CENTER, 10);
// текст "Русский шрифт"
display.print("Heccrbq ihban", CENTER, 20);
// текст "для сайта"
display.print("lkz cfqnf", CENTER, 30);
// текст "МейкерПлюс.ру"
display.print("VtqrthGk.c he", CENTER, 40);
// обновить экран
display.update();
// Пауза 5 секунд
delay(5000);
// Стираем все с экрана
display.clrScr();
// обновить экран
display.update();
// Пауза 2 секунды
delay(2000);
}
Загружаем скетч на плату Arduino.
Пример использования
В качестве примера рассмотрим использование OLED-дисплея в качестве экрана часов.
Нам потребуются следующие компоненты:
- Плата Arduino Uno -1;
- Плата прототипирования – 1;
- OLED-дисплей 0.96″ — 1;
- Модуль часов реального времени DS3231 — 1;
- Провода.
Схема соединения элементов показана на рис. 6.
Рисунок 6. Схема соединений часов на OLED-дисплее
В скетче получаем время с микросхемы DS3231, форматируем и выводим на дисплей. Используем два вида шрифтов:
SmallFont – для вывода времени и даты;
RusFont – для вывода дня недели.
Содержимое скетча представлено в листинге 3.
Листинг 3
// подключение библиотек
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <OLED_I2C.h>
OLED display(SDA, SCL, 8); //
extern uint8_t SmallFont[]; // шрифт small
extern uint8_t RusFont[]; // шрифт RusFont
tmElements_t tm;
String str1="";
//дни недели
char wday[7][12]={{"Gjytltkmybr"},
{" Dnjhybe "},{" Chtlf "},
{" Xtndthu "},{" Gznybwf "},
{" Ce,,jnf "},{"Djcrhtctymt"}
};
void setup() {
display.begin();
}
void loop() {
if (RTC.read(tm)) {
// Стираем все с экрана
display.clrScr();
// Выбираем шрифт
display.setFont(SmallFont);
// строка время
str1="";
str1=str1+ printf2 (tm.Hour);
str1=str1+":";
str1=str1+ printf2 (tm.Minute);
str1=str1+":";
str1=str1+ printf2 (tm.Second);
display.print(str1, CENTER, 10);
// строка дата
str1="";
str1=str1+ printf2 (tm.Day);
str1=str1+"/";
str1=str1+ printf2 (tm.Month);
str1=str1+"/";
str1=str1+String(tmYearToCalendar(tm.Year));
display.print(str1, CENTER, 22);
display.setFont(RusFont);
// строка день недели
display.print(wday[tm.Wday], CENTER, 34);
// Обновляем информацию на дисплее
display.update();
}
delay(1000);
}
// вывод с добавлением до двух цифр
String printf2(int nn) {
String snn="";
if (nn >= 0 && nn < 10)
{snn="0";}
snn=str+String(nn);
return snn;
}
Загружаем скетч на плату и проверяем работу.
Часто задаваемые вопросы FAQ
1. Нет вывода данных на дисплей- Проверьте подано ли питание на дисплей.
- Проверьте правильность подключения контактов SDA и SCL.