sticky-lab

Sticky Lab – Spec

Abgenommen von Markus am 15.11.2026. Entscheidungen in Abschnitt 7; einzelne „Vorschlag“-Punkte werden beim Bauen entschieden. Kennzeichnung: fest = beschlossen, Vorschlag = zur Entscheidung, offen = noch zu klären.

Eine eigene Firmware für den reTerminal Sticky (XIAO ESP32-S3, 32 MB Flash, 8 MB OPI-PSRAM, e-Ink 800 × 480 1 bpp, Touch GT911, Tasten ▲ ▼ KI, microSD, BQ27220, PCF8563, LSM6DS3, SHT40, Summer). Es geht um die Technik des Stickys und um gutes Design direkt auf dem e-Ink. Es gibt keine Handy-App und keinen EDC-Funktionsumfang.

1. Rolle

2. Stationen (was das Lab zeigt)

Jede Station ist eine Seite. Reihenfolge = Bau-Reihenfolge.

# Station Was man sieht und tut Was gemessen wird
1 Refresh-Labor Testmuster (Schachbrett, Text, Fläche), Knöpfe: Voll · Teil · Schnell · Teil ohne Schlaf Dauer in ms, wie viele Teil-Refreshes bis zum sichtbaren Ghosting, Zähler seit dem letzten Voll-Refresh
2 Schrift-Katalog dieselbe Zeile in allen Schriften und Größen (Bitmap, Strichschrift aus EDC, Ziffernblatt), mit ▲/▼ blättern, Tippen = Lupe 4× Mindestgröße, die auf Armlänge lesbar ist (Markus entscheidet, das Lab merkt es sich)
3 Raster & Dithering Graukeil und ein Testbild von der SD: Schwelle, Bayer 4×4/8×8, Floyd-Steinberg, Atkinson, Halbtonpunkte, Linienraster Rechenzeit; dazu die Frage, was auf 1 bpp am besten aussieht
4 Braun-Baukasten alle Bedienelemente aus braun.js, jetzt in C++ in der Firmware gezeichnet: Doppelring, Pille, Rasterrand, dünner Ring, Schieber, Drehrad, Reiter; jeweils Ruhe, gedrückt und aktiv Zeichenzeit je Element; ob 58 px für „Wurstfinger“ reichen
5 Bewegung Animation per Teil-Refresh: Fortschrittsbalken, Zeiger, Zahlenrolle wie im Kilometerzähler, Ladekreis erreichte Bilder pro Sekunde; ab wann es ruckelt oder schmiert
6 Touch-Labor Zielscheibe mit Treffer-Kreuzen, Kritzelspur, Rückmeldungsarten im Vergleich (Rahmen, Invertieren, Klick, Summer) Latenz Berührung → sichtbare Rückmeldung, Abweichung vom Ziel in px
7 Instrumente Sensoren als Braun-Instrumente: Klima (SHT40) mit Taupunkt, Wasserwaage (LSM6DS3), Akku mit Spannung, Strom und Verlauf (BQ27220), Uhr (PCF8563) Werte live, wahlweise alle n Sekunden in die CSV
8 Energie (umgesetzt FW 0.2.0) Akku-Kapazität aus dem BQ27220 (FullChargeCapacity), Dauerlauf: n Refreshes einer Art, dann Füllstand vorher/nachher; Grundverbrauch wach, Leichtschlaf, Tiefschlaf über Stunden mAh je Voll-/Teil-Refresh, mA je Zustand, hochgerechnet „Refreshes pro Ladung“ und „Tage im Schlaf“

3. Bedienung

4. Aufbau

sticky-lab/
  SPEC.md · STAND.md · LABORBUCH.md · README.md
  firmware/                 Arduino-Sketch
    firmware.ino            Start, Schleife, Stationswahl
    pins.h                  Pins laut Schaltplan (aus EDC)
    anzeige.h               Seeed_GFX2, Refresh-Arten, Zähler, Zeitmessung
    zeichnen.h              Grundformen auf dem 1-bpp-Puffer (Kreis, Ring, Raster, Text)
    braun.h                 Bedienelemente (C++-Fassung von braun.js)
    schriften.h             Schriften (Strichschrift aus EDC, Bitmap-Schriften)
    raster.h                Dither-Verfahren
    eingabe.h               Tasten und Touch (GT911), Entprellen, Gesten
    sensoren.h              SHT40, LSM6DS3, BQ27220, PCF8563 (aus EDC)
    karte.h                 SD-Karte: /lab/messungen.csv, /lab/fotos, /lab/bilder
    schlaf.h                Schlafen und Wecken (aus EDC)
    station.h               Schnittstelle: name, zeichnen, taste, tipp, tick
    stationen/              eine Datei je Station (refresh.h, schrift.h …)
    partitions.csv          wie EDC (gleiche Aufteilung, siehe 6.)
  werkzeuge/
    foto2png.py             Bildschirmfoto von der SD → PNG
    bauen.ps1               compile + upload in einem

5. Was aus der EDC-Firmware übernommen wird

Als Kopie mit Herkunftsvermerk („aus reterminal-sticky FW 0.31.8“). Es gibt keinen Verweis auf den EDC-Ordner, denn der bleibt unverändert.

übernehmen woher Anmerkung
Pins, Tasten aktiv low (KI 4, ▲ 5, ▼ 6), PWR_HOLD 45, Summer 48, Touch 2/3/21/41/42, MISC_I2C 0/1 EDC SPEC.md, STAND.md dazu die Stolperfalle: Tasten und Touch erst nach display.begin() einrichten
Seeed_GFX2 mit Patch gfxPartialWachHalten firmware-ble/bibliothek-patch Refresh-Labor misst genau diese Stellschrauben
GT911-Konfiguration nur schreiben, wenn keine da ist EDC-Firmware  
Teil-Refresh, Hoch/Quer-Drehung, 180° modus.h, widget.h  
PackBits/RLE fürs Bildschirmfoto /ist/bildschirm.rle  
Schlaf und Wecken (Tasten, GPIO7 für Bewegung) schlaf.h  
Sensoren sensoren.h Strom-Register 0x0C ist unplausibel, das Lab klärt es (Station 7)
Strichschrift, Ziffernblatt schrift.h  
Braun-Regeln sticky-app/src/braun.js wird nach C++ übertragen
nicht übernommen   BLE, Abgleich, Bordbuch, Audio/Diktat, Widgets, Fahrtenschreiber, Zettel

6. EDC und Lab auf einem Gerät

Der Sticky hat schon zwei App-Plätze (app0 und app1, je 4 MB), siehe partitions.csv.

7. Entscheidungen (Markus, 15.11.2026)

  1. fest: Lab-Gerät ist vorerst der zweite Sticky, der erste bleibt bei der EDC-Firmware. Geht das Lab-Gerät später zurück auf EDC, wird /lab/ von der SD gelöscht. Deshalb gilt besonders: Das Lab lässt die EDC-Daten auf dem Gerät in Ruhe (siehe 6.).
  2. fest: Wechsel per Umflashen (A). Die zwei Plätze (B) kommen erst, wenn das Hin und Her nervt.
  3. fest: eigenes Repo sticky-lab, öffentlich. Anlegen und pushen erst nach Markus’ ausdrücklichem „Ja“. Keine persönlichen Daten, auch nicht in Testbildern oder Messungen.
  4. fest: Lizenz MIT wie reterminal-sticky.
  5. Vorschlag: als Erstes die Stationen 1 Refresh, 4 Braun, 6 Touch, danach in der Reihenfolge der Tabelle.

8. Sticky-Console auf dem Zenbook (Markus, 15.11.2026)

9. Offen