Объявление

Внимание!
Данный форум предназначен только для радиолюбителей!
Никакие прочие объявления, реклама товаров либо услуг невозможны!


Любой спам на нашем форуме запрещён!
Разрешаются только ссылки по темам! 3а нарушения БАН.


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

Правила форума
Внимание! Любой спам на нашем форуме запрещён!
Коммерческая реклама сайтов, ссылки, спам запрещены. Так же запрещены ссылки на сайты в профилях новичков.
Бан без предупреждений.

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

Сообщение admin » 03 дек 2016, 13:13

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

Столкнулся я с этим экранчиком, когда прикидывал набор электроники для «Умной грядки». Заказан он был, как и большинство комплектующих, на 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 .

Если вы видете следующее:
phpBB [video]


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

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

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

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

вывод на экран —
Код: выделить все
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 пока этих знаний хватит.

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

Изображение
admin
Администратор
 
Сообщений: 56
Зарегистрирован: 27 ноя 2016, 18:21
ТегиArduino. Подключаем OLED дисплей

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

Сообщение admin » 04 дек 2016, 20:25

Принципиальная схема, от модуля универсального, 7 пинового (SPI/I2C):

Изображение

OLED графический монохромный дисплей SSD1306
0,96'' I2C 128x64


Характеристики
Тип дисплея: OLED (на основе органических светодиодов);
Разрешение экрана: 128x64;
Угол обзора: > 160°;
Высокий коэффициент контрастности ( 10000: 1 );
Малое время отклика < 10 мкс
Низкое энергопотребление: до 0.08W (При свечении всего экрана);
Яркость ( кд / м2 ) 120(min)
Напряжение: 3V и 5V;
Широкий рабочий температурный диапазон (-40 ℃ ~ 85 ℃ )
Размер: 27.0mm x 27.0mm x 4.1mm;
I2C/IIC Интерфейс;
Встроенный драйвер IC: SSD1306.

Изображение

Сам дисплей поддерживает три вида интерфейса:
— 8-bit 6800/8080-series parallel interface
— 3 /4 wire Serial Peripheral Interface
— I2C Interface

Изображение

На плате установлен стабилизатор напряжения XC6206 в корпусе SOT-23 с надписью «662k»

MEGA 2560.........Arduino UNO R3......Arduino Leonardo........OLED I2C дисплей
Pin 20....................Pin A4...................Pin 2.................SDA
Pin 21....................Pin A5...................Pin 3.................SCL
GND.......................GND.....................GND.................GND
+5V........................+5V.....................+5V..................+5V

Скетч

Для работы необходимо загрузить библиотеки и подключить их к Arduino. Скачиваем и распаковываем архив в папку Arduino с libraries. Потребуются библиотеки Adafruit_SSD1306, Adafruit-GFX-Library, Wire и SPI.



Запускаем Arduino и выбираем Файл→Примеры→Adafruit_SSD1306-master→ssd1306_128x64_i2c.

Если ничего не происходит, то попробуйте поменять адрес с 0x3D на 0x3С в строке:

display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // initialize with the I2C addr 0x3D (for the 128x64)



если всё же дисплей никак не отреагировал и ничего не отображает, тогда загружаем скетч MultiSpeedI2CScanner http://studio-diy.3dn.ru/MultiSpeedI2CScanner.ino

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

Копируем адрес нашего OLED l2C дисплея и в тестовом скетче находим строку с записью адреса нашего дисплея и меняем на найденный адрес.

Изображение

Если появится желание добавить свою картинку, то можно воспользоваться программой LCD Assistant

Сначала сделайте свою картинку с помощью какого-либо графического редактора , таких как Photoshop или Paint и сохраните как монохромное изображение в формате *.BMP. Загрузите изображение в LCD Assistant http://studio-diy.3dn.ru/LCDAssistant.zip Более подробно по использованию графики будет немного позже в отдельной статье.

Изображение

Изображение
Вложения
Wire.zip
Wire
(14.38 KiB) Скачиваний: 179
Adafruit_SSD1306-master.zip
Adafruit_SSD1306
(21.79 KiB) Скачиваний: 184
Adafruit-GFX-Library-master.zip
Adafruit-GFX-Library
(275.67 KiB) Скачиваний: 176
admin
Администратор
 
Сообщений: 56
Зарегистрирован: 27 ноя 2016, 18:21
ТегиArduino. Подключаем OLED дисплей. Дополнение.


Вернуться в Для новичков. Азы.

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron
/