Подключение матричного дисплея MAX7219 к ESP32 с помощью ESP-IDF


В данной статье мы рассмотрим подключение матричного дисплея MAX7219 к плате ESP32 с помощью ESP-IDF. Мы начнем с краткого описания светодиодной матрицы и ее взаимодействия с платой разработки ESP32, а затем перейдем к программированию ESP32 в VS Code с помощью расширения ESP-IDF. Мы продемонстрируем, как отображать различные символы и цифры на светодиодном точечно-матричном дисплее, который представляет собой массив светодиодов, обычно используемый для отображения различных типов текста, символов и изображений в виде точек (светодиодов).

Ранее на нашем сайте мы рассматривали подключение светодиодного матричного дисплея MAX7219 к плате Arduino.

Светодиодный матричный дисплей MAX7219

Светодиодный матричный дисплей MAX7219 широко используется в электронных проектах и ​​выпускается в двух вариантах. Один тип известен как FC-16, а другой — как универсальный модуль.

Типы модулей MAX7219

Каждый модуль матрицей светодиодов MAX7219 состоит из двух элементов: матрицы 8×8 и микросхемы драйверов MAX7219, которая является одной из самых популярных микросхем для дисплеев. Матрица 8×8 состоит из 8 светодиодов в каждой строке и столбце, что в сумме составляет 64 светодиода, где каждая «точка» представляет собой светодиод. Каждому светодиоду (точке) соответствует номер строки и столбца.

Распиновка матричного дисплея MAX7219

Как видно на приведенной выше схеме, модуль MAX7219 имеет 5 контактов, состоящих из двух контактов питания (VCC и GND) и трех контактов связи SPI (DIN, CS и CLK). Кроме того, модуль содержит два набора этих контактов с обеих сторон, образующих входные и выходные соединения. Оба типа модулей, FC-16 и универсальный модуль, имеют одинаковые соединения с обеих сторон.

Давайте кратко обсудим обе эти связи.

Входные соединения

Контакты входного разъема подключены к микроконтроллеру, которым в нашем случае является плата разработки ESP32.

VCC Это вывод, подающий питание на светодиодный матричный модуль MAX7219. Чтобы установить яркость на половину, подключите его к выводу Vin микроконтроллера ESP32.
GND Общий провод (земля)
DIN Это данные, поступающие на контакт, используемый в SPI-связи между микроконтроллером и светодиодным модулем. Он действует как входной контакт SPI.
CS Это контакт выбора микросхемы в интерфейсе SPI.
CLK Это вывод тактового сигнала последовательного интерфейса SPI.

Теперь перейдем к выходным контактам.

Выходные соединения

Если необходимо соединить несколько модулей MAX7219 вместе, используются выходные контакты. Они предлагают тот же набор из пяти контактов, что и входные, за исключением того, что вместо входного контакта данных используется контакт вывода данных.

VCC Этот контакт соединен с контактом VCC следующего подключенного модуля.
GND Этот контакт соединен с контактом GND следующего подключенного модуля.
DOUT Это контакт данных, который соединен с контактом данных (DIN) следующего подключенного модуля.
CS Этот контакт соединяется с контактом CS следующего подключенного модуля.
CLK Этот контакт соединяется с контактом CLK следующего подключенного модуля.

С распиновкой дисплея разобрались, теперь рассмотрим епе его подключить к плате ESP32.

Подключение матричного дисплея MAX7219 к плате ESP32

Для подключения платы ESP32 к светодиодному матричному модулю MAX7219 нам потребуются следующие компоненты:

  1. Плата ESP32.
  2. Модуль MAX7219.
  3. Соединительные провода.

Для сопряжения светодиодной матрицы MAX7219 с ESP32 мы будем использовать интерфейс SPI отладочной платы. Отладочная плата ESP32 поставляется с двумя универсальными контроллерами SPI. Эти контроллеры SPI могут быть сконфигурированы для использования в качестве ведомых узлов, управляемых внешним SPI-мастером. Они известны как SPI2 (HSPI) и SPI3 (VSPI). Оба имеют отдельные сигнальные шины. Следовательно, мы можем использовать их по отдельности как в качестве мастера, так и в качестве ведомого устройства. Каждая шина может управлять до тремя SPI-устройствами или ведомыми устройствами в режиме контроллера.

В таблице ниже показаны стандартные контакты SPI ESP32 для обоих каналов.

SPI-канал MOSI MISO SCK/CLK CS/SS
VSPI GPIO23 GPIO19 GPIO18 GPIO5
HSPI GPIO13 GPIO12 GPIO14 GPIO15

Соединения между устройствами указаны в таблице ниже:

Контакты модуля MAX7219 ESP32
VCC Контакт VCC будет соединен с контактом Vin (5 В) платы ESP32.
GND Общий провод (земля) с ESP32
DIN Этот вывод предназначен для приема данных по протоколу SPI. Мы подключим его к GPIO23, который является стандартным выводом SPI MOSI в ESP32.
CS Этот вывод — это контакт выбора микросхемы по протоколу SPI. Мы подключим его к GPIO5, который является стандартным выводом SPI CS в ESP32.
CLK Этот вывод является контактом тактового сигнала последовательного интерфейса SPI. Мы подключим его к GPIO18, который является выводом тактового сигнала SPI по умолчанию в ESP32.

Подключите модуль MAX7219 к плате разработки ESP32, как показано на схеме ниже. Здесь мы используем модуль FC-16, состоящий из четырех блоков.

Схема подключения матричного дисплея MAX7219 к плате ESP32

