How to build a printer
Автор превратил e-ink-читалку Xteink X3 в настоящий принтер, реализовав протокол IPP поверх HTTP, чтобы macOS могла отправлять задания на печать как на обычное устройство. Он ограничил возможности устройством: монохром, 300 dpi, форматы Apple и PWG raster, бумага A5/Letter — всё, что нужно для совместимости. Для обнаружения в сети использовал Bonjour с поддержкой _universal, что потребовало прямого вызова ESP-IDF, так как Arduino-обёртка не позволяла.
Главная сложность — нехватка памяти: 400 КБ ОЗУ не хватало даже на хранение одной страницы в 8,4 МБ. Решение — обходить буферизацию: изображение обрабатывалось построчно, сразу рисовалось на дисплее, а не сохранялось в RAM. Это сократило потребление памяти с 113 КБ до 62 КБ, освободив ресурсы для сети. Финальное изображение сохранялось на SD-карту как BMP. Когда пользователь нажал «Печать» в Preview, страница появилась на экране за секунду — и осталась там, как на настоящей бумаге. Теперь читалка умеет не только читать, но и печатать — с выходным лотком в виде папки на карте.