Présentation
PaperMono est un dispositif e‑paper de 3,97 " basé sur un ESP32‑S3. Il fonctionne comme un aimant de réfrigérateur affichant une liste de courses. Le firmware, écrit en C++/Arduino, compte environ 2 400 lignes et gère l’affichage, le tactile et la connectivité Wi‑Fi. Un serveur FastAPI stocke la liste dans SQLite et expose une interface web accessible depuis un smartphone.
Architecture matérielle et firmware
Le panneau e‑paper a une résolution de 480 × 800 px. Les rafraîchissements partiels sont utilisés pour les interactions (tap, swipe, saisie). Un rafraîchissement complet est forcé toutes les dix mises à jour partielles afin de limiter le ghosting du verre. Les niveaux de gris sont rendus par des motifs 1‑bit, ce qui assure une apparence identique en mode partiel ou complet.
Le tactile repose sur un contrôleur I²C. L’interface clavier à l’écran ne redessine que les caractères modifiés, ce qui réduit le nombre de cycles d’alimentation du panneau. La gestion de l’alimentation désactive le Wi‑Fi dès que la synchronisation est terminée. Le dispositif se met en veille profonde lorsqu’il n’est plus alimenté, et s’éteint automatiquement si la tension de la batterie descend sous un seuil sécurisé. Le front‑light reste éteint par défaut.
Serveur et synchronisation
Le serveur, situé dans le répertoire server/, exécute FastAPI et utilise SQLite comme magasin persistant. La communication entre le dispositif et le serveur se fait via HTTP. La synchronisation s’effectue chaque heure, à chaque tap si la dernière mise à jour date de plus de cinq minutes, et immédiatement après chaque modification de la liste.
python -m venv .venv
.venv/bin/pip install -e .
.venv/bin/uvicorn shopping_list.main:app --host 0.0.0.0 --port 8000
Les ajouts sont mis en file d’attente sur la flash du dispositif lorsqu’il est hors ligne, puis transmis lors du prochain cycle Wi‑Fi. Le serveur conserve un catalogue de tous les articles, ce qui alimente les suggestions d’autocomplétion sur le dispositif et le téléphone. Une intégration optionnelle avec Claude (CLI) permet de classer automatiquement les nouveaux articles dans les rayons appropriés.
Analyse des performances et limites
Le choix du rafraîchissement partiel minimise la consommation d’énergie, mais le besoin d’un rafraîchissement complet périodique impose un pic de consommation qui reste compatible avec une batterie de petite capacité. La dépendance au Wi‑Fi pour la synchronisation rend le dispositif sensible aux environnements sans signal, bien que les opérations de base (consultation, coche, ajout) restent fonctionnelles hors ligne grâce à la file d’attente locale.
Le serveur FastAPI, bien que léger, nécessite un hébergement dédié ou un conteneur Docker pour la production. L’utilisation de SQLite simplifie le déploiement mais limite la scalabilité à un seul utilisateur ou à un petit nombre de listes simultanées. L’intégration Claude ajoute une couche de traitement externe ; son absence ne bloque pas le fonctionnement, mais réduit l’automatisation du tri des articles.
En résumé, PaperMono combine un affichage e‑paper à faible consommation avec un serveur web minimaliste pour offrir une liste de courses persistante et synchronisée. Le projet fournit une documentation détaillée du schéma de câblage, des adresses I²C et de la séquence d’initialisation, ce qui facilite la reproduction et l’extension du système.