- OLED-дисплей
- Необходимые компоненты
- Подключение контактов SPI между NodeMCU и OLED-дисплеем
- Программирование NodeMCU для взаимодействия с OLED
- Преобразование изображения в значения растрового изображения
В этом руководстве мы будем сопоставлять OLED-дисплей с NodeMCU ESP8266. NodeMCU - это платформа IoT с открытым исходным кодом, которая включает прошивку, которая работает на недорогой Wi-Fi SoC ESP8266 Wi-Fi от Espressif Systems. Он имеет контакты GPIO для подключения других периферийных устройств и поддерживает последовательную связь с использованием контактов SPI, I2C и UART. Также на нем есть контакты для АЦП и ШИМ. Ранее мы сопрягали OLED с другим микроконтроллером, включая контроллер семейства ESP (ESP32):
- Подключение OLED-дисплея SSD1306 к Raspberry Pi
- Подключение OLED-дисплея SSD1306 к Arduino
- Создайте умные часы, подключив OLED-дисплей к телефону Android с помощью Arduino
- Интернет-часы с использованием ESP32 и OLED-дисплея
В этом руководстве мы будем использовать протокол SPI для взаимодействия монохромного 7-контактного дисплея SSD1306 0,96 OLED с NodeMCU и научимся отображать изображение на экране OLED с помощью NodeMCU ESP8266.
OLED-дисплей
Органический светоизлучающий диод (OLED) - это разновидность светоизлучающего диода, в котором светоизлучающий слой, состоящий из органического соединения, излучает свет при подаче электрического тока. Этот слой помещается между двумя электродами. Эта технология используется в экранах дисплеев, таких как компьютеры, телевизоры, смартфоны и т. Д. OLED-дисплеи имеют собственный свет и не нуждаются в подсветке, как ЖК-дисплеи, поэтому они энергоэффективны и используются со многими микроконтроллерами. Еще одно преимущество использования OLED-дисплеев перед ЖК-дисплеями - это отображение больших и более качественных изображений на OLED-дисплеях. Узнайте больше о технологии OLED-дисплеев здесь.
На рынке доступны различные виды OLED-дисплеев. Эти дисплеи различаются по цвету, количеству контактов, микросхеме контроллера и размеру экрана. В зависимости от цвета, OLED доступны в монохромном синем, монохромном белом и желто-синем цвете. А по принципу связи доступны в основном два типа OLED - 3pin и 7pin. 3-контактный OLED может использоваться в режиме связи I2C, а 7-контактный OLED может использоваться либо в режиме SPI, либо в режиме I2C.
В этом руководстве мы будем использовать « Монохромный 7-контактный SSD1306 0,96 » OLED-дисплей с шириной 128 пикселей и длиной 64 пикселя. Этот дисплей может работать по протоколам связи SPI и I2C. В этом руководстве мы будем использовать протокол SPI. На этом OLED-дисплее присутствует микросхема SSD1306, которая помогает отображать пиксели на экране.
Необходимые компоненты
- Монохромный 7-контактный SSD1306 0,96-дюймовый OLED-дисплей
- NodeMCU ESP8266
- Кабель Micro USB
- Макетная плата
- Перемычки между мужчинами и женщинами
Подключение контактов SPI между NodeMCU и OLED-дисплеем
Ниже приведена принципиальная схема подключения 7-контактного OLED-дисплея к NodeMCU для связи с использованием протокола последовательной связи SPI.
В таблице ниже показаны соединения между OLED-дисплеем и NodeMCU ESP8266. Вывод GND идет на NodeMCU GND, вывод VDD может быть подключен к 3,3 В или 5 В, SCK - это вывод синхронизации на OLED-дисплее, который подключен к D5 NodeMCU для синхронизации SPI. Вывод SDA, который является выводом MOSI на OLED интерфейса SPI, идет к D7 NodeMCU. Контакт RESET переходит в D3. DC, вывод команды данных подключен к D2 NodeMCU. Последний вывод CS идет к D8, выбор микросхемы NodeMCU.
Нет. |
Oled Display |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3,3 В |
3 |
SCK |
D5 |
4 |
MOSI (SPI) или SDA (I2C) |
D7 |
5 |
СБРОС |
D3 |
6 |
ОКРУГ КОЛУМБИЯ |
D2 |
7 |
CS |
D8 |
Здесь мы будем использовать библиотеки « Adafruit _SSD1306.h» и « Adafruit_GFX.h » для взаимодействия OLED с NodeMCU. Откройте Arduino IDE и установите последнюю версию из Arduino IDE ( Sketch> Include Library> Manage Libraries или Ctrl + Shift_I ).
Поскольку размер пикселя нашего OLED-дисплея с идентификатором 128x64, мы должны внести изменения в файл заголовка Adafruit_SSD1306. Откройте библиотеки Arduino, перейдите к Adafruit_SSD1306 и откройте его заголовочный файл ( Adafruit _SSD1306.h ). Закомментируйте строку « #define SSD1306_128_32 » и раскомментируйте строку «#define SSD1306_128_64 », как показано на изображении ниже, а затем сохраните файл. По умолчанию эта библиотека поставляется с «# define SSD1306_128_32 ».
Наконец, измените номера контактов в примере « ssd1306_128x64_spi » Adafruit SSD1306 в соответствии с таблицей, показанной выше. Теперь, когда вы запустите эскиз после правильного подключения OLED-дисплея к NodeMCU, вы увидите логотип Adafruit на OLED-дисплее, который по умолчанию сохраняется в библиотеке. После логотипа Adafruit он отображает много другой графики, такой как линии, прямоугольники, треугольники, круги, строки, числа, анимацию и растровые изображения. Здесь В этом руководстве мы узнаем, как отображать любое изображение на OLED с помощью NodeMCU ESP8266.
Программирование NodeMCU для взаимодействия с OLED
Как всегда, полный код предоставляется в конце, здесь мы подробно объяснили код.
Запустите код с импорта необходимых библиотек. Поскольку мы используем протокол SPI, мы импортируем библиотеку «SPI.h», а также импортируем «Adafruit_GFX.h» и «Adafruit_SSD1306.h» для OLED-дисплея.
#включают
Наш размер OLED - 128x64, поэтому мы устанавливаем ширину и высоту экрана 128 и 64 соответственно. Итак, определите переменные для выводов OLED, подключенных к NodeMCU для связи SPI.
#define SCREEN_WIDTH 128 // Ширина OLED-дисплея в пикселях #define SCREEN_HEIGHT 64 // Высота OLED-дисплея в пикселях // Объявление для дисплея SSD1306, подключенного с помощью программного интерфейса SPI (случай по умолчанию): #define OLED_MOSI D7 #define OLED_CLK D5 #define OLED_DC D2 #define OLED_CS D8 #define OLED_RESET D3 Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Инициализируйте OLED-дисплей, используя SSD1306_SWITCHCAPVCC для внутренней генерации 3,3 В для инициализации дисплея.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F («Ошибка выделения SSD1306»)); за(;;); // Не продолжать, цикл бесконечно }
Дисплей OLED-экрана очищается перед отображением чего-либо путем вызова функции display.clearDisplay (). Мы установить размер шрифта до 2 с помощью вызова функции setTextSize (размер шрифта), и установите цвет текста и позицию курсора с помощью SetTextColor и SetCursor функции . Команда Display.display () используется для передачи данных во внутреннюю память контроллера SSD1306. После передачи на экране появляется пиксель. Теперь мы можем начать прокрутку текста различными способами, вызвав display.startscrollright (x-pos, y-pos) и display.startscrollleft (x-pos, y-pos) на время, указанное в функции задержки. Прокрутку текста можно остановить с помощью функции display.stopscroll ().
void testscrolltext (void) {display.clearDisplay (); // очищаем экран дисплея от OLED display.setTextSize (2); // Рисуем текст в масштабе 2x display.setTextColor (WHITE); display.setCursor (0, 0); display.println (F ("ЦЕПЬ")); display.println (F («ДАЙДЖЕСТ»)); display.display (); // Показываем начальную задержку текста (100); // Прокрутка в различных направлениях с промежуточной остановкой: display.startscrollright (0x00, 0x0F); задержка (2000); display.stopscroll (); задержка (1000); display.startscrollleft (0x00, 0x0F); задержка (2000); display.stopscroll (); задержка (1000); display.startscrolldiagright (0x00, 0x07); задержка (2000); display.startscrolldiagleft (0x00, 0x07); задержка (2000); display.stopscroll (); задержка (1000); }
Мы вызываем функцию display.drawBitmap (), которая принимает 6 параметров (координата x, координата y, растровый массив, ширина, высота и цвет) для рисования изображения на OLED. Поскольку размер нашего дисплея 128x64, мы устанавливаем ширину и высоту 128 и 64 соответственно. Здесь массив растровых изображений содержит информацию о пикселях для рисования пикселя на экране для создания изображения. Этот массив растровых изображений может быть сгенерирован онлайн, что объясняется ниже, или существует много программного обеспечения для преобразования изображения в массив растровых изображений.
const unsigned char myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x01, 0xc0, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0x03, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1e, 0x03, 0x3f, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x03, 0x3f, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3c, 0x03, 0x7ff, 0xfe, 0xff, 0x0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0ff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x01, 0x01 0x00, 0x00, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xe0, 0x00, 0x0f, 0x00, 0x7e, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xc0, 0x3f, 0xfff, 0x80, 0x80, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xf9, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x80, 0xff, 0xf9, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0x03 0x06, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x0ff, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80 0x0f, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x01ff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1E, 0x01, 0xE0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1E, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3c, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7c, 0x03, 0x3f, 0xff, 0xff, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xf8, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00ff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80 0x03, 0xb0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0x18, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xbc, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x80, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc0, 0xff, 0x03, 0xff 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0xe0, 0x00, 0x1f, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x07, 0x70, 0x00, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xe0, 0x1b, 0xfc, 0x01, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0 0x7f, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x67, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x66, 0x00, 0x1f, 0x1f, 0x1f 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7e, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x00, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; display.drawBitmap (35, 0, myBitmap, 128, 64, ЧЕРНЫЙ, БЕЛЫЙ); display.display ();
Преобразование изображения в значения растрового изображения
Растровое изображение в Интернете можно сгенерировать из http://javl.github.io/image2cpp/. Загрузите файл изображения, который вы хотите отобразить на OLED-экране, и установите его размер 128x64. Будет показано изображение предварительного просмотра, а затем будет сгенерирован растровый массив.
На скриншотах ниже показан процесс создания значения растрового изображения любого изображения.
Наконец, загрузите полный код в NodeMCU ESP8266, и вы увидите изображение, отображаемое на OLED-экране. Здесь мы отображаем логотип CircuitDigest на OLED-дисплее.