Графический OLED дисплей 2.42 SPI белый
Графический OLED дисплей 2.42 SPI белый
Графический OLED дисплей 2.42 SPI белый
Графический OLED дисплей 2.42 SPI белый
Графический OLED дисплей 2.42 SPI белый
Графический OLED дисплей 2.42 SPI белый

Графический OLED дисплей 2.42 SPI белый

Арт. 14638

3 550

менее 10 шт.

Описание

Монохромный графический OLED-экран 2.4 дюйма с последовательным интерфейсом

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

  • Модель: M24S1309_02_V2
  • Напряжение питания: 3.3 вольта
  • Диагональ: 2.42 дюйма, 6.14 см
  • Тип экрана: монохромный OLED
  • Разрешение: 128 х 64 графических точек
  • Цвет: белый
  • Соотношение сторон: 2:1
  • Углы обзора: > 160°
  • Контроллер графики: SSD1309
  • Энергопотребление определяется яркостью:
    • 30%, 260 - 325 мВт
    • 50%, 345 - 470 мВт
    • 100%, 515 - 720 мВт
  • Интерфейс: 4-проводной последовательный периферийный, SPI
  • Активная область экрана: 55.01 х 27.49 мм
  • Подключение: разъём FPC 10х1.0мм, 10 контактов с шагом 2.54мм
  • Размеры модуля: 62.1 х 53.3 х 8 мм
  • Вес: 8.6 гр

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

Наиболее популярные на сегодняшний день экраны производятся по технологии TFT TN LCD - недорогие жидкокристаллические матрицы с фоновой светодиодной подсветкой. Экраны TFT TN LCD имеют ряд ограничений, среди которых выделяются невысокие углы обзора и контрастность. Альтернативная технология производства OLED-экранов (органический светодиод, светящийся при прохождении через него электрического тока) практически избавлена от подобных недостатков, обладает увеличенными показателями цветопередачи, настоящим глубоким чёрным цветом, малым весом ЖК-панелей и значительно расширенными углами обзора, предоставляя возможность с любой стороны просматривать изображения с максимальной четкостью, без видимых цветовых искажений. В экранных матрицах OLED, свечение излучают сами диоды, и им не требуется дополнительное освещение. По этой причине, дисплеи OLED можно называть эффективными в задачах экономии энергопотребления, что порой совсем немаловажно в проектах с использованием автономных источников питания.

Назначение контактов модуля с OLED-дисплеем

Несущая плата модуля позволяет подключать экран к передающему устройству двумя разными способами. Плата оснащена десятью стандартными контактными площадками-отверстиями с расстоянием 2.54мм (0.1 дюйма) и разъёмом FPC, совместимым с 10-пиновым плоским гибким ленточным кабелем с шагом между проводниками 1.0мм.

Символ Описание
1 VCC3.3 Питание логической схемы модуля 3.3 вольта.
2 VCC3.3 Питание логической схемы модуля 3.3 вольта.
3 EN Сигнал включения/отключения питания внутреннего OLED блока.
4 GND Заземление логической схемы модуля.
5 CS Сигнал выбора микросхемы Chip Select (SPI), активен на низком уровне.
6 RES Сигнал сброса Power Reset, генерируется выводом IO внешнего контроллера, активен на низком уровне.
7 D/C Сигнал данных/команд (Data/Command). Высокий уровень сигнала для данных и низкий уровень сигнала для команд. Генерируется выводом IO внешнего контроллера.
8 GND Заземление логической схемы модуля.
9 SCLK Сигнал тактирования Serial Clock (SPI). Генерируется выводом IO внешнего контроллера.
10 SDIN Сигнал входящих последовательных данных Serial Data Input (SPI). Генерируется выводом IO внешнего контроллера.

 

Схема подключения OLED-дисплея к Ардуино, примеры программирования

