Главная » Ардуино » OLED дисплей — использование с Ардуино

OLED дисплей — использование с Ардуино

OLED дисплеи не так давно стали завоевывать рынок дисплеев, используемых в сочетании с платой Ардуино. Их цена неуклонно падает. По сравнению с классическими буквенно-цифровыми дисплеями они имеют более высокое разрешение, компактные размеры. Даже самые дешевые модели обеспечивают отображения графики.

Для познания тонкостей этих дисплеев мы воспользуемся моделью OLED дисплея с разрешением 128x32px. Данная модель  OLED-дисплея основана на чипе SSD1306. Подключение с Ардуино осуществляется с помощью I2C шины.

Программа и библиотеки

Для поддержки OLED-дисплеев доступно множество библиотек, но мы можем выделить две наиболее популярные:

  • Adafruit_SSD1306 – позволяет работать в основном с дисплеями на основе контроллера SSD1306;
  • U8glib — имеет гораздо больший список поддерживаемых контроллеров.

Из-за универсальности библиотеки U8glib мы поработаем именно с ней. После того, как мы загрузим библиотеку, можно перейти к примеру “Hello World”.

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

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

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI

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

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

#include "U8glib.h"
U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI
void draw(void) {
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr( 0, 22, "Hello World!");
}
void setup(void) {
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}
void loop(void) {
  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );
  delay(50);
}

Расположение элементов на макетной плате

Само подключение дисплея к Ардуино не представляет особой сложности, всего 4 провода, два — силовая часть, следующие два — провода для подключения шины I2C. Макет должен выглядеть, как показано ниже.

OLED дисплей - использование с Ардуино

Когда мы соберем всю систему, мы сможем загрузить программу в Ардуино. После загрузки на нашем дисплее должно появиться слово «Hello World!».

Модификация кода для наших проектов

Когда мы хотим проверить, работает ли дисплей или правильно ли он подключен к плате, нам достаточно примера «Hello World!». Но когда мы хотим создать проект или устройство, которое будет отображать информацию на OLED дисплее, стоит научиться использовать его и отображать информацию так, как это нам необходимо.

Из-за того, что дисплей не самый большой, мы немного уменьшим размер шрифта и выведем текст в виде нескольких слайдов, последний исчезнет за экраном.

В библиотеке мы не можем уменьшить шрифт с помощью команды, как в HTML. Мы выбираем только определенный шрифт для наших нужд, каждый шрифт имеет только один размер, и мы не можем его масштабировать.

 #include "U8glib.h"
U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI 
void setup(void) {}
void loop(void) {
u8g.firstPage(); //очистить экран и подготовить к отображению новой страницы
do {
u8g.setFont(u8g_font_7x14); //выбор шрифта
u8g.drawStr(0,10,"Вот как это выглядит"); //текст отображается с позиции x0 z10
u8g.drawStr(0,22,"первая страница");  //отобразить текст с позиции x0 z22
}
while( u8g.nextPage());
delay(5000);
 u8g.firstPage();  
do {
int odczyt = analogRead(A0); //создание переменной
u8g.setFont(u8g_font_helvR08); //выбор шрифта
u8g.drawStr(0,8,"Здесь мы можем");
u8g.drawStr(0,20,"читать статус");
u8g.drawStr(0,30,"пина A0");
u8g.setPrintPos(55,30); //установка места отображения данных
u8g.print(odczyt); //отображение данных
}
while( u8g.nextPage());
delay(5000);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(0,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(10,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(20,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(30,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(40,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(50,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(60,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(70,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(80,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(90,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(100,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(110,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(120,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(150);
 u8g.firstPage();
do {
u8g.setFont(u8g_font_helvR08);  
u8g.drawStr(130,8,"НАДПИСЬ");
}
while( u8g.nextPage());
delay(4000);
}

После загрузки программы в Ардуино, должна появиться программа, которую мы определили ранее. На экране мы увидим первую страницу, вторую страницу с данными с пина A0 и третью страницу с движущейся надписью.

Обладая знаниями из сегодняшнего руководства, мы можем свободно использовать OLED-дисплеи и чрезвычайно обширную библиотеку u8glib.

Источник

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

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*