Столкнулся я с этим экранчиком, когда прикидывал набор электроники для «Умной грядки». Заказан он был, как и большинство комплектующих, на Aliexpress «на всякий случай». И вот этот случай настал.
Сейчас технология OLED (Organic Light Emitting Device –органическое светоизлучающее устройство) достаточно популярны, т.к. имеют ряд преимуществ перед предыдущим поколением. А именно: высокая яркость, малая потребляемая мощность, широкий угол обзора, отличную контрастность. Кроме того, они достаточно компактны и имеют длительный срок службы. То есть для использования в DIY устройствах на автономном питании это просто находка.
Заказывался вот такой девайс — 0.96 » I2C IIC серийный 128 X 64 OLED из светодиодов дисплей модуль для Arduino
Но мне достался вот такой экземпляр:
[img]http://smart-el.ru/wp-content/uploads/2015/02/4-шт-лот-0-96-SPI-интерфейс-128-64-OLED-синий-желтый-жк-дисплей-для-проекта.jpg_640x640.jpg[/img]
Сразу скажу, что наши соратники из Поднебесной не очень ответственно подошли к производству, и напутали обозначения на плате. Мне стоило двух вечеров, чтобы разгадать тайный смысл китайской маркировки. А именно:
Вывод CLK обозначен на плате как SCL;
Вывод MOSI обозначен на плате как SDA.
Выглядеть он должен так:
[img]http://smart-el.ru/wp-content/uploads/2015/02/3-3-В-5-В-0-96-жк-экран-модули-SPI-128-X-64-SSD1306-привод.jpg_640x640.jpg[/img]
Кстати заказывался экран как белый, а на поверку оказался желто-голубой.
Экранчик имеет стандартный 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_SSD1306
https://github.com/adafruit/Adafruit-GFX-Library 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 .
Если вы видете следующее:
то можно расслабиться и наблюдать захватывающие узоры демо-программы. (кстати никак нет времени досмотреть демку до конца :))) )
Но демка – демкой, а хочется же разобраться и в том, как использовать девайс более рационально.
Сам процесс вывода на экран заключается в трех процессах:
загрузка буфера- в зависимости от графических элементов;
вывод на экран —
- Код: выделить все
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()
{
}

Изображение на экране состоит из пикселей, начало координат (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/, а мне для проекта «Умная грядка» http://smart-el.ru/?p=579 пока этих знаний хватит.
Один из результатов мучений — Красиво работает, но не правильно:
