From 92a3172b778900f47d4b42bc92e8130fc1fc82b7 Mon Sep 17 00:00:00 2001 From: bboyho Date: Thu, 15 Feb 2024 23:36:50 -0700 Subject: [PATCH] Update Tutorial Based on Template --- .github/workflows/mkdocs.yml | 28 +- docs/assets/MicroMod-logo-updated.png | Bin 0 -> 26280 bytes docs/assets/Qwiic-registered-updated.png | Bin 0 -> 60410 bytes docs/assets/sfe_favicon.png | Bin 0 -> 14810 bytes docs/github/contribute.md | 38 ++ docs/github/file_issue.md | 52 ++ docs/{hug_1in3.md => hug_1p3.md} | 2 - docs/hug_micro_view.md | 550 +++++++++++++++-- docs/hug_transparent.md | 733 +++++++++++++++++++---- docs/index.md | 75 +-- docs/introduction.md | 240 ++++++++ docs/javascript/README.md | 3 + docs/javascript/mathjax.js | 19 + docs/single_page.md | 61 ++ docs/software.md | 56 +- docs/stylesheet/extra.css | 517 ++++++++++++++++ docs/troubleshooting.md | 13 + mkdocs.yml | 205 ++++++- overrides/.icons/sfe-logo.svg | 1 + overrides/README.md | 3 + overrides/main.html | 15 + overrides/partials/nav.html | 79 +++ overrides/partials/tabs.html | 51 ++ overrides/partials/toc-backup.html | 66 ++ 24 files changed, 2501 insertions(+), 306 deletions(-) create mode 100644 docs/assets/MicroMod-logo-updated.png create mode 100644 docs/assets/Qwiic-registered-updated.png create mode 100644 docs/assets/sfe_favicon.png create mode 100644 docs/github/contribute.md create mode 100644 docs/github/file_issue.md rename docs/{hug_1in3.md => hug_1p3.md} (80%) create mode 100644 docs/introduction.md create mode 100644 docs/javascript/README.md create mode 100644 docs/javascript/mathjax.js create mode 100644 docs/single_page.md create mode 100644 docs/stylesheet/extra.css create mode 100644 docs/troubleshooting.md create mode 100644 overrides/.icons/sfe-logo.svg create mode 100644 overrides/README.md create mode 100644 overrides/main.html create mode 100644 overrides/partials/nav.html create mode 100644 overrides/partials/tabs.html create mode 100644 overrides/partials/toc-backup.html diff --git a/.github/workflows/mkdocs.yml b/.github/workflows/mkdocs.yml index c825979..72816cd 100644 --- a/.github/workflows/mkdocs.yml +++ b/.github/workflows/mkdocs.yml @@ -1,17 +1,33 @@ -# Used to run mkdocs on the repo - -name: Documentation +name: Run mkdocs on: push: branches: - main +permissions: + contents: write jobs: deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set up Python runtime + uses: actions/setup-python@v4 with: python-version: 3.x - - run: pip install mkdocs-material mkdocs-monorepo-plugin + + - name: Install Python dependencies + run: pip install mkdocs-monorepo-plugin mkdocs-redirects mkdocs-with-pdf weasyprint mkdocs-git-authors-plugin mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 setuptools + + - name: Set up build cache + uses: actions/cache@v2 + with: + key: ${{ github.ref }} + path: .cache + + - name: Install Insiders build + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: pip install git+https://${GH_TOKEN}@github.com/squidfunk/mkdocs-material-insiders.git - run: mkdocs gh-deploy --force diff --git a/docs/assets/MicroMod-logo-updated.png b/docs/assets/MicroMod-logo-updated.png new file mode 100644 index 0000000000000000000000000000000000000000..91725ca138dedb57abda3cecbee9a72d96cd9a77 GIT binary patch literal 26280 zcmeEtWmi>Sv^OB#AoWM21d)2OZ z5h#!Pa8OXl+z?@5IXN>MM;iw-8(UIIVPR5Rdm9sor7;wgL{M71vy##bUf@WZ^N*|{ zMjUG4lQuNcHjbik5&gvf^gg{oXJM@(%Z9-c6@kSS^dW~24Ir-~5BB%g`%N54n%Sd= zBQNjDQmx{+wbho8utH+$VUf{x!)totG2ILm+4|Jf>Zpe7&6@5_vc4r15gMFt_yCQ1 z3iak6lwLJ63yctNx3>fzvGwKGsJFM|h~6B|J+x39VXeNqj;Ak@$#K8&e~rTi&H4=W z8wEAW^%TwdpjLT^^-SL4Fm-=ox)4RcscKDpi$8Z-GeZ6)Bq{BWVThXhHtKgm&40Y) z%gL0RzX;Co?d0(iV(8a3$)~^K=G%!rst~38(KmtdCJ#D-L8q1M$tVAK)-ALs(uxB` zM14jZ{t^tAO7!zq!Fun%CU`^qddkt%Vy0V8t^d* zD4pwR{L*4tn$3lOr%mdor^UAanCRl}cUV8m1i7_HRQT}Upk`lrR6WJ%{@{fQRhPH= z?q1b<0+(sX0(E}VG0TbpLrT4``Ov9)lNGc>DM|Xbl7*>%c$j_LUhU7i&vVwx-YLiB z)Jq%oP6Zn_2#N^#R-4+A13fIy;<*`Tz|dTt?FiUGy27Jt~t15|FRv6 zwQ~*1{(dp51Dg z=$78Rw(!KA_^>{Vm~bl4coHxWZ;Wa|zFEXz0i;>z@4n`8D1-uU&7i3S5IE63dk?O1 zH$q$cBIv<}`tIn#w?bcF!s?STi~PhPRhB?u_Wnl(zlrE7@GOUj1J^4Ugo%MIbT|63 z5SAveIE%Xw>7JMyPTRX&$aj?23@6#gGjO>Z@vBc!C37iSN+;?p+_i7_YMd>3E8(y& z%G!}Ft`-J~@4_0&snabx4-9{xDV8@T7GZV(0U2r!8j?tM6s%uFsc>+VR4y?@usKp^ z^CPp**AFLh1UPV_;{RnG$}bmgeZn(mGk;%9lctA_^d_vmJJr60e&qB_CzTl`!;O+qqMFC{4bobN zH^4pPJVUmNy$z=j9;a%GGLR4&|30oi?mEspPRpEBD)arLcnsX;(dNf<(R0IdO{8GI zD!&L=O@lU(Fp-v?$Q~5Q*4+5qkWHF?o_?wRnCLgr6ACWWR@5BS`IFp5ghh%9-3m41 zI1rXSfj!neg}t0{)jTTWO6GZHVrI)Ep(J5ueB(c#5Ji30#q{Ob&UrQG&M3dqBrg~b}+Iq8u=SOikZwl6c{f>o0FEgl+~7?81E3Z@z*NGBI;dq zN{lY~3EfB(L%dB~2mOoA&+^r*$m~kREa9~%aw&OTCN(C_Gw*fE-aX1m%4=yg>EMJ^ zHG5qom2p*Md5s)Li6U8uin{2WG?%bz#kuGf1UEUjMyguMe?UEsS~<8lheowd=qh!e zrI~KYKV7OK`)1U1GIp|c%Fo=%{K@=cpL>6B3T0AriUfkmNcdCI}Mp4GA(Wc=r&pnSduUY%0mda_<$=&hXG1-ZDKiVnHQT1T@V0pZIm+4aB z^7>$DH1MkIGUn3a5&>23jm4Yt-=4mL!nIjtWFwW!wzI#CHVtBpCoNgczp`9&d}cgm z^wiIWU|UsB%78v5s6B>Us zr?C)WJYbyR_>jkuG~QntGJfRz)cElh@=IO9Q^MvGB`f=-*=`EsOl5T?!k|+EN`iBs zbU>dUhyRFZqj;=%s7SI%c~~oP9zk!|e&`>uKyePSk@8cuDz{#jQ01@k|I*^PX&qE_ zwDTHioTif0`qfMh`#Bx8L>9*yG5!gd@H((BQ+et>q7H`D1zx2d{VUg#wIkx(N)3Vy z^gH+K7YXdq4pNl-CK)F=p~Yd%c4J)aY;Se0C8am87VAIxYjT=ZOG9g(Ivth4e#b@^X(>Aeh}cQq2~oDMRb&JLPqEJ_))_}hP5bVr5xg;Brr zqG6=}#Ng6KZJ?-{Wxp2CRW+oOk`h7@d@I_mdDt*%Eo!x8eY9dyWpz?7+k3cfL77h( zM@b^3o;TCZ^pL-w;(vs+@Gw|9h<@04xO&uBGXdF&vfn#zJ+IP+Zkeau#qGtdaPB*9 z*MO+2w**#-H=5=SbQC*OY%jle<5!|mUMaULgDe%)+AOp;Jsmy?Bcx)~PSVW8Pqy>_ z<#lNoE-7!*X=y*l+?JcpDnMI9Yg=J%w=!3$jd#-$Azg_C+Rg z?>6_SM~dE!sPMe=N9DSGoBMb zm86Ce3NlboKR!Z1dHX>@-GeWA??OR2F+xG@>p?+rCqhBt+om?l^MG%_8%T?bK)t;F z%4{o$0bfC~l~8wpfLsbg_ydI{4H?DXZ?n#^q<*4kzZ$2CTSX`L`|33srl)l+EUc#P<;`^uN~YVD zEy`5jL`A*}V#bmhPasy~z!{-YL`H5cC%Jlh&9a;%nWi^6Z<`>_rl0IM@HaKx4F9W1 z-LV|u+JOdh8WrC6_y4{8uP;I9i=~+mA~Y1KAC%05rEW2wG~5KM-~{V}(r7=F@#(Po; z7Fj)($mT;dVmiB`?DCngWF`b=t}5`o1VZ_uBm`Iqm612%u_+1^J}L5vt{@Z{G5Tb9 zvCf{l4MZ3>i`?NL`xCAB%l$$kD@77t3-D4*&dDWHij)(?LJy>uVTqDZ%h+r796-Q? z!@ov=tDAZ5k0I^YWf97XoKoe#F=hNl`SdP8zb!(9{HKP{m>CXskYAnH*NIveNojSB zbB$b>@}^85M(m*3Tl|fGnKnrUIcxQfdkVYbc_^FP+w(5$<{f(C zT=tt5^VquG8m!FveH(VadJQ0w4z5_~p9kfqZHrE?i_x0Z2klArUJlKTQzetxY3u^@ zy~__GqoS~Wu~D>eMkNpgj2RrH{V4ku2luUykvQTFl*@KlsN$C!PAW$}b93{|%uFak zLPENEfo@b|Wlo}cBcDU+*0q3lt9LsYFZ0nNFbQ6}$^ru_c%CN79~1K-5Qiv<9&!`y z8LKefsb75?@pYw;LMUm!IhP_gV40bjEthjhVR4*nvg((y zmvM}ul>`(HxC)=ia@bJc7*r9U{AGdVJgN4n)$fM4poQXfo7@oG@@~Z=k3yu=X}vvo zQ23cY9z9NJFEc@R!G;~A7A6?O30^+hNSlpGj5bEvolI5a)6wEihK2gBC_EW3wlcfs zx}jFeBY8WL^)boKSWCMooc=c}Yt9CnmD}7Djs{2sCQEYPO4P}EYv$;L(|fQ@GCyPD z#FTb7n|dBZcj4S_j_cU3Qj(KNX=zc`&l*jI5|+xqeu9rf%Fn-YzBPg7i8EX<-w+{m z+!ORxPEpbD9V)|oxn=T(i&--Kdv3?d$GN{awkvV|lp9~iYNP(xm8~Un+OB%%;UMS_ zCFLXC-QA7WTWKD=#AC*?GWs@0f{U%L{`MVeZqO&tOa5qNYU*2lAg89bixvo%Y)qxK8GY$m3VNYW z-QfB0u61~XR8C{UNjov0TBTfTFHxFiC3=Vn>Q}jT3-Saj93q*Bq+}2!W1*g7i#~Tn za4>R;EviN$1vV0;Fr$oO>%(!2N+0B9TpmWLBAwT*x!(60V`VS{g-nEpxPksW-heUm zg^mo8oX?0Vto36r@8?*@KibpwiuU{BI(TJd`$*REgXSa8g?cNLSTFsI$cS3VgxKWd zB%^*>mg8qXOj?yvvv?sTEiF1fOmbMLO2a<%!Pc+!_%lSUciSo9IBz*(INy(c;%3bo zySlqSsL;&FYKh&pX2<{HeC)TsZ;mM>K!IHa6IZyB!Y7TMEil8{+`Pw!g7D1fGoO%a z-9IoeAaFDBDQ(@ubR^xXsdRT5Svx}zY6eZ4rK02chhDjka;C166B`kytvAvEzkUl0 zRB0=T)M|0$?6%(Z;T*fZAjg8QR-yg4nTH2&>&5UF^lXeD{68=I7r6e&SL3OcEZ3LezNXdf8Y9tWtr&70(v0FXIvPDN*oNW$j9Hmz8)JvlzV0B!#aA){n z>%1B7t=78y2bj8pDVUc%AFN!qlT7u7lG#QJWJzcnLXg#Teua`w!zoJ$XJN9kvB7;7 z+01>gLvk|V?O22-Y>)^H zID~QJzM>cep_v4{+6cS*80H>|vS`{NA$aumqwVHPtPM6wbLn54KZ9PX$nJZsR28_x z|5d`k^A{cC8@In5i#R1JWj>(Z4leTZ^E(|1KdqJPv=O%7@6*nR5-RC3k^V#$S#*nw zY1nE*TO1KtD?Dhft86mB*iiZu38lAn4KJ#D?h!eBbF_eZ~(rGFaSeN{H4<$|Q5vc|DZG z(znf*FZhMVxuh6AGr@BlPEvcaIJwbGdBesZQ{^5F&FuW%623bGn+gSmzn1bPzC6N6 zllk@^915PAQ14K+mGw&{+QrUD!x>alH8So$&p!fn#&0QJ4BX%N<>DWNVh6b^#m+pe z5{r%&k+{feL8Y);`FK5FWYmkshRTorWt->kNG?rX_YvX-6MDcg>j5c4=0YjzOb#XH zH)om<9)u8*INkr%zs_Pt$jPaWK3Hcs3AHP^tgOtxHw6Dn_;buf&7OL~A+s?oIfWhB zYWshmV>_OXY|?{>KJ=iI@S(oru&%}XIvPTNzxL&%HOH|@4(%;}M6bbVi0)(8{=27T zi+5+27)>tRyy^bU*=AWzbl2f3lvW59#i0{u#g$KcvR*!=rF0?FZKDPH1eKO^%+f!5 zdc0c2<)qG2Y}z3g%YR+}PM))%zVUoI&~^A}FUBZ@4JS<=Re4keZW?{Q!R90>@{I4K z{h{2(IdH~5Gz7E6qmWL#3G*S6OgIxX^7zvNgo%6Y!cV($yZRb|T2ATdO@VH;YGK4D zzfltHKB`AU>EaVpQ&U%!ePJMucfHu2D`medhn?cno>>FqrRvsuKhlwgVxhqXW8+WQ zM!zxa2MP$~yJQrn$6GrBZpT7Xp+9az8T|aCJRg3*Ktpxn>$*d~*69&iadF4SPF`MK zJdAgIUPjI5Jp(YmV4)tMCs>1$=7^>%&OJfBMwYoc&!}#OUYz5_r zm@?sAG>4#j@4%pH{bpj$^s24{&kCU#3Sl?h;`cN#UqIQoerken>y=rekBKi z)^pN!Lp(V(rQU^!t9Xw(fFUI<&BYkL7IyrkVXoHsZmB{z0QHQ*Xph%XJ1|c=p=(N2 z_x)e;s1cjgFV5xkjAB#7IF?mvs9?rhP+xDBb6Tt@SB}-h%$UE4ra05mkHNyaX0q`Cs!#`@5 z`%@osA%t|=%{T!VB-SB^=u&cR&-VxHp8f}c@I7nw0hlmi5yWVk4c1$ooS>|tkA<^s zgG9(}PgeyKnG6G{$fRG)li^YDKl{;^HS1EazRK!id&uEXRN=Qo_b^(wH_GQm zD4{IOR32A_CcU=$irU&qGSaONzvX=M>x}o9geIR3;}hbfEDEfx?iyGPW{z5nzJ6o- ze7@69XREG$ey%k|RCxbMlXVjATSeb>zqQp5hE^3%_$TS4$^`;9b=BgIV!lzgK`Yto zQc@l^M_y%BRpC!KKJqzY)DIb7M?Ejc!~vGv(4gX0CQ%wI&WCg*vsq*o7Z3bK*;H_y zjacgr6c!VMS5j4NNF1CB`?h2zP^a?96Ua9h=G9pC(}<@hgiK_mq+HcXxaq9fi0V(_ zp8!uhrQSRVZXd*#KO1&XP+*M+ELYmKxu_>SB;aO#`y%KM#?v$Eb$XjP!(0GZ8R(CK z&pp4VvbxABbKnPqTN9O|uUIFj6Y8k@mR_hCu0b|;yV{ikuyzrAH!*ZCTUm&EqCA6#4Mx<2-WXDy)d15o$Qa;X{jTRIOC zXe+*5T|(lcvHy&y!{iS#uH$F~gb-)zEb!g0=S=0))sd8ym2EfwVikhUoS*-Z5%rC| zy?rJ)jgc7{7-`&2KE%8~1WuOQvZNC}zn&Fdadf_{;0&6Pk+OJm%+U6%ENE64U$EHS zV50H9_ZDbih-c76SJkrfmpS`3B}Sx6WOL}CsQA{%$VhEZr)b`1Mt@aaI?f|@q&n{m zbMh$kDa*>j($eq!m+zhRRtu{aBm9A2IXFEZIlzhp#wl#@MrAH{0RG?|$A-_4+vh zO!o&!p|GMN5I~UE^<7-l`a3cb=;H&kJ6A*Xy1qZI_Kn{Ox2n?N`5qn~>V+Fv4EKT_ zLF(sixAEt zbq>VQ>JP+HV}^-Yg+z$e4WOnn>nJ~I-QBUqiPR56!e-?@88Ou~EdM~kqt}4N#l<}Z zB=Sw?%tK}2s+?dBA&bleDGSS6v2Y@!w^ZN!q#4?9?yrw5q(}3gVn&90o)x6iiQU^E z6CYjfwi4oy@w7`P_lX(xpcY*=!s@%fL-xbJzI$z~9WPHOm9}d_YEAZ(lQT1#Hv|3s zKVL8VQ6||4NqOMwrk`UnrtF8v?lnfs`C24A1|8JF1cty@^s|ga!>J6B0Gw8|OeTe$ z(Q#L<@p4=`tF#nVN=mAfee5m6BKBGva)x6oTU}ipSf{g%zHSDuJ850yTuhjFI(3)? zUC*YIoby5-|9@XTe0T#C3~+7fraCg!E+IlX28M?4bL4xqP9v)VkKPH-Lej41Qh?y% z={4bBXF#cL$1)+mc~X{MC!3fo;lSU&-k?Z14@ztF4ri+vtrt0OuNykh0PL@!9_Rc_ zAe^Nz+BP0l+9>y16jwuCP_5aK`d``?e3eo)XfS3QnywXxWWWjg_wQ>Ww-b%~f#!-& zkz#=mXe?@UCUumb=*6J~1`_fi;Unek_vZS^`L~BPBbFUV{zBw9$XuQz=z(P`pdRgh z!{PtR)Jx7!1oP&osdgwiU;V`*`D52w7Ks#{_3E2h+~DWx~As+1!)9Q+FN&jA+njOUt&4gvKf5qK+?kk z(>T2TLvnJmrAO9<-&1j6A?DoNTzym2LNO$H3gO=QPw0PA+?{u z@Bj!|pEJ$C1=FK83A18iF2ur9x48KDC}#{u(;RlIVV|2eu`L+E^sJ!Z zRM#`e5zdPI3q%1hN-;zv2m{DWhEw`yhORKP=-;Gg%Mf-B+9H9RTV98(7slt(mghmNQmpSi03DM@>=O1TMCo>M)EY%l}ksW@%YV z{l@yARGv#7Ek#uruiJI)F_Z18fUJ;MehFy5jrFv+AM&5RQDCqCMj&x4)#TXX#6b?i z`XHuu_ZCxDN5$I(Sy{iE1BMgI52lmvpH93O=Ibm>Q{K(<&m-V=#6l#u_p;<9z9un? zDk&=m-K===Tg~AmM$&<93J)321v<#2%z}Egkt8XM0wUS@`8nOXy&Lh<%ZS%=4cl*3 z9am$iA-bgavT@5z$@nCe_6$zDYz58u{}3tpr2M9)rq&-;UfPfDioXM)FwZzCc&x~e z>c|HCw`v`pZM4EUA!x5PZr4wlptg~j{Z{#b`t4jTB*xI4@99!;tVER|#lQzIjfed< zWqsXX@Z9MQZt4i%L#f$Bewd*rb$4`90zS9BqQWKD;Rb=@j^Z5=lY)RiNyHz+H$$H&Sn7Br?B1`7JHz zHKuGHX?6i4QN^t@7f>^@9h6+=lb516}jU2UMVr{pOQ#QPpHJG@N=d$PH+L%T#GQOFFv@dC!60niMxLHCj>5t*)z zW@5l0*TG8;P6V~wqbSR}rDnU^oaNDdqr`M3WaG#KPLEoZfqxiunMR!yfZQMJlB+s^ z9NMh=3azaTrW#SmdY0SVL|t8*>@64RE{uqAlY$0=QH~nStvw$%NJ3nAj&1ugXvqFU z_7?%5ri{z;Vu-_Ih~(O9z80e5)~ZHRJr(NZe6n0tTO2*~5KSpfM`qji-nllhC2k$i zmB8JVjt+Y(1r+9_t^+YQaP772gbcwwnlE28AJ;IvY~R~31cySB@z9E=A6A~PIS`)2 z$+7b6KeP-eQZrdkf24__H<4_H+yQm34&HEUAg+97Ofd4xREO7#fM4#r--9SP3zI<3 zc?T^=wx@jIJYl3X(|i;M4MjzgkARITFl(qw$_*J7^D=RWQpLeP zbdx-fPALl~HI*N%0}1VhZF=^z`}6tMVA(^NR+GZ!<|c(xOH)$?x6{6n=IXiHy8tr2 z``r(NGO?Dw2L_T>o{Q!W^Eb2b*MX{9ZiO+h6#O*U-(RJU;CUb5<>25D_s~*Q%G9JQ z%X<}DLTan|;^gEs?QsmmGCYR{@~4jT0a|hv7R4sqTx|FLTQQooaaBa_7fyDOzWUHH`Ovv)*(Jw4WYkyJB0h!4{0O)72Zj3rQ2dOt+)th=Qus`Gg+RazTfwVik{ z!GG?)vt6!3KrQZ??&yz-*w%u{iIA{&pLigu-Y zFBOg&r#tzgU5+U-QSBUlOe*9W0fY^+ea{A z@6bzg4DDvLo#8%GEWy}+lGCF=`DeGVqJo5Y_k;gH^Q!rFJ%rwP@IZ&+sGt@9E+*r# z=Yn0B+r2M@`9HrFwz99%$%`Rtr(9fIj7EPkHPh2)h*FFPc43H|Ghr^oFl$A#@b-ADQ-3NA%+V`~|%Q0cFgJAz9GQBA-F1B3JPi(>` zj1^vjV4ok()vOhllvn%53^rxe%CZV-#363uE%Vr%)cb$JnTE|rfny$DJi=oB;{Cvx1 z@{d3qrZOR@>n%*7ZOng?)x*OX{3`IE>Y6}y1<`vWa} zWB~4bzzB%%8rYzct9scwH%*ruPc#uMu7@<(~!z?Me(Nd>D*_`c;0Z|tBTiY3TiMWV%piWFb6D;36UX0kt z{0DZHNsX?ey(@KIt2-x&p+dFlWIU> zDKlFWx^sX9Ku@rUQ!y>F`3->X$^#}pm?r*UyW}+En!aPpNeApB5pC@>dUGO02A}1a z(7ug&E#3w;nwHh2Z4KN=9Eu8sCa)I&N!^xXa;>L9iw>$8=B9;=%G2OGR11iQ!sj1+ zAPk$oc1mI4`*|d}PRqeDBi0DmZaat68Hj_ZY_&(yZ2f%huvy^~cc~4QALosEXVW@H z=3bO(wdWzp;1(SuB7}pF|8QMJweVM!8q5CP2mfPsFnP~|*Gl^7e5!K)_gJeD&NB#O{GyL%mM>Z$NfyS@#%Wu{T9O0q57cpTgMBpvtE4k2Aucr zDn2hsP#DDdqxcJ*o_1qse%8t*p}P~6zRyAlot_cZh(7QU%aMO2?Vq)q1-^f02c|FV zt8msA{=Q}xh%kLmZM7N4cEB_QER*(?&T7<|J4w}Jp8n;??Eosp!eT}-uct;h=AJG1 zbc{~>O0o_SYz`ly5KGmnV7{ett~J$HV|LMe`DH;ygf1*2Ba>-?13|I_$fG+;IFQJ# z#1VD(J1p{0fx+li$t%9Uw%eNkPhI(diBSQ{-0~vh;b3ET5!CV&{l^ z7$Mt0aXp!M{@Md*N+IGT9+PXw)hGPVTDzy{6oVmg^ptZ0t@rySy}*$ZQC5!2xyQ@jXg%#hG3fb) z)eaHQ=OUT`C9;8Aq_qwtc&D=1t++p%tOY>idflTCs&p42K=@UGQY!n37h1tQUoYT) zDoW&Wt^PYaTwm7b*p~FONz<52L>mI`0_YQ5^lRh5U)Cf}(<~0uB8lDpLn-ao_wyaA zS>*YDKxT3tQs!O~I$v0MuD5`&GoV0Mq_J7VTcpX-wAx1KkEHXej5{>@1&ovz7u!$z zU2a$_$1O(p^^|F;7Q5XX%#36Q4l;BsI+YrK+*aX3hY|tB+WRW27NMLcXHEI+F1s{u zVL=N3rF?!H53Oq{_$J?)^Bsv&|Z6~ zbBcHG-ib;|N{(MeT82Y@hY0$@yAJf_K0JY$hXoesiZXYx_-=Jx!vE!I<>g9QnDr+SvWzb|@067r_l2&X}4?PWq@k&)bM5T?dM^)Ej>&q#WF3_f=^acMz zo|*^8dFSq#6Z*BBtMe)2zjEWg+tBgP)$;FQl{woh$Y3wImj#-@n3+=Ru@%8T6X|e}-tvVT5-^mA}ZT9Zai*C(z%z4_52>sV^d5?IZN& z1eBi>rl1+g%vp24oU3WMZpESJY0fy=_2R0+exxWez8RNhxC^(CbHyreIp&tv)jcW6 z#;9KdAljhI4@oi(slp**I#-jps{A0^W~E)SjdXGX`g2?!xw8tqG{(uOB4rGPZ=1CJT$8m_p zu^3sK46?j*1f;J;J~lhMdrFj;pY;8wgUm#1{1CuXG0kt6=$18Y+LYDh#kcI)P=z0F zyj~h;+a?gL?old_er}<|B$Lbua?-|sy1%**{i38M_dC3x{kAMdYUa35J|{U% zj~`&SEr&>*1UmI>I)@@;6?+u;Nmd!aB13=*a{t*=7Ofy40KUXAS2w{XbFA!Aj5YLK zQrL_X&AA2O`R(C)XDy>FEG%U)G@CShh3dk=J`)A&dBsbF5q+YdOm{p4m5tOud4V&D zA0*QC$6I;YsG4cUNgIIT?q+8d6%~yQ`@>nL1&BpC|wU1k+ZuD)78KUKq@j zYnO||=*P11vQeas`+;SgM#A@G(^vLbcz$|lX?9t{<9A{L0!s-^)M7lC<+@KfLeY3N z2_^lx_R@nJ^KEW7xs;=FXJXvI2y3;-BaBXMf(sE9V?Eo636Y zQj+0?1U;N|=o0a{&&t15-5LOy6rShX4T#0U?IM^PtVc08g>t<&C8`zQ>A#l^z^TLq zv;gK9cd4VLl^P!j3sv>~NCTm4wLMo;r#z+Q3usqhnVPMkM?1ihD8(N*e8EHhdlyG@ zVDxx<_7hR^hb#@_qcw+q3qFI+;g9gr6#KYC)V~E8p4{{twAv^be7BkQ-$2+(FMStDovE|4zFTP?da+bM9Ly-cibwb(&8eLvmAAn)ps(*aG zF0jhz)=7^YdTvIEYhCo6LXA3}WBOu8+jkVmq{PQpcJi&xdBxuDz7%iRMXSeo++S8T z)jl3df`NLrLGm*Dy~FLeiAs(Z`{oT07mg$k@;9^<6rwLB8k8yk;sQs=OmopQf=~fz zAmnrNU#Y|Z94g8}A7hXf0$qfPi1nlo5#vLDS99Oz{Ef&I03LTa&I1Q`Xz>JJuQUrBVP20swHeyT^OznxkC>qe-mh)0wwLFJa0^CpG>1pv*nnX?|MR zPhe1TjR3e`KshhkAq-~K#bk2W{;GM5HzeG(NYT_`KgXTC!3G(pprxWtTU02G3z}hL zXNPAVPPAb+9>7tnF+p?OpX^uRhzUoEzv_AvBZCDN+IyfdZ5Lkc7kF-Ac%Hs_HG{Fu zJ?$qMXQH-~kjYj7=Wp1846p{*5{2|y-gT-qR{&#)-FlJWlgyy2jS%9i0fb7#Im%`u zpU;pi-Q<2}{|>F?EDacN^ZQ8#eAMH$TJv-ubm*FRK5t7~mvnqT#ftU{wO)1U?NN&( zZ7mGo2p_jUScjOjO~>XxVG9YEnB-fP0_>;d^>kH#wcns~1>TXFpZ{k-U4;9UK3Q(z zD{d)`x5~AGHy--}P#rRC_pdU&N_F%qIV}wh81ih@$ z8q*PYnTb;F;$prr@_(Ewz&S~;4q#yZ!f?R>WEI-IwD3ArZlNEseMVr!*-opQ&K**cq&HhzTk(}=8nVgLYAU!>Gps`z zEtktW7A@;1Rd_78VxX1O-y)3@DNib$!&s03=jy9i>d9IvFHzoa{fa| ziWx4cT$cCF-1p-zXh``@aI)GY;z9 zaVFpDbmofR@q4;!Sl57=U07J?J(eTB;Kyt(pk}PIb)D6foKE;tqugELjW*BajSdyn zUr{kxI7E<^1L4$_n=C0|2&8CeAffCV?u1l6(V9(p<2v%7kPL$L^sj`osE3~@r`stu z0iI9yT*tH-=j03~kLB6fUE`KpCqhF&|}oUVX#<)h)ZM z6*4rN<<_}vgKy$UxyMqqmLo!GPTwtJ`~_6G-6wmVaiaZ>FL(Tui!YfKPO zNBSuWnJg3dueQTnJ1*0?dr3yGb>GxtG~{}=-i!X{o0s^)&o}J)U9dAqtTGed(Y2&A z=&4DZb0CDTre{Kn*!P?PC)Q3IOesaGK|zRg5!$Yex0&~M-yn^SzVKTNr{>fF8j33~_9UlaK< z>3gYsA%BE2nQ(f($CYXUM}8NepTQJxfrvCXYjhjo0;FF&}Ci_tW^Hw}2D}V<(!)fXG!TTJq#=aL- zVeJd(N`U$JgGlT=`y+LY4CUeX!&&{NI^`YNX7%>VhTUoTCP&}QjCPL)nj5UPa(dtt z_O2>hZ)KXf08xDU&d(F(;1tR@uH^+-GpB2TBs4n$`AC~cM+*&sWWoUyxZ#3B5%~~M zu>rAx&{V>no_vlc%S$nK(dE%xE~k2VH$w+kKrwpd^JiOtRNU2%7gEjx7`+RQ@+yxH zO?289XY2pSiZoJb0=!{^HSS)!Vu>&3&*CRe_hm2xN`>u;;Alw9q!FynH~ZPiK54?3 z6_@&-^eo+)dyYc?~Yh3m5d zi&G!77L#U_h3yBDrE+p|t6b4c?`y3V@Br+Hb==!ZO3wcc>=aF-^6@znXsFp5(}=nq zi3d=OxJ2Y9xFvs}Tm>Ky$T%+tnO}F?GST63+k%~0Wd^UPR>hP&%E9_my|-u z8(V^zgx5BPXojmj`gSF18CYDVD9@Rn)oJvW=(>SG#YJwir=x+{xof$fcZOnQW}o3> z&#~SHk3ozIboh2y*v=Vh+1Kcl6|pTJSSSl>L2I|~%o7p!EI+aA50&`Ug6Hz01&RBB2f&B zNU1;wF(-fri!p($E9<07ScZq}uLlgFaET_+9RX+akV>GeBhqNFMgzKB1Cl`!SvvaQ z*ilj;MQ+WgSw~6@X}ctz32-V(;STWxscf)DU-q&S{Hvu<;&0vqJJE8Xsi4pi?!9P` z5VN|D1#@Fs8iB~e?(OE*7T5K3s}8_!Ctq-^AGN{_RMpW57R5&*l(cbc9TwxIqZT?y?&rCKvj9L2!MQ6^OW8)`iP;dYt}7K=-V+T40}T zajr0wCY$qkxZHaKd?m?b;{16pYjmq|;mnDoo5MrPKshw?k=Sr5jZM#aiJj{D`e}1R zVPW42rfexmpg)372e+@H!W(nlAi7jm{5$V$a#WPQDDjUlooM=k2)_Hj_n)zY1jwVj zL4uGwx;;i&62v?h0kmaA?Ixttp!fOAIcMe09gL*sb{cEfag^!Ccuu^~;Tsvd0%CUk zCRbyNj1#P7AO9G(3!R8~h?^_EFi(y%)T;~bvh3)BEgR#=IbRTnRN4+No4nc$oh0T~e+7AU%sT0vqmC`oY5cReZqUcy)7^N0p&Orl z8221$S_*LD$IeQl_j!vCOkp!jcqyziB7kVo*5?sbd!=kD9`f zneX}5@Sq07MqhPhGVoxFwK|~|84D$lpMkU@r=|56h6T%-`RRQ^WGl&bp3w@&SaL2g zN{5ijHQuNIOofm4IDtm?WxEn1LUzBDAfuaj#qNOdFL(ORZ;Hy$@1bxUc4GqCu>e@{@ecR~U zigu?FS(lYGC(k8aYK;=(}*1Q&1h8 zKc<|H&U090u2DmU?pi)g-nMDSY6@br-UL?Vu2`?ZsAns+V>viO+VsVwKR@3(?*508 zS&}$iq+swTg5-o&oG|I#u`~#jX1Jdt5q9!hT!aQ&BCRQGx!of)==PK@ii(P= zL>C^Y#a83KSD8t1mrEp{`#r}0xNQ9wR*DEqNnvd0Q!d*P$e7AZR%CCQDaVTX2DI__ zV?NdDrNQiZ57EF6wB4K^Me6(!7TXBE)e+@p@5zy}<%obPapyc2@io7#z#?o-ZEJh` z9qt}Dhy!;y=s)YOgKqcuTB4ulN`EWkZ!yLN6Z{GtrUxUZk_}m-hz;0Wh zC@5z0w5acxhDPSXU=FQR8TQfOQ&PgrEz$USgSLtaY-#~SXcEs`GVlmS3JSs-mO{Bd zC!jxhY(dhg%SF6jE^;2itaCaBqgDTnO~x1C2G{z_qHK2%*S-Zt8hD8BHS%EkF%X%#3=XJPZ|E@+ zEtdcvqCOyZa}rlkR#yKV&dN*q*T^lGY$}MO$h(!$cS|X1NoR)W+_^LrPh@4&3WrFT z5Y|=0->90rx{)CWm(r{@lPHu7!yM#~K``w91tWpdHFa%=@kR!ctSdrm?XqOUJ(0*i zM1R#>^{o#NYIQVA_=R2Yi?z@|$;U%H34MZqg8A_N^s&)VDDiNjDkg77n2PAE=H~fo zC?)w?ozW%-Q*k|oQ5A|XEVHF%wpXTo!7}QG9V9}BF%ELI?r_hq$>?V16KmH>4f`kO z!`U(CQT+EUK=Y(U3(EB4DT|*-buGARe4S;w%D*=+OTZe!jq}F^V)6H}Sjx6U#^TdX zDSe&rGh^Ma+&7w`^Aua61xfJNHf=FeUWcSgm?So`mh-M5hD!FE2IAe=hw|PxdB} z9WpW^^ODtNMD|wp$ogbNWM^-eoh@6)rBG%@BxHQDXGZt&{yy%%;r{9V2d;6x-{*NA z$LsZc9TZ^?Q#e7@077SZ$M&8|qb|oKt@>@t!Uc3%b zsXk;SUe9qo%s1BwG(w^9zzv&_@V<*bLP6#aABsJf76KG@cW+N%E4au`Og1UDA8~fF z;x230IDt?ECu?WgPv^oDJ5NjKI|T&lol3BUQ%hE^?AxE;iYvmat#~7Mg4=l{Px}L# zp)p3@XQb0!68*q$VEk#d)mR7HEWemga)f^X+*BYnY7Oh#wR%@UWh%WYtGet6eq6(^ z6HPO)EFz%B@|BWom-JA$E3H5XT2YJ*zQ*GssCX#-fr4(2l?0}s=war1&a338Z9!gM zb-(QEr)EY*b`PQneJf%4mL+^gh8e-=e&`|T&#(xvv#0w? zI4HR2BwTZTma9*1=^NboO1W%}o=nBKzQ9Hw0<$*NH#?kF0Oe()i`k9GDT#>%j%>tF z8b3vV{yaUz{&3QxD2iLwZ85B($a&gxPFHEHRF4aRe-ViaM1>48E|XMSrp=kgVP0h} z0>y=eC-#IFh&^fY47Y>mG=Uc{2PDC2u#AUe49LwDHs0RmN(%p}^48JbJ_LO1sU|lz zAmYDLsxC)Blk>k6!Sa>myv5>cNLvFkk4eR(e(?)!ezW#jODtrd0O_vUzr0S9%S>NR zeSrK2V(KQm+L6mWV7j_T5s=a?n18(Yk5suX`nHIO#aM|>wfnNVb<}n1ro?zLQPEED ztaGg{FuTD}|3mx?m*-yc<{trW?qHDIx?$D$jXTvX(A4?RO(9q>NSpmn*}d=9-B`Ok znWzy2nqh+?+ZjGSc&5-sHe}9B=c`amx@Wy(T{D<)gIJmC!T2LSJ3ZMD;c>b}HICyL zE!mR~31l{{uRqLoz^T{+1v^tH7X>%fD+{`ju`w&@E_po0E9{B8yY4u_E*cBunTG69 zAZnXfAL~-SvnPcWBqN|;4gzl`wZ1-cfKNYO)Sb4?(d+kX17Ne1#{muv;XSq==Kgl=+C4h_Gi;-OB;~10}AJ4yk z7?g2vZoEb20+h&9ujB!sBm6v&{y%sVEUw9~6%~P8{$PY5;u7eB2KL{0Q!26HaGT}_ zx{vf;(LYk?28 zZrTcOT%0bd*I6s&hD2bxrtl$~3`8Glhh=YoO2+>}Ff16FX>Kw~nt*{j$!`AS%rbg{$Dj{~GUs8JB`xk3?R{*UCEe&q?5h`|Ye2O^>$u)h>BQpKKL zebN`RV@))g{_^E@w0GA^Nc?5~*3Fp(L&)@%HH5Dwy{yrKz(fs7G1vKMG!oJv_t5Ap z%^i2?uoG)uCd60G56LFCC?}5JPN%nBxz0HDd z8+h>PKkL1Z`S`Tmw|_z(YrZ+#++gat^cLN30|kj#qu`;-(#QD9s6rDrpOZbnWT;4c zsw-&fh}(GS-`xo~-nKYi2&KSH`%C*%8`L>O!e==u`CUTWDwA`YEho%6y@*4bQ!9(~ zi|zgmli3@mC~a*Vh+^zMBl~=vMxk?kyvzd1^M*El&w$gpH`CP?mmy1H-2GW=fsA+p ziV`D|e`ee{4Nogf8Y3VYt0hT`?(4rribNlZvwX2#VXfSk4BaAz^Z>wsBDrH62bnFe#`R6onW>*!cm5Q@&?9w~H$6&cG(5u=$5yz2&oOHEEubyl`o% z3LdVdLi@n?VSv-@XI`VjsK35kh$B|rM3`1B=%CkjP#wwuyX zcZG{=DqfFlN%BLWQoc^pO1gvTT=G4Vt4SOd>6{vwQg`e;rJjj@ZM6~Fr;k)BAB#(V z$2d1pVL|8m`Oc(aKu*13n`xY=2dMGJNqw!RaTA&AsSR*|dBc6;gsVfIp%D&2tQkA? zx}a;E8rz9a-;~QENrW^J8wD_emNh$T_UzSk@jM`Yv%Np6MUWi&EpO8RCm6X4@l`l+ zv7go`b)AU@B~(G>LxLhmnEpa8iD9oa!Y=(*z#q?H4cZFTlhqQri=DXYz;j=d{VKDR znTZM$fk^@DPv|+dsq5b|)wFozGG9VI4HC@vz!G`aS2lS(hE3mZ7>%=7PP9trG*gC*|owW3qo%M*E8TMJX zY8L;3>jI(yKSg-!cP$i)R}$4rg;nYKlUOI_R$r=Z7kHu|!*&TY&Mu|}x@IgbR6snZ z2~0|X9}klFPd;{8rOF1hpr$gM{VZ;2fhp+Zz>PAJO-t4s4FjjK8ys$PX@W%K52X`A z62`iF z>F3*i2I(3=_8}}ZG&->TjQBe&FTuqVPns%tF|C5_%GAf#sO~iuOm>-m{ zKVHI?wPNp_%|PG)qA<2PERl3F-qqujX&=S4>`cYfXfdSdWN>?s>0d! zzjFI`hl+Jo1K}4=C>%YwJT-4C%8MgUN_R^h(H|#{F{#m46(HEPaSo_eFPs4tCkN8Q zHHM!o$&qZwj`u9X-Y5@y_|?VTK_M5~y~H%h*v6EGy0F&;9#S?#jAfbWMLfTB?)0ll z@BfAR#0@m`2d*X5ro1^oHUJ_^4b8g7+YYGkqm!Y@6<|PBSg?d4UJ}=`@c7xHA@aQa z&vyDJYV{pn#=f_pvxICtlDtu~<6>grxmb?1rDTcxP`c651YE}D>k7ZJ{3`hrB}T)o z;G%M`A!1R|)OLeESW zsMr0YrOHkHZdwEsv>iaM)c%`o9<6bP?uFB!3M~+LIx`;yKW?V7|IVBE_;@jwFQS^% zG&HcEY-^&Vo36v$7$jKs^m97RRBj%QIo^LChtD|i{u@zeZ!&wEl0wip_xy&;{)nPM zjrZ*9*j~%5!voiUetnE*bA_$Z1DGKp0&~SM-(`R+l|@|q`r?kne{=7zPgI#v0BtQ; zZqhhJtFIvbWtmW%!Cb!Q6F9$#iHV)4N00FUCy~Ne{XQr;mm~Q$?(QL7D-doIClTm9 zeY?9Fvx;%|^S5U`hP!}1A^-syNy4puZ+l-Kl%f6;A-x_3jp7T!18y4Kam4XRFv*qtqle8JqDc_o4<+}97t*Nc^*Rx4a71LPz-KM z<%4*aAo+N~@)mVhn0kA5}0B)8I@ zzM2kdsYIUz@YB{BRXY3a3H)}3L|z`42zFm8uo&`xdlm<{viFxcB$74_d|md(G_qyq zCZ3L;=`rMQ&B@Te3+EioI`fm;yuV($4q&o`=j!W?z?QQhz-}+&lU6sUosZDQUTcfp zm2S=+;5TRy7|WQ1fSLeIG8xlNXRlyMPfH^LF`P_e&}puvK4}cYTOC-Wh$6(P?}8=? zH1QAsUyyl30``-`#});t<#^b1^!@u0`Q`NW$@;mo?xNf)0s+6I=U>1%$yss7m(yr> z>H<0|0z{B&HVpB{gj8-cggKu`Lg+-t;);M;Gj0+P@*g1mfD5_^ik4b#j`D+Ov0&y& zJc;+<_xw?~ASiT3MZMQcixDpxHeo&I(n-O|Y~uIV%uD+M48803Nkjwsh7Ctory%sy zEA@KzRYXZIL!{CII9m5I>#@OooeKvlOso?c{Ao>x4@~cJOr-SdJrs|gkbpoq(hZlo=7ziq z)Y2-9pNw_X`MQWR7P8+`9D7{#_m2=#v+}>F!jvmd5@lXzx$-If4hdij6~{zEGR&u2 z23d)fLdK!#Uqhq5r<;5kq^jc$LD_ZiuB>|HYQqc&T+lz67@DKvTTl+2M+j^3`LXgH zZn+SpN@9fv3e8F8dMG&^JI(hS~` z9fyh(kKui>u4g$aPxbIQ~T}UquDA`l7u9DySbj{r@zgv~+p&-DmWZ z9Q6+zcm#CrscorT+e1bEg?0;sGGb(sNyWkDQ%82a)R}q*0+;p^P9Qssu`(AA(IR!v z8%@VDc~eU2%G&jIYzm^^I=2kG@sAhKZgI-9OZQtKclL+IW~NVY&I&S_ivYA9*1HM* zdf1HTA6(}a{i9V>^%9N}^wI(Wxy?K`p$z>)%3gv?-E~=BY}TaSo&)M(rHzRSWoSE; zp(=pN^BPp0G|;cnLX`O$0(e4Aj6^9cf$m;}yl>rfnL34bK%>ntvktImq5?`oWr;m+ zQOY<=qU73F63km(WQ4$v1NF9^ri5)cGGo$;E}{vFk3`R6b)iej+TBcEv+)zAWz*~( z#V?-1+?;o-q4v6r@JJ~Mhn*b7!ax=t zY)twU)d0SR2I$|q`fb$n*$MY|Vwk?fqBrL8xHO*ww*2O6S9mfPRHXV92!;I)9XFcY zamWik9vSSg_y%BtyMcZOqnE!OOzHk_sH*w174f{>+c8pwGJ)bKVx?w#!V1^Wz11Wm-CTdb z!tj~rFjTjp-i2K47)B-$Q{l zAz4J7R=t8@ADS=~`rD1WYM?=mAKR&MvKxw*X%Mm?6n1=4QXxMPhl#HcC%$ea9C{^qkTN%{9fSJ4^_Opw|Em{W9-fy=g$dV zmDHJN7xWcaerU>>TcMESO{jG@5Bu#DK~XwuHiKup-|&c)eSazRLs zfL64zgRL@_Be9xH|F~3Lqm*~yW3~>b>Q)CJ5W*mzsHpML{7jw`K?|t)ys%H_gtLts zMik_lYQMX$J~+pMtX$y=KZ(1z*G636e!l!{1^UHa1IR1F2r%@UsH54^nHbYb4hMN} z4}}~*xPukKMNg`9HS|LuBn=t)_4kf+L#II5vuTX(J84?p01Gqmt74(Aa=uP{W~KmC z18d*L%cv4n-$H^vYmX2m*bc^p-)19LdLNX~C{VV1u||jaGM0X*Bv0r$xOsW0AT*cZ z^h&o^%;>ki(9Z{xkX^Ne8+`HIprA(uWf@iQzQ`Y@Ws_s(zvPS(+DO7{f-@=D;7f*m zOwW(%k!R-)EJkqP)h(sYyz<>&{o!CH&+G}QP$=F@tcXjo?nqBQqDXP_o#5GJ+O=nU zGlO9oGtWRUnc?R^kr{kDQ12-I^w65AiHOlhL)_&%KN7`%#OhjBkD30*%_J4rn8gqh z!K*Oa$}3YZ-JIXVu5NCt<8S+u`I+deT@B#A^I!c@JWVX$m#oU}=%M<{1yt2VEMFD1 zk&#iQgEFcz*8TvKN4DDrW|v?fR5Zrj!f6MK2GNfiR%%{{KDrmVpOuor1uAFB?2!fs z_x1ref6{+4)g=~Bw*rset3~ho)%(J@o#WpwK^p@cm3jSu<($%vIb+X&{N)6g%4UO) z_s78D_XMAF{VM3ZqCtea4>JJ1nHJoZ%Z&<~ce`&E?+HZewQd-OMFc`O%yuDy&1;}!@qcHv*bxH-01+$G zXXB{tzZdg=L!moV32B{QZBt^swByaV+3`0J8GmuW$j_mywN!MH1*a_17^U8Ep!HlG z>7tF*U@HwR{od}jn8W@{Z>$t#bC-sBaoRnH-F>104cy&BgKkeLLljN5l% z7KnHtxv=+J?Kj%@GPjP0@H|L<6d&bq^yzo>5Lz+TB5}0YW)F*@49RK$#i4_#@BZ1g zQj4{2kBW*iUmq)V1$Mrt$?d1(lZbdPRT2;rXlqK=Lrr(Dt_1+F&%=hQp*Dn=%tB2+ zGh$Q~-QApuMUolYa)0;avef^DsSk)>2TeiuleoM104Furx(fZG$Nsy!*mM^{_!B(GRNyJln7`Siaen;IACZ1Ypqz!>fe9GMr5TdHu=_MOiay zAFB4P(PD~E8IsqW+fSY%(e&SGsbXKJrU>Q!o(x-ndJU!q4!r%^W@at}DG)i8&LZ&{ zf@uTh@X8=#fTlYR*_mj_^gqRtN37qR*AG)j^S^zGRfI#b*_iyT7AN(&;8U8Olr*`! zdk=eG>i^E0AK;9TFnp2%O!fjG0~d+nDGM>&~L+F$53RT zl7$5eQimg&Eo9?kP4A!Zt2J-S-$o}o#w^u7v}0z|JjzkW!sUb@Sk(ci&yPU>{sG$< z9ufuod*A2a5a&WGIRe@oC=t>?cvAPpGCAl?pw7hTUk&W4t_*uJ87UwE6ALr$ l{~zc4|6-zb55a}p69(Z;$HI_xnCOk8ru literal 0 HcmV?d00001 diff --git a/docs/assets/Qwiic-registered-updated.png b/docs/assets/Qwiic-registered-updated.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbfc2a1c3956ad4f75881b5a46cd21b736a6396 GIT binary patch literal 60410 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 literal 0 HcmV?d00001 diff --git a/docs/assets/sfe_favicon.png b/docs/assets/sfe_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3003abf592e863021f25e6941aec04826f8402d3 GIT binary patch literal 14810 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
L)dc<+J+N7RX(3 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
+ +## Improve our Documentation +All of this documentation can be modified by you! Please help us make it better. + +* These pages are contained in the [`docs` folder of the SparkFun Qwiic OLED Arduino Library repository](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/tree/main/docs). + +### Submit a Correction +1. Fork this repo +2. Add your corrections or improvements to the markdown file +3. File a pull request with your changes, and enjoy making the ~~words~~ ~~worlds~~ world a better place. + * Once received, the documentation specialist will automatically be notified. + * We will review your suggested improvements to make sure they are correct and fit within our documentation standards. + +## Improve our Hardware Design +All of our designs are open-source! Please help us make it better. + +* Our board design files are contained in the `Hardware` folder of their respective repositories: + +* [SparkFun Micro OLED Breakout (Qwiic)](https://github.com/sparkfun/Qwiic_Micro_OLED/tree/main/Hardware) +* [SparkFun Qwiic OLED Display (0.91 in, 128x32)](https://github.com/sparkfun/SparkFun_Qwiic_OLED-0.91/tree/main/Hardware) +* [SparkFun Transparent Graphical OLED Breakout (Qwiic)](https://github.com/sparkfun/Qwiic_Transparent_Graphical_OLED/tree/main/Hardware) +* [SparkFun Qwiic OLED - (1.3in., 128x64)](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/tree/main/Hardware) + +### Submit a Design Improvement +1. Fork this repo +2. Add your design improvements +3. File a pull request with your changes, and enjoy making the ~~words~~ ~~worlds~~ world a better place. + * Once received, the engineer in charge of the original design will automatically be notified. + * We will review your suggested improvements, if they are within our board design standards and meet our product design requirements, we will flag these changes for our next board revision. *(Please note, that even if your suggestion is accepted, these changes may not be immediate. We may have to cycle through our current product inventory first.)* + +## Contributors +Let's provided some recognition to the contributors for this project! + +![GitHub Contributors Image](https://contrib.rocks/image?repo=sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/) +
+ diff --git a/docs/github/file_issue.md b/docs/github/file_issue.md new file mode 100644 index 0000000..9407e2a --- /dev/null +++ b/docs/github/file_issue.md @@ -0,0 +1,52 @@ +# Did we make a mistake? + +Spot something wrong? Please let us know. + +!!! attention + This is not where customers should seek assistance on a product. If you require technical assistance or have questions about a product that is not working as expected, please head over to the [SparkFun Technical Assistance](https://www.sparkfun.com/technical_assistance) page for some initial troubleshooting. +
+ [SparkFun Technical Assistance Page](https://www.sparkfun.com/technical_assistance){ .md-button .md-button--primary } +
+ + If you can't find what you need there, you'll need a [Forum Account](https://forum.sparkfun.com/ucp.php?mode=register) to search product forums and post questions. + +## Discrepancies in the Documentation + +All of this documentation can be modified by you! Please help us make it better. + +* The documentation files for these pages are contained in the [`docs` folder of the SparkFun Qwiic OLED Arduino Library repository](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/tree/main/docs). + +### Spot something wrong? +If a section of the documentation is incorrect, please [open an issue](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/issues) and let us know. + +### Do you have a suggested correction? +1. With a GitHub account, fork this repo +2. Add your correction(s) or improvement(s) to the markdown file(s) +3. File a pull request with your changes, and enjoy making the ~~words~~ ~~worlds~~ world a better place. + * Once received, the documentation specialist will automatically be notified. + * We will review your suggested improvement(s) to make sure they are correct and fit within our documentation standards. + +## Problems in the Hardware Design + +All of our designs are open-source! Please help us make it better. + +Our board design files are contained in the `Hardware` folder of their respective repositories: + +* [SparkFun Micro OLED Breakout (Qwiic)](https://github.com/sparkfun/Qwiic_Micro_OLED/tree/main/Hardware) +* [SparkFun Qwiic OLED Display (0.91 in, 128x32)](https://github.com/sparkfun/SparkFun_Qwiic_OLED-0.91/tree/main/Hardware) +* [SparkFun Transparent Graphical OLED Breakout (Qwiic)](https://github.com/sparkfun/Qwiic_Transparent_Graphical_OLED/tree/main/Hardware) +* [SparkFun Qwiic OLED - (1.3in., 128x64)](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/tree/main/Hardware) + +### Does something not make sense? +If part of the design is confusing, please [open an issue](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/issues) and let us know. + +### Did we forget to include an important function of the board? +* Please keep in mind that we may intentionally exclude certain functions of the board to meet our product design requirements. *(For example, our Qwiic Micro boards are intended to fit on a small board layout and only use I2C communication; therefore, we may not have the SPI and interrupt pins available for users.)* +* If part of the board's functionality is missing, please [open an issue](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/issues) and file a feature request. + +### Do you wish to contribute directly to improving the board design? +1. With a GitHub account, Fork this repo +2. Add your design improvement(s) +3. File a pull request with your changes, and enjoy making the ~~words~~ ~~worlds~~ world a better place. + * Once received, the engineer in charge of the original design will automatically be notified. + * We will review your suggested improvement(s), if they are within our board design standards and meet our product design requirements, we will flag these changes for our next board revision. *(Please note, that even if your suggestion is accepted, these changes may not be immediate. We may have to cycle through our current product inventory first.)* diff --git a/docs/hug_1in3.md b/docs/hug_1p3.md similarity index 80% rename from docs/hug_1in3.md rename to docs/hug_1p3.md index 0d4e324..0cc25e0 100644 --- a/docs/hug_1in3.md +++ b/docs/hug_1p3.md @@ -1,3 +1 @@ -# Qwiic OLED 1.3in Setup - The Qwiic OLED 1.3in has its own [hook-up guide](https://docs.sparkfun.com/SparkFun_Qwiic_OLED_1.3in/). diff --git a/docs/hug_micro_view.md b/docs/hug_micro_view.md index e34b290..6d97894 100644 --- a/docs/hug_micro_view.md +++ b/docs/hug_micro_view.md @@ -1,120 +1,546 @@ +## Introduction +The [Qwiic Micro OLED](https://www.sparkfun.com/products/22495) is a Qwiic enabled version of our micro OLED display! This small monochrome, blue-on-black OLED display displays incredibly clear images. -# Micro OLED Setup +
+
-## Introduction +- +
+ SparkFun Micro OLED Breakout (Qwiic) +
+
-The [Qwiic Micro OLED](https://www.sparkfun.com/products/14532) is a Qwiic enabled version of our micro OLED display! This small monochrome, blue-on-black OLED display displays incredibly clear images + --- -[![SparkFun Micro OLED Breakout (Qwiic)](https://cdn.sparkfun.com/r/500-500/assets/parts/1/2/6/2/1/14532-SparkFun_Micro_OLED_Breakout__Qwiic_-01.jpg "SparkFun Micro OLED Breakout (Qwiic)")](https://www.sparkfun.com/products/14532) + + SparkFun Micro OLED Breakout (Qwiic) +
+ LCD-22495 +
+
[Purchase from SparkFun :fontawesome-solid-cart-plus:](https://www.sparkfun.com/products/22495){ .md-button .md-button--primary }
+
+
+
- +
+ +
This hookup guide will show you how to get started drawing objects and characters on your OLED. -###Required Materials -To get started, you'll need a microcontroller to, well, control everything. -* [SparkFun RedBoard - Programmed with Arduino](https://www.sparkfun.com/products/13975) -* [SparkFun Thing Plus - Artemis](https://www.sparkfun.com/products/15574) -* [SparkFun Thing Plus - ESP32 WROOM](https://www.sparkfun.com/products/15663) -* [SparkFun Thing Plus - SAMD51](https://www.sparkfun.com/products/14713) -* [Raspberry Pi 4 Model B (2 GB)](https://www.sparkfun.com/products/15446) +### Required Materials + +To follow along with this tutorial, you will need the following materials. You may not need everything though depending on what you have. Add it to your cart, read through the guide, and adjust the cart as necessary. -If the controller you choose doesn't have a built in Qwiic connector, one of the following Qwiic shields that matches your preference of microcontroller is needed: +* 1x [SparkFun RedBoard Plus [DEV-18158]](https://www.sparkfun.com/products/18158) +* 1x [Reversible USB A to C Cable - 0.8m [CAB-15425]](https://www.sparkfun.com/products/15425) +* 1x Qwiic Cable + * [Flexible Qwiic Cable - 50mm [PRT-17260]](https://www.sparkfun.com/products/17260), for short distances + * [Flexible Qwiic Cable - 500mm [PRT-17257]](https://www.sparkfun.com/products/17257), for those that need to wire the board farther away from your microcontroller +* 1x [SparkFun Micro OLED Breakout (Qwiic) [LCD-22495]](https://www.sparkfun.com/products/22495) + + + +#### Microcontroller + +To get started, you'll need a microcontroller to, well, control everything. We used the RedBoard with the ATmega328P for the Qwiic micro OLED. However, any of the other microcontrollers that are compatible with the Qwiic OLED Arduino Library will work as well. Below are a few from the list that we provided earlier. + + + + + +#### USB Cable + +Below are a few USB cables from the SparkFun catalog. Make sure to grab the associated USB cable that is compatible with your microcontroller. + + + + +#### Qwiic + +If the controller you choose doesn't have a built-in Qwiic connector, one of the following Qwiic shields that matches your preference of microcontroller is needed: + + -* [SparkFun Qwiic Shield for Arduino](https://www.sparkfun.com/products/14352) -* [SparkFun Qwiic Shield for Teensy](https://www.sparkfun.com/products/17119) -* [SparkFun Qwiic Shield for Arduino Nano](https://www.sparkfun.com/products/16789) -* [SparkFun Qwiic SHIM for Raspberry Pi](https://www.sparkfun.com/products/15794) - You will also need a Qwiic cable to connect the shield to your OLED, choose a length that suits your needs. -* [Flexible Qwiic Cable - 100mm](https://www.sparkfun.com/products/17259) -* [Flexible Qwiic Cable - 500mm](https://www.sparkfun.com/products/17257) -* [Flexible Qwiic Cable - 50mm](https://www.sparkfun.com/products/17260) -* [Flexible Qwiic Cable - 200mm](https://www.sparkfun.com/products/17258) + + +Of course, you will also need a Qwiic Micro OLED if you have not added that to you cart already. + +
+ +
+ + +### Suggested Reading + +If you aren't familiar with the Qwiic Connection System, we recommend reading [here for an overview](https://www.sparkfun.com/qwiic). + +
+ + + + + + + +
+
Qwiic Connection System +
+
+
-###Suggested Reading +We would also recommend taking a look at the following tutorials if you aren't familiar with them. -If you aren't familiar with the Qwiic system, we recommend reading [here for an overview](https://www.sparkfun.com/qwiic). + -We would also recommend taking a look at the following tutorials if you aren't familiar with them. -* [I2C Overview](https://learn.sparkfun.com/tutorials/i2c) -* [Qwiic Shield for Arduino & Photon Hookup Guide](https://learn.sparkfun.com/tutorials/qwiic-shield-for-arduino--photon-hookup-guide) ### Hardware Overview Listed below are some of the operating ranges and characteristics of the Qwiic Micro OLED. -| Characteristic | Range | -| :--- | :--- | -| Voltage | **3.3V** | -| Temperature | -40°C to 85°C | -| I2C Address | 0X3D (Default) or 0X3C (Closed Jumper) | +
+ + + + + + + + + + + + + + + + + +
Characteristic + Range +
Voltage + 3.3V +
Temperature + -40°C to 85°C +
I2C Address + 0X3D (Default) or 0X3C (Closed Jumper) +
+
###Pins -| Pin | Description | Direction | -| :--- | :--- | :--- | -|GND | Ground | In | -| 3.3V | Power | In | -| SDA | Data | In | -| SCL | Clock | In | +Power and I2C pins are broken out to the 1x4 PTH pins as well as the two horizontal Qwiic connectors. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Pin + Description + Direction +
GND + Ground + In +
3.3V + Power + In +
SDA + I2C Data + In +
SCL + I2C Clock + In +
+
+ + + +### Jumpers + +There are several jumpers on board that can be changed to facilitate several different functions. The first of which is the I2C pull-up jumper to disable the 2.2kΩ pull up resistors on the I2C data and clock lines, highlighted below. If multiple boards are connected to the I2C bus, the equivalent resistance goes down, increasing your pull up strength. If multiple boards are connected on the same bus, make sure [only one board has the pull-up resistors connected](https://learn.sparkfun.com/tutorials/i2c/i2c-at-the-hardware-level). + +
+ + + + + + + +
I2C Pull-Up Jumper
I2C Pull-Up Jumper
+
-##Optional Features -There are several jumpers on board that can be changed to facilitate several different functions. The first of which is the I2C pull-up jumper, highlighted below. If multiple boards are connected to the I2C bus, the equivalent resistance goes down, increasing your pull up strength. If multiple boards are connected on the same bus, make sure only one board has the pull-up resistors connected. +The ADDR jumper (highlighted below) can be used to change the I2C address of the board. The default jumper is open by default, pulling the address pin high and giving us an I2C address of **0X3D**. Closing this jumper will ground the address pin, giving us an I2C address of 0X3C. + +
+ + + + + + + +
Address Jumper
Address Jumper
+
+ + + +### Board Dimensions + +!!! note "Revision Change" + For V11, we have optimized the two mounting hole locations to match the mounting holes located on a standard 1.0" x 1.0" Qwiic-sized board. The overall functionality of the Qwiic Micro OLED breakout board is the same as the previous version! + +The overall board size is 1.08" x 1.17". There is a v-score for users that want to remove the mounting holes. + +
+ + + + + + + +
Board Dimensions
Board Dimensions
+
+ -[![I2C Pull-Up Jumper](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/7/1/8/pu.PNG "I2C Pull-Up Jumper")](https://cdn.sparkfun.com/assets/learn_tutorials/7/1/8/pu.PNG) -The ADDR jumper (highlighted below) can be used to change the I2C address of the board. The default jumper is open by default, pulling the address pin high and giving us an I2C address of **0X3D**. Closing this jumper will ground the address pin, giving us an I2C address of 0X3C. -[![Address Jumper](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/7/1/8/addr.PNG "Address Jumper")](https://cdn.sparkfun.com/assets/learn_tutorials/7/1/8/addr.PNG) ## Hardware Assembly -If you haven't yet [assembled your Qwiic Shield](https://learn.sparkfun.com/tutorials/qwiic-shield-for-arduino--photon-hookup-guide), now would be the time to head on over to that tutorial. -With the shield assembled, Sparkfun's new Qwiic environment means that connecting the screen could not be easier. Just plug one end of the Qwiic cable into the OLED display, the other into the Qwiic Shield and you'll be ready to start displaying images on your little display. +If you haven't yet [assembled your Qwiic Shield](https://learn.sparkfun.com/tutorials/qwiic-shield-for-arduino--photon-hookup-guide), now would be the time to head on over to that tutorial. With the shield assembled, SparkFun's Qwiic environment means that connecting the screen could not be easier. Just plug one end of the Qwiic cable into the OLED display, the other into the Qwiic Shield and you'll be ready to start displaying images on your little display. + +
+ + + + +
Qwiic Micro OLED Connected to Arduino and Qwiic Shield
+
+ + +If you have a built-in Qwiic connector, you can skip the hardware assembly of the Qwiic Shield and simply insert a Qwiic cable between the two boards. Have more than one Qwiic-enabled device? You can daisy chain it to the board as well! Below is an example with the SAM-M8Q and the Qwiic Micro OLED daisy chained together to the RedBoard Qwiic. -[![Qwiic Micro OLED Connected to Arduino and Qwiic Shield](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/7/1/8/Qwiic_OLED-03.jpg "Qwiic Micro OLED Connected to Arduino and Qwiic Shield")](https://cdn.sparkfun.com/assets/learn_tutorials/7/1/8/Qwiic_OLED-03.jpg) +
+ + + + +
Qwiic Micro OLED Connected to RedBoard Qwiic and Qwiic GPS(SAM-M8Q)
+
+ +!!! note + The initial launch of the Qwiic micro OLED breakout board had the OLED loosely attached to the breakout board. For users that received those boards, be careful handling it! You can either use your own enclosure for the OLED display, or you can use some double sided foam tape for a less permanent solution. + +
+ + + + +
Taped Screen
+
+ + The current production of the boards includes the double sided foam tape. -The OLED screen itself is loosely attached to the breakout board initially, so be careful handling it! You can either use your own enclosure for the OLED display, or you can use some double sided foam tape for a less permanent solution. -[![Taped Screen](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/7/1/8/Qwiic_OLED-01.jpg "Taped Screen")](https://cdn.sparkfun.com/assets/learn_tutorials/7/1/8/Qwiic_OLED-01.jpg) ## Software The SparkFun Micro OLED Breakout (Qwiic) uses the SparkFun QWIIC OLED Arduino Library. The [SparkFun Qwiic OLED library Getting Started guide](software.md) has library setup instructions and usage examples. Additionally, the full library API documentation is available in the [SparkFun Qwiic OLED Library API Reference guide](api_device.md). -## Resources and Going Further + + +## Resources Now that you've successfully got your OLED displaying things, it's time to incorporate it into your own project! For more on the Qwiic Micro OLED, check out the links below: * [Schematic (PDF)](https://cdn.sparkfun.com/assets/d/0/e/4/1/Qwiic_OLED_Breakout.pdf) -* [Eagle Files (ZIP)](https://cdn.sparkfun.com/assets/c/b/c/f/d/Qwiic_OLED_Breakout_1.zip) -* [Datasheet (PDF)](https://cdn.sparkfun.com/assets/learn_tutorials/3/0/8/SSD1306.pdf) +* [Eagle Files (ZIP)](https://cdn.sparkfun.com/assets/c/b/c/f/d/Qwiic_OLED_Breakout_1.zip) +* [Datasheet (PDF)](https://cdn.sparkfun.com/assets/learn_tutorials/3/0/8/SSD1306.pdf) * [Bitmap Generator](http://en.radzio.dxp.pl/bitmap_converter/) * [Qwiic System Landing Page](https://www.sparkfun.com/qwiic) -* [SparkFun Qwiic OLED Arduino Library](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/) * [Qwiic Micro OLED Python Package](https://github.com/sparkfun/Qwiic_Micro_OLED_Py) -* [SparkFun Qwiic Micro OLED GitHub Repository](https://github.com/sparkfun/Qwiic_Micro_OLED) -- Board design files for the Qwiic Micro OLED. +* [GitHub Hardware Repo](https://github.com/sparkfun/Qwiic_Micro_OLED) -- Board design files for the Qwiic Micro OLED. * [Product Showcase: Qwiic Presence Sensor & OLED](https://www.youtube.com/watch?v=OBOgxnctzwI) - diff --git a/docs/hug_transparent.md b/docs/hug_transparent.md index 27ce29a..bb90004 100644 --- a/docs/hug_transparent.md +++ b/docs/hug_transparent.md @@ -1,176 +1,617 @@ +## Introduction +The future is here! You asked and we delivered - our [Qwiic Transparent Graphical OLED Breakout](https://www.sparkfun.com/products/15173) allows you to display custom images on a transparent screen using either I2C or SPI connections. -# Transparent OLED Setup - -## Introduction +With Qwiic connectors it's quick (ha ha) and easy to get started with your own images. However, we still have broken out 0.1"-spaced pins in case you prefer to use a breadboard. Brilliantly lit in the dark and still visible by daylight, this OLED sports a display area of 128x64 pixels, 128x56 of which are completely transparent. Control of the OLED is based on the [HyperDisplay library](https://learn.sparkfun.com/tutorials/transparent-graphical-oled-breakout-hookup-guide#software-setup-and-programming) or SparkFun Qwiic OLED Arduino Library! For the scope of this tutorial, we will be using the SparkFun Qwiic OLED Arduino Library. -The future is here! You asked and we delivered - our [Qwiic Transparent Graphical OLED Breakout](https://www.sparkfun.com/products/15173) allows you to display custom images on a transparent screen using either I2C or SPI connections. +
+
-With Qwiic connectors it's quick (ha ha) and easy to get started with your own images. However, we still have broken out 0.1"-spaced pins in case you prefer to use a breadboard. Brilliantly lit in the dark and still visible by daylight, this OLED sports a display area of 128x64 pixels, 128x56 of which are completely transparent. Control of the OLED is based on our new HyperDisplay library. +- +
+ SparkFun Transparent Graphical OLED Breakout (Qwiic) +
+
+ --- -[![SparkFun Transparent Graphical OLED Breakout (Qwiic)](https://cdn.sparkfun.com//assets/parts/1/3/5/8/8/15173-SparkFun_Transparent_Graphical_OLED_Breakout__Qwiic_-01a.jpg "SparkFun Transparent Graphical OLED Breakout (Qwiic)")](https://www.sparkfun.com/products/15173) + + SparkFun Transparent Graphical OLED Breakout (Qwiic) +
+ LCD-15173 +
+
[Purchase from SparkFun :fontawesome-solid-cart-plus:](https://www.sparkfun.com/products/15173){ .md-button .md-button--primary }
+
+
+
- +
+ +
This hookup guide will show you how to get started drawing objects and characters on your OLED. -###Required Materials +### Required Materials + +To follow along with this tutorial, you will need the following materials. You may not need everything though depending on what you have. Add it to your cart, read through the guide, and adjust the cart as necessary. + +* 1x [SparkFun Thing Plus - ESP32 WROOOM (USB-C) [WRL-20168]](https://www.sparkfun.com/products/18158) +* 1x [Reversible USB A to C Cable - 0.8m [CAB-15425]](https://www.sparkfun.com/products/15425) +* 1x Qwiic Cable + * [Flexible Qwiic Cable - 50mm [PRT-17260]](https://www.sparkfun.com/products/17260), for short distances + * [Flexible Qwiic Cable - 500mm [PRT-17257]](https://www.sparkfun.com/products/17257), for those that need to wire the board farther away from your microcontroller +* 1x [SparkFun Transparent Graphical OLED Breakout (Qwiic)[LCD-15173]](https://www.sparkfun.com/products/15173) + + + +#### Microcontroller + +To get started, you'll need a microcontroller to, well, control everything. We used the SparkFun Thing Plus - ESP32 WROOOM. However, any of the other microcontrollers that are compatible with the Qwiic OLED Arduino Library will work as well. Below are a few from the list that we provided earlier. + + + + + +#### USB Cable + +Below are a few USB cables from the SparkFun catalog. Make sure to grab the associated USB cable that is compatible with your microcontroller. + + + + +#### Qwiic + +If the controller you choose doesn't have a built-in Qwiic connector, one of the following Qwiic shields that matches your preference of microcontroller is needed: + + -To get started, you'll need a microcontroller to, well, control everything. -* [SparkFun RedBoard - Programmed with Arduino](https://www.sparkfun.com/products/13975) -* [SparkFun Thing Plus - Artemis](https://www.sparkfun.com/products/15574) -* [SparkFun Thing Plus - ESP32 WROOM](https://www.sparkfun.com/products/15663) -* [SparkFun Thing Plus - SAMD51](https://www.sparkfun.com/products/14713) -* [Raspberry Pi 4 Model B (2 GB)](https://www.sparkfun.com/products/15446) -If the controller you choose doesn't have a built in Qwiic connector, one of the following Qwiic shields that matches your preference of microcontroller is needed: +You will also need a Qwiic cable to connect the shield to your OLED, choose a length that suits your needs. -* [SparkFun Qwiic Shield for Arduino](https://www.sparkfun.com/products/14352) -* [SparkFun Qwiic Shield for Teensy](https://www.sparkfun.com/products/17119) -* [SparkFun Qwiic Shield for Arduino Nano](https://www.sparkfun.com/products/16789) -* [SparkFun Qwiic SHIM for Raspberry Pi](https://www.sparkfun.com/products/15794) + + +Of course, you will also need A Tranparent Graphical OLED Breakout if you have not added that to you cart already. + +
+ +
- -You will also need a Qwiic cable to connect the shield to your OLED, choose a length that suits your needs. - -* [Flexible Qwiic Cable - 100mm](https://www.sparkfun.com/products/17259) -* [Flexible Qwiic Cable - 500mm](https://www.sparkfun.com/products/17257) -* [Flexible Qwiic Cable - 50mm](https://www.sparkfun.com/products/17260) -* [Flexible Qwiic Cable - 200mm](https://www.sparkfun.com/products/17258) ###Suggested Reading -If you aren't familiar with the Qwiic system, we recommend reading [here for an overview](https://www.sparkfun.com/qwiic). - - - - - - - - -
Qwiic Connect System
Qwiic Connect System
+If you aren't familiar with the Qwiic Connection System, we recommend reading [here for an overview](https://www.sparkfun.com/qwiic). + +
+ + + + + + + +
+
Qwiic Connection System +
+
+
We would also recommend taking a look at the following tutorials if you aren't familiar with them. -* [I2C Overview](https://learn.sparkfun.com/tutorials/i2c) -* [Qwiic Shield for Arduino & Photon Hookup Guide](https://learn.sparkfun.com/tutorials/qwiic-shield-for-arduino--photon-hookup-guide) + + ## Hardware Overview -Listed below are some of the operating ranges and characteristics of the Qwiic Micro OLED. +Listed below are some of the operating ranges and characteristics of the Transparent Graphical OLED Breakout. + +
+ + + + + + + + + + + + + + + + + +
Characteristic + Range +
Voltage + 1.65V-3.3V,
typically 3.3V via the Qwiic Cable +
Supply Current + 400 mA +
I2C Address + 0X3C (Default), 0X3D (Closed Jumper) +
+
+ -| Characteristic | Range | -| :--- | :--- | -| Voltage | **1.65V-3.3V** | -| Supply Current | 400 mA | -| I2C Address | **0X3C (Default)**, 0X3D | ###Graphical Display -The graphical display is where all the fun stuff happens. The glass itself measures 42mm x 27.16mm, with a pixel display that is 35.5 x 18mm. It houses 128x64 pixels, 128x56 of which are transparent. +The graphical display is where all the fun stuff happens. The glass itself measures 42mm x 27.16mm, with a pixel display that is 35.5 x 18mm. It houses 128x64 pixels, 128x56 of which are transparent. + +
+ + + + + + + +
Display Screen
Graphical Display
+
-[![Display Screen](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/GraphicalDisplay1.jpg "Dispaly Screen")](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/GraphicalDisplay1.jpg) -_Graphical Display_ ###Qwiic Connectors -There are two Qwiic connectors on the board such that you can daisy-chain the boards should you choose to do so. If you're unfamiliar with our Qwiic system, head on over to our [Qwiic page](https://www.sparkfun.com/qwiic) to see the advantages! +There are two Qwiic connectors on the board such that you can daisy-chain the boards should you choose to do so. If you're unfamiliar with our Qwiic Connect System, head on over to our [Qwiic page](https://www.sparkfun.com/qwiic) to see the advantages! + +
+ + + + + + + +
Qwiic Connectors
Qwiic Connectors
+
-[![Qwiic Connectors](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/QwiicConnectors1.jpg "Qwiic Connectors")](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/QwiicConnectors1.jpg) <- -_Qwiic Connectors_ ###GPIO Pins -When you look at the GPIO pins, you'll notice that the labels are different from one side to the other. One side is labeled for I2C, the other side is labeled for SPI. +When you look at the GPIO pins, you'll notice that the labels are different from one side to the other. One side is labeled for I2C, the other side is labeled for SPI. - - - - - - - - - -

I2C LabelsSPI Labels
-###Power LED +
+ + + + + + + + + +
I2C PinsSPI Pins
I2C LabelsSPI Labels
+
-This bad boy will light up when the board is powered up correctly. -[![Power LED](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/PowerLED1.jpg "Power LED")](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/PowerLED1.jpg) <- -_Power LED_ +###Power LED + +This bad boy will light up when the board is powered up correctly. -You can disable the power LED by cutting the LED jumpers on the back of the board. +
+ + + + + + + +
I2C Pins
Power LED
+
-[![Power LED Jumpers](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/15173-LEDJumper.jpg "Power LED Jumpers")](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/15173-LEDJumper.jpg) +You can disable the power LED by cutting the LED jumpers on the back of the board. + +
+ + + + + + + +
Power LED Jumpers
Power LED Jumpers
+
-_Power LED Jumpers_ ###JPX Jumpers The JPX jumpers are used to either change the I2C address or configure the board to use SPI communications. The other two jumpers allow you to disconnect the power LED and to disconnect the I2C pull-up resistors when chaining several Qwiic devices. -| Jumper | Function | -| :--- | :--- | -| JP1 | Holds the Chip Select line low when closed. Close for I2C, open for SPI | -| JP2 | Selects the address in I2C mode. Closed for 0x30 by default and open for 0x31. Open for SPI mode to release the D/C pin | -| JP3 | Used to select I2C or SPI mode. Close for I2C, open for SPI | -| JP4 | This jumper should be closed for I2C and open for SPI. This connection allows SDA to be bi-directional| +
+ + + + + + + + + + + + + + + + + + + + + +
Jumper + Function +
JP1 + Holds the Chip Select line low when closed. Close for I2C, open for SPI +
JP2 + Selects the address in I2C mode. Closed for 0x30 by default and open for 0x31. Open for SPI mode to release the D/C pin +
JP3 + Used to select I2C or SPI mode. Close for I2C, open for SPI +
JP4 + This jumper should be closed for I2C and open for SPI. This connection allows SDA to be bi-directional +
+
+ +
+ + + + + + + +
JP1-JP4
JPX Jumper
+
-[![JP1-JP4](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/JPJumpersBackCorrected.jpg "JP1-JP4")](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/JPJumpersBackCorrected.jpg) -_JPX Jumpers_ +###I2C Pull-Up Jumper +I2C devices contain open drains so we include resistors on our boards to allow these devices to pull pins high. This becomes a problem if you have a large number of I2C devices chained together. If you plan to daisy chain more than a few Qwiic boards together, you'll need to cut this I2C pull-up jumper. -###I2C Pull-Up Jumper -I2C devices contain open drains so we include resistors on our boards to allow these devices to pull pins high. This becomes a problem if you have a large number of I2C devices chained together. If you plan to daisy chain more than a few Qwiic boards together, you'll need to cut this I2C pull-up jumper. +
+ + + + + + + +
JP1 to JP4
I2C PU Jumper
+
-[![I2C Pullup jumper](https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/6/1/2/15173-I2CPUJumper.jpg "I2C Pullup jumper")](https://cdn.sparkfun.com/assets/learn_tutorials/6/1/2/15173-I2CPUJumper.jpg) <- -_I2C PU Jumpers_ ## Hardware Hookup Now that you know what's available on your breakout board we can check out the options for connecting it to the brains of your project. There are two options to use - either I2C or SPI - and they each have their own advantages and drawbacks. Read on to choose the best option for your setup. !!! warning - Reminder! This breakout can only handle up to 3.3V on the pins, so make sure to do some level shifting if you're using a 5V microcontroller. + Reminder! This breakout can only handle up to 3.3V on the pins, so make sure to do some level shifting if you're using a 5V microcontroller. -### I2C (Qwiic) -The easiest way to start using the Transparent Graphical OLED is to use a [Qwiic Cable](https://www.sparkfun.com/products/15081) along with a Qwiic compatible microcontroller (such as the [ESP32 Thing Plus](https://www.sparkfun.com/products/14689)). You can also use the [Qwiic Breadboard Cable](https://www.sparkfun.com/products/14425) to attach any I2C capable microcontroller, or take the scenic route and [solder](https://learn.sparkfun.com/tutorials/how-to-solder---through-hole-soldering) in all the I2C wires to the plated-through connections on the board. - - - - - -
Qwiic ConnectorI2C Pinout
+### I2C (Qwiic) -So why use I2C? It's easy to connect with the Qwiic system, and you can put up to two of the Transparent Graphical Breakouts on the same bus without using any more microcontroller pins. That simplicity comes at a cost to performance though. The maximum clock speed of the I2C bus is 400 kHz, and there is additional overhead in data transmission to indicate which bytes are data and which are commands. This means that the I2C connection is best for showing static images. +The easiest way to start using the Transparent Graphical OLED is to use a [Qwiic Cable](https://www.sparkfun.com/products/15081) along with a Qwiic compatible microcontroller (such as the [ESP32 Thing Plus](https://www.sparkfun.com/products/14689)). You can also use the [Qwiic Breadboard Cable](https://www.sparkfun.com/products/14425) to attach any I2C capable microcontroller, or take the scenic route and [solder](https://learn.sparkfun.com/tutorials/how-to-solder---through-hole-soldering) in all the I2C wires to the plated-through connections on the board. + +
+ + + + + + + + + +
Qwiic ConnectorI2C Pinout
Top ViewI2C Pinout/i>
+
+So why use I2C? It's easy to connect with the Qwiic system, and you can put up to two of the Transparent Graphical Breakouts on the same bus without using any more microcontroller pins. That simplicity comes at a cost to performance though. The maximum clock speed of the I2C bus is 400 kHz, and there is additional overhead in data transmission to indicate which bytes are data and which are commands. This means that the I2C connection is best for showing static images. -| Breakout Pin | Microcontroller Pin Requirements| -| :--- | :--- | -| GND | Ground pin. Connect these so the two devices agree on voltages | -| 3V3 | 3.3V supply pin, capable of up to 400 mA output | -| SDA | SDA - the bi-directional data line of your chosen I2C port | -| SCL | SCL - the clock line of your chosen I2C port | -| SA0 | _Optional_ : change the I2C address of the breakout. Make sure to cut JP2 | -| RST | _Optional_ : reset the breakout to a known state by pulsing this low | +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Breakout Pin + Microcontroller Pin Requirements +
GND + Ground pin. Connect these so the two devices agree on voltages +
3V3 + 3.3V supply pin, capable of up to 400 mA output +
SDA + SDA - the bi-directional data line of your chosen I2C port +
SCL + SCL - the clock line of your chosen I2C port +
SA0 + Optional : change the I2C address of the breakout. Make sure to cut JP2 +
RST + Optional : reset the breakout to a known state by pulsing this low +
+
@@ -178,31 +619,79 @@ So why use I2C? It's easy to connect with the Qwiic system, and you c SPI solves the I2C speed problems. With SPI there is a control signal that indicates data or command and the maximum clock speed is 10 MHz -- giving SPI 50x more speed! However, it doesn't have the same conveniences of the polarized Qwiic connector and low pin usage. You'll need to [solder](https://learn.sparkfun.com/tutorials/how-to-solder---through-hole-soldering) to the pins. -[![SPI Pinout](https://cdn.sparkfun.com/r/300-300/assets/learn_tutorials/6/1/2/15173-GPIOBackCorrected.jpg "SPI Pinout")](https://cdn.sparkfun.com/assets/learn_tutorials/6/1/2/15173-GPIOBackCorrected.jpg) - -_SPI Pinout_ +
+ + + + + + + +
SPI Pinout
SPI Pinout
+
You can use SPI to connect as many breakouts as you want. For N displays you will need to use at least N + 3 data pins. That's because the MOSI, SCLK, and D/C pins can be shared between displays but each breakout needs its own dedicated Chip Select (CS) pin. -| Breakout Pin | Microcontroller Pin Requirements | -| :--- | :--- | -| CS | A GPIO pin, set low when talking to the breakout | -| D/C | A GPIO pin, indicates if bytes are data or commands | -| SCLK | The clock output of your chosen SPI port | -| MOSI | The data output of your chosen SPI port | -| 3V3 | 3.3V supply pin, capable of up to 400 mA output | -| GND | Ground pin. Connect these so the two devices agree on voltages | +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Breakout Pin + Microcontroller Pin Requirements +
CS + A GPIO pin, set low when talking to the breakout +
D/C + A GPIO pin, indicates if bytes are data or commands +
SCLK + The clock output of your chosen SPI port +
MOSI + The data output of your chosen SPI port +
3V3 + 3.3V supply pin, capable of up to 400 mA output +
GND + Ground pin. Connect these so the two devices agree on voltages +
+
- - -!!! Warning - +!!! warning Make sure to cut jumpers JP1, JP2, JP3, and JP4 when using SPI mode! -
Cut Jumpers for SPI Mode
- - - +
+ + + + + + + +
Cut Jumpers for SPI Mode
Cut Jumpers for SPI Mode
+
@@ -210,13 +699,13 @@ You can use SPI to connect as many breakouts as you want. For N displays you wil The Transparent OLED Breakout (Qwiic) uses the SparkFun QWIIC OLED Arduino Library. The [SparkFun Qwiic OLED library Getting Started guide](software.md) has library setup instructions and usage examples. Additionally, the full library API documentation is available in the [SparkFun Qwiic OLED Library API Reference guide](api_device.md). -## Resources and Going Further -For more information on the Transparent Graphical OLED Breakout, check out some of the links here: + +## Resources + +For more information on the Transparent Graphical OLED Breakout, check out some of the links here: * [Schematic (PDF)](https://cdn.sparkfun.com/assets/5/e/7/b/5/SparkFun_Transparent_Graphical_OLED_Breakout.pdf) * [Eagle Files (ZIP)](https://cdn.sparkfun.com/assets/2/0/2/c/b/TransparentGraphicalOLEDBreakout.zip) -* [SparkFun Qwiic OLED Arduino Library](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/) -* [GitHub Repo](https://github.com/sparkfun/Qwiic_Transparent_Graphical_OLED) +* [GitHub Hardware Repo](https://github.com/sparkfun/Qwiic_Transparent_Graphical_OLED) * [SFE Product Showcase](https://youtu.be/vzFuVbxBfXI) - diff --git a/docs/index.md b/docs/index.md index fc74b1f..f75cf33 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,74 +1 @@ -# The Qwiic OLED Arduino Library - -![SparkFun Qwiic OLED Arduino Library](img/OLEDLibBanner.png "SparkFun Qwiic OLED Arduino Library") - -The SparkFun Qwiic OLED Arduino Library is a single graphics module that supports all SparkFun OLED boards based on the SSD1306 from Solomon Systech. Prior to this library, three different libraries were used to support our four different OLED boards. - -The SparkFun Qwiic OLED Library delivers a common implementation for all our Qwiic OLED products, delivering a unified, fast, and efficient solution that implements a familiar and easy to understand user experience. - -### Key Features -* Implements common graphics capabilities: pixel, line, rectangle, filled rectangle, circle, filled circle, bitmap, text and raster operators (i.e. XOR). -* Smart data transfer to the device – only sends _dirty_ regions of the graphics buffer to the OLED device, not the entire buffer. -* High performance – 2x faster than our previous OLED library, often much higher. -* Efficient memory usage. No dynamic memory utilized. Static resources are loaded once, and only on explicit declaration. -* Implements a familiar interface, making migration from older libraries straight forward - -### Getting Started - -The [Getting Started Page](software.md) outlines library installation and the general use of the qwiic OLED library. - -Detailed examples are included as part of the library installation process and available in the Arduino IDE `File > Examples >` menu. A walk-thru of key examples is contained in the [Examples](sparkfun-qwiic-oled-arduino-library-examples/ex_01_hello/) section of this documentation set. - - -A full [API Reference](api_device.md) is also provided for the library. - -### Supported Products - -The SparkFun Qwiic OLED Arduino Library supports the following SparFun Products - - - - - - - - - - - - - - - - - - -
- - SparkFun Micro OLED Breakout (Qwiic) -
- - SparkFun Qwiic OLED Display (0.91 in, 128x32) -
- - SparkFun Transparent Graphical OLED Breakout (Qwiic) -
- - SparkFun Qwiic OLED (1.3in., 128x64) -
- - - -### Supported Microcontrollers - Arduino Environment - -* [Artemis](https://www.sparkfun.com/products/15574) -* [SAMD51](https://www.sparkfun.com/products/14713) -* [ESP32](https://www.sparkfun.com/products/15663) -* [STM32](https://www.sparkfun.com/products/17712) -* [SAMD21](https://www.sparkfun.com/products/14812) -* [nrf5280](https://www.sparkfun.com/products/15025) -* [Teensy](https://www.sparkfun.com/products/16402) -* [ATMega328](https://www.sparkfun.com/products/18158) - -### License -The SparkFun Qwiic OLED Arduino Library is licensed using the Open Source MIT License \ No newline at end of file +Placeholder file for index redirect functionality. diff --git a/docs/introduction.md b/docs/introduction.md new file mode 100644 index 0000000..e618dfa --- /dev/null +++ b/docs/introduction.md @@ -0,0 +1,240 @@ +![SparkFun Qwiic OLED Arduino Library](img/OLEDLibBanner.png "SparkFun Qwiic OLED Arduino Library") + +The SparkFun Qwiic OLED Arduino Library is a single graphics module that supports all SparkFun OLED boards based on the SSD1306 from Solomon Systech. Prior to this library, three different libraries were used to support our four different OLED boards. + +The SparkFun Qwiic OLED Library delivers a common implementation for all our Qwiic OLED products, delivering a unified, fast, and efficient solution that implements a familiar and easy to understand user experience. + + + +### Key Features + +* Implements common graphics capabilities: pixel, line, rectangle, filled rectangle, circle, filled circle, bitmap, text and raster operators (i.e. XOR). +* Smart data transfer to the device – only sends _dirty_ regions of the graphics buffer to the OLED device, not the entire buffer. +* High performance – 2x faster than our previous OLED library, often much higher. +* Efficient memory usage. No dynamic memory utilized. Static resources are loaded once, and only on explicit declaration. +* Implements a familiar interface, making migration from older libraries straight forward + + + +### Getting Started + +The [Software Setup](software.md) outlines library installation and the general use of the Qwiic OLED library. + +Detailed examples are included as part of the library installation process and available in the Arduino IDE menu: **File** > **Examples** > **SparkFun Qwiic OLED Arduino Library**. A walk-thru of key examples is contained in the [Examples](../sparkfun-qwiic-oled-arduino-library-examples/ex_01_hello/) section of this documentation set. + +!!! note + For v1.0.5 of the SparkFun Qwiic OLED Arduino Library, we named the library as SparkFun Qwiic OLED Graphics Library. After v1.0.6, we updated the name to say SparkFun Qwiic OLED Arduino Library. You may have multiple versions in your Arduino libraries folder if you installed the library more than once. To avoid confusion, issues compiling, and to use the latest version, we recommend removing the "_SparkFun Qwiic OLED Graphics Library_" folder should you decide to use the latest and greatest version. This will probably be located under **..Documents\Arduino\libraries**, that is if you are using Windows. + +!!! note + Note that we have more than one Arduino Library for the micro OLED. If you have the older Arduino Library, make sure to not confuse the two libraries. You will notice that the older library will be called "**SparkFun Micro OLED Breakout**". The example code will include the following line of code: `#include `. + +A full [API Reference](../api_device) is also provided for the library. + + + + + +### Supported Products + +The SparkFun Qwiic OLED Arduino Library supports the following SparkFun products. + + + + + +### Supported Microcontrollers - Arduino Environment + +The following architectures are supported in the Arduino Library. + +* [Artemis](https://www.sparkfun.com/products/15574) +* [SAMD51](https://www.sparkfun.com/products/14713) +* [ESP32](https://www.sparkfun.com/products/20168) +* [STM32](https://www.sparkfun.com/products/17712) +* [SAMD21](https://www.sparkfun.com/products/14812) +* [nrf5280](https://www.sparkfun.com/products/15025) +* [Teensy](https://www.sparkfun.com/products/16402) +* [ATMega328P](https://www.sparkfun.com/products/18158) + +Below are a few of those processors populated on Arduino boards from the [SparkFun catalog](https://www.sparkfun.com/categories/242). You will need to make sure to check the associated hookup guides for additional information about compatible cables, drivers, or board add-ons. + + + +!!! note + Unfortunately, the ATmega32U4 is not supported under this library. We recommend either using a different microcontroller or rolling back to the previous library written for the display. + + +### License + +The SparkFun Qwiic OLED Arduino Library is licensed using the Open Source [MIT License](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/blob/main/LICENSE.md). diff --git a/docs/javascript/README.md b/docs/javascript/README.md new file mode 100644 index 0000000..c67e49c --- /dev/null +++ b/docs/javascript/README.md @@ -0,0 +1,3 @@ +javascript directory +==================== +This folder should contain the files for the custom javascript that is enabled in the product documentation \ No newline at end of file diff --git a/docs/javascript/mathjax.js b/docs/javascript/mathjax.js new file mode 100644 index 0000000..4bd5221 --- /dev/null +++ b/docs/javascript/mathjax.js @@ -0,0 +1,19 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true, + // No Equation Numbering + tags: 'none' + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } + }; + + document$.subscribe(() => { + MathJax.typesetPromise() + }) + \ No newline at end of file diff --git a/docs/single_page.md b/docs/single_page.md new file mode 100644 index 0000000..c636ef5 --- /dev/null +++ b/docs/single_page.md @@ -0,0 +1,61 @@ +--- +hide: + - navigation + - toc +icon: fontawesome/solid/scroll +--- + +# Getting Started + +## Introduction +--8<-- "./docs/introduction.md" + +## Qwiic Micro OLED (0.66", 64x48) +--8<-- "./docs/hug_micro_view.md" + +## Qwiic Transparent Graphical OLED (1.51", 128x56) +--8<-- "./docs/hug_transparent.md" + + +## Qwiic OLED (1.3", 128x64) +--8<-- "./docs/hug_1p3.md" + +# Software Setup +--8<-- "./docs/software.md" + +# API Reference + +## Device +--8<-- "./docs/api_device.md" + +## Scrolling +--8<-- "./docs/api_scroll.md" + +## Drawing State +--8<-- "./docs/api_draw.md" + +## Graphics +--8<-- "./docs/api_graphics.md" + +## Arduino Print +--8<-- "./docs/api_arduino.md" + +# Arduino Examples + +## Example 1 - Hello +--8<-- "./docs/ex_01_hello.md + +## Example 2 - Shapes +--8<-- "./docs/ex_02_lines.md + +## Example 3 - Bitmaps +--8<-- "./docs/ex_03_bitmaps.md + +## Example 4 - Text +--8<-- "./docs/ex_04_text.md + +## Other Examples +--8<-- "./docs/ex_other.md + +# Troubleshooting +--8<-- "./docs/troubleshooting.md" diff --git a/docs/software.md b/docs/software.md index 9637bbc..a277ec2 100644 --- a/docs/software.md +++ b/docs/software.md @@ -3,38 +3,52 @@ ## Installation -The SparkFun Qwiic OLED Arduino Library is available within in the Arduino library manager, which is launched via the `Sketch > Include Libraries > Manage Libraries …` menu option in the Arduino IDE. Just search for ***SparkFun Qwiic OLED Library*** - -!!! note +!!! arduino This guide assumes you are using the latest version of the Arduino IDE on your desktop. The following resources available at [SparkFun](https://www.sparkfun.com) provide the details on setting up and configuring Arduino to use this library. - [Installing the Arduino IDE](https://learn.sparkfun.com/tutorials/installing-arduino-ide) - [Installing Board Definitions in the Arduino IDE](https://learn.sparkfun.com/tutorials/installing-board-definitions-in-the-arduino-ide) - [Installing an Arduino Library](https://learn.sparkfun.com/tutorials/installing-an-arduino-library) -General Use Pattern ---------- +The SparkFun Qwiic OLED Arduino Library is available within in the Arduino library manager, which is launched via the **Sketch** > **Include Libraries** > **Manage Libraries …** menu option in the Arduino IDE. Just search for ***SparkFun Qwiic OLED Library***. + + +!!! note + If you've never connected a USB-to-serial converter to your computer before, you may need to install drivers. The drivers will depend on what is populated on your Arduino development board. Check out the following tutorials for help with the installation. + + * [How to Install CH340 Drivers](https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers) + * [How to Install FTDI Drivers](https://learn.sparkfun.com/tutorials/how-to-install-ftdi-drivers) + * [How to Install CP2104 Drivers](https://learn.sparkfun.com/tutorials/esp32-thing-plus-hookup-guide#CP2104) + + +## General Use Pattern + After installing this library in your local Arduino environment, begin with a standard Arduino sketch, and include the header file for this library. + ```C++ // Include the SparkFun qwiic OLED Library #include ``` -The next step is to declare the object for the SparkFun qwiic OLED device used. Like most Arduino sketches, this is done at a global scope (after the include file declaration), not within the ```setup()``` or ```loop()``` functions. + +The next step is to declare the object for the SparkFun qwiic OLED device used. Like most Arduino sketches, this is done at a global scope (after the include file declaration), not within the ```setup()``` or ```loop()``` functions. The user selects from one of the following classes: | Class | Qwiic OLED Device | | :--- | :--- | -| `QwiicMicroOLED` | [SparkFun Qwiic Micro OLED ]( https://www.sparkfun.com/products/14532)| -| `QwiicNarrowOLED` | [SparkFun Qwiic OLED Display (128x32) ]( https://www.sparkfun.com/products/17153)| -| `QwiicTransparentOLED` | [SparkFun Transparent Graphical OLED]( https://www.sparkfun.com/products/15173)| -| `Qwiic1in3OLED` | [SparkFun Qwiic OLED 1.3" Display (128x32) ]( https://www.sparkfun.com/products/23453)| +| `QwiicMicroOLED` | [SparkFun Qwiic Micro OLED ]( https://www.sparkfun.com/products/14532)| +| `QwiicNarrowOLED` | [SparkFun Qwiic OLED Display (128x32) ]( https://www.sparkfun.com/products/17153)| +| `QwiicTransparentOLED` | [SparkFun Transparent Graphical OLED]( https://www.sparkfun.com/products/15173)| +| `Qwiic1in3OLED` | [SparkFun Qwiic OLED 1.3" Display (128x32) ]( https://www.sparkfun.com/products/23453)| For this example, the Qwiic Micro OLED is used. + ```C++ QwiicMicroOLED myOLED; ``` -In the ```setup()``` function of this sketch, like all of the SparkFun qwiic libraries, the device is initialized by calling the ```begin()``` method. This method returns a value of ```true``` on success, or ```false``` on failure. + +In the ```setup()``` function of this sketch, like all of the SparkFun qwiic libraries, the device is initialized by calling the ```begin()``` method. This method returns a value of ```true``` on success, or ```false``` on failure. + ```C++ int width, height; // global variables for use in the sketch void setup() @@ -45,23 +59,24 @@ void setup() while(1); // halt execution } Serial.println("Device is initialized"); - + } ``` -Now that the library is initialized, the desired graphics are drawn. Here we erase the screen and draw simple series of lines that originate at the screen origin and fan out across the height of the display. + +Now that the library is initialized, the desired graphics are drawn. Here we erase the screen and draw simple series of lines that originate at the screen origin and fan out across the height of the display. !!! note - Graphics are not send to the OLED device when drawn. Updates are only sent to the device when the `display()` method is called. This minimizes data transfers to the OLED device, delivering a responsive display response. + Graphics are not send to the OLED device when drawn. Updates are only sent to the device when the `display()` method is called. This minimizes data transfers to the OLED device, delivering a responsive display response. ```C++ myOLED.erase(); // Erase the screen myOLED.display(); // Send erase to device - + delay(1000); // Slight pause - + // Draw our lines from point (0,0) to (i, screen height) - + for(int i=0; i < width; i+= 6){ myOLED.line(0, 0, i, height-1); // draw the line myOLED.display(); // Send the new line to the device for display @@ -69,10 +84,9 @@ Now that the library is initialized, the desired graphics are drawn. Here we era ``` -Library Provided Examples --------- -The SparkFun Qwiic OLED Arduino Library, includes a wide variety of examples. These are available from the Examples menu of the Arduino IDE, and in the [`examples`](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/blob/main/examples)folder of this repository. -For a detailed description of the examples, see the Examples section of the documentation. +## Library Provided Examples +The SparkFun Qwiic OLED Arduino Library, includes a wide variety of examples. These are available from the Examples menu of the Arduino IDE, and in the [`examples`](https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library/blob/main/examples)folder of this repository. +For a detailed description of the examples, see the Examples section of the documentation. diff --git a/docs/stylesheet/extra.css b/docs/stylesheet/extra.css new file mode 100644 index 0000000..c783bf0 --- /dev/null +++ b/docs/stylesheet/extra.css @@ -0,0 +1,517 @@ +/* ================================================================================== */ +/* General Customizations */ +/* ================================================================================== */ + +/* Sets page to use screens full width (can also use initial; instead of 100%) */ +.md-grid { + max-width: 100%; +} + +/* Center images in figure elements */ +.md-typeset figure { + text-align: -webkit-center; +} + + + +/* Sets the maximum height size of the code blocks */ +/* (code block becomes scrollable, but not compatible when lines are displayed) */ +/* .md-typeset pre > code { + max-height: var(--md-codeblock-height, 800px); +} */ + +/* Failed workaround (lines are not scrollable)*/ +/* .highlighttable .linenodiv { + max-height: var(--md-codeblock-height, 800px); +} */ + + +/* ================================================================================== */ +/* Icons */ +/* ================================================================================== */ + +/* Heart Animation ================================================================== */ +@keyframes heart { + 0%, 40%, 80%, 100% { + transform: scale(1); + } + 20%, 60% { + transform: scale(1.15); + } +} + +.heart { + animation: heart 1000ms infinite; +} + +/* Autodesk Icon ==================================================================== */ +.md-typeset .twemoji.autodesk svg { + display:inline-flex; + height: 1rem; + width: 100%; +} + + +/* ================================================================================== */ +/* Custom Admonitions */ +/* ================================================================================== */ + +/* SparkFun ========================================================================= */ +.md-typeset :is(.tip)>:is(.admonition-title,summary):before { + background-color: #ee2e22; +} + + +/* GitHub =========================================================================== */ +.md-typeset .admonition.github, +.md-typeset details.github { + border-color: white; +} +.md-typeset .github > .admonition-title, +.md-typeset .github > summary { + background-image: linear-gradient(to bottom, #8241f9, #4e277b); + /* background-color: rgb(110, 64, 201); */ +} +.md-typeset .github > .admonition-title::before, +.md-typeset .github > summary::before { + background-color: white; + -webkit-mask-image: var(--md-admonition-icon--github); + mask-image: var(--md-admonition-icon--github); +} + + +/* Arduino ========================================================================== */ +.md-typeset .admonition.arduino, +.md-typeset details.arduino { + border-color: #005c5f; +} +.md-typeset .arduino > .admonition-title, +.md-typeset .arduino > summary { + background-color: rgba(0, 92, 95, 0.1); +} +.md-typeset .arduino > .admonition-title::before, +.md-typeset .arduino > summary::before { + background-color: #005c5f; + -webkit-mask-image: var(--md-admonition-icon--arduino); + mask-image: var(--md-admonition-icon--arduino); +} + + +/* Python =========================================================================== */ +.md-typeset .admonition.python, +.md-typeset details.python { + border-color: #3776ab; +} +.md-typeset .python > .admonition-title, +.md-typeset .python > summary { + background-color: #1e415e; +} +.md-typeset .python > .admonition-title::before, +.md-typeset .python > summary::before { + background-color: #3776ab; + -webkit-mask-image: var(--md-admonition-icon--python); + mask-image: var(--md-admonition-icon--python); +} + + +/* Code ============================================================================= */ +.md-typeset .admonition.code, +.md-typeset details.code { + border-color: #9e9e9e; +} +.md-typeset .code > .admonition-title, +.md-typeset .code > summary { + background-color: rgba(158, 158, 158, 0.1); +} +.md-typeset .code > .admonition-title::before, +.md-typeset .code > summary::before { + background-color: #9e9e9e; + -webkit-mask-image: var(--md-admonition-icon--code); + mask-image: var(--md-admonition-icon--code); +} + + +/* Terminal ========================================================================= */ +.md-typeset .admonition.terminal, +.md-typeset details.terminal { + border-color: #9e9e9e; +} +.md-typeset .terminal > .admonition-title, +.md-typeset .terminal > summary { + background-color: rgba(158, 158, 158, 0.1); +} +.md-typeset .terminal > .admonition-title::before, +.md-typeset .terminal > summary::before { + background-color: #9e9e9e; + -webkit-mask-image: var(--md-admonition-icon--terminal); + mask-image: var(--md-admonition-icon--terminal); +} + + +/* Serial Monitor =================================================================== */ +.md-typeset .admonition.serial, +.md-typeset details.serial { + border-color: #9e9e9e; +} +.md-typeset .serial > .admonition-title, +.md-typeset .serial > summary { + background-color: rgba(158, 158, 158, 0.1); +} +.md-typeset .serial > .admonition-title::before, +.md-typeset .serial > summary::before { + background-color: #9e9e9e; + -webkit-mask-image: var(--md-admonition-icon--serial); + mask-image: var(--md-admonition-icon--serial); +} + + +/* Hot ============================================================================== */ +.md-typeset .admonition.hot, +.md-typeset details.hot { + border-color: #ff1744; +} +.md-typeset .hot > .admonition-title, +.md-typeset .hot > summary { + background-color: #ff17441a; +} +.md-typeset .hot > .admonition-title::before, +.md-typeset .hot > summary::before { + background-color: #ff1744; + -webkit-mask-image: var(--md-admonition-icon--hot); + mask-image: var(--md-admonition-icon--hot); +} + + + +/* ================================================================================== */ +/* Header Permalinks */ +/* ================================================================================== */ +/* https://github.com/squidfunk/mkdocs-material/discussions/3535 */ + +.headerlink { + --permalink-size: 16px; /* for font-relative sizes, 0.6em is a good choice */ + --permalink-spacing: 4px; + + width: calc(var(--permalink-size) + var(--permalink-spacing)); + height: var(--permalink-size); + vertical-align: middle; + background-color: var(--md-default-fg-color--lighter); + background-size: var(--permalink-size); + mask-size: var(--permalink-size); + -webkit-mask-size: var(--permalink-size); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + visibility: visible; + -webkit-mask-image: var(--md-admonition-icon--link); + mask-image: var(--md-admonition-icon--link); +} + +[id]:target .headerlink { + background-color: var(--md-typeset-a-color); +} + +.headerlink:hover { + background-color: var(--md-accent-fg-color) !important; +} + +@media screen and (min-width: 76.25em) { + h1, h2, h3, h4, h5, h6 { + display: flex; + align-items: center; + flex-direction: row; + } + + /* Sets icon location to left of header */ + /* .headerlink { + order: -1; + margin-left: calc(var(--permalink-size) * -1 - var(--permalink-spacing)) !important; + } */ +} + + + + +/* ================================================================================== */ +/* Introduction */ +/* ================================================================================== */ + +/* Sets table width for introduction */ +.md-typeset table.desc { + width: 100%; + display: table; +} +.md-typeset table.desc label{ + font-size: .85rem; +} + + +/* ================================================================================== */ +/* Grid Cards */ +/* ================================================================================== */ + +/* Sets grid width for introduction */ +.grid.cards.desc { + grid-template-columns: 35% 65%; +} + +/* Sets images size in grid cards */ +.md-typeset .grid ul figure img { + width: 100%; + max-width: 200px; +} + +/* Add compatibility to mobile platforms - by setting minimum width for grid cards */ +@media (max-width: 750px) { + .grid.cards.desc { + grid-template-columns: 100%; + } +} + + +/* ================================================================================== */ +/* YoutTube Videos */ +/* ================================================================================== */ + +/* Auto adjust embedded youtube videos size */ +/* height: 47vw * (viewport/element) percentage */ +.video { + position: relative; + width: 100%; +} +.video iframe { + position: relative; + top: 0; + width: 90vh; + min-width: 200px; + height: 16.45vw; + min-height: 113px; + border: 0; + overflow: hidden; +} + +.video_desc { + position: relative; + width: 100%; +} +.video_desc iframe { + position: relative; + top: 0; + width: 90vh; + min-width: 200px; + /* height: 12.72vw; */ + height: calc(calc(calc(100vw - 48.4rem) * 0.35 - 2rem) * 0.9); + min-height: 113px; + border: 0; + overflow: hidden; +} + +/* Add compatibility for mobile devices */ +/* height: 47vw * (viewport) percentage */ + +/* Single Column */ +@media (max-width: 750px) { + .video iframe { + height: 47vw; + } + + .video_desc iframe { + /* 100vw * 0.9 * 56.25% (aspect ratio) */ + height: 50.625vw; + } +} + +/* Grid: 35/65 */ +@media (min-width: 751px) { + .video_desc iframe { + /* 100vw * 0.9 * 56.25% (aspect ratio) * 0.35 */ + height: 17.71875vw; + } +} + +/* Single ToC */ +@media (min-width: 960px) { + .video_desc iframe { + /* height: 12.7vw; */ + height: calc( ( (100vw - 24.2rem) * 0.35 - 2rem) * 0.9); + } +} + +/* Double ToC */ +@media (min-width: 1219px) { + .video_desc iframe { + /* height: 12.7vw; */ + height: calc( ( (100vw - 24.2rem * 2) * 0.35 - 2rem) * 0.9); + } +} + +/* ================================================================================== */ +/* Parameters for PDF Rendering */ +/* ================================================================================== */ + +/* Hides elemments with , , or on webpage (used for the generated PDF) */ +* + .pdf { + display: none; +} +.md-typeset *.qr { + display: none; +} +.md-typeset *.tinyqr { + display: none; +} + +.md-typeset ul.pdf { + display: none; +} + +@media print { + /* Shows elements with , , or on webpage (used for the generated PDF) */ + * + .pdf { + display: contents; + } + .md-typeset *.qr { + display: inline-flex; + align-items: center; + } + + .md-typeset *.tinyqr { + display: inline-flex; + vertical-align: middle; + width: 40px; + } + + .grid.cards.hide { + display: none; + } + + /* Removes borders on tables with */ + table + .pdf { + border-style:none; + } + + /* Limits images size in table */ + .pdf img { + width: 100%; + max-width: 200px; + } + + .md-typeset ul.pdf { + display: flow-root; + } + + /* Sets table to 100% of page width */ + .md-typeset table:not([class]) { + width: 100%; + display: table; + table-layout: fixed; + } + .md-typeset table.pdf { + width: 100%; + display: table; + table-layout: fixed; + } + + /* Sets images size in tables */ + .md-typeset table:not([class]) td img { + width: 100%; + max-height: 150px; + } + + + /* ================================================================================== */ + /* YoutTube Videos */ + /* ================================================================================== */ + + .video iframe { + display: none; + } + + + /* ================================================================================== */ + /* Grid Cards */ + /* ================================================================================== */ + + /* Column Spacing =================================================================== */ + + /* Two Column Setting */ + .md-typeset .grid.grid.cards.col-2 { + grid-template-columns: repeat(auto-fit,minmax(16rem,1fr)); + } + + /* Three Column Setting */ + .md-typeset .grid.grid.cards.col-3 { + grid-template-columns: repeat(auto-fit,minmax(12rem,1fr)); + } + + /* Four Column Setting */ + .md-typeset .grid.grid.cards.col-4 { + grid-template-columns: repeat(auto-fit,minmax(8rem,1fr)); + } + + /* Sets grid card width (not working) + Works for File > Print function, but not valid for PDF generator due to issue with Weazy + * Refer to https://github.com/Kozea/WeasyPrint/issues/543 + .md-typeset .grid { + display: grid; + grid-template-columns: repeat(4, 25%); + } */ + /* Shrinks card width to 25% and font to 8px (kind of works for PDF generator, but doesn't create columns) + .md-typeset :is(.cards) { + width: 25%; + font-size: 8px; + } */ + + + /* Sets maximum image size */ + .md-typeset img { + max-width: 200px; + max-height: 200px; + } + /* Fixes positioning of admonition icon */ + .md-typeset :is(.admonition-title,summary):before { + top: 0.6rem; + left: 0.6rem; + } + /* Fixes appearance of admonition icon */ + .md-typeset :is(.admonition,details)>:last-child { + background-color: transparent; + } + /* Fixes margin spacing for lists */ + .md-typeset ol,ul { + margin-left: 1.5rem; + } + + /* Adjusts page break for PDF generator */ + article h2,h3,h4,h5,h6,ol,ul { + page-break-before: avoid; + } + article div.admonition { + page-break-before: avoid; + } + article table,ol,ul { + page-break-inside: auto !important; + } + + /* Displays first tab (workaround to rendering issue) */ + * + .tabbed-content { + display: contents; + } + * + .tabbed-content .tabbed-block { + display: contents; + page-break-after: always; + } + + /* Prevents page break when tabs are embedded in an admonition*/ + article details.note { + display: inline-block; + overflow: hidden; + /* Hardcode max height to match code block size, when tabbed (need to find better alternative) */ + max-height: 138mm; + } + + /* Limits size of code blocks in admonitions (workaround to rendering issue) */ + .md-typeset :is(pre, code) { + display: inline-flexbox; + max-height: 120mm; + overflow: hidden; + } +} diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000..1f46c66 --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,13 @@ +### General Troubleshooting Help + +!!! note + + Not working as expected and need help?

+ + If you need technical assistance and more information on a product that is not working as you expected, we recommend heading on over to the SparkFun Technical Assistance page for some initial troubleshooting.

+ + + + If you don't find what you need there, the SparkFun Forums are a great place to find and ask for help. If this is your first visit, you'll need to create a Forum Account to search product forums and post questions.

+ + diff --git a/mkdocs.yml b/mkdocs.yml index 64d96d2..94153ed 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,31 +1,114 @@ - +# Documentation page information site_name: SparkFun Qwiic OLED Arduino Library - Hookup Guide site_description: SparkFun Arduino Library for Qwiic OLED Boards site_url: https://sparkfun.github.io/SparkFun_Qwiic_OLED_Arduino_Library +site_author: SparkFun Electronics + +repo_url: https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library +repo_name: sparkfun/SparkFun_Qwiic_OLED_Arduino_Library + +copyright: + Copyright 2023 - SparkFun Electronics®
+
6333 Dry Creek Parkway, Niwot, Colorado 80503 +# Default edit/view actions to "main" branch, instead of "master" +edit_uri: blob/main/docs/ + #logo: img/sfe_logo_sm.png + +# Configuration for webpage theme theme: + # Theme: https://squidfunk.github.io/mkdocs-material/ name: material - logo: img/sfe_logo_sm.png - palette: - primary: grey - accent: red + + # Icon in Browser Tab (must be square img - i.e. 32x32 pixels) + favicon: assets/sfe_favicon.png + + # Page Font font: text: Roboto code: Roboto Mono + + # Features to Include (ref. theme documentation) features: + + # Enable copy button on code blocks + - content.code.copy + + # Enable annotations in code blocks - content.code.annotate + + # Enable "view source" and "edit this page" buttons + - content.action.edit + # - content.action.view + + # Enable Navigation buttons in the footer (i.e. previous/next) + - navigation.footer + + # Enables anchor tracking (updates page url with the section user is on) + # i.e. https://docs.sparkfun.com//# - navigation.tracking - navigation.tabs.sticky - - navigation.tabs + # Enables tabs for navigating the website + - navigation.tabs + # Keeps tabs visible in the header when scrolling + - navigation.tabs.sticky + + # Adds pop-up button just below the header (when the user starts to scroll up) + # Allows users to easily jump to the beginning of the page + - navigation.top + + # Renders path for page navigation at top of the page (makes page navigation more mobile friendly) + - navigation.path + + + # Adds light/dark theme to the webpage + palette: + # Palette toggle for automatic mode + - media: "(prefers-color-scheme)" + primary: grey + accent: red + toggle: + icon: material/brightness-auto + name: Switch to dark mode + + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + primary: grey + accent: red + scheme: default + toggle: + icon: material/brightness-7 + name: Switch to system preference + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + primary: grey + accent: red + scheme: slate + toggle: + icon: material/weather-night + name: Switch to light mode + + # Configures icons icon: + # Sets homepage icon + logo: sfe-logo + + # Sets repo icon to GitHub icon repo: fontawesome/brands/github + + # Sets icons for "view source" (commented out) and "edit this page" buttons + edit: material/file-document-edit-outline + # view: material/file-code-outline + + # Admonition Icons (callout boxes) admonition: note: octicons/tag-16 abstract: octicons/checklist-16 info: octicons/info-16 - tip: octicons/squirrel-16 + tip: simple/sparkfun success: octicons/check-16 question: octicons/question-16 warning: octicons/alert-16 @@ -34,33 +117,101 @@ theme: bug: octicons/bug-16 example: octicons/beaker-16 quote: octicons/quote-16 + # Add custom admonitions + github: simple/github + arduino: simple/arduino + python: simple/python + code: fontawesome/regular/file-code + terminal: octicons/terminal-16 + serial: fontawesome/solid/display + hot: material/fire-alert + # Permalink icon + link: octicons/link-16 + + # Adds overrides for stylesheets, html, etc. + custom_dir: overrides + +# Included MkDocs plugins +# Add the installation of any new plugins to the ./github/workflows/mkdocs.yml file also plugins: - search + - typeset + - redirects: + redirect_maps: + 'index.md': 'qwiic_oled_arduino_library_page.md' + # Add revision date + - git-revision-date-localized: + enable_creation_date: true + type: timeago + # Add git committers at bottom of the page + - git-committers: + repository: sparkfun/SparkFun_Qwiic_Buzzer + branch: main + # Add git authors at bottom of the page + - git-authors + # Enables use of Git submodules and larger code base - monorepo + # For PDF rendering +# - with-pdf: +# author: SparkFun Electronics® +# copyright: Copyright 2023 - SparkFun Electronics® +# cover_subtitle: none +# cover_logo: img/sfe_logo_sm.png +# exclude_pages: [ "hard_copy", "single_page", "file_issue", "contribute" ] + # render_js: true + # headless_chrome_path: headless-chromium +# output_path: board_files/hookup_guide.pdf -repo_url: https://github.com/sparkfun/SparkFun_Qwiic_OLED_Arduino_Library -repo_name: sparkfun/SparkFun_Qwiic_OLED_Arduino_Library - -copyright: Copyright 2022 SparkFun Electronics (6333 Dry Creek Parkway, Niwot, Colorado 80503) +# Included Markdown extensions markdown_extensions: - pymdownx.highlight: anchor_linenums: true - pymdownx.inlinehilite - - pymdownx.snippets + - pymdownx.snippets: + # base_path: ['./docs'] + url_download: true + url_max_size: 0 + url_timeout: 0 + url_request_headers: {} - pymdownx.superfences - pymdownx.details + - pymdownx.tabbed: + alternate_style: true - pymdownx.betterem: smart_enable: all - pymdownx.mark - pymdownx.caret - pymdownx.tilde + - pymdownx.keys - tables - admonition + - md_in_html + - attr_list + - pymdownx.emoji: + emoji_index: !!python/name:materialx.emoji.twemoji + emoji_generator: !!python/name:materialx.emoji.to_svg + options: + custom_icons: + - overrides/.icons + - pymdownx.arithmatex: + generic: true + - toc: + permalink: '' + # Link: 🔗 🔗 + # Chain: ⛓ ⛓ + + extra: + # Configures the hyperlink for the logo in the header + homepage: https://www.sparkfun.com/ + + # Configures social icons in the footer social: + - icon: sfe-logo + link: https://www.sparkfun.com/ - icon: fontawesome/brands/youtube link: https://www.youtube.com/sparkfun - icon: fontawesome/brands/instagram @@ -71,14 +222,27 @@ extra: link: https://www.facebook.com/SparkFun - icon: fontawesome/brands/twitter link: https://twitter.com/sparkfun - + + +# Configures styling for PDF rendering and webpage layout +extra_css: + - stylesheet/extra.css + +# Enables support for rendering block and inline block equations through MathJax +extra_javascript: +# # Enables support for rendering block and inline block equations through MathJax + - javascript/mathjax.js + - https://polyfill.io/v3/polyfill.min.js?features=es6 + - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js + +# Configures webpage navigation nav: - - Home: index.md - Getting Started: - - Software Setup: software.md - - hug_micro_view.md - - hug_transparent.md - - hug_1in3.md + - Introduction: introduction.md + - Qwiic Micro OLED (0.66", 64x48): hug_micro_view.md + - Qwiic Transparent Graphical OLED (1.51", 128x56): hug_transparent.md + - Qwiic OLED (1.3", 128x64): hug_1p3.md + - Software Setup: software.md - API Reference: - Device: api_device.md - Scrolling: api_scroll.md @@ -86,4 +250,7 @@ nav: - Graphics: api_graphics.md - Arduino Print: api_arduino.md - Examples: '!include ./examples/mkdocs.yml' - \ No newline at end of file + - Support: + - Troubleshooting: troubleshooting.md + - Submit Issues: github/file_issue.md + - Contribute: github/contribute.md diff --git a/overrides/.icons/sfe-logo.svg b/overrides/.icons/sfe-logo.svg new file mode 100644 index 0000000..9bf94f2 --- /dev/null +++ b/overrides/.icons/sfe-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/overrides/README.md b/overrides/README.md new file mode 100644 index 0000000..4932d1a --- /dev/null +++ b/overrides/README.md @@ -0,0 +1,3 @@ +overrides directory +==================== +This folder should contain the files used for the webpage customizations of the product documentation diff --git a/overrides/main.html b/overrides/main.html new file mode 100644 index 0000000..cfe40ae --- /dev/null +++ b/overrides/main.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} + +{% block content %} + + +{% if "single_page.md" %} + + {% include ".icons/material/file-eye-outline.svg" %} + + +{% endif %} + + +{{ super() }} +{% endblock content %} diff --git a/overrides/partials/nav.html b/overrides/partials/nav.html new file mode 100644 index 0000000..9c8463e --- /dev/null +++ b/overrides/partials/nav.html @@ -0,0 +1,79 @@ + + +{% import "partials/nav-item.html" as item with context %} + + +{% set class = "md-nav md-nav--primary" %} +{% if "navigation.tabs" in features %} + {% set class = class ~ " md-nav--lifted" %} +{% endif %} +{% if "toc.integrate" in features %} + {% set class = class ~ " md-nav--integrated" %} +{% endif %} + + + diff --git a/overrides/partials/tabs.html b/overrides/partials/tabs.html new file mode 100644 index 0000000..e83c968 --- /dev/null +++ b/overrides/partials/tabs.html @@ -0,0 +1,51 @@ + + +{% import "partials/tabs-item.html" as item with context %} + + + diff --git a/overrides/partials/toc-backup.html b/overrides/partials/toc-backup.html new file mode 100644 index 0000000..670fb01 --- /dev/null +++ b/overrides/partials/toc-backup.html @@ -0,0 +1,66 @@ + + + +{% set title = lang.t("toc") %} +{% if config.mdx_configs.toc and config.mdx_configs.toc.title %} + {% set title = config.mdx_configs.toc.title %} +{% endif %} + + +