Arduino. Подключаем OLED дисплей

Сегодня расскажу вам, уважаемые читатели, о том, как использовать замечательный девайс – OLED дисплей в связке с Arduino.

Столкнулся я с этим экранчиком, когда прикидывал набор электроники для «Умной грядки». Заказан он был, как и большинство комплектующих, на Aliexpress «на всякий случай». И вот этот случай настал.

Сейчас технология OLED (Organic Light Emitting Device –органическое светоизлучающее устройство) достаточно популярны, т.к. имеют ряд преимуществ перед предыдущим поколением. А именно: высокая яркость, малая потребляемая мощность, широкий угол обзора, отличную контрастность. Кроме того, они достаточно компактны и имеют длительный срок службы. То есть для использования в DIY устройствах на автономном питании это просто находка.

Заказывался вот такой девайс —   0.96 » I2C IIC серийный 128 X 64 OLED из светодиодов дисплей модуль для Arduino

Но мне достался вот такой экземпляр:

4-шт-лот-0-96-SPI-интерфейс-128-64-OLED-синий-желтый-жк-дисплей-для-проекта.jpg_640x640

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

Вывод CLK обозначен на плате как SCL;

Вывод MOSI обозначен на плате как SDA.

Выглядеть он должен так:

3-3-В-5-В-0-96-жк-экран-модули-SPI-128-X-64-SSD1306-привод.jpg_640x640

Кстати заказывался экран как белый, а на поверку оказался желто-голубой.

Экранчик имеет стандартный 4х проводной SPI интерфейс, питается напряжением 3.3-5 вольт и судя по характеристикам не «ест» аккумуляторную батарею, а только «нюхает».

  • Тип дисплея: OLED;
  • Разрешение экрана: 128×64;
  • Угол обзора: > 160°;
  • Энергопотребление: до 0.08W (При свечении всего экрана);
  • Напряжение: 3.3-5V;
  • Встроенный драйвер IC: SSD1306.

Подключается дисплей 6-ю проводами (сохранена маркировка от производителя):

OLED GND VCC SCL SDA RST D/C
Arduino UNO GND 5v D10 D9 D13 D11

 

Чтобы не вдаваться в дебри управления дисплеем по SPI шине, можно скачать готовые библиотеки с GitHub. Как обычно распаковываем их в папку libraries IDE Arduino.

https://github.com/adafruit/Adafruit_SSD1306

https://github.com/adafruit/Adafruit-GFX-Library

Для корректной работы нам понадобится указать разрешение экранчика, а именно изменить файл Adafruit_SSD1306.h :

//   #define SSD1306_128_64

   #define SSD1306_128_32

Меняем на:

#define SSD1306_128_64

//   #define SSD1306_128_32

Для проверки работоспособности экранчика можно воспользоваться скетч-примером, который идет в архиве с Adafruit_SSD1306. В моем случае это файл — ssd1306_128x64_spi.ino .

Если вы видете следующее:

https://youtu.be/DCbhZ0rN8Ew

то можно бежать за пивом расслабиться и наблюдать захватывающие узоры демо-программы. (кстати никак нет времени досмотреть демку до конца :)))  )

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

Сам процесс вывода на экран заключается в трех процессах:

загрузка буфера- в зависимости от графических элементов;

вывод на экран — display.display();

очистка экрана — display.clearDisplay();

 

Подключаем библиотеки, определяем выводы, выводим текст.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC   11
#define OLED_CS   12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void setup()
{
display.begin(SSD1306_SWITCHCAPVCC);
// text display
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(25,25);
display.println("www.smart-el.ru");
display.display();
delay(5000);
display.clearDisplay();
}
void loop()
{
}

HHmHJQE

 

 

Изображение на экране состоит из пикселей, начало координат (0,0) – верхний левый угол.

Засветим точку в верхнем левом углу экрана:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC   11
#define OLED_CS   12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

void setup()
{
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.drawPixel(10, 10, WHITE);
display.display();
delay(5000);
}

void loop()
{
}

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

 

Более подробно о других графических элементах можно почитать на сайте разработчика библиотек https://www.adafruit.com/, а мне для проекта «Умная грядка» пока этих знаний хватит.   🙂

Один из результатов мучений — Красиво работает, но не правильно:

imgpsh_fullsize

 

У меня все…

Комментируем, делимся с друзьями…

Посмотрите так же...
6 комментариев
  1. Vlad:

    Большое спасибо!
    У меня такой же, только я ему ума так и не смог дать!

  2. ivancredi#:

    задний стоп сигнал

  3. admin:

    интересная идея применения… 🙂

  4. StepDrimb:

    А мне из китая лопнутый привезли, был просто в бумажку завёрнут и в конверт положен. Менять отказались.

  5. admin:

    Если это Aliexpress, то надо было не подтверждать заказ и открывать спор.

  6. виталий:

    спасибо большое, с ардуино мега все работает, долго не мог найти работающую программу для теста дисплея

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*