Объявление

США начнут предпринимать меры экономического и военного характера, если Россия не прекратит нарушать Договор о ракетах средней и меньшей дальности (ДРСМД)

Решение главы Национального Объединения "Новая Россия - Великая Россия" Rommstaina: http://russianew.ru/viewtopic.php?f=120&t=4039

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
Администратор
 
Сообщений: 79
Зарегистрирован: 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) Скачиваний: 364
Adafruit_SSD1306-master.zip
Adafruit_SSD1306
(21.79 KiB) Скачиваний: 367
Adafruit-GFX-Library-master.zip
Adafruit-GFX-Library
(275.67 KiB) Скачиваний: 367
admin
Администратор
 
Сообщений: 79
Зарегистрирован: 27 ноя 2016, 18:21
ТегиArduino. Подключаем OLED дисплей. Дополнение.


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

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

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

cron
/