Рубрики
Проекты на ESP8266

Подключение OLED дисплея SSD1306 к NodeMCU ESP8266

В данной статье мы рассмотрим подключение OLED дисплея SSD1306 к NodeMCU ESP8266. NodeMCU – это платформа IoT (интернета вещей) с открытым исходным кодом. Она включает в себя прошивку (firmware), которая работает на дешевом Wi-Fi чипе (SoC) ESP8266 от компании Espressif Systems, и аппаратном обеспечении (hardware), основанном на модуле ESP-12. NodeMCU ESP8266 содержит контакты общего назначения (GPIO) для подключения различных периферийных устройств и поддерживает последовательную связь по интерфейсам SPI, I2C и UART. Также она содержит контакты ШИМ (широтно-импульсной модуляции) и АЦП (аналого-цифрового преобразования).

Ранее на нашем сайте мы рассматривали применение OLED дисплея SSD1306 в следующих проектах:

В данной статье мы будем подключать по интерфейсу SPI монохромный 7-контактный OLED дисплей SSD1306 с диагональю 0.96 дюйма к плате NodeMCU ESP8266 и выводить на OLED дисплей заранее подготовленное растровое изображение.

Необходимые компоненты

  1. NodeMCU ESP8266 (купить на AliExpress).
  2. Monochrome 7-pin SSD1306 0.96” OLED display (монохромный 7-контактный OLED дисплей SSD1306 с диагональю 0.96 дюйма) (купить на AliExpress).
  3. Кабель Micro USB.
  4. Макетная плата.
  5. Соединительные провода «папа-папа».

Общие сведения об OLED дисплеях

OLED означает “Organic Light emitting diode“, что переводится как органический светоизлучающий диод, или, более коротко – органический светодиод. OLED дисплеи для радиолюбителей изготавливаются по той же самой технологии, что и большинство современных телевизоров, но имеют гораздо меньше пикселов по сравнению с ними. Но устройства на их основе (в том числе и с использованием Arduino) смотрятся потрясающе.

В нашем проекте мы будем использовать монохромный 7-пиновый SSD1306 0.96” OLED дисплей. Данный дисплей может работать с тремя разными протоколами связи, трехпроводный SPI (Serial Peripheral Interface — последовательный интерфейс) режим, четырехпроводный SPI режим и режим IIC. В данной статье мы рассмотрим его подключение по четырехпроводному SPI режиму как самому скоростному из приведенных.

Контакты дисплея и выполняемые ими функции описаны в следующей таблице.

Номер контакта Название контакта Альтернативное название контакта Назначение контакта
1 Gnd Ground земля
2 Vdd Vcc, 5V напряжение питания (в диапазоне 3-5 В)
3 SCK D0, SCL, CLK контакт синхронизации (clock pin). Применяется в интерфейсах I2C и SPI
4 SDA D1, MOSI контакт данных. Применяется в интерфейсах I2C и SPI
5 RES RST, RESET контакт сброса модуля. Применяется в интерфейсе SPI
6 DC A0 контакт команд (Data Command pin). Применяется в интерфейсе SPI
7 CS Chip Select (выбор чипа) используется когда несколько устройств взаимодействуют по интерфейсу SPI

Сообществом Arduino разработано достаточно много библиотек для работы с подобными дисплеями.

Схема проекта

Схема подключения OLED дисплея SSD1306 к плате NodeMCU ESP8266 представлена на следующем рисунке. Как видите, OLED дисплей к плате будет подключаться по интерфейсу SPI.

Контакт GND дисплея подключен к контакту NodeMCU GND, контакт VDD можно подключить к контакту 3.3V или 5V, контакт SCK (синхронизации) подключен к контакту D5 платы. Контакт SDA (MOSI) OLED дисплея подключен к контакту D7 платы NodeMCU. Контакт RESET дисплея подключен к контакту D2 платы. Контакт CS (chip select) дисплея подключен к контакту D8 платы NodeMCU.

Полная схема соединений между OLED дисплеем и платой NodeMCU приведена в следующей таблице.

