MyOwnWatch

Montre DIY e-paper + nRF52840 + boîtier 3D

MyOwnWatch

Montre DIY open-source: écran e-paper 1.54" avec rafraîchissement partiel, microcontrôleur nRF52840 BLE low-power, boîtier imprimé 3D. Autonomie visée: 2-4 semaines.

e-paper GDEY0154D67 nRF52840 BLE 5.0 200x200 partial refresh 3D printed case ~$25 BOM

01 Choix finaux

Après recherche multi-agent (écrans, MCUs, projets de référence), voici les composants retenus.

📺
Écran e-paper
GDEY0154D67
1.54" 200x200, SSD1681, partial refresh 0.3s sans flicker. 4 grayscale. SPI 24-pin FPC. Standard DIY (utilisé par Watchy).
$5.30
🔌
Microcontrôleur
nRF52840 (XIAO)
BLE 5.0, sleep 1.5µA, 4x SPI pour e-paper, USB natif, chargeur LiPo onboard. Module castellated 11x11mm. Arduino + CircuitPython + Zephyr + Rust.
$9.90
🔋
Batterie
LiPo 200mAh 402030
3.7V, format 40x20x3mm. Standard Watchy. Chargeur TP4056 ou BQ25101 (onboard XIAO). ~$2-3.
$3.00

