EdigE
← ЛЕНТА

ESP32-C3 сделал e-paper IPP-принтером без входного raster-буфера

В Preview нажимают Print — и Xteink X3 появляется среди сетевых принтеров под именем penguin. Но ESP32-C3 не может бездумно принять в SRAM целую страницу Letter при 300 dpi: промежуточное 8-битное изображение размером 2550 × 3300 пикселей заняло бы около 8.4 MB. Поэтому прошивка разбирает задание IPP строка за строкой и никогда не выделяет отдельный полноразмерный входной raster-буфер.

Страница проходит через MCU по строке

Это важная поправка к красивой, но неточной формуле «страница вообще не хранится». Итоговое однобитное изображение всё же собирается в уже существующем framebuffer дисплея. Каждая строка входного Apple Raster или PWG Raster масштабируется с сохранением пропорций, превращается в чёрно-белую через error-diffusion dithering и попадает в этот буфер. После завершения работы готовая страница сохраняется на SD-карту как BMP и становится доступна в файловом браузере ридера.

Автор проекта измерил сокращение памяти, занятой image buffer, примерно со 113 KB до 62 KB. Это не независимый бенчмарк и не полная сводка RAM прошивки, однако сам приём хорошо виден в исходниках: память расходуется на текущую строку и состояние преобразования, а не на вторую копию будущего экрана. Для MCU это часто означает, что задачу решает смена направления потока данных, а не переход на чип с большей памятью.

ОС уже умеет говорить с таким устройством

Компьютеру при этом не нужно знать ничего об e-paper. ESP32-C3 публикует сервис _ipp._tcp через Bonjour/mDNS и отвечает на минимальный набор IPP-запросов, достаточный для печати. Сервер объявляет monochrome, single-sided, одну копию, Apple Raster и PWG Raster; по умолчанию согласован A5, также заявлен US Letter. Число 300 dpi здесь описывает raster negotiation с хостом, а не физическое разрешение панели: изображение затем подгоняется под экран.

Такой интерфейс убирает целый слой самодельной инфраструктуры. Документ уже умеют отправлять браузер, PDF-просмотрщик, офисный пакет и системный диалог печати. Ридеру остаётся принять знакомый системе поток пикселей и превратить его в экранную страницу. SD-карта в этой схеме получает роль лотка с готовыми листами.

Узкий IPP-сервер вместо универсального принтера

Реализация намеренно узкая. Это специализированный IPP endpoint для raster-потоков, с синхронным выполнением заданий, пустой очередью и без аутентификации. Он не претендует на универсальный принт-сервер. Зато именно эта узость позволила соединить сетевой стек настольной ОС и маломощный дисплей без мобильного приложения, browser uploader и собственного протокола.