From 9c118c04af18b1900cfcfd6fcc512366d11116ab Mon Sep 17 00:00:00 2001
From: mwood77 <43637076+mwood77@users.noreply.github.com>
Date: Mon, 8 Apr 2024 17:03:13 +0200
Subject: [PATCH] Support for OLED Screens (#47)
* hackish oled implementation
* bug - save state when winding complet
* basic GUI
* tweaks
* formatting
* more formatting
* update documenation
* update images
* fix centering on multi-line messages
* modify `drawStaticGUI()` method
* Added timer and wifi reception to oled
* add `_screen` related variables for front end
* add `_screen` related flags in front end
* add translations
* add FE build with screen changes
* update user manual
* update OAS
* remove log statement
* remove extra whitespace
* fix screen rotation
---
README.md | 8 +-
data/3rdpartylicenses.txt.gz | Bin 4823 -> 4812 bytes
data/assets/i18n/de-DE.json | 3 +-
data/assets/i18n/en-US.json | 3 +-
data/assets/i18n/es-ES.json | 3 +-
data/assets/i18n/fr-FR.json | 3 +-
data/assets/i18n/pt-BR.json | 3 +-
data/index.html.gz | Bin 1762 -> 1773 bytes
data/main.js.gz | Bin 159322 -> 159717 bytes
data/polyfills.js.gz | Bin 11988 -> 12050 bytes
data/runtime.js.gz | Bin 642 -> 646 bytes
data/styles.css.gz | Bin 9219 -> 9216 bytes
docs/bom-requirements.md | 9 +
docs/gui/oled_screen.png | Bin 0 -> 12552 bytes
docs/gui/overview_v0.1.0.png | Bin 84409 -> 0 bytes
docs/gui/overview_v1.0.0.png | Bin 0 -> 112556 bytes
docs/images/platformio-ini.png | Bin 0 -> 18988 bytes
...nderoo.png => winderoo-wiring-diagram.png} | Bin
.../winderoo-with-oled-wiring-diagram.png | Bin 0 -> 212217 bytes
docs/install-software.md | 10 +
docs/user-manual.md | 12 +-
docs/winderoo-with-oled-wiring-diagram.pdf | Bin 0 -> 606654 bytes
docs/winderoo-with-oled.fzz | Bin 0 -> 185238 bytes
docs/wiring-diagram.md | 36 +-
openapi.yml | 11 +-
platformio.ini | 5 +-
.../osww-frontend/src/app/api.service.ts | 7 +-
.../src/app/settings/settings.component.html | 28 +-
.../src/app/settings/settings.component.ts | 14 +-
.../osww-frontend/src/assets/i18n/de-DE.json | 3 +-
.../osww-frontend/src/assets/i18n/en-US.json | 3 +-
.../osww-frontend/src/assets/i18n/es-ES.json | 3 +-
.../osww-frontend/src/assets/i18n/fr-FR.json | 3 +-
.../osww-frontend/src/assets/i18n/pt-BR.json | 3 +-
src/platformio/osww-server/src/main.cpp | 334 ++++++++++++++++--
.../osww-server/src/utils/LedControl.cpp | 2 +-
36 files changed, 458 insertions(+), 48 deletions(-)
create mode 100644 docs/gui/oled_screen.png
delete mode 100644 docs/gui/overview_v0.1.0.png
create mode 100644 docs/gui/overview_v1.0.0.png
create mode 100644 docs/images/platformio-ini.png
rename docs/images/{winderoo.png => winderoo-wiring-diagram.png} (100%)
create mode 100644 docs/images/winderoo-with-oled-wiring-diagram.png
create mode 100644 docs/winderoo-with-oled-wiring-diagram.pdf
create mode 100644 docs/winderoo-with-oled.fzz
diff --git a/README.md b/README.md
index fff31fb..457dd2c 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@
- Winderoo is open source firmware which adds "smart" functionality, and a GUI, to your OSWW or other microcontroller equipped watch winder. + Winderoo is open source firmware which adds smart functionality to your OSWW build or microcontroller equipped watch winder. Smart functionality includes a Web UI (fully-translated in 5 languages!), OLED screen support, start timer, and more!
@@ -32,13 +32,15 @@ * Estimated cycle duration (how long it'll take to wind your watch). * Cycle progress display (how far along the current winding routine is). * Software or optional physical button to trigger ON/OFF state, so you can disable the winder completely. +* OLED screen support * Simple setup. Flash the firmware and File System with a few clicks, then connect your phone (or other device) to the winder's setup wifi network & add it to your home network. -* There's no app required! You control it from a web browser. +* There's no app required! You control it from a web browser. * Minimal electronics / programming experience required +* Web UI is fully tranlated into 5 langauges (more are welcome!) ### Winderoo Requires a Different Microcontroller -* **You must replace the Pi Pico, as spec'd in the OSWW build guide, with an ESP32. This project will not run on the Pi Pico!** +* **You must replace the Pi Pico, as spec'd in the OSWW build guide, with an ESP32. This project will not run on a Pi Pico!** # User Manual * [Click Here to see the user manual](./docs/user-manual.md) diff --git a/data/3rdpartylicenses.txt.gz b/data/3rdpartylicenses.txt.gz index 25ea888030226be9a1281749164bc395d29047fd..52cd03e051a07889a3831ef5589c8fe1cffcbada 100644 GIT binary patch literal 4812 zcmV;-5;N@|iwFP!000006YX2wbK6LAf5%_ZVO1(p6-0ZT+vINdN z@-PGj|k(g_7|i z%DUBW+&_JSaN{isv5)wE3wL(G&1rInNtY@aXN7=e28D}AIU?)g+b|gkqQrB8-` zoYxenPH=2}k(B^+Oc&-%j{0LNnFO5_boj&Ym7k>MAWRoW3*%2?4 z%vYve&pSK2`e0w0rF08e;bZ9xJRC3p31 z4jaSTd-goYMti=VCz0P4l?nl}O(CpogF^f5;Wnpq?bI*%jmVe9XJo}y%|T9=X%qVH zRLDZTLPE<#DT>$bxo*Gb*YrU7SLGQoUbyn?qNW_#ayWET1qyhUTCw9pLXQr;pf!h; zB~-@bg>^n;+0f1gefxcDDLZwv(`1Z&k;D};rQ={({h-ilIzAGhdK2S8X500=2ffi^ zq$PKb51r1ygwKIN0>P;2ysO^@WFv7gW~h(9w}XnlNNReu(NA(F?LgM+u=)+62Q8Sa z=0juaGUD@HBR-}nD@O5nkdNXqYFKX%!!!ue8W2!L3%x=#!xbohRb7y9XIu(ZdAGI1 z1#4eiWLIZs{bZKn;=*$&m$mJNIX1CTrmS9e&^*iok}>coukI8*S{&C`Plalf`3L7W zwWWgAA^O$Qq;bB0^%^M;dHmcsf%TUSR0@Nre7BW$?B=7M_r)(h26_IJvGDoR=AnNr zwx}$XmW%8C=eWGtsQ+Tjyu0a%nN>D=HtsMr&^BZlT=I;bjI|4*K};eDLe#zo0qRmm z&&KQZt|{r65;7n{H$^!UR4_4mVxqaVzOeiBwFI(xb%Erc&`Tp!9HUzegf;M@9K{z7 zF?{JZs=6uM`n7Zi-4wV|S7pk#)KT?1Cq6E&Dou2xjJHsiWi%VT@YeMDAAEvRmxra5 z3F?=z^dcm+1 pLC;nn)IVSu zxvaQb}BJ@RW?>cC>bLfaQ- zDwg^U@ikMi*fIt43D)+Go&1}sosPE)!q<%1>R|0(`^4SR`=yOaos4>$_U7=xO{=xR zw=4;rC86&uH$$$b2_;8XfHGfs$0gY|tL@*_HfbB;nSBFLQPgd$|6=Q4T}^+WpAP+j z0xLIgY#CE{j)n?J8-h57ATh<+=y_9bJiYMzmq5{Ib*5I%P$1&!GrJQ?AfgE4)Er>B zUc* vfp3eAIt7ru|+ZaTJ7*fp?$9tnu7Vf1sG88OuwnO0_G( z7JxUZ3;5azR#a%z$1=L(Vfm}thC&0B>*cCiRbb!fx5X{HCennes#&Ga8!&%O jwH9WFB$oQG>v3gSDk+yM3B%BdFbt++4Li)lBRR z5HuI4oQ@5TFcp5$ah44DzCgc%%CgvS#eCcl*XVtAbvRXA8cp*_CR9|=df_XGWx$gt zw&gHCteN^Hw%UYx3X*79vV5RLL8DfFljqkEyrf>h&}1Bqb$2-}2#tdv{0~0jG$z!& z#=&fS Hs-EhDO9`Fm!To)8PA5358@oXD>JJQPLWrSVOB`0B7t?*~ z7u3F7`aEE#17)6!b~Wu0o|w#toln5eCGCATZT2gk@EIWkeDqij4NggYZefiQxiy z!1j7izoWdv`V`(Wzb~)F3Mj>JxZ9@%Q Po4!RDn-3P zx?c>^P6srQo5ts(w9_9WyAU%qO2=k3MG(XXOpr^-<7*vm5Z> E8EGzwh `}^3z!9o9d5O^Df;^E%71MB_*O(%`xg6DT% znuw_nz18ZbW$~c8$*54RqDlK;g4s(In<>uDI0ppq(O#KZ4V1u}mXrA+Wx@l?tO84G zDyyUW?7NscwbdGI+hV;!02oql=RkBi0}EPQ`_mToM{Ir!P$31EU*d9!v0K6HFxR0c zE5MZaVW%U;gI5<}4#t)RSI)QrV?9J0O+hIYolX^BMYuU%`dXAH4DFYm>Oap}?S|pi zMMJ&7@VZRC$`gL5!k%}iMA|TWMu{K(Sl497!Dj2VANP-B;BA6&^ofg2$=PndI(z64 zy>FX><#pSF3boBW8FD5g6S3s>0*{Q;_AuJaYrWpn)?T={k&fG1ZVJ)26}EuT92iiI z_3+lp4rUr^$%Yg# I3=f`&7w z__$+MNBSkhtFKCMF6tV9+oZA?$C VFX-aZA&D}HA27(-&(^kxT6cWp{?RJ{)j#(G2?kC;hU7j zqy8BCtWdxN)?oj|U;;j>qr5X2vv^c=CgXLAf9%nPcQ3|FQqQ;SmDONs)}%-4|M_~5 z+nNe@SH~l*jUSA{w7dgQr++n;Zre9T79BO-bY6^yyZxw9>gi-Xyjpd;Yi _$ZGEr$k)*hq*_9WOTY!GeWhTT5ic62&;QwqS10}{r)(zfIU zm8nRui@1>8)yVQ-!%~wEA;wFM7OmG1KdNz~h1o1Z!T3lPV>=&WDN$>i0#WU+0^J6<0RR& 0W*l3WwI-Kk3daY`Qdj|}q|8}rSI|Nc6?QyD?c<`fjNjcwvu0kancF7M zFTyH7n7cKuaV;AWiSxU^H~8N;U7n%+<|!LyaGZ>x<=_E#AvIJ7tT%*HrlR5w9ELbf zZJRZX_VSospdquU+@FNeo(|70LWx{J w;4dz~ z3j~?CZ7fu-;nPG}j4i>XDQJKutQwpe^`DQe_87rfGl{VtM5Qzif)GB1H$#K!BQ=UU zFAQ!?gWwtt-A U9vb0V?5c`EdJLxj7bn&CXv_y+yKT8Pl8x0$95(GJ{GHK{Om&0j+qSq3l zTz~PHzc}4?gq#^WQZ+PS)AWMItlxY3;@Nl4f}EzH=BjJPmMlLw*z3_5lf$^PjIz3( z%%?CWdhocb0?c{%kOHlFot^qbY9ZbUzIOFgjSQ*V6;olm$+fc?{pQ)S|oocFKxT zs=p0_I|xG-1k;UgDlFBw@+cgovbI!wT* i?YV~$$=-wdwvq4 zakZs}U%Ra%Yd5%REn+nT{|IH=jamng_N{fGT_&P-d(iOE=+UpQgq$qXShf<^j>uX^ zC#?jHKY0Rj8@2$B6< + L^DgC5EGIXpd1ib#RqkK=>WV z2PXLknQ&?Km5mZlVVQx-#Cu;;k!~w)d|QIF{GW8#+s&vXGzb0de>Twk|HnWf(0j-! zfDiTZ%NTT+2EjA~tSvz~M;l5uO&mAz_esSFo2$v4kdIU+%#eK!`uqF7S?l$MFJkS4 zSzuV&bynf(DxHkVH@(D6AZK%(sh{*E6E8K7>&L)3ya>Gy{OT0>USCUH+ !tj}Pc`Cb$Xz8mw-K1yzQ-^m&WnqJqXl0Z zP1_sqwYhs`a-4Nza8%HN87uFlN>6OVtLhEe_xA$qiQ%(LP~bWp9LRS$ksY=-_y)fT z?a59Dnhb(XIT)HI@ZKhk%>7C5k?erMLx=5^WsSOPxUQn9h#YM17BO4{DlY40cX?hv z-VK-+POdmkwroUL`D|xy-At)x#Vvst3j*g8?XO32T$Yd;%+r;@M|qXmz-KI^Q#HN_atI&$cW~DTG9=*yVJ?x;!VtbR_a|WR8-Ka9O=i zsmN_)&C$3dP*np+V!&pfEe9kqxEZ8;8$Ul8EyoQ0@p1?kgr?OlLcl2bU@l*eGNLDh zZxs8Es~A|e_jq?trMCdD(t=6!Q_$G=-9yMX;l;$_-bRaU?bIUj>>RvGO@a>R8fil! zY`{7 fIh$iZ| zF6)C_pB!+Y)q0d)eJ5CB%jse^YwI*J*dB&Y-;wLP4rH(E=Bt7XL&dbI2GAINUD888 z=U;5_45e*3OhQ^w;c?$iPgqT8m0X7%Y~)d0VmK5MDIIsLvLvm@ygKl*G}+t)QKf@d z4JDDu5LYd&`+B!uMGx`5?vt98>%5`m9*r9pLmA!(RmoqsI0^iy>i2ww*6dfBc~DDa zqyAcq8IMB2{#R5%;abVvhWz8*{YXH!b`3xwWN~>PZMDoBK{IqMfqxm-$Qm*G?k+V| zvXR{Fk7+iNV=|BjYCzy8+{o_kjj7z-9bj+?PP37M8yQiS$ewFwckh1hEU7P-ohuNo z1J F&ZksH}Wt6O7;GSi=&f^*KZGhxVUK3 zWy;#w)j6Lp@Kk<`)vQf#?%3nsv&UC+`WX$&b=rY866#gqq50frMOKv)+N!8~F26!B za9U0zL)GzK6{I0?J^`go!xU{*4ABAFpg={URe{>XjH(BmmTR{YtL6|4wQv_ghYo}N zvMfWgUcb5{$dc6>`pmbtWRdcYA3IO69t7;nEA{jX0?#w#)cg1w9CL$UPyaT`tsr 7 &qbdLLkz92NsZF%MEPv}z}UEqzfe(i4* zd!w{p`y16gK@Y$<(+=#_Q=7g~@cJk&X0PHxd!pM1cu720^8{J1cku#u;*Gn|e4l8i z50h@P#&;eY8u}74wG6{-^d9Cv+Ut!Sa{h!X@Hznl2ryFVjZH#X5}EoQ(AV8FmYE4i z-hj}fqAr^}sVs&MArIP6jh>8sW73yC)0?lrdgqDnfbnMI{Zs!nlo*#4XOFpqereie z<>@w;m1XX0Co3hlAyGLkAZFEJ28=__MD$XHf?$BBogR8z^u|til)=kEPqP jH4dMWhHPaMAsuV$)v$i$7_XY% zmfw#t-Gz;3gh3twLI= 2_#Ym55918w2Pcl+bfQ;_qXR-l+O Fd~{k<3ZhST@p>i5S3?t^0x99w<*6MqU0 zADjR_Fb*$(N=#CA)B9gwZ3BFwaST#}$_&!D+#