02 Écrans e-paper (montre, <2")

Comparatif des écrans e-paper candidats. Critères: taille <2", partial refresh (sans flicker), disponibilité retail.

Ghosting: tous les panneaux Good Display avec partial refresh accumulent du ghosting après ~5 updates consécutifs. Solution: full refresh périodique (toutes les 5 partial updates, ou toutes les 1-5 minutes). Le VCOM peut être ajusté dans le code pour mitigater.

03 Microcontrôleurs BLE low-power

Comparatif des MCUs pour montre batterie. Critère principal: sleep current (plus bas = meilleure autonomie), puis SPI pour e-paper, puis écosystème dev.

04 Projets de référence

Projets open-source de montres DIY existants. Watchy v3 est le seul qui combine e-paper + case 3D + open hardware complet — c'est notre base. Les autres servent de référence pour le power management (PineTime, Bangle.js 2) et le firmware (InkWatchy).

05 BOM complet

Liste complète des composants avec liens d'achat. Le XIAO nRF52840 a un chargeur LiPo onboard (BQ25101) — si tu utilises le XIAO directement sans PCB custom, skip le TP4056, le LDO et l'USB-C, ce qui ramène à ~$18.

~$23-25 Fourchette réaliste avec shipping: $30-40. Optimiste (lot AliExpress): $18-22.

06 Hardware — référence Watchy v3

Le hardware de Watchy v3 (repo sqfmi/watchy-hardware) est notre base. On copie le circuit boost e-paper (MCU-agnostique), le pinout FPC, et on remplace l'ESP32-S3 par le nRF52840.

Pinout FPC 24-pin (GDEY0154D67 / SSD1681)

Circuit boost e-paper (à copier tel quel)

Le SSD1681 ne génère pas les ±15V seul. Il pilote un MOSFET externe (GDR) pour le +15V (PREVGH) et une pompe à diode pour le -15V (PREVGL). Ce sous-circuit est indépendant du MCU — directement réutilisable.

+3V3 ── L2(47µH) ──┬── drain Q3(AO3400A NMOS) └── D5(MBR0530) ──> PREVGH ~+15V → FPC pin 21 FPC NE (pins 5,18,20,22,24) ── D3+D4(MBR0530) + C21(4.7µF/50V) ──> PREVGL ~-15V → FPC pin 23 GDR (FPC pin 2) pilote la grille Q3 via R16(1MΩ) RESE (FPC pin 3) ── R17(2.2Ω) ── GND (sens de courant) MCU ne voit que: SPI (CS/SCK/MOSI) + DC + RES + BUSY = 6 GPIO

Power tree

USB-C 5V ──> Chargeur (BQ25101 onboard XIAO) ──> LiPo 200mAh │ +3V3 (LDO onboard XIAO) ─┤ +3V3 ─┬─> nRF52840 ├─> BMA423 (I2C) ├─> PCF8563 (I2C) └─> Boost e-paper (L2+Q3+D3-D5 → PREVGH/PREVGL) │ SSD1681 ← SPI (6 GPIO) + ±15V (boost)

Points clés du port nRF52840

LDO: remplacer AP2112K (~55µA Iq) par ME6211 (~1µA Iq) — crucial pour le budget sommeil
RTC: nRF52840 a RTC interne + oscillateur 32kHz, pas besoin d'IC externe (PCF8563 optionnel pour précision)
Antenne BLE: le XIAO a déjà l'antenne — sur PCB custom, suivre le layout Raytac MDBT50Q
USB: le XIAO a USB-C natif — sur PCB custom, remplacer Micro-USB par USB-C
Diviseur batterie: utiliser résistances haute valeur (3.6MΩ/1MΩ) pour réduire la conso idle

07 Firmware

Stack recommandé: GxEPD2 (driver e-paper) sur Arduino-core nRF52840. Le driver GDEY0154D67 est MCU-agnostique — zéro modification nécessaire.

Stack

Framework
Arduino nRF52840
Adafruit Bluefruit — GxEPD2 marche direct, pas de port
Driver écran
GxEPD2
GDEY0154D67 natif, partial refresh inclus, hibernate()
Graphiques
Adafruit_GFX
Texte, bitmaps, primitives — déjà dépendance GxEPD2
RTC
PCF8563 (Wire)
Précision, timer wake interrupt
Accéléromètre
BMA423 (Wire)
Step counter + tilt wake (pattern Watchy)
BLE
Bluefruit (Adafruit)
BLE HID, notifications, time sync — exemples inclus
Sleep
InfiniTime pattern
System ON + WFE, 66µA mesuré sur nRF52832
Companion app
Gadgetbridge
Open source, déjà fait pour PineTime (Android/Linux/iOS)

Réutilisé tel quel (zéro modification)

GxEPD2_154_GDEY0154D67.cpp/h — driver SSD1681, init, partial/full refresh, hibernate
GxEPD2_EPD.cpp/h — base SPI + busy-wait
Adafruit_GFX — rendu texte/bitmaps
• Pattern display.hibernate() avant sleep MCU
• Pattern sleep nRF52 de InfiniTime SystemTask.cpp (~50 lignes)

À écrire from scratch

Pin definitions (~20 lignes) — mapper CS/SCK/MOSI/DC/RES/BUSY sur GPIO du XIAO
Main loop — wake → update display (partial) → hibernate → sleep → repeat (60s pour l'heure, bouton pour menu)
BLE companion — notification forwarding + time sync (Bluefruit a des exemples)
Watch faces — au minimum une face analogique + une digitale

Gestion du ghosting

Le partial refresh accumule du ghosting après ~5 updates consécutifs. Solution: full refresh toutes les ~5 partial updates (ce que font Watchy et InkWatchy). Le full refresh prend 2.6s (fast mode 1.5s via 0xd7 au lieu de 0xf7).

Le partial refresh repose sur deux buffers du SSD1681: 0x24 (image NEW) et 0x26 (image PREVIOUS). Le contrôleur ne change que les pixels où new != previous.

Liens

GxEPD2 — driver e-paper complet
InfiniTime — sleep pattern nRF52 FreeRTOS
InkWatchy — ghosting fix, BLE HID, UI Rust/Slint
Watchy firmware — Arduino base, GxEPD2, RTC, deep-sleep

08 Estimation autonomie

Estimation basée sur les consommations mesurées du nRF52840 (PineTime/InfiniTime) et de l'écran e-paper (GxEPD2 hibernate).

Autonomie théorique: 200mAh / ~4 mAh/jour ≈ ~50 jours (sans BLE actif). Avec BLE connecté pour notifications: ~1-2 semaines.

Le BMA423 en mode low-power consomme ~14µA, le nRF52840 System ON ~1.5µA, mais les composants passifs (LDO Iq, diviseur ADC, pulls) ajoutent ~10-20µA. Réel visé: 20-60µA idle2-4 semaines avec BLE, 4-8 semaines sans.

09 Timeline

8 phases sur ~6-8 semaines (dont 2-4 semaines d'attente shipping).

10 Ressources

Liens GitHub, datasheets, guides d'achat.

11 Risques et points d'attention

RisqueMitigation
Soudure BMA423 LGA-12 (2x2mm)Utiliser breakout Adafruit LIS3DH (~$7.50, I2C compatible) si pas d'expérience soudeuse fine
Boost e-paper (~15V)Copier exactement le schéma Watchy (L2+Q3+D3-D5+C20-C21) — validé en prod par des milliers de Watchy
Ghosting e-paperFull refresh toutes les 5 partial updates — pattern utilisé par tous les projets e-paper
Antenne BLE sur PCB customSuivre le layout Raytac MDBT50Q reference design (pi-match network)
LDO Iq trop hauteRemplacer AP2112K (55µA) par ME6211 (1µA) — divise par 55 la conso sleep du régulateur