цифровая электроника
вычислительная техника
встраиваемые системы

 

ESP8266 и OLED-дисплей: отображаем растровое изображение

Автор: Mike(admin) от 29-05-2019, 03:35

Органические светоизлучающие диоды (OLED) – это своего рода диоды, в которых светоизлучающий слой, состоящий из органического соединения, излучает свет при подаче электрического тока. Этот слой размещен между двумя электродами. Данная технология используется в экранах дисплеев устройств, таких как компьютеры, телевизоры, смартфоны и т. д. Дисплеи OLED имеют собственный источник света и не нуждаются в какой-либо подсветке, как в случае с ЖК-дисплеем, поэтому они энергоэффективны и используются со многими микроконтроллерами.


ESP8266 и OLED-дисплей

В этом примере мы будем связывать OLED-дисплей с NodeMCU ESP8266. NodeMCU – это платформа Интернета вещей, работающая на основе недорогого чипа ESP8266 с поддержкой Wi-Fi. Он имеет контакты GPIO для подключения других периферийных устройств и поддерживает последовательную связь с помощью контактов SPI, I2C и UART.


В данном проекте вместе с ESP8266 мы будем использовать монохромный 7-выводной OLED-дисплей SSD1306 размером 0,96 дюйма, который имеет 128 пикселей по ширине и 64 пикселей по длине. Этот дисплей может работать как с протоколом связи SPI, так и с протоколом I2C. Мы будем использовать протокол SPI в этом уроке. На этом OLED присутствует микросхема SSD1306, которая помогает отображать пиксели на экране. Схема подключения NodeMCU ESP8266 и OLED-дисплея SSD1306 показана далее.


ESP8266 и OLED-дисплей

Вывод GND поступает на линию GND NodeMCU, вывод VDD может быть подключен к 3,3 В или 5 В, SCK – это вывод синхронизации на OLED-дисплее, который подключен к D5 NodeMCU для синхронизации SPI. Вывод SDA, который является выводом MOSI на OLED-дисплее для интерфейса SPI, поступает на D7 NodeMCU. Вывод RESET подключен к D3. DC, вывод команды данных подключен к D2 NodeMCU. Последний вывод – CS для выбора микросхемы идет к D8.


Здесь мы будем использовать библиотеки «Adafruit _SSD1306.h» и «Adafruit_GFX.h» для взаимодействия OLED с NodeMCU. Откройте Arduino IDE и установите последнюю версию из Arduino IDE (Скетч – Включить библиотеку – Управление библиотеками или нажмите Ctrl + Shift_I).


ESP8266 и OLED-дисплей

Поскольку размер в пикселях нашего OLED-дисплея равен 128x64, поэтому мы должны внести изменения в заголовочный файл Adafruit_SSD1306. Откройте библиотеки Arduino, перейдите к Adafruit_SSD1306 и откройте его заголовочный файл (Adafruit _SSD1306.h). Закомментируйте строку «#define SSD1306_128_32» и раскомментируйте строку «#define SSD1306_128_64», как показано на рисунке ниже, а затем сохраните файл. По умолчанию эта библиотека поставляется с «#define SSD1306_128_32».


ESP8266 и OLED-дисплей

Наконец, измените номера контактов в примере Adafruit SSD1306 «ssd1306_128x64_spi» в соответствии со схемой подключения, приведенной выше. Теперь, когда вы запустите скетч после правильного подключения OLED-дисплея к NodeMCU, вы увидите логотип Adafruit на OLED-дисплее, который по умолчанию сохраняется в библиотеке. После логотипа Adafruit отображается много других графических элементов, таких как линии, прямоугольники, треугольники, круги, строки, числа, анимация и растровые изображения. Здесь в этом уроке мы научимся отображать любое изображение на OLED с помощью NodeMCU ESP8266.


ESP8266 и OLED-дисплей

Полный код программы приводится в конце. Здесь поясним некоторые основные функции, используемые в коде. Дисплей OLED-экрана очищается перед отображением чего-либо, вызывая функцию display.clearDisplay(). Мы устанавливаем размер шрифта равным 2, вызывая функцию setTextSize(font-size), и устанавливаем цвет текста и положение курсора с помощью функций setTextColor и setCursor. Команда Display.display() используется для передачи данных во внутреннюю память контроллера SSD1306. После передачи пиксель появляется на экране. Теперь мы можем начать прокручивать текст различными способами, вызывая display.startscrollright(x-pos, y-pos) и display.startscrollleft(x-pos, y-pos) в течение времени, указанного в функции задержки. Прокрутка текста может быть остановлена с помощью функции display.stopscroll().


Мы вызываем функцию display.drawBitmap(), которая принимает 6 параметров (координата x, координата y, массив растровых изображений, ширина, высота и цвет) для рисования изображения на OLED. Так как наш размер дисплея 128х64, поэтому мы устанавливаем ширину и высоту как 128 и 64 соответственно. Здесь массив растровых изображений содержит информацию о пикселях, чтобы нарисовать пиксель на экране для создания изображения. Этот растровый массив может быть сгенерирован с помощью онлайн-инструментов, также имеется много программ для преобразования изображения в растровый массив. Растровое изображение в режиме онлайн может быть сгенерировано с помощью http://javl.github.io/image2cpp/. Загрузите файл изображения, который вы хотите отобразить на OLED и установите размер 128x64. Будет показано предварительное изображение, а затем будет создан массив растровых изображений.


ESP8266 и OLED-дисплей

ESP8266 и OLED-дисплей

Наконец загрузите полный код в NodeMCU ESP8266, и вы увидите изображение, отображаемое на OLED-экране.


ESP8266 и OLED-дисплей

Полный код программы:



#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // ширина в пикселях
#define SCREEN_HEIGHT 64 // высота в пикселях
// линии 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);
const unsigned char myBitmap [] PROGMEM = {
  0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 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, 0x00, 0xff, 0xff, 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, 0x7f, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0x80, 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0xff, 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, 0xf0, 0x00, 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, 0xff, 0x80, 0x3f, 0xff, 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, 0x00, 0x03, 0xe0, 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, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0x80, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0x80, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x01, 0xff, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xf8, 0x03, 0xff, 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, 0x00, 0xff, 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, 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, 0xff, 
  0x80, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0x80, 0x00, 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, 0x01, 0xfe, 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, 0x03, 0xff, 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, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xf8, 0x03, 0xff, 0xc0, 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, 0xff, 
  0xfe, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0x00, 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, 
  0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xe0, 0x00, 0x00, 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, 0xff, 0xff, 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, 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, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x00, 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
};
void setup() {
  Serial.begin(9600);
  // SSD1306_SWITCHCAPVCC = внутренняя генерация напряжения 3,3 В на дисплее
  if(!display.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Не продолжать, бесконечный цикл
  }
  // Показать начальное содержимое буфера на экране -
  // библиотека инициализирует это с помощью заставки Adafruit.
  //display.display();
  //delay(2000); // Пауза на 2 секунды
  // Очистить буфер
  display.clearDisplay();
  testscrolltext();
  // Очистить буфер
  display.clearDisplay();
  // Отображать растровое изображение
  display.drawBitmap(35, 0,  myBitmap, 128, 64, BLACK, WHITE);
  display.display();
}
void loop() {
}
void testscrolltext(void) {
  display.clearDisplay();
  display.setTextSize(2); // Отобразить двумерный текст
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println(F("CIRCUIT"));
  display.println(F("DIGEST"));
  display.display();      // Показать исходный текст
  delay(100);
  // Прокрутим в разных направлениях, делая паузу между ними:
  display.startscrollright(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrollleft(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrolldiagright(0x00, 0x07);
  delay(2000);
  display.startscrolldiagleft(0x00, 0x07);
  delay(2000);
  display.stopscroll();
  delay(1000);
}



© digitrode.ru


Теги: ESP8266, OLED, дисплеи



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий