Мой блог
Создаем миниатюрный e-ink монитор для сервера на базе ESP32-S3 своими руками
Создание кастомных аппаратных решений для мониторинга домашней инфраструктуры — отличный способ держать под контролем ресурсоемкие задачи. Я решил собрать компактный информационный дисплей на базе популярной платы Waveshare с экраном на электронных чернилах, чтобы в реальном времени отслеживать состояние сервера без лишних манипуляций со смартфоном или громоздкими мониторами.










Проект родился из практической необходимости следить за аппаратными параметрами домашнего сервера, который размещен на кухне и укомплектован двумя производительными видеокартами Tesla P100. Полноразмерный монитор подключать некуда и нецелесообразно из-за лишнего энергопотребления, а постоянно проверять вкладку в браузере на мобильном устройстве неудобно. Черно-белый e-Paper экран с разрешением 200 на 200 пикселей подошел идеально: он не слепит глаза в темноте, не тратит энергоресурсы в статичном режиме и отлично читается при любом внешнем освещении.

Выбор аппаратной платформы и закупка комплектующих
Основой устройства стала доступная на маркетплейсах плата разработки, выполненная в защитном пластиковом боксе. Внутри скрывается микроконтроллер ESP32-S3-PICO, оснащенный восемью мегабайтами флеш-памяти и аналогичным объемом быстрой PSRAM. Сам дисплей функционирует на базе контроллера SSD1681. Производитель также заложил в комплект датчик температуры и влажности SHTC3, часы реального времени, аудиокодек с динамиком, слот под карточки памяти и разъем Type-C, хотя для простой роли аппаратного информера задействована лишь малая часть этого богатого потенциала.

Особенности написания прошивки и эволюция архитектуры
Первый макет картинки заработал уже через полтора часа после старта, однако последующая отладка преподнесла немало сюрпризов с цикличными перезагрузками без генерации понятных логов. В итоге устройство получило кодовое имя inkmetrics и развилось до стабильной версии. Изначально буфер кадра формировался на стороне хоста с помощью скрипта на Python и передавался через виртуальный COM-порт, но от этого подхода пришлось отказаться ради гибкости интерфейса. Теперь вся логика верстки и генерации шрифтов перенесена непосредственно на микроконтроллер, а операционная система ПК раз в минуту отправляет легкий пакет данных в формате JSON через локальный сетевой интерфейс.

Переход на ESP-IDF и настройка USB-соединения
Стандартное Arduino-ядро не позволяло полноценно реализовать работу по USB-сети из-за ограничений встроенного стека TinyUSB, поэтому проект был полностью перенесен на официальный фреймворк ESP-IDF. Настройка сетевого класса RNDIS потребовала ручного описания дескрипторов и тщательной отладки обработки буферов, чтобы избежать фатальных сбоев памяти из-за некорректного чтения длины кадров. Также потребовалось корректно развести сетевые маршруты и параметры DHCP-сервера, чтобы подключенный по USB прибор не перехватывал основной интернет-трафик хост-машины.

Эмуляция накопителя и особенности разметки
Для удобства установки агент сопряжения поставляется прямо на виртуальном диске самого устройства. В процессе экспериментов выяснилось, что операционная система Windows строго классифицирует накопители по их геометрическому размеру: стандартный объем дискеты заставлял систему монтировать устройство как медленный съемный диск типа A:. Увеличение объема до 3,69 мегабайт с таблицей разделов MBR и файловой системой FAT16 позволило корректно зарегистрировать устройство в системе как стандартный логический диск.

Интерфейс, функционал и веб-кабинет
Управление и визуализация устройства продуманы до мелочей. Физические кнопки позволяют переключать рабочие экраны и принудительно обновлять кадр, а встроенный легковесный веб-интерфейс открывается по статичному адресу в браузере без установки дополнительного софта. На главной странице отображаются сводные метрики, текущие настройки отображения и состояние хоста, а также предусмотрена программная точка входа в режим прошивки.

Сбор метрик на стороне хоста
Для сбора системных показателей используется компактный агент, который разворачивается в фоновом режиме через простой командный файл. Утилита ежеминутно опрашивает штатные счетчики операционной системы, проверяет сетевое соединение с помощью ICMP-запросов и считывает параметры дискретных видеокарт. Для видеокарт NVIDIA задействована утилита командной строки, а для остальных адаптеров применяются низкоуровневые счетчики WDDM, что гарантирует стабильную работу мониторинга на любых конфигурациях железа.

Процесс прошивки и развертывания
Залить собранный бинарник на девборд можно несколькими способами с помощью единственного кабеля USB. Комплект поставки включает все необходимые скрипты для автоматической записи загрузчика, таблицы разделов, самой прошивки и образов файловой системы. Применение специализированных скриптов позволяет корректно завершать процедуру обновления без ручного перетыкания кабеля или постоянного удержания аппаратной кнопки загрузки.

Итоги разработки и затраты ресурсов
Создание этого миниатюрного аппаратного монитора заняло около восемнадцати часов чистой разработки, разделенной на несколько продуктивных сессий под управлением языковых моделей и специализированных агентов. Практическая польза от готового устройства полностью оправдала затраченные усилия: теперь температурный режим мощного сервера и состояние фоновых нейросетевых задач видны с первого взгляда при проходе мимо рабочей зоны.

