Découverte et protocole IPP
L’auteur a exploité le protocole Internet Printing Protocol (IPP), qui repose sur HTTP, pour transformer le lecteur e‑ink Xteink X3 en imprimante réseau. Le flux IPP comprend des requêtes comme Get-Printer-Attributes pour interroger les capacités et Print-Job pour transmettre le document. Le serveur a annoncé une sortie monochrome à 300 dpi, une copie, recto‑verso désactivé, et a accepté les formats Apple raster et PWG raster, obligeant le Mac à rasteriser le document avant l’envoi.
Gestion de la mémoire et flux d’image
Un document au format Lettre (8,5 × 11 po) à 300 dpi occupe 2 550 × 3 300 pixels, soit environ 8,4 Mo en niveaux de gris non compressés. Le X3 ne dispose que de 400 KB de RAM, dont 16 KB réservés au cache, laissant seulement 6,8 KB de tas disponible après le lancement du Wi‑Fi et du serveur d’impression. Pour contourner cette contrainte, l’auteur a décodé les lignes d’image à la volée, les a ditherisées en noir et blanc, puis les a écrites directement dans le buffer d’affichage déjà alloué, évitant ainsi toute copie intermédiaire.
Implémentation du serveur d’impression sur l’ESP32‑C3
Le dispositif utilise le SDK ESP‑IDF. La découverte sur macOS repose sur Bonjour, avec l’enregistrement d’un service _ipp._tcp et l’ajout du sous‑type _universal via l’API mDNS native, car le wrapper Arduino ne le supporte pas. Le serveur écoute les requêtes IPP sur le port 631, extrait les données raster, les redimensionne à la résolution de l’écran, puis les injecte ligne par ligne dans la RAM vidéo. Une fois la page complète reçue, le code sauvegarde un BMP sur la carte SD, libérant ainsi les tampons sockets du réseau.
Résultats et limites
Le premier test a imprimé une page manga depuis macOS en environ une seconde, affichée correctement sur l’écran e‑ink. Les impressions restent stockées sur la carte SD et sont accessibles via le navigateur du lecteur, simulant un bac de sortie. La solution reste dépendante de la capacité de traitement en temps réel du C3 ; des documents plus volumineux ou des résolutions supérieures pourraient saturer le tampon de 6,8 KB, entraînant des délais ou des échecs d’impression. Malgré ces restrictions, l’approche démontre qu’un dispositif à ressources limitées peut offrir un service d’impression réseau complet en réutilisant son propre affichage comme mémoire de travail.