Подключение ЖК дисплея 16x2 к ESP32 по интерфейсу I2C с помощью ESP-IDF


В этом уроке мы научимся подключать 16×2 I2C LCD (ЖК дисплей 16x2 с интерфейсом I2C) к плате ESP32 и отображать простой текст/цифры на I2C LCD с помощью ESP-IDF. Этот I2C LCD представляет собой устройство 16×2, что означает, что он может отображать 16 столбцов по две строки буквенно-цифровых символов на этом дисплее. LCD имеет обычный контроллер hd44780, а также подключенную к нему схему I2C, что упрощает его подключение к плате ESP32. Типичный 16×2 LCD имеет шестнадцать контактов, которые необходимо подключить к плате ESP32. При использовании I2C LCD количество контактов ограничено всего четырьмя, из которых два являются контактами питания (VCC, GND), а два других — контактами I2C (SCL, SDA). Таким образом, работать с этим 16×2 I2C LCD становится намного проще и удобнее, чем с обычным 16×2 LCD.

Прежде чем продолжить, убедитесь, что у вас установлена ​​последняя версия VS Code и настроено расширение ESP-IDF:

Также на нашем сайте вы можете прочитать статью про начало работы с ESP32 с использованием ESP-IDF.

Дополнительно на нашем сайте вы можете прочитать статью про подключение ЖК дисплея 16x2 к ESP32 по интерфейсу I2C с помощью Arduino IDE.

Интерфейс I2C ЖК дисплея для ESP32

Модуль контроллера I2C, показанный ниже, имеет 16 контактов, которые соединяются с контактами ЖК-дисплея 16×2. Переменный резистор, расположенный на модуле, используется для регулировки яркости ЖК-дисплея. Этот потенциометр очень удобен при использовании модуля дисплея в различных условиях освещения. Кроме того, на модуле расположены 4 внешних контакта: GND, VCC, SDA и SCL, которые соединяются с платой разработки ESP32, чтобы ЖК-дисплей 16×2 и микроконтроллер могли обмениваться данными по протоколу I2C.

ЖК-дисплей 16×2 и модуль I2C для него

Контакты I2C ESP32

На приведенной ниже схеме показана распиновка ESP32, где стандартные контакты I2C выделены красным цветом. Это стандартные контакты I2C модуля ESP32 DEVKIT. Однако, если вы хотите использовать другие контакты GPIO в качестве контактов I2C, вам придется задать их в коде.

Контакты I2C ESP32

Подключение ЖК-дисплея по протоколу I2C к ESP32

Собранная на макетной плате схема подключения ЖК-дисплея по протоколу I2C к ESP32

Для подключения платы ESP32 к ЖК-дисплею с интерфейсом I2C нам понадобятся следующие компоненты.

  1. Плата ESP32.
  2. ЖК-дисплей с модулем I2C.
  3. Соединительные провода.
  4. Макетная плата.

Подключение I2C LCD к плате ESP32 очень простое, так как оно включает в себя всего лишь соединение 4 контактов (GND, VCC, SDA и SCL) с ESP32. Необходимо соединить вывод VCC с выводом Vin, заземление с общим заземлением, SCL датчика с SCL платы ESP32, а SDA датчика с выводом SDA платы ESP32.

Примечание: в ESP32 по умолчанию для вывода SDA используется GPIO21, а для SCL — GPIO22.

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

ЖК-дисплей I2C ESP32
GND GND
VCC VIN
SDA GPIO21 (I2C SDA)
SCL GPIO22 (I2C SCL)

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

Схема подключения ESP32 к ЖК-дисплею с интерфейсом I2C

Для подключения модуля ESP32 к ЖК-дисплею с интерфейсом I2C следуйте приведенной ниже принципиальной схеме.

Схема подключения ESP32 к ЖК-дисплею с интерфейсом I2C

Как показано на приведенной выше принципиальной схеме, I2C-ЖК-дисплей питается от вывода Vin микроконтроллера ESP32. Заземление обоих устройств соединено общим проводом. Вывод SCL I2C-ЖК-дисплея подключен к GPIO 22, который является стандартным выводом SCL платы ESP32. Аналогично, вывод SDA I2C-ЖК-дисплея подключен к GPIO 21, который является стандартным выводом SDA платы ESP32.

Код проекта

Откройте VS Code и создайте новый проект ESP-IDF. Теперь перейдите к файлу main.c. Здесь мы определим функции и программный код.

Код для EPS32 для отображения буквенно-цифровых символов на ЖК-дисплее I2C 

Тестирование работы проекта