Использование ESP-IDF для подключения модуля MAX7219 к ESP32

Мы создадим проект в VS Code с расширением ESP-IDF, чтобы показать, как легко программировать ESP32 с модулем MAX7219. Код будет отображать различные изображения и числа на светодиодной матрице в режиме прокрутки. Мы будем использовать библиотеку MAX7219, предоставленную UncleRus на GitHub.

Создание примера проекта

Откройте VS Code и перейдите в меню View > Command Palette («Вид» > «Палитра команд»). Введите в строке поиска ESP-IDF: New Project и нажмите Enter.

Укажите название проекта и каталог, а также плату и целевое устройство ESP-IDF. Для платы ESP-IDF мы выбрали опцию custom board ("пользовательская плата"). Для целевого устройства ESP-IDF мы выбрали модуль ESP32. Нажмите кнопку ‘Choose Template’ ("Выбрать шаблон"), чтобы продолжить.

В разделе «Расширение» выберите опцию ESP-IDF:

Выбор опции ESP-IDF в разделе Extension («Расширение»)

На вкладке get-started («Начало работы») мы щелкнем по пункту «sample_project». Затем нажмем ‘Create project using template sample_project’) («Создать проект, используя шаблон sample_project»).

Создание проекта с использованием шаблона sample_project

Вы получите уведомление о создании проекта. Чтобы открыть проект в новом окне, нажмите «Да».

Это откроет проект, который мы создали на вкладке «Проводник». Внутри папки проекта находится несколько папок. Это справедливо для каждого проекта, который вы будете создавать с помощью ESP-IDF Explorer.

Для начала добавим необходимые заголовочные файлы для библиотек, требуемых для этого проекта. Создайте новую папку с названием «components» и добавьте в неё файлы, перечисленные ниже:

  1. max7219.c
  2. max7219.h
  3. max7219_priv.h
  4. CMakeLists.txt

Эти файлы можно скачать по этой ссылке на GitHub.

max7219.c

max7219.h

max7219_priv.h

CMakeLists.txt

Теперь перейдите к файлу main.c. В папке main находится исходный код, то есть файл main.c будет находиться здесь. Перейдите в папку main > main.c и откройте его. Скопируйте приведенный ниже код из этого файла и сохраните его.

Код ESP32 для работы с модулем MAX7219

Этот код можно также скачать по следующей ссылке.

Как работает код?

Для начала мы подключим необходимые для этого проекта библиотеки, включая библиотеки FreeRTOS для создания задач и генерации задержек, а также библиотеку max7219 для работы с матрицей светодиодов.

Далее мы добавим несколько определений, включающих размер каскада, который мы установили равным «1», поскольку будем использовать один модуль MAX7214.

Контакты SPI для MOSI, CS и CLK установлены как GPIO23, GPIO5 и GPIO18 соответственно. Это также стандартные контакты SPI VSPI ESP32.

Далее мы создаём входную матрицу в виде 64-битных чисел в шестнадцатеричном формате. В данном случае состояние светодиодной матрицы 8×8 представляется в виде беззнакового целого числа (uint64_t). Символы изображают цифры от 0 до 9, а затем стрелки, указывающие вверх, вниз, вправо и влево. Эти изображения будут отображаться на светодиодной матрице.

Для формирования массива symbols[] мы использовали онлайн-редактор светодиодных матриц. Вы также можете использовать его для отображения предпочитаемых вами анимаций.

Размер символа/изображения рассчитывается путем вычитания из общего размера светодиодной матрицы размера используемых модулей (CASCADE_SIZE).

Внутри функции task() мы сначала настраиваем и инициализируем шину SPI, а затем настраиваем и инициализируем устройство MAX7219 для отображения анимации на светодиодной матрице.

Для настройки шины SPI мы создаём структуру конфигурации SPI spi_bus_config_t. Она будет содержать параметры шины SPI, включая используемые контакты. После этого мы инициализируем шину SPI с помощью структуры конфигурации SPI, вызвав функцию spi_bus_initialize(). Эта функция инициализации главной шины принимает три параметра: идентификатор хоста, указатель на структуру конфигурации шины и канал DMA.

Далее мы настроим устройство MAX7219, задав параметры структуры дескриптора дисплея max7219_t. Она содержит размер каскада, доступные разряды и состояние горизонтального зеркального дисплея. После этого мы инициализируем модуль MAX7219, вызывая функции max7219_init_desc() и max7219_init() одновременно. Первая функция инициализирует устройство на шине SPI, принимая в качестве параметров указатель на структуру max7219_t, идентификатор хоста, тактовую частоту устройства и набор контактов SPI CS. Вторая функция принимает в качестве параметра указатель на структуру max7219_t.

Внутри бесконечного цикла while мы будем использовать цикл for для отображения изображений на светодиодной матрице с задержкой в ​​0,5 секунды. Функция max7219_draw_image_8x8() вызывается внутри цикла for и в нашем случае выполняется один раз, поскольку CASCADE_SIZE установлен равным 1. Эта функция принимает три параметра: указатель на структуру max7219_t, позицию начальной цифры и 64-битный буфер с данными изображения.

Внутри функции app_main() задача создается путем вызова функции xTaskCreatePinnedToCore().

Компиляция скетча

Для прошивки микросхемы введите следующую команду в последовательном терминале. Не забудьте заменить COM-порт на тот, через который подключена ваша плата.

После успешной прошивки кода светодиодная матрица MAX7219 Dot начинает многократно отображать различные цифры и стрелки.

(Проголосуй первым!)
Загрузка...
1 просмотров

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

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