Найти тему
Электроника, ESP32, Arduino

Не мигай светодиодом - сделай лучше монитор

Оглавление

В сети подобных проектов никто не делал. На микроконтроллерах можно делать не только светодиодные мигалки и элементы умного дома, но и другие интересные штуки - например периферию для ПК. Рули, клавиатуры (в том числе беспроводные) я уже делал - пришло время сделать самодельный монитор.

Монитор для компьютера своими руками
Монитор для компьютера своими руками

Принципиальная электрическая схема:

Принципиальная электрическая схема
Принципиальная электрическая схема

Проект выполнен на базе микроконтроллера ESP32. Данные для видео-картинки передаются через виртуальный COM порт, который появляется в системе OS Windows после подключения USB-UART преобразователя на базе микросхемы PL230HX (скорость 5'000'000 бод/секунду). PL230HX сидит на 2-м аппаратном UART платформы ESP32. Принимаемые данные транслируются ESP32 в цветной TFT дисплей на контроллере ILI9341 подключенный через интерфейс SPI (320х240).

Прототип на макетной плате:

-3

Прототип подключён к миникомпьютеру из Китая под управлением 32-х разрядных "форточек" от Микрософт. Про сам компьютер я писал в этой статье.

Как это все работает со стороны Arduino?

-4

Для работы с дисплеем на гитхабе нашлась шикарная библиотека TFT_eSPI

GitHub - Bodmer/TFT_eSPI: Arduino and PlatformIO IDE compatible TFT library optimised for the Raspberry Pi Pico (RP2040), STM32, ESP8266 and ESP32 that supports different driver chips

Она поддерживает огромное количество контроллеров дисплеев:

-5

Но! самое главное написана с учетом особенностей архитектуры ESP32. Единственный минус - очень слабая документация. Автор сам в этом признается, так как работает в крупной компании и на хобби у него практически не остается времени. Если для Вас Arduino до сих пор конструктор из кубиков для домохозяек, скорее всего воспользоваться этим мощным инструментом у Вас не выйдет - тут требуются как минимум базовые знания языка С

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

-6

Покопавшись в исходниках, нашлась команда, которая делает именно то что нужно - отправляет массив размещенный в оперативной памяти в котором содержаться данные о цветах - формат 8 бит на пиксель (RGB323)

Биты устанавливающие цвет пикселя
Биты устанавливающие цвет пикселя

Код для ESP32 получился простой до безобразия:

-8

В основном цикле loop() мы ждем пакет данных размером 76800 байт и как только все до одного их получим - отправляем картинку на дисплей. Время выполнения самой отправки данных на дисплей - команда:

myGLCD.pushImage(0, 0, 320, 240, disIMG);

занимает примерно 42ms. Алгоритм работы команды Serial2.readBytes() я разбирал в этой статье.

Как это работает со стороны Windows ?

1. На компьютере создается одна локальная учетная запись.

2. Для этой учетной записи создается пароль (для возможности подключения по RDP с другого компьютера). Для самой учетной записи делается разрешение на вход на ПК без пароля. Если компьютером пользуетесь только вы, есть хорошая статья на сайте как отключить окно приветствия и ввод пароля (команда netplwiz)

Как убрать пароль при входе в Windows 10

3. В планировщик заданий - (команда taskschd.msc) при событии вход в Windows помещается команда на запуск самодельной софтины написанной на языке С#

-9
-10

Софтина имеет свой собственный файл конфигурации

-11

Номер COM порта на котором сидит переходник USB-UART и частота отправки кадров каждые ms (зависит от характеристик ПК и её можно выяснить с помощью кнопки test).

Если в файле написать вместо N - Y то при запуске программы:

- открывается COM порт указанный в файле;

- делается скриншот в оперативную память ПК;

- с помощью WinApi определяется положение и форма курсора;

- курсор копипаститься на файл скриншота;

- скриншот переводится в разрешение подключенного дисплея;

- данные из формата ARGB8888 конвертируются в формат RGB323 по схеме:

-12

если совсем не понятно, о чем речь - советую прочитать эту статью

- сформированный из этих данных массив отправляется в ESP32

- через время указанное в файле, процесс повторяется.

Винда загрузилась, картинка появилась. Разбирать подробно код под Windows не вижу смысла - по статистике эти статьи все равно никто не читает. Если нужен подробный разбор кода - пишите в комментариях. Все исходники будут прикреплены к статье - кому нужно, сами посмотрите.

Демонстрацию работы дисплея смотрите в этом видео:

Код ТУТ:

Monitor_ILI9341_V2.zip

Оглавление канала ТУТ

Всем удачи!