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

 



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, дисплеи




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

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

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