Схема соединения контроллера Arduino Due и модуля с OLED-экраном основана на стандартной 4-проводной последовательной шине SPI в периферийном режиме. В демонстрируемом примере, плата Due выбрана не случайно. Почти все её внутренние электрические цепи (кроме выводов питания +5В), включая контакты общего назначения GPIO, работают на номинальном рабочем напряжении 3,3 вольта. Именно на таком же логическом уровне функционирует и центральная микросхема SSD1309 со всеми компонентами модуля с жидкокристаллическим экраном. Плата экранного модуля имеет 10 выводов, каждый из которых промаркирован в соответствии с его непосредственным назначением.

Питание дисплея осуществляется через контакты VCC и GND, подключаемые к источнику постоянного напряжения 3,3 вольта. Вариантов запитать дисплейный модуль существует два: напрямую от платы контроллера, если общая нагрузка на последний не велика и не превышает в сумме 700мА, либо от произвольного внешнего стабилизированного блока питания. Например, удобно будет использовать понижающий преобразователь DC-DC, соединённый с общей линией питания платы контроллера Due.

Процесс передачи графической информации задействует 3 из 4 линий шины связи SPI: тактирование - SCLK (SPI_CLK), передача данных от Ардуино Due к дисплею - SDIN (SPI_MOSI) и выбор микросхемы - CS (SPI_CS). Контакты сигналов перезапуска экранного модуля RES и смены режимов передачи между командами и данными DC выбираются произвольно из группы выводов GPIO. Вывод EN по умолчанию подтянут к высокому уровню при включенном питании экрана. Входящий сигнал низкого уровня отключает встроенный блок OLED, тем самым дополнительно снижает энергопотребление и одновременно выключает изображение на экране.

  Схема подключения дисплея к Arduino Due  

 

В приведённом ниже скетче, инициализатором контроллера SSD1309 выступает подключаемая внешняя библиотека U8glib, доступная в репозитории совместимых загружаемых библиотек Arduino IDE и на сайте GitHub. Кроме графических процедур, программный код библиотеки U8glib располагает набором собственных интегрированных шрифтов с изменяемыми размерами. Текст скетча взят из раздела примеров библиотеки и наглядно демонстрирует основные функции работы с графикой.

#include "U8glib.h"

U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9, 8);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RES = 8

void u8g_prepare(void) {
  u8g.setFont(u8g_font_6x10);
  u8g.setFontRefHeightExtendedText();
  u8g.setDefaultForegroundColor();
  u8g.setFontPosTop();
}

void u8g_box_frame(uint8_t a) {
  u8g.drawStr( 0, 0, "drawBox");
  u8g.drawBox(5,10,20,10);
  u8g.drawBox(10+a,15,30,7);
  u8g.drawStr( 0, 30, "drawFrame");
  u8g.drawFrame(5,10+30,20,10);
  u8g.drawFrame(10+a,15+30,30,7);
}

void u8g_disc_circle(uint8_t a) {
  u8g.drawStr( 0, 0, "drawDisc");
  u8g.drawDisc(10,18,9);
  u8g.drawDisc(24+a,16,7);
  u8g.drawStr( 0, 30, "drawCircle");
  u8g.drawCircle(10,18+30,9);
  u8g.drawCircle(24+a,16+30,7);
}

void u8g_r_frame(uint8_t a) {
  u8g.drawStr( 0, 0, "drawRFrame/Box");
  u8g.drawRFrame(5, 10,40,30, a+1);
  u8g.drawRBox(50, 10,25,40, a+1);
}

void u8g_string(uint8_t a) {
  u8g.drawStr(30+a,31, " 0");
  u8g.drawStr90(30,31+a, " 90");
  u8g.drawStr180(30-a,31, " 180");
  u8g.drawStr270(30,31-a, " 270");
}

void u8g_line(uint8_t a) {
  u8g.drawStr( 0, 0, "drawLine");
  u8g.drawLine(7+a, 10, 40, 55);
  u8g.drawLine(7+a*2, 10, 60, 55);
  u8g.drawLine(7+a*3, 10, 80, 55);
  u8g.drawLine(7+a*4, 10, 100, 55);
}

void u8g_triangle(uint8_t a) {
  uint16_t offset = a;
  u8g.drawStr( 0, 0, "drawTriangle");
  u8g.drawTriangle(14,7, 45,30, 10,40);
  u8g.drawTriangle(14+offset,7-offset, 45+offset,30-offset, 57+offset,10-offset);
  u8g.drawTriangle(57+offset*2,10, 45+offset*2,30, 86+offset*2,53);
  u8g.drawTriangle(10+offset,40+offset, 45+offset,30+offset, 86+offset,53+offset);
}

void u8g_ascii_1() {
  char s[2] = " ";
  uint8_t x, y;
  u8g.drawStr( 0, 0, "ASCII page 1");
  for( y = 0; y < 6; y++ ) {
    for( x = 0; x < 16; x++ ) {
      s[0] = y*16 + x + 32;
      u8g.drawStr(x*7, y*10+10, s);
    }
  }
}

void u8g_ascii_2() {
  char s[2] = " ";
  uint8_t x, y;
  u8g.drawStr( 0, 0, "ASCII page 2");
  for( y = 0; y < 6; y++ ) {
    for( x = 0; x < 16; x++ ) {
      s[0] = y*16 + x + 160;
      u8g.drawStr(x*7, y*10+10, s);
    }
  }
}

void u8g_extra_page(uint8_t a)
{
  if ( u8g.getMode() == U8G_MODE_HICOLOR || u8g.getMode() == U8G_MODE_R3G3B2) {
    /* draw background (area is 128x128) */
    u8g_uint_t r, g, b;
    b = a << 5;
    for( g = 0; g < 64; g++ )
    {
      for( r = 0; r < 64; r++ )
      {
	u8g.setRGB(r<<2, g<<2, b );
	u8g.drawPixel(g, r);
      }
    }
    u8g.setRGB(255,255,255);
    u8g.drawStr( 66, 0, "Color Page");
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
  {
    u8g.drawStr( 66, 0, "Gray Level");
    u8g.setColorIndex(1);
    u8g.drawBox(0, 4, 64, 32);    
    u8g.drawBox(70, 20, 4, 12);
    u8g.setColorIndex(2);
    u8g.drawBox(0+1*a, 4+1*a, 64-2*a, 32-2*a);
    u8g.drawBox(74, 20, 4, 12);
    u8g.setColorIndex(3);
    u8g.drawBox(0+2*a, 4+2*a, 64-4*a, 32-4*a);
    u8g.drawBox(78, 20, 4, 12);
  }
  else
  {
    u8g.drawStr( 0, 12, "setScale2x2");
    u8g.setScale2x2();
    u8g.drawStr( 0, 6+a, "setScale2x2");
    u8g.undoScale();
  }
}

uint8_t draw_state = 0;

void draw(void) {
  u8g_prepare();
  switch(draw_state >> 3) {
    case 0: u8g_box_frame(draw_state&7); break;
    case 1: u8g_disc_circle(draw_state&7); break;
    case 2: u8g_r_frame(draw_state&7); break;
    case 3: u8g_string(draw_state&7); break;
    case 4: u8g_line(draw_state&7); break;
    case 5: u8g_triangle(draw_state&7); break;
    case 6: u8g_ascii_1(); break;
    case 7: u8g_ascii_2(); break;
    case 8: u8g_extra_page(draw_state&7); break;
  }
}

void setup(void) {

  //flip screen, if required
  //u8g.setRot180();

#if defined(ARDUINO)
  pinMode(13, OUTPUT);           
  digitalWrite(13, HIGH);  
#endif
}

void loop(void) {
  
  // picture loop  
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // increase the state
  draw_state++;
  if ( draw_state >= 9*8 )
    draw_state = 0;
  
  //rebuild the picture after some delay
  //delay(150);
}

Физические размеры OLED-модуля, мм

  Габаритные размеры экранного модуля OLED 2.4 дюйма SSD1309 128x64 белый с последовательным интерфейсом