CYD Display превращает поддерживаемые платы ESP32-CYD в полноценное периферийное устройство 320x240 для программ на PureBasic.
Текущая версия: 0.27.0.
| Плата | MCU | Экран и touch | Профиль |
|---|---|---|---|
| FNK0103L | ESP32 | ST7789, XPT2046 | CYD_PROFILE_FNK0103L (CYD_PROFILE_FNK0103L_ROTATED_180 — та же плата, повёрнутая установка) |
| ESP32-024 | ESP32 | ST7789, XPT2046 | CYD_PROFILE_ESP32_024 |
| ESP32-2432S028 | ESP32 | ILI9341, XPT2046 | CYD_PROFILE_ESP32_2432S028 |
| ES3C28P | ESP32-S3 | ILI9341, FT6336, ES8311 | CYD_PROFILE_ES3C28P |
| JC3248W535 | ESP32-S3 | AXS15231B QSPI, AXS15231B touch | CYD_PROFILE_JC3248W535 |
- вывод кадрового буфера RGB565 и capability порядка BGR для аппаратных графических примитивов;
- буферизованное рисование в разрешении 320x240 или 240x320;
- передача только изменившегося прямоугольника;
- прямые примитивы и встроенный текст на ESP32 без передачи кадрового буфера;
- автономная прокрутка на стороне устройства примерно с 30 FPS;
- автономные элементы часов, даты и таймера обратного отсчёта;
- системные шрифты и загрузка изображений на компьютере;
- создание центрированных QR-кодов, включая текст UTF-8;
- события XPT2046: нажатие, перемещение и отпускание;
- управляемая прошивкой четырёхточечная калибровка touch с хранением в NVS;
- тон, автономные RTTTL-подобные мелодии и моно PCM без знака 8 бит на GPIO26, с управлением штатным усилителем там, где оно предусмотрено профилем;
- FAT32 SD, загрузка файлов по COM-порту, автономные GIF и MP3 с управлением паузой, продолжением и остановкой;
- просмотр каталога SD, скачивание и удаление файлов;
- PWM-управление штатным RGB-светодиодом;
- сканирование Wi-Fi с SSID, BSSID, RSSI, каналом и типом шифрования;
- синхронные touch-вопросы с центрированным текстом и 1–6 кнопками;
- двусторонние пакеты с CRC на скорости 921600 бод.
Старый протокол WeAct не используется.
PROGRAMMER_GUIDE.md— полное руководство по API PureBasic;PROTOCOL.md— описание протокола CYD/1;../../PUREBASIC_PROJECT_KNOWLEDGE.md— проверенные правила PureBasic;../../Release— готовые программы и прошивки;../../GitHub— подготовленная публичная копия;firmware/CYD_Display_Firmware— прошивка Arduino ESP32;purebasic/CYD_Display.pbi— подключаемая библиотека PureBasic;purebasic/CYD_Demo.pb— пример экрана, touch, калибровки и звука;purebasic/CYD_Calibrate.pb— интерактивная калибровка touch;purebasic/CYD_GraphicsDemo.pb— текст, примитивы и виджеты;purebasic/CYD_FastGraphicsDemo.pb— быстрые примитивы и автономный скролл;purebasic/CYD_CLI.pb— консольное управление экраном, графикой и звуком;purebasic/CYD_CLI_readme.md— синтаксис и примеры CLI;purebasic/CYD_AudioTest.pb— проверка тона и PCM на максимальной громкости;CYD_CLI_DogWaltz.cmd— готовая мелодия «Собачий вальс» для CLI;purebasic/CYD_GIFPlayer.pb— загрузка и автономное воспроизведение GIF;purebasic/CYD_MP3Player.pb— загрузка и управление MP3 на SD;purebasic/CYD_SmokeTest.pb— автоматическая проверка экрана и звука;programs/CYD_CPUMonitor/— автономный Windows-монитор CPU, GPU и сети со всеми исходниками, зависимостями, ресурсами и документацией.
Полная конфигурация плат находится в
firmware/CYD_Display_Firmware/CYD_HardwareConfig.h. Значение
CYD_ACTIVE_PROFILE выбирается из:
CYD_PROFILE_FNK0103L— исходный проверенный профиль FNK0103L;CYD_PROFILE_FNK0103L_ROTATED_180— FNK0103L с начальным поворотом на 180°;CYD_PROFILE_ESP32_024— ESP32-024 с ST7789 и touch IRQ36;CYD_PROFILE_ES3C28P— ESP32-S3 с ILI9341, ёмкостным FT6336, WS2812 и аудиокодеком ES8311.CYD_PROFILE_JC3248W535— ESP32-S3 с AXS15231B 320×480 по QSPI и ёмкостным AXS15231B touch по I²C.
Профили ESP32/FNK используют ST7789 240x320 в ориентации 320x240, общую шину HSPI GPIO12/13/14 для TFT и XPT2046, TFT CS15/DC2, touch CS33, отдельную шину VSPI GPIO18/19/23 для SD с CS5, подсветку GPIO27 и аудио DAC GPIO26. Частота и инверсия экрана, пространство калибровки, красный вывод RGB, touch IRQ и управление усилителем задаются профилем.
ES3C28P использует ILI9341 240x320, FT6336 по I²C, WS2812 на GPIO42 и ES8311 по I²S. Ёмкостный touch не требует четырёхточечной калибровки. SDIO монтируется при старте и доступен для файлов и MP3.
JC3248W535 использует AXS15231B 320x480 по QSPI: CS45, CLK47, D0/1/2/3
21/48/40/39, backlight GPIO1. Touch AXS15231B подключён по I²C SDA4/SCL8,
адрес 0x3B, и не требует калибровки. Для ESP32-S3 обязательны 16 МБ flash
и 8 МБ OPI PSRAM; последовательность инициализации панели — AXS15231B
320×480 type 1.
Для стабильного старта SD не монтируется автоматически; медиа-команды
сообщают ERROR_SD_NOT_READY до отдельного подключения SD.
В исходниках активен CYD_PROFILE_ESP32_024. При проверке релиза компилируются
все профили.
- Вызвать
CYD_Open()для поиска наCOM1…COM256либоCYD_Open("COM5")для конкретного порта. - Рисовать в кадровом буфере функциями
CYD_ClearBuffer,CYD_FillRect,CYD_DrawLine,CYD_DrawText,CYD_DrawImageилиCYD_DrawQRCode. - Вызвать
CYD_Flush()— будет отправлен только изменившийся прямоугольник. - Вызывать
CYD_GetEvent()из обычного цикла событий приложения. - При отсутствии калибровки вызвать
CYD_StartTouchCalibration()и коснуться четырёх показанных мишеней. - При выходе вызвать
CYD_Close().
CYD_PlayPCM() принимает монофонические 8-битные PCM-отсчёты без знака.
Функция синхронно регулирует скорость передачи, защищая аудиобуфер ESP32.
Для коротких уведомлений используется CYD_Tone().
Совместимая прокрутка с системными шрифтами выполняется повторными вызовами
CYD_UpdateScrollText(), CYD_DrawScrollText(#True) и CYD_Flush().
Для быстрой анимации CYD_DeviceStartScrollText() один раз передаёт текст и
параметры, после чего ESP32 формирует кадры самостоятельно.
Подключение и управление устройством:
CYD_Open(),CYD_Close(),CYD_IsConnected();CYD_SetOrientation(),CYD_SetBrightness();CYD_GetWidth(),CYD_GetHeight(),CYD_GetDeviceName(),CYD_GetPortName().
Буферизованное рисование:
CYD_RGB565(),CYD_ClearBuffer();CYD_DrawPixel(),CYD_DrawLine(),CYD_DrawCircle();CYD_DrawRect(),CYD_FillRect(),CYD_DrawTriangle();CYD_DrawText(),CYD_DrawImage(),CYD_DrawQRCode();CYD_DrawWrappedText(),CYD_DrawImageFullScreen();CYD_DrawProgressBar(),CYD_DrawGraph(),CYD_DrawSpinner();CYD_ShowTime(),CYD_ShowDate();CYD_StartScrollText(),CYD_UpdateScrollText(),CYD_Flush().
Быстрая графика на стороне устройства:
CYD_HasDeviceGraphics(),CYD_HasDeviceScroll();CYD_HasUTF8DeviceText();CYD_HasDeviceBarChart();CYD_UsesBGRDeviceGraphics();CYD_DeviceDrawPixel(),CYD_DeviceDrawLine();CYD_DeviceDrawRect(),CYD_DeviceFillRect();CYD_DeviceDrawCircle(),CYD_DeviceDrawTriangle();CYD_DeviceDrawText(),CYD_DeviceDrawUTF8TextArea(),CYD_DeviceDrawButton();CYD_DeviceUpdateBarChart();CYD_DeviceStartMatrix(),CYD_DeviceStopMatrix();CYD_DeviceStartScrollText(),CYD_DeviceStopScrollText();CYD_DeviceStartClock(),CYD_DeviceStopClock();CYD_DeviceStartDate(),CYD_DeviceStopDate();CYD_DeviceStartTimer(),CYD_DeviceWaitTimer(),CYD_DeviceStopTimer().
CYD_DeviceDrawText() использует компактный шрифт Adafruit для ASCII.
Прошивка 0.11.0 добавляет CYD_DeviceDrawUTF8TextArea(): UTF-8 и кириллица
рисуются на ESP32 встроенными шрифтами U8g2 без передачи растровой области.
Для системных шрифтов Windows и сглаживания остаются CYD_DrawText() и
CYD_Flush().
В версии 0.12.0 CYD_DeviceUpdateBarChart() передаёт массив значений 0…100 и
цветов RGB565 одной командой. ESP32 хранит предыдущее измерение, обновляет
только изменившиеся области и при необходимости рисует маркеры тенденции.
В версии 0.15.0 CYD_DeviceStartMatrix() запускает автономный Matrix-эффект на
ESP32. Скорость, плотность и длина хвоста задаются один раз; после закрытия
COM-порта анимация продолжает работать. CYD_DeviceStopMatrix() останавливает
её и при необходимости очищает экран.
В версии 0.17.0 неактивные колонки Matrix-эффекта периодически возвращаются в анимацию, поэтому заданная плотность сохраняется и экран не затухает со временем. В режиме тишины GPIO26 удерживается в LOW после отключения DAC, что снижает наводки от дисплея и последовательного обмена на вход динамика.
Версия 0.18.0 добавляет CYD_DeviceStartMatrixClock(): цифровые или перекидные
часы, дата и день недели обновляются ESP32 поверх автономного Matrix-эффекта.
Язык и отображение секунд задаются при запуске; постоянный COM-трафик не нужен.
Версия 0.19.0 добавляет CYD_DeviceStartClockSaver() для таких же автономных
цифровых или перекидных часов без Matrix. В обоих часовых режимах секунды
показываются только при ShowSeconds = #True.
В версии 0.22.0 GUI CYD_CPUMonitor переразмечен в вертикальные группы:
подключение, источники данных, поведение, часы, экран и состояние. Настройки и
живая статистика получили единую сетку подписей и более читаемые шрифты.
Отсутствие калибровки сенсора больше не блокирует мониторинг: данные продолжают
выводиться, а GUI сообщает, что переключение экранов касанием недоступно.
Кнопка Калибровка запускает четырёхточечную процедуру непосредственно из
монитора и включает касания сразу после успешного завершения.
В версии 0.24.0 прошивка отдельно сообщает, поддерживает ли контроллер
четырёхточечную калибровку. Для ёмкостного FT6336 на ES3C28P кнопка
Калибровка недоступна, а библиотека предоставляет проверки CYD_HasTouch()
и CYD_HasTouchCalibration().
Версия 0.25.0 исправляет объявление порядка цветов ES3C28P: ILI9341 этого профиля принимает обычный RGB565, поэтому хост больше не меняет местами красный и синий каналы аппаратных примитивов и столбчатых графиков.
Версия 0.27.0 унифицирует набор команд прошивки для всех поддерживаемых профилей: GIF/MP3 с SD, состояние медиа, аудиокоманды, RGB и touch-калибровка остаются частью общего протокола, а профиль ограничивает только недоступное конкретной плате оборудование. ESP32-024 использует аудиовыход GPIO26 и не затрагивает GPIO4, занятый красным каналом RGB.
Clock и Date — независимо расположенные постоянные элементы ESP32. Компьютер
передаёт им локальное время при запуске, после чего ESP32 самостоятельно
обновляет HH:MM:SS и YYYY-MM-DD. Timer отсчитывает время локально и посылает
событие завершения, которого ожидает CYD_DeviceWaitTimer().
Touch:
CYD_EnableTouch(),CYD_GetEvent();CYD_StartTouchCalibration(),CYD_CancelTouchCalibration();CYD_ResetTouchCalibration().
Вопросы:
CYD_Question()показывает центрированный текст и ожидает одну из 1–6 кнопок;- стандартные схемы:
#CYD_QUESTION_OK,#CYD_QUESTION_YES_NOи#CYD_QUESTION_YES_NO_IGNORE; #CYD_QUESTION_CUSTOMпринимает собственные подписи;- доступны короткие псевдонимы
#OK,#YesNo,#YesNoIgnoreи#custom, если такие константы ещё не определены.
При выводе вопроса экран очищается, а объёмные кнопки рисуются непосредственно
ESP32. С компьютера передаются только сглаженный текст вопроса и небольшие
области подписей. Нажатие инвертирует фаску без новой передачи изображения.
Стандартные подписи — OK, YES, NO и IGNORE; пользовательский текст и
системные шрифты полностью поддерживают кириллицу.
Аудио:
CYD_Tone();CYD_PlayMelody(),CYD_WaitMelody();CYD_PlayPCM(),CYD_StopAudio().
SD и автономные медиа:
CYD_GetSDInfo(),CYD_UploadFileToSD();CYD_ListSDFiles(),CYD_DownloadFileFromSD(),CYD_DeleteSDFile();CYD_PlayGIFFromSD(),CYD_PauseGIF(),CYD_ResumeGIF(),CYD_StopGIF();CYD_PlayMP3FromSD(),CYD_PauseMP3(),CYD_ResumeMP3(),CYD_StopMP3();CYD_GetMediaStatus(),CYD_SetRGB().
Wi-Fi:
CYD_HasWiFiScan();CYD_ScanWiFi(), результаты находятся вCYD_WiFiNetworks().
GIF и MP3 передаются только при загрузке файла. Дальнейшее декодирование идёт на ESP32 с FAT32, без постоянного потока кадров или звука с компьютера.
MP3-декодер принимает CBR и VBR. Гарантированно проверенный вариант — CBR не
выше 256 кбит/с. В VBR каждый кадр также должен быть не выше 256 кбит/с.
Проверенный файл создаётся командой
ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 256k output.mp3.
Для GIF по умолчанию используется #CYD_GIF_COVER; #CYD_GIF_CONTAIN
сохраняет весь кадр с возможными полями, а #CYD_GIF_STRETCH растягивает его
до 320x240. Локальная копия AnimatedGIF 2.2.0 позволяет потоково показывать
пример 500x346 без выделения большого кадрового буфера.
Библиотека использует стандартные библиотеки PureBasic SerialPort, Memory, Image, 2DDrawing, Font, List и функции времени. WinAPI не используется.
Для переноса кода WeActDisplay доступны псевдонимы CYD_DrawPixelBuffer,
CYD_DrawRectangleBuffer, CYD_DrawLineBuffer, CYD_DrawCircleBuffer,
CYD_DrawTextSystemFont, CYD_LoadImageToBuffer и CYD_UpdateDisplay.
Copyright (C) CheshirCa 2026 — https://t.me/cheshircanest
Проект распространяется по приложенной некоммерческой лицензии. Коммерческое
использование, продажа, платное распространение и включение в коммерческие
продукты требуют письменного разрешения автора. При изменении и распространении
необходимо сохранять указание авторства. Полные условия находятся в LICENSE.
Исходники AnimatedGIF 2.2.0 сохраняют отдельную лицензию Apache-2.0. QR-кодер
адаптирован из Project Nayuki QR Code generator; уведомление MIT сохранено в
purebasic/CYD_Display.pbi.
CYD Display turns supported ESP32-CYD boards into a native 320x240 peripheral for PureBasic programs.
Current version: 0.27.0.
| Board | MCU | Display and touch | Profile |
|---|---|---|---|
| FNK0103L | ESP32 | ST7789, XPT2046 | CYD_PROFILE_FNK0103L (CYD_PROFILE_FNK0103L_ROTATED_180 is the same board installed upside down) |
| ESP32-024 | ESP32 | ST7789, XPT2046 | CYD_PROFILE_ESP32_024 |
| ESP32-2432S028 | ESP32 | ILI9341, XPT2046 | CYD_PROFILE_ESP32_2432S028 |
| ES3C28P | ESP32-S3 | ILI9341, FT6336, ES8311 | CYD_PROFILE_ES3C28P |
| JC3248W535 | ESP32-S3 | AXS15231B QSPI, AXS15231B touch | CYD_PROFILE_JC3248W535 |
- RGB565 framebuffer output and an advertised BGR-order capability for device-side graphics primitives;
- buffered drawing at 320x240 or 240x320;
- dirty-rectangle transfers;
- direct ESP32-side primitives and built-in text without framebuffer traffic;
- autonomous device-side scrolling at approximately 30 FPS;
- autonomous clock, date, and countdown timer elements;
- system-font text and image loading on the host;
- centered QR Code generation in the host framebuffer, including UTF-8 text;
- XPT2046 down/move/up events;
- firmware-guided four-point touch calibration stored in ESP32 NVS;
- tone, autonomous RTTTL-like melodies, and unsigned 8-bit mono PCM output on GPIO26, with onboard-amplifier control where the hardware profile provides it;
- FAT32 SD access, serial file upload, autonomous GIF decoding, and MP3 playback with pause/resume/stop control;
- SD directory listing, file download and deletion;
- PWM control of the onboard RGB LED;
- Wi-Fi network scanning with SSID, BSSID, RSSI, channel, and encryption;
- synchronous touch questions with centered auto-sized text and 1–6 rounded ESP32-rendered buttons;
- CRC-protected bidirectional packets at 921600 baud.
The old WeAct protocol is not used.
PROGRAMMER_GUIDE.md— complete PureBasic API and usage guide;PROTOCOL.md— CYD/1 wire protocol;../../PUREBASIC_PROJECT_KNOWLEDGE.md— verified PureBasic-specific project rules;../../Release— ready-to-use programs and firmware;../../GitHub— generated publishable source tree;firmware/CYD_Display_Firmware— Arduino ESP32 firmware;purebasic/CYD_Display.pbi— PureBasic include library;purebasic/CYD_Demo.pb— display, touch, calibration, and tone example.purebasic/CYD_Calibrate.pb— interactive touch calibration utility.purebasic/CYD_GraphicsDemo.pb— native text, primitives, and widgets.purebasic/CYD_FastGraphicsDemo.pb— ESP32-side primitives and autonomous scrolling without repeated bitmap transfers.purebasic/CYD_CLI.pb— command-line display, graphics, scroll, touch, and audio control utility.purebasic/CYD_CLI_readme.md— CLI syntax and examples.purebasic/CYD_AudioTest.pb— maximum-volume tone and PCM audio test.CYD_CLI_DogWaltz.cmd— ready-to-run monophonic “Dog Waltz” score forCYD_CLI melody.purebasic/CYD_GIFPlayer.pb— uploads a GIF once and plays it locally.purebasic/CYD_MP3Player.pb— uploads and controls an MP3 on the SD card.purebasic/CYD_SmokeTest.pb— non-interactive connection/display/audio test.programs/CYD_CPUMonitor/— standalone Windows GUI/tray hardware monitor with source, local library dependencies, assets, executable, build script, documentation and license.
firmware/CYD_Display_Firmware/CYD_HardwareConfig.h contains the complete
board configuration. Select one value of CYD_ACTIVE_PROFILE:
CYD_PROFILE_FNK0103L— the original verified FNK0103L profile;CYD_PROFILE_FNK0103L_ROTATED_180— FNK0103L with a 180-degree rotated startup orientation;CYD_PROFILE_ESP32_024— ST7789 ESP32-024 with touch IRQ36.CYD_PROFILE_ES3C28P— ESP32-S3 with ILI9341, capacitive FT6336, WS2812, and an ES8311 audio codec.CYD_PROFILE_JC3248W535— ESP32-S3 with an AXS15231B 320×480 QSPI display and capacitive AXS15231B touch over I2C.
The ESP32/FNK profiles use an ST7789 240x320 display in 320x240 orientation, TFT and XPT2046 on shared HSPI GPIO12/13/14 with TFT CS15/DC2 and touch CS33, a separate SD VSPI bus GPIO18/19/23 with CS5, backlight GPIO27, and audio DAC GPIO26. Board-specific values include display frequency/inversion, calibration namespace, RGB red pin, touch IRQ, and amplifier-enable handling.
ES3C28P uses a 240x320 ILI9341, FT6336 over I2C, WS2812 on GPIO42, and ES8311 over I2S. Capacitive touch does not need four-point calibration. SDIO mounts at startup and is available for files and MP3.
JC3248W535 uses an AXS15231B 320×480 QSPI display: CS45, CLK47, D0/1/2/3
21/48/40/39, with backlight GPIO1. Its AXS15231B touch uses I2C SDA4/SCL8 at
address 0x3B and needs no calibration. The ESP32-S3 build requires 16 MB
flash and 8 MB OPI PSRAM, with the AXS15231B 320×480 type-1 panel
initialization sequence.
SD is not mounted automatically during startup; media commands return
ERROR_SD_NOT_READY until SD is explicitly connected.
The active source profile is CYD_PROFILE_ESP32_024. All profiles are
compiled during release verification.
CYD_Open()to searchCOM1throughCOM256, orCYD_Open("COM5")to select a port explicitly.- Draw into the host framebuffer using
CYD_ClearBuffer,CYD_FillRect,CYD_DrawLine,CYD_DrawText,CYD_DrawImage, orCYD_DrawQRCode. - Call
CYD_Flush(). Only the accumulated dirty rectangle is sent. - Repeatedly call
CYD_GetEvent()from the application's normal event loop. - If touch is not calibrated, call
CYD_StartTouchCalibration()and touch the four displayed targets. - Call
CYD_Close()on exit.
CYD_PlayPCM() accepts unsigned 8-bit mono samples. It is synchronous and
paces the serial producer to protect the ESP32 audio ring buffer. Use
CYD_Tone() for short notifications.
Scrolling is animated by repeatedly calling CYD_UpdateScrollText(),
CYD_DrawScrollText(#True), and CYD_Flush() in the application loop.
That compatibility path preserves system fonts. For fast animation,
CYD_DeviceStartScrollText() sends the text and parameters once and the
ESP32 performs all subsequent frames locally.
Connection and device control:
CYD_Open(),CYD_Close(),CYD_IsConnected();CYD_SetOrientation(),CYD_SetBrightness();CYD_GetWidth(),CYD_GetHeight(),CYD_GetDeviceName(),CYD_GetPortName().
Buffered drawing:
CYD_RGB565(),CYD_ClearBuffer();CYD_DrawPixel(),CYD_DrawLine(),CYD_DrawCircle();CYD_DrawRect(),CYD_FillRect(),CYD_DrawTriangle();CYD_DrawText(),CYD_DrawImage(),CYD_DrawQRCode();CYD_DrawWrappedText(),CYD_DrawImageFullScreen();CYD_DrawProgressBar(),CYD_DrawGraph(),CYD_DrawSpinner();CYD_ShowTime(),CYD_ShowDate();CYD_StartScrollText(),CYD_UpdateScrollText();CYD_Flush().
Fast device-side drawing:
CYD_HasDeviceGraphics(),CYD_HasDeviceScroll();CYD_HasUTF8DeviceText();CYD_HasDeviceBarChart();CYD_UsesBGRDeviceGraphics();CYD_DeviceDrawPixel(),CYD_DeviceDrawLine();CYD_DeviceDrawRect(),CYD_DeviceFillRect();CYD_DeviceDrawCircle(),CYD_DeviceDrawTriangle();CYD_DeviceDrawText(),CYD_DeviceDrawUTF8TextArea(),CYD_DeviceDrawButton();CYD_DeviceUpdateBarChart();CYD_DeviceStartMatrix(),CYD_DeviceStopMatrix();CYD_DeviceStartScrollText(),CYD_DeviceStopScrollText().CYD_DeviceStartClock(),CYD_DeviceStopClock();CYD_DeviceStartDate(),CYD_DeviceStopDate();CYD_DeviceStartTimer(),CYD_DeviceWaitTimer(),CYD_DeviceStopTimer().
CYD_DeviceDrawText() uses the compact built-in Adafruit font for ASCII.
Firmware 0.11.0 adds CYD_DeviceDrawUTF8TextArea(), which renders UTF-8 and
Cyrillic on the ESP32 with bundled U8g2 fonts and transfers no bitmap region.
Keep CYD_DrawText() plus CYD_Flush() for Windows system fonts and
antialiasing.
Version 0.12.0 adds CYD_DeviceUpdateBarChart(), which transfers arrays of
0..100 values and RGB565 colors in one command. The ESP32 retains the previous
sample, updates only changed regions, and optionally draws trend markers.
Version 0.15.0 adds CYD_DeviceStartMatrix(), an autonomous ESP32-rendered
Matrix effect. Speed, density, and tail length are sent once and animation
continues after the COM port closes. CYD_DeviceStopMatrix() stops it and can
optionally clear the display.
Version 0.17.0 periodically returns inactive Matrix columns to the animation, so the configured density remains stable instead of fading to black over time. While audio is idle, GPIO26 is held LOW after the DAC is disabled to reduce display and serial coupling into the speaker input.
Version 0.18.0 adds CYD_DeviceStartMatrixClock(): the ESP32 autonomously
updates a digital or flip clock, date, and weekday over the Matrix effect.
Language and seconds are selected at startup; no continuous COM traffic is
required.
Version 0.19.0 adds CYD_DeviceStartClockSaver() for the same autonomous
digital or flip clocks without Matrix. In both clock-saver modes, seconds are
shown only when ShowSeconds = #True.
Version 0.22.0 reorganizes the CYD_CPUMonitor GUI into vertical Connection,
Data sources, Behavior, Clock, Display, and Status groups. Settings and live
statistics now use one aligned label grid and more readable fonts.
Missing touch calibration no longer blocks monitoring: data remains visible
and the GUI reports that touch-based screen switching is unavailable.
The Calibration button starts the four-point procedure directly from the
monitor and enables touch immediately after successful completion.
Version 0.24.0 lets firmware advertise four-point calibration separately from
touch input. The Calibration button is disabled for the capacitive FT6336 on
ES3C28P, while the library exposes CYD_HasTouch() and
CYD_HasTouchCalibration() capability checks.
Version 0.25.0 corrects the advertised ES3C28P color order. This profile's ILI9341 accepts conventional RGB565, so the host no longer exchanges red and blue in device-side primitives and bar charts.
Version 0.27.0 standardizes the firmware command set across all supported profiles: SD GIF/MP3, media status, audio commands, RGB, and touch calibration remain in the common protocol, while each profile only restricts unavailable hardware. ESP32-024 uses GPIO26 for audio and leaves GPIO4 untouched because it drives the red RGB channel.
Clock and Date are independently positioned persistent ESP32 elements. The
host seeds them with its local calendar when they start; the ESP32 then
maintains and redraws HH:MM:SS and YYYY-MM-DD without host traffic. Timer
counts down locally and emits a completion event that
CYD_DeviceWaitTimer() waits for.
Touch:
CYD_EnableTouch(),CYD_GetEvent();CYD_StartTouchCalibration();CYD_CancelTouchCalibration();CYD_ResetTouchCalibration().
Questions:
CYD_Question()displays centered, automatically wrapped text and waits for one of 1–6 buttons;- standard layouts use
#CYD_QUESTION_OK,#CYD_QUESTION_YES_NO, and#CYD_QUESTION_YES_NO_IGNORE; #CYD_QUESTION_CUSTOMaccepts custom button captions;- short aliases
#OK,#YesNo,#YesNoIgnore, and#customare available when those constants have not already been defined.
Question rendering clears the display and draws the rounded raised button
faces directly on the ESP32. Only the antialiased system-font question and
small label rectangles are transferred from the host. Touch-down inverts the
device-side bevel without another bitmap transfer. Built-in question types
use international OK, YES, NO, and IGNORE labels. Questions, custom
answer labels, and host-rendered system-font text retain full Cyrillic
support.
Audio:
CYD_Tone();CYD_PlayMelody()andCYD_WaitMelody();CYD_PlayPCM();CYD_StopAudio().
SD and autonomous media:
CYD_GetSDInfo(),CYD_UploadFileToSD();CYD_ListSDFiles(),CYD_DownloadFileFromSD(),CYD_DeleteSDFile();CYD_PlayGIFFromSD(),CYD_PauseGIF(),CYD_ResumeGIF(),CYD_StopGIF();CYD_PlayMP3FromSD(),CYD_PauseMP3(),CYD_ResumeMP3(),CYD_StopMP3();CYD_GetMediaStatus().CYD_SetRGB().
Wi-Fi:
CYD_HasWiFiScan();CYD_ScanWiFi(), with results inCYD_WiFiNetworks().
GIF and MP3 bytes are sent only during upload. Rendering and decoding then run on the ESP32 from FAT32 storage, so animation and sound do not depend on continuous frame/audio traffic from the PC.
The MP3 decoder accepts CBR and VBR. The validated guaranteed profile is CBR
at no more than 256 kbps. VBR is suitable only when every frame stays at or
below 256 kbps; a 256 kbps average may still contain unsupported 320 kbps
frames. To create the validated format, use
ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 256k output.mp3.
GIF defaults to #CYD_GIF_COVER, which fills the display and crops excess
edges. #CYD_GIF_CONTAIN preserves the whole frame with possible borders;
#CYD_GIF_STRETCH fills 320x240 without preserving aspect ratio. A local
Apache-2.0 AnimatedGIF 2.2.0 source copy raises the input-width limit and
allows the supplied 500x346 animation.gif to stream without a large canvas
allocation.
The library uses only PureBasic's standard SerialPort, memory, image, 2DDrawing, font, list, and timing functions. No WinAPI calls are used.
Drawing code migrated from WeActDisplay can use the compatibility-style
aliases CYD_DrawPixelBuffer, CYD_DrawRectangleBuffer,
CYD_DrawLineBuffer, CYD_DrawCircleBuffer, CYD_DrawTextSystemFont,
CYD_LoadImageToBuffer, and CYD_UpdateDisplay.
Copyright (C) CheshirCa 2026 — https://t.me/cheshircanest
This project is distributed under the supplied non-commercial license.
Commercial use, sale, paid distribution, and inclusion in commercial products
or services require explicit written permission from the author. Attribution
must be preserved in redistributed or modified copies. See the workspace
LICENSE file for the complete terms and warranty disclaimer.
The vendored AnimatedGIF 2.2.0 sources retain their separate Apache-2.0 license and copyright notices.
The QR encoder is adapted from the Project Nayuki QR Code generator. Its MIT
license notice is retained in purebasic/CYD_Display.pbi.