OLED дисплей NodeMCU
GND GND
VDD 3.3V
SCK D5
MOSI (SPI) или SDA (I2C) D7
RESET D3
DC D2
CS D8

На этом схему проекта мы рассмотрели.

Подготовка к работе с OLED дисплеем

В нашем проекте мы будем использовать библиотеки “Adafruit _SSD1306.h” и “Adafruit_GFX.h” для подключения OLED дисплея к плате NodeMCU ESP8266. Откройте Arduino IDE и установите свежие версии этих библиотек используя пункт меню Sketch > Include Library > Manage Libraries (или нажмите Ctrl+Shift_I).

Размер нашего OLED дисплея составляет 128×64, поэтому мы должны внести соответствующие изменения в заголовочный файл библиотеки Adafruit_SSD1306. Для откройте каталог с библиотеками Arduino, в нем найдите библиотеку Adafruit_SSD1306 и откройте ее заголовочный файл (Adafruit _SSD1306.h). Закомментируйте в нем строку “#define SSD1306_128_32” и раскомментируйте строку “#define SSD1306_128_64” как показано на следующем рисунке. После этого сохраните файл. По умолчанию данная библиотека предназначена для работы с OLED дисплеями с разрешениями 128×32 пикселов.

Также смените номера контактов в тексте примера Adafruit “ssd1306_128x64_spi” в соответствии со схемой соединений нашего проекта (приведена выше). Теперь, если вы запустите текст этого примера на выполнение, вы увидите отображенное на экране дисплея лого компании Adafruit. После этого на экране дисплея будут последовательно отображаться линии, прямоугольники, треугольники, круги, строки, числа и анимация. В данном проекте мы рассмотрим как на экране данного OLED дисплея отобразить произвольное изображение. Коды программы для отображения на экране дисплея различных геометрических фигур, текста и т.д. вы можете взять их указанного примера работы с дисплеем – надеемся, в этом вопросе у вас не возникнет никаких трудностей.

Объяснение программы для NodeMCU ESP8266

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе мы подключим используемые библиотеки. Мы будем использовать библиотеку “SPI.h” для работы с интерфейсом SPI и библиотеки “Adafruit_GFX.h” и “Adafruit_SSD1306.h” для работы с OLED дисплеем.

Наш OLED дисплей имеет размеры экрана 128×64 пикселов, поэтому мы должны задать соответствующие параметры его ширины и высоты в программе. Также нам необходимо задать контакты NodeMCU, которые используются для связи с OLED дисплеем по интерфейсу SPI.

Далее инициализируем OLED дисплей используя параметр SSD1306_SWITCHCAPVCC – благодаря ему для инициализации дисплея будет использоваться внутреннее напряжение 3.3V.

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

Далее мы будем вызывать функцию display.drawBitmap() с 6-ю входящими в нее параметрами (координаты x и y, битовый массив (bitmap array), ширина, высота и цвет) чтобы отобразить изображение на экране OLED дисплея. Поскольку наш дисплей имеет разрешение 128×64 пикселов, то в качестве параметров ширины и высоты в эту функцию мы должны передать значения 128 и 64 соответственно. Битовый/растровый массив (bitmap array) содержит информацию о пикселах, которые необходимо отобразить на экране дисплея. Далее в статье мы рассмотрим как создать подобный массив для нашего изображения.

Конвертирование изображения в битовый массив

Произвести конвертирование необходимого изображения в битовый массив можно с помощью сервиса http://javl.github.io/image2cpp/. В него необходимо загрузить изображение, которое вы хотите отобразить на экране OLED дисплея и установить размер изображения равный 128×64. После этого в сервисе будет показано превью вашего изображение и для него будет сформирован битовый массив. Более наглядно весь этот процесс показан на следующих рисунках.

После того как аппаратная часть проекта будет готова, загрузите код программы в плату NodeMCU ESP8266, после этого вы на экране дисплея увидите нарисованное изображение. В нашем проекте мы в качестве этого изображения использовали лого сайта CircuitDigest (с него и была переведена данная статья).

Исходный код программы (скетча)

Источник статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *