MicroPython: ESP32 Cheap Yellow Display Board — CYD (ESP32-2432S028R)
В этом руководстве вы узнаете, как начать работу с ESP32 Cheap Yellow Display (и другими совместимыми дисплеями) с помощью MicroPython. Мы кратко представим плату, рассмотрим загрузку нужных библиотек, отображение статического текста и изображений, а также управление встроенным RGB-светодиодом и LDR (фоторезистором).
Если у вас отдельный TFT-дисплей с тачскрином 2,8 дюйма на драйвере ILI9341, вы можете прочитать наше руководство по LVGL для ESP32.
Содержание:
В этом руководстве мы рассмотрим следующие темы:
Предварительные требования
Для работы с этим руководством вам необходимо установить прошивку MicroPython на плату ESP32 CYD. Также вам потребуется IDE для написания и загрузки кода на плату. Мы рекомендуем использовать Thonny IDE:
Подробнее о MicroPython: MicroPython Programming with ESP32 and ESP8266
Знакомство с ESP32 Cheap Yellow Display
Плата разработки ESP32-2432S028R стала известна в сообществе мейкеров как «Cheap Yellow Display» или сокращённо CYD. Эта плата разработки, основанная на модуле ESP32-WROOM-32, оснащена 2,8-дюймовым TFT-дисплеем с тачскрином, интерфейсом для microSD-карты, RGB-светодиодом и всей необходимой электроникой для программирования и питания платы.
Это очень универсальная плата для создания графических интерфейсов для ваших IoT-проектов, и она гораздо удобнее и практичнее, чем использование отдельной платы ESP32 с TFT-экраном.
Связанный материал: Getting Started with ESP32 Cheap Yellow Display Board – CYD (ESP32-2432S028R) using Arduino IDE
Вот более подробный список характеристик этой платы разработки:
Двухъядерный MCU, встроенные функции Wi-Fi и Bluetooth
Частота до 240 МГц
520 КБ SRAM, 448 КБ ROM, размер Flash 4 МБ
Размер модуля 50,0×86,0 мм
Рабочее напряжение: 5 В
Потребляемая мощность: приблизительно 115 мА
Вес продукта: приблизительно 50 г
Модуль включает:
2,8-дюймовый цветной TFT-дисплей с чипом драйвера ILI9341
Разрешение дисплея: 240x320 пикселей с резистивным тачскрином
Схема управления подсветкой
Интерфейс TF-карты для внешнего хранилища
Последовательный интерфейс
Интерфейс датчика температуры и влажности (интерфейс DHT11) и зарезервированные выводы GPIO
Можно программировать с помощью: Arduino IDE, MicroPython, ESP-IDF
В разъёмах расширенных GPIO доступны как минимум 4 вывода: GPIO 35, GPIO 22, GPIO 21 и GPIO 27. Также доступны выводы TX/RX (см. предыдущее изображение).
Подробнее о выводах платы CYD: ESP32 Cheap Yellow Display (CYD) Pinout (ESP32-2432S028R).
Где купить?
Вы можете перейти по ссылке ниже, чтобы узнать, где купить ESP32 Cheap Yellow Display и его цену в разных магазинах.
Библиотека MicroPython ILI9341
Существуют различные библиотеки, которые упрощают взаимодействие с платой CYD. Для прошивки MicroPython мы будем использовать драйверы MicroPython ILI9341 Display и XPT2046 Touch Screen, разработанные пользователем rdagger на GitHub. Вам необходимо выполнить следующие шаги для установки трёх необходимых модулей.
Скачивание и загрузка ili9341.py
Скопируйте код в файл в Thonny IDE;
Перейдите в File > Save as… и выберите MicroPython Device;
Сохраните файл с именем ili9341.py (не меняйте имя).
Скачивание и загрузка xpt2046.py
Скопируйте код в файл в Thonny IDE;
Перейдите в File > Save as… и выберите MicroPython Device;
Сохраните файл с именем xpt2046.py (не меняйте имя).
Скачивание и загрузка xglcd_font.py
Скопируйте код в файл в Thonny IDE;
Перейдите в File > Save as… и выберите MicroPython Device;
Сохраните файл с именем xglcd_font.py (не меняйте имя).
Просмотреть исходный код xglcd_font.py
После загрузки всех трёх файлов ваше устройство MicroPython должно содержать следующие файлы:
Отображение статического текста — код
Отображение статического текста на LCD очень просто. Всё, что вам нужно сделать — загрузить все необходимые модули, инициализировать дисплей, выбрать, где на экране должны отображаться символы, и содержание сообщения, которое будет выведено на экран.
В этом примере отображается сообщение «ESP32 says hello!» в координатах (0, 0), в центре дисплея и текст с поворотом.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-cheap-yellow-display-board-cyd-esp32-2432s028r/
from machine import Pin, SPI, ADC, idle
import os
from time import sleep
# Save this file as ili9341.py https://github.com/rdagger/micropython-ili9341/blob/master/ili9341.py
from ili9341 import Display, color565
# Save this file as xglcd_font.py https://github.com/rdagger/micropython-ili9341/blob/master/xglcd_font.py
from xglcd_font import XglcdFont
# Function to set up SPI for TFT display
display_spi = SPI(1, baudrate=60000000, sck=Pin(14), mosi=Pin(13))
# Set up display
display = Display(display_spi, dc=Pin(2), cs=Pin(15), rst=Pin(15),
width=320, height=240, rotation=90)
def draw_text():
# Set colors
white_color = color565(255, 255, 255) # white color
black_color = color565(0, 0, 0) # black color
# Turn on display backlight
backlight = Pin(21, Pin.OUT)
backlight.on()
# Clear display
display.clear(black_color)
# Draw the text on (0, 0) coordinates (x, y, text, font color, font background color, rotation)
display.draw_text8x8(0, 0, 'ESP32 says hello!', white_color, black_color, 0)
# Draw the text on the center of the display
font_size = 8
text_msg = 'Centered text'
x_center = int((display.width-len(text_msg)*font_size)/2)
y_center = int(((display.height)/2)-(font_size/2))
display.draw_text8x8(x_center, y_center, text_msg, white_color, black_color, 0)
# Draw the text on the right with rotation
display.draw_text8x8(display.width-font_size, 0, 'Text with rotation', white_color, black_color, 90)
try:
draw_text()
except Exception as e:
print('Error occured: ', e)
except KeyboardInterrupt:
print('Program Interrupted by the user')
display.cleanup()
Как работает код
Давайте кратко рассмотрим, как работает код для отображения текста на экране.
Импорт библиотек
Сначала необходимо импортировать нужные библиотеки:
from machine import Pin, SPI, ADC, idle
import os
from time import sleep
# Save this file as ili9341.py https://github.com/rdagger/micropython-ili9341/blob/master/ili9341.py
from ili9341 import Display, color565
# Save this file as xglcd_font.py https://github.com/rdagger/micropython-ili9341/blob/master/xglcd_font.py
from xglcd_font import XglcdFont
Инициализация шины SPI и дисплея
Затем вы инициализируете шину SPI для связи с дисплеем — убедитесь, что ваш дисплей также использует GPIO 14 для SCK и GPIO 13 для MOSI.
# Function to set up SPI for TFT display
display_spi = SPI(1, baudrate=60000000, sck=Pin(14), mosi=Pin(13))
Создайте объект Display под названием display и передайте в качестве аргументов шину SPI, которую вы только что создали, выводы DC, CS и RST, а также размер дисплея и поворот. Измените следующие параметры, если ваш дисплей имеет другую распиновку или другие размеры.
# Set up display
display = Display(display_spi, dc=Pin(2), cs=Pin(15), rst=Pin(15),
width=320, height=240, rotation=90)
Если ваша плата похожа на ту, что используется в этом руководстве, вы можете посмотреть распиновку здесь: ESP32 Cheap Yellow Display (CYD) Pinout (ESP32-2432S028R).
После инициализации и настройки дисплея мы создаём функцию для рисования текста:
def draw_text():
Создание цветов
Начнём с создания переменных для белого и чёрного цветов:
white_color = color565(255, 255, 255) # white color
black_color = color565(0, 0, 0) # black color
Включение подсветки и установка цвета фона
Затем мы инициализируем вывод, управляющий подсветкой, и устанавливаем его в состояние ON для включения подсветки.
# Turn on display backlight
backlight = Pin(21, Pin.OUT)
backlight.on()
Очищаем дисплей, устанавливая цвет фона на чёрный.
# Clear display
display.clear(black_color)
Отображение текста
Наконец, для рисования текста нужно вызвать функцию draw_text8x8(). Эта функция принимает в качестве аргументов: координаты x и y, сообщение, которое вы хотите отобразить, цвет шрифта, цвет фона и поворот.
# Draw the text on (0, 0) coordinates (x, y, text, font color, font background color, rotation)
display.draw_text8x8(0, 0, 'ESP32 says hello!', white_color, black_color, 0)
Отображение центрированного текста
Следующие строки вычисляют центр дисплея для печати центрированного текста.
# Draw the text on the center of the display
font_size = 8
text_msg = 'Centered text'
x_center = int((display.width-len(text_msg)*font_size)/2)
y_center = int(((display.height)/2)-(font_size/2))
display.draw_text8x8(x_center, y_center, text_msg, white_color, black_color, 0)
Отображение текста с поворотом
Это отображает текст с поворотом. Поворот — последний аргумент функции draw_text8x8().
# Draw the text on the right with rotation
display.draw_text8x8(display.width-font_size, 0, 'Text with rotation', white_color, black_color, 90)
Наконец, мы вызываем созданную ранее функцию draw_text() для отображения трёх текстовых сообщений в разных местах экрана.
try:
draw_text()
Тестирование примера
Запустите следующий код на вашем дисплее. Вы должны получить результат, похожий на следующую картинку.
Примечание: если вы хотите, чтобы код запускался автоматически при загрузке ESP32 (например, без подключения к компьютеру), вам нужно сохранить файл на плате с именем main.py.
Когда вы называете файл main.py, ESP32 будет запускать этот файл автоматически при загрузке. Если вы дадите ему другое имя, файл всё равно сохранится в файловой системе платы, но не будет запускаться автоматически при загрузке.
Загрузка пользовательского шрифта и отображение текста — код
Библиотека позволяет выбирать разные шрифты для отображения текста (хотя выбор ограничен). Все доступные варианты шрифтов можно посмотреть здесь: Library Fonts Folder.
Имея открытое подключение к плате в Thonny IDE, перейдите в View > Files. Слева откроется новая вкладка с файлами, сохранёнными на ESP32. Нажмите на иконку рядом с устройством MicroPython и нажмите New Directory…
Новая директория должна называться fonts.
В качестве примера мы загрузим шрифт Unispace12x24. Вы можете загрузить любой доступный шрифт из репозитория библиотеки. Выполните следующие шаги:
Скопируйте содержимое в файл в Thonny IDE;
Перейдите в File > Save as… и выберите MicroPython Device;
Сохраните файл с именем Unispace12x24.c (не меняйте имя) внутри папки fonts.
Вот код, который рисует текст с использованием пользовательского шрифта. Он аналогичен предыдущим примерам, но использует пользовательский шрифт.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-cheap-yellow-display-board-cyd-esp32-2432s028r/
from machine import Pin, SPI, ADC, idle
import os
from time import sleep
# Save this file as ili9341.py https://github.com/rdagger/micropython-ili9341/blob/master/ili9341.py
from ili9341 import Display, color565
# Save this file as xglcd_font.py https://github.com/rdagger/micropython-ili9341/blob/master/xglcd_font.py
from xglcd_font import XglcdFont
# Function to set up SPI for TFT display
display_spi = SPI(1, baudrate=60000000, sck=Pin(14), mosi=Pin(13))
# Set up display
display = Display(display_spi, dc=Pin(2), cs=Pin(15), rst=Pin(15),
width=320, height=240, rotation=90)
def draw_text():
# Set colors
white_color = color565(255, 255, 255) # white color
black_color = color565(0, 0, 0) # black color
# Turn on display backlight
backlight = Pin(21, Pin.OUT)
backlight.on()
# Clear display
display.clear(white_color)
# Loading Unispace font
print('Loading Unispace font...')
unispace_font = XglcdFont('fonts/Unispace12x24.c', 12, 24)
# Draw the text on (0, 0) coordinates (x, y, text, font, font color, font background color,
# landscape=False, rotate_180=False, spacing=1)
display.draw_text(0, 0, 'ESP32 says hello!', unispace_font, black_color, white_color)
# Draw the text on the center of the display
font_size_w = unispace_font.width
font_size_h = unispace_font.height
text_msg = 'Centered text'
x_center = int((display.width-len(text_msg)*font_size_w)/2)
y_center = int(((display.height)/2)-(font_size_h/2))
display.draw_text(x_center, y_center, text_msg, unispace_font, black_color, white_color)
# Draw the text with rotation
display.draw_text(display.width-font_size_h, display.height-font_size_w, 'Text with rotation',
unispace_font, black_color, white_color, landscape=True)
try:
draw_text()
except Exception as e:
print('Error occured: ', e)
except KeyboardInterrupt:
print('Program Interrupted by the user')
display.cleanup()
Как работает код?
Сначала вам нужно загрузить желаемый шрифт следующим образом:
# Loading Unispace font
print('Loading Unispace font...')
unispace_font = XglcdFont('fonts/Unispace12x24.c', 12, 24)
Шрифт сохраняется в переменной unispace_font.
Затем используйте функцию draw_text(), которая принимает шрифт в качестве четвёртого аргумента.
# Draw the text on (0, 0) coordinates (x, y, text, font, font color, font background color,
# landscape=False, rotate_180=False, spacing=1)
display.draw_text(0, 0, 'ESP32 says hello!', unispace_font, black_color, white_color)
Тестирование примера
Запустите код на вашей плате или загрузите его как main.py. Ваш дисплей будет выглядеть, как на следующей картинке.
Тестирование тачскрина — код
Следующий код тестирует тачскрин. Он определяет касание и выводит координаты, где было обнаружено касание.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-cheap-yellow-display-board-cyd-esp32-2432s028r/
from machine import Pin, SPI, ADC, idle
import os
from time import sleep
# Save this file as ili9341.py https://github.com/rdagger/micropython-ili9341/blob/master/ili9341.py
from ili9341 import Display, color565
# Save this file as xpt2046.py https://github.com/rdagger/micropython-ili9341/blob/master/xpt2046.py
from xpt2046 import Touch
# Save this file as xglcd_font.py https://github.com/rdagger/micropython-ili9341/blob/master/xglcd_font.py
from xglcd_font import XglcdFont
# Function to set up SPI for TFT display
display_spi = SPI(1, baudrate=60000000, sck=Pin(14), mosi=Pin(13))
# Set up display
display = Display(display_spi, dc=Pin(2), cs=Pin(15),
rst=Pin(15), width=320, height=240, rotation=90)
print('Display height: ' + str(display.height))
print('Display width: ' + str(display.width))
# Set colors (foreground) and background color
white_color = color565(255, 255, 255) # white
black_color = color565(0, 0, 0) # Black
# Turn on display backlight
backlight = Pin(21, Pin.OUT)
backlight.on()
# Clear display
display.clear(black_color)
# Initial message
# Draw the text on the center of the display
font_size = 8
text_msg = 'Touch screen to test'
x_center = int((display.width-len(text_msg)*font_size)/2)
y_center = int(((display.height)/2)-(font_size/2))
display.draw_text8x8(x_center, y_center,text_msg, white_color, black_color, 0)
# SPI for touchscreen
touchscreen_spi = SPI(2, baudrate=1000000, sck=Pin(25), mosi=Pin(32), miso=Pin(39))
def touchscreen_press(x, y):
display.clear(black_color)
text_touch_coordinates = "Touch: X = " + str(x) + " | Y = " + str(y)
x_center = int((display.width-len(text_touch_coordinates)*font_size)/2)
display.draw_text8x8(x_center, y_center, text_touch_coordinates, white_color, black_color, 0)
print("Touch: X = " + str(x) + " | Y = " + str(y))
touchscreen = Touch(touchscreen_spi, cs=Pin(33), int_pin=Pin(36), int_handler=touchscreen_press)
try:
# Run the event loop indefinitely
while True:
# Loop to wait for touchscreen press
touchscreen.get_touch()
except Exception as e:
print('Error occured: ', e)
except KeyboardInterrupt:
print('Program Interrupted by the user')
finally:
display.cleanup()
Как работает код?
Сначала вам нужно подключить необходимые библиотеки, включая xpt2046 из модуля Touch.
from machine import Pin, SPI, ADC, idle
import os
from time import sleep
# Save this file as ili9341.py https://github.com/rdagger/micropython-ili9341/blob/master/ili9341.py
from ili9341 import Display, color565
# Save this file as xpt2046.py https://github.com/rdagger/micropython-ili9341/blob/master/xpt2046.py
from xpt2046 import Touch
# Save this file as xglcd_font.py https://github.com/rdagger/micropython-ili9341/blob/master/xglcd_font.py
from xglcd_font import XglcdFont
Шина SPI для тачскрина
Мы создаём шину SPI для тачскрина. Передаём в качестве аргументов GPIO, используемые тачскрином, как показано ниже (SCK, MOSI и MISO).
touchscreen_spi = SPI(2, baudrate=1000000, sck=Pin(25), mosi=Pin(32), miso=Pin(39))
Определение касания
Для определения касания на тачскрине необходимо создать объект Touch и передать в качестве аргументов шину SPI тачскрина, выводы CS и INT (вывод прерывания) и функцию-обработчик тачскрина. Эта функция-обработчик будет вызвана при обнаружении касания. Библиотека автоматически передаст координаты x и y в эту функцию. В нашем случае она вызовет функцию touchscreen_press, которая должна быть определена заранее.
touchscreen = Touch(touchscreen_spi, cs=Pin(33), int_pin=Pin(36), int_handler=touchscreen_press)
Функция touchscreen_press()
Эта функция будет выполнена при обнаружении касания экрана. В данном случае мы выводим координаты касания на экран. Вы можете выполнить любую другую задачу.
def touchscreen_press(x, y):
display.clear(black_color)
text_touch_coordinates = "Touch: X = " + str(x) + " | Y = " + str(y)
x_center = int((display.width-len(text_touch_coordinates)*font_size)/2)
display.draw_text8x8(x_center, y_center, text_touch_coordinates, white_color, black_color, 0)
print("Touch: X = " + str(x) + " | Y = " + str(y))
Постоянное определение касания
Для постоянного определения касания необходимо создать цикл while, который включает инструкцию touchscreen.get_touch(), как показано ниже.
try:
# Run the event loop indefinitely
while True:
# Loop to wait for touchscreen press
touchscreen.get_touch()
Тестирование примера
Запустите код на вашей плате или загрузите его как main.py. Ваш дисплей будет выглядеть, как на следующей картинке.
Сначала будет отображено сообщение.
Затем коснитесь экрана. На дисплее будут показаны координаты касания.
Если плата подключена к компьютеру, координаты также будут отображаться в консоли.
Загрузка изображения на дисплей — код
В этом разделе мы покажем, как отобразить изображение на экране. Изображения или иконки для отображения на экране должны быть преобразованы в формат .raw. У нас уже есть подготовленный файл .raw для тестирования примера.
Однако, если вы хотите отобразить пользовательское изображение, вам нужно использовать инструмент img2rgb565.py из папки utils библиотеки для преобразования файлов изображений, таких как JPEG и PNG, в необходимый формат raw RGB565.
Нажмите здесь, чтобы скачать файл MicroPython128x128.raw. Thonny IDE не может открыть такие файлы. Чтобы загрузить его на вашу плату, выполните следующие инструкции.
В Thonny IDE установите подключение к плате.
Перейдите в View > Files. Слева появится боковая панель с файлами на вашем компьютере и файлами на устройстве MicroPython (ESP32).
Найдите файл MicroPython128x128.raw на компьютере (не меняйте имя);
Щёлкните правой кнопкой мыши по файлу и выберите «Upload to /» для загрузки на плату.
Через несколько секунд файл raw-изображения появится в списке файлов вашего устройства MicroPython.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-cheap-yellow-display-board-cyd-esp32-2432s028r/
from machine import Pin, SPI, ADC, idle
import os
from time import sleep
# Save this file as ili9341.py https://github.com/rdagger/micropython-ili9341/blob/master/ili9341.py
from ili9341 import Display, color565
# Save this file as xglcd_font.py https://github.com/rdagger/micropython-ili9341/blob/master/xglcd_font.py
from xglcd_font import XglcdFont
# Function to set up SPI for TFT display
display_spi = SPI(1, baudrate=60000000, sck=Pin(14), mosi=Pin(13))
# Set up display
display = Display(display_spi, dc=Pin(2), cs=Pin(15),
rst=Pin(15), width=320, height=240, rotation=90)
print('Display height: ' + str(display.height))
print('Display width: ' + str(display.width))
# Set colors (foreground) and background color
white_color = color565(255, 255, 255) # white
black_color = color565(0, 0, 0) # Black
# Turn on display backlight
backlight = Pin(21, Pin.OUT)
backlight.on()
# Clear display
display.clear(black_color)
def load_image():
display.draw_image('MicroPython128x128.raw', 0, 0, 128, 128)
try:
load_image()
except Exception as e:
print('Error occured: ', e)
except KeyboardInterrupt:
print('Program Interrupted by the user')
Как работает код?
Для отображения изображения на дисплее нужно просто вызвать следующую функцию.
def load_image():
display.draw_image('MicroPython128x128.raw', 0, 0, 128, 128)
Вам достаточно вызвать функцию draw_image() на объекте display. Передайте в качестве аргументов координаты x и y, где вы хотите отобразить изображение, а также ширину и высоту изображения.
Тестирование примера
После загрузки или запуска кода на плате на экране будет отображено изображение.
Рисование фигур на дисплее — код
Следующий пример показывает, как рисовать различные фигуры на дисплее.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-cheap-yellow-display-board-cyd-esp32-2432s028r/
from machine import Pin, SPI, ADC, idle
import os
from time import sleep
# Save this file as ili9341.py https://github.com/rdagger/micropython-ili9341/blob/master/ili9341.py
from ili9341 import Display, color565
# Save this file as xglcd_font.py https://github.com/rdagger/micropython-ili9341/blob/master/xglcd_font.py
from xglcd_font import XglcdFont
# Function to set up SPI for TFT display
display_spi = SPI(1, baudrate=60000000, sck=Pin(14), mosi=Pin(13))
# Set up display
display = Display(display_spi, dc=Pin(2), cs=Pin(15), rst=Pin(15),
width=320, height=240, rotation=90)
print('Display height: ' + str(display.height))
print('Display width: ' + str(display.width))
# Set colors (foreground) and background color
white_color = color565(255, 255, 255) # white
black_color = color565(0, 0, 0) # Black
# Turn on display backlight
backlight = Pin(21, Pin.OUT)
backlight.on()
# Clear display
display.clear(black_color)
def draw_shapes():
display.draw_hline(10, 40, 70, color565(255, 0, 255))
sleep(1)
display.draw_vline(10, 0, 40, color565(0, 255, 255))
sleep(1)
display.fill_hrect(23, 50, 30, 75, color565(255, 255, 255))
sleep(1)
display.draw_hline(0, 0, 100, color565(255, 0, 0))
sleep(1)
display.draw_line(50, 0, 64, 40, color565(255, 255, 0))
sleep(2)
display.clear()
coords = [[0, 63], [78, 80], [122, 92], [50, 50], [78, 15], [0, 63]]
display.draw_lines(coords, color565(0, 255, 255))
sleep(1)
display.clear()
display.fill_polygon(7, 120, 120, 100, color565(0, 255, 0))
sleep(1)
display.fill_rectangle(0, 0, 15, 227, color565(255, 0, 0))
sleep(1)
display.clear()
display.fill_rectangle(0, 0, 163, 163, color565(128, 128, 255))
sleep(1)
display.draw_rectangle(0, 64, 163, 163, color565(255, 0, 255))
sleep(1)
display.fill_rectangle(64, 0, 163, 163, color565(128, 0, 255))
sleep(1)
display.draw_polygon(3, 120, 110, 30, color565(0, 64, 255), rotate=15)
sleep(3)
display.clear()
display.fill_circle(132, 132, 70, color565(0, 255, 0))
sleep(1)
display.draw_circle(132, 96, 70, color565(0, 0, 255))
sleep(1)
display.fill_ellipse(96, 96, 30, 16, color565(255, 0, 0))
sleep(1)
display.draw_ellipse(96, 85, 16, 30, color565(255, 255, 0))
sleep(5)
display.cleanup()
try:
draw_shapes()
except Exception as e:
print('Error occured: ', e)
except KeyboardInterrupt:
print('Program Interrupted by the user')
finally:
display.cleanup()
После инициализации дисплея мы применяем различные методы к объекту display для отображения различных фигур. Названия методов говорят сами за себя.
def draw_shapes():
display.draw_hline(10, 40, 70, color565(255, 0, 255))
sleep(1)
display.draw_vline(10, 0, 40, color565(0, 255, 255))
sleep(1)
display.fill_hrect(23, 50, 30, 75, color565(255, 255, 255))
sleep(1)
display.draw_hline(0, 0, 100, color565(255, 0, 0))
sleep(1)
display.draw_line(50, 0, 64, 40, color565(255, 255, 0))
sleep(2)
display.clear()
coords = [[0, 63], [78, 80], [122, 92], [50, 50], [78, 15], [0, 63]]
display.draw_lines(coords, color565(0, 255, 255))
sleep(1)
display.clear()
display.fill_polygon(7, 120, 120, 100, color565(0, 255, 0))
sleep(1)
display.fill_rectangle(0, 0, 15, 227, color565(255, 0, 0))
sleep(1)
(...)
Тестирование примера
Этот пример будет отображать различные фигуры на экране с разными цветами.
Управление встроенным RGB-светодиодом — код
Плата ESP32 CYD оснащена RGB-светодиодом, который может быть полезен для отладки. В этом разделе вы узнаете, как управлять этим RGB-светодиодом.
Вот распиновка RGB-светодиода:
RGB LED |
GPIO |
|---|---|
Красный LED |
GPIO 4 |
Зелёный LED |
GPIO 16 |
Синий LED |
GPIO 17 |
Распиновка и расположение светодиода могут отличаться в зависимости от модели вашей платы.
Важно: RGB-светодиоды работают с инвертированной логикой, потому что они активны при низком уровне. Это означает, что HIGH = ВЫКЛ и LOW = ВКЛ.
Следующий пример переключает RGB-светодиод между разными цветами: красным, зелёным и синим.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-cheap-yellow-display-board-cyd-esp32-2432s028r/
from machine import Pin
import os
from time import sleep
# RGB LED at the back
red_led = Pin(4, Pin.OUT)
green_led = Pin(16, Pin.OUT)
blue_led = Pin(17, Pin.OUT)
# Turn on all LEDs (they are active low, so they work with inverted logic)
# Example: red_led.on() command turns the red LED off
red_led.on()
green_led.on()
blue_led.on()
sleep(3)
red_led.off()
sleep(3)
red_led.on()
green_led.off()
sleep(3)
green_led.on()
blue_led.off()
sleep(3)
blue_led.on()
Как работает код?
Сначала мы создаём переменные для обращения к светодиодам.
red_led = Pin(4, Pin.OUT)
green_led = Pin(16, Pin.OUT)
blue_led = Pin(17, Pin.OUT)
Затем мы выключаем все светодиоды (эти светодиоды работают с инвертированной логикой).
red_led.on()
green_led.on()
blue_led.on()
Затем используйте команду off() для включения определённого светодиода и команду on() для выключения конкретного светодиода.
red_led.off()
sleep(3)
red_led.on()
green_led.off()
sleep(3)
green_led.on()
blue_led.off()
sleep(3)
blue_led.on()
Чтение данных встроенного LDR — код
Плата CYD оснащена LDR на лицевой стороне, рядом с дисплеем. LDR подключён к GPIO 34.
Для чтения значения с LDR достаточно считать аналоговый сигнал на GPIO 34.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/micropython-cheap-yellow-display-board-cyd-esp32-2432s028r/
from machine import Pin, ADC
import os
from time import sleep
try:
# Run the event loop indefinitely
while True:
# Read light sensor
lightsensor = ADC(34, atten=ADC.ATTN_0DB)
print('LDR value: ' + str(lightsensor.read_uv()))
sleep(1)
except Exception as e:
print('Error occured: ', e)
except KeyboardInterrupt:
print('Program Interrupted by the user')
Рекомендуемое чтение: ESP32/ESP8266 Analog Readings with MicroPython.
Примечание: на многих платах CYD LDR не будет работать как ожидается без модификации внутренней схемы. Поэтому, если вы получаете одно и то же значение независимо от освещённости, вероятно, LDR на вашей плате не работает должным образом.
Заключение
Это руководство представляло собой краткое введение в работу с платой ESP32 CYD (Cheap Yellow Display) на MicroPython. Мы рассмотрели отображение текста, изображений и фигур, а также управление RGB-светодиодом и чтение значений с LDR.
Это руководство также должно быть совместимо с другими TFT-дисплеями при условии настройки правильной распиновки и размеров в коде.
Если вы предпочитаете использовать Arduino IDE, ознакомьтесь с этим руководством для платы CYD с Arduino IDE.
Если вы хотите узнать больше о MicroPython с платой ESP32, ознакомьтесь с нашими ресурсами: