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.

ScanSync Status Display mit E-Paper-Anzeige am Dokumentenscanner

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.