ScanSync Status Display: E-Paper Dashboard mit MicroPython¶
Mein Dokumenten-Scanner ScanSync verarbeitet seit einiger Zeit zuverlässig Scans per OCR und schiebt sie nach OneDrive. Was bisher fehlte: eine physische Statusanzeige direkt am Gerät.
Die Idee¶
Ein Waveshare 2.9” E-Paper Display an einem Raspberry Pi Pico W, das die ScanSync API pollt und den Verarbeitungsstatus in Echtzeit anzeigt. E-Paper deshalb, weil das Display auch ohne Strom den letzten Stand zeigt und im Dauerbetrieb kaum Energie verbraucht.
Hardware¶
| Komponente | Modell |
|---|---|
| Microcontroller | Raspberry Pi Pico W |
| Display | Waveshare 2.9” e-Paper (296×128, schwarz/weiß) |
Die Verkabelung ist Standard-SPI — Display an den Pico, fertig:
RST → GPIO 12
DC → GPIO 8
CS → GPIO 9
BUSY → GPIO 13
CLK → SPI(1) default
DIN → SPI(1) default
Das Dashboard¶
Das Display zeigt auf 296×128 Pixeln erstaunlich viel Information:
┌──────────────────────────────────┐
│ ScanSync ▂▄▆█ │ ← Header mit WiFi-Signal
│ ✓10 ⚙3 ✗2 =15 Ø46s │ ← Stats-Übersicht
│ [████████████▒▒▒░░] │ ← Fortschrittsbalken
│─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ ⚙ report_q1.pdf [OCR] │ ← Dateiliste mit Status
│ ⚙ invoice_2026.pdf [META] │
│ ✓ scan_003.pdf [OK] │
│ ✗ broken.pdf [ERR] │
│ ✓ letter_feb.pdf [OK] │
│─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ 🕐 Fertig: 26.03. 14:02 (3min) │ ← Letzter Abschluss
│──────────────────────────────────│
│ Upd 14:05 📶 🖥 │ ← Footer mit Status-Icons
└──────────────────────────────────┘
Zeichnen auf 296 Pixeln Breite¶
Für den gestapelten Fortschrittsbalken sieht der Code so aus:
def draw_progress_bar(epd, x, y, w, h, val, mx=5):
epd.rect(x, y, w, h, 0)
if val < 0:
# Fehler: diagonales Schraffurmuster
for i in range(0, w, 4):
epd.line(x + i, y,
x + min(i + h, w - 1), y + h - 1, 0)
return
fw = int((w - 4) * min(val, mx) / mx)
if fw > 0:
epd.fill_rect(x + 2, y + 2, fw, h - 4, 0)
Für die Trennlinien zwischen den Sektionen nutze ich ein Dithering-Pattern, das auf dem E-Paper wie ein Grauton wirkt:
def draw_gray_sep(epd, y, x0=0, w=296):
"""2px dithered gray separator"""
for row in range(2):
offset = (y + row) % 2
for x in range(offset + x0, x0 + w, 2):
epd.pixel(x, y + row, 0)
Boot-Sequenz¶
Beim Start durchläuft das Display eine animierte 4-Schritt Boot-Sequenz: Init → WiFi → Time → Data. Jeder Schritt wird visuell bestätigt, bevor das eigentliche Dashboard erscheint.
Parallel dazu: ScanSync v0.4.1¶
Zeitgleich wurde ScanSync selbst auf v0.4.1 aktualisiert. Die /api/status-Endpunkt liefert jetzt deutlich mehr Informationen: Verarbeitungs-Breakdown, kürzlich verarbeitete Dateien und aggregierte Statistiken — genau die Daten, die das E-Paper Display braucht.
Fazit¶
Ein Pico W, ein E-Paper Display und ~300 Zeilen MicroPython — fertig ist ein dauerhaft sichtbares Status-Dashboard. Das Repository ist ab sofort öffentlich auf GitHub.