Мы будем использовать следующий код для отображения букв и цифр на I2C ЖК дисплее. Мы выведем на экран сообщение «16×2 I2C LCD» на 3 секунды. Затем экран очистится. Затем на три секунды отобразится другое сообщение “Lets Count 0-10!” («Давайте посчитаем от 0 до 10!»). После этого LCD снова очистится и будет отображать числа от 0 до 10 каждую секунду. Этот цикл будет повторяться непрерывно.

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

Для начала мы подключим необходимые библиотеки для этого проекта. Это включает в себя драйвер i2c, библиотеку ESP32_HD44780 и библиотеку FreeRTOS. Библиотека driver/i2c.h позволит ESP32 взаимодействовать с другими устройствами I2C, в нашем случае это ЖК-дисплей. HD44780 — это универсальный драйвер ESP-IDF для ЖК-дисплея HD44780, предназначенный для отображения текста и цифр. Поэтому мы также включаем заголовочный файл «HD44780.h».

В каталоге вашего проекта создайте папку component и поместите туда папку HD44780 (чтобы скачать эту папку HDD44780 перейдите по приведенной ссылке).

Параметры ЖК-дисплея по протоколу I2C

Далее мы определим адрес нашего I2C-дисплея. В нашем случае это '0x27', что обычно является адресом по умолчанию для I2C-дисплея.

Затем укажем контакты SDA и SCL микроконтроллера ESP32, используемые для связи по протоколу I2C. В нашем случае мы используем контакты I2C по умолчанию, однако, если вы хотите использовать другие контакты GPIO микроконтроллера ESP32 для связи по протоколу I2C, вам придется указать их здесь.

Кроме того, мы также укажем количество строк и столбцов нашего ЖК-дисплея. В нашем случае мы используем ЖК-дисплей 16×2, поэтому количество столбцов равно 16, а количество строк — 2.

Функция обратного вызова

Здесь мы определяем функцию LCD_DemoTask(), которая выступает в качестве функции обратного вызова для выполнения задачи. Она будет использоваться для отображения различного текста на ЖК-экране.

Очистка экрана

Внутри цикла while мы начнем с очистки ЖК-экрана, вызвав функцию LCD_clearScreen() .

Установка положения курсора в точке (0,0)

Далее вызовите функцию LCD_home(). Это гарантирует, что курсор будет установлен в точке (столбец = 0, строка = 0), что соответствует верхнему левому углу экрана.

Отображение строки

Затем, используя функцию LCD_writeStr(), мы передадим в качестве параметра строку, которую хотим отобразить на ЖК-дисплее. В нашем случае мы хотим вывести "16×2 I2C LCD".

Мы добавим задержку в 3 секунды, используя функцию vTaskDelay(), а затем снова очистим экран с помощью функции LCD_clearScreen().

Далее мы выведем на ЖК-экран текст “Lets Count 0-10!” («Давайте посчитаем от 0 до 10!»). Положение курсора останется неизменным, поэтому текст будет отображаться в точке (0,0). Снова добавим задержку в 3 секунды, а затем очистим экран.

Установка положения курсора и отображение цифр

Теперь, используя цикл for, мы будем отображать цифры от 0 до 10 каждую секунду. Сначала мы установим позицию курсора в 8-й столбец и 2-ю строку. Это делается с помощью функции LCD_setCursor() , указав позицию столбца в качестве первого параметра и позицию строки в качестве второго параметра. Затем мы преобразуем целочисленную переменную 'i' в строку и сохраним значения в массиве символов с именем 'num'. Обратите внимание, что 'i' увеличивается в цикле for от 0 до 10. Затем это будет отображаться на ЖК-дисплее с помощью функции LCD_write(), где мы указываем 'num' в качестве параметра. Более того, мы отображаем каждое число с задержкой в ​​1 секунду.

Внутри основной функции мы инициализируем I2C-ЖК-дисплей, вызвав функцию LCD_init() . Она принимает пять параметров: адрес шины I2C ЖК-дисплея, используемый вывод SDA, используемый вывод SCL, количество столбцов ЖК-дисплея и количество строк ЖК-дисплея соответственно. Все эти переменные были предварительно определены в коде. Затем мы создадим задачу FreeRTOS, используя функцию xTaskCreate(), и укажем её параметры, как указано в коде ниже:

Компиляция программы

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

Ввод команды в VS Code для прошивки платы ESP32

После успешной прошивки кода на I2C LCD-дисплее начнут отображаться сообщения.

Видео, демонстрирующее работу проекта

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

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

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