From 8c0dccd2dd789be4f54ff636602c15163971c237 Mon Sep 17 00:00:00 2001 From: nopnop2002 Date: Wed, 7 Jun 2023 11:14:48 +0900 Subject: [PATCH] Added support for XPT2046, which uses a different bus than TFT. --- CMakeLists.txt | 4 +- README.md | 13 ++- icons/facebook.png | Bin 0 -> 1769 bytes icons/git.png | Bin 0 -> 2306 bytes icons/instagram.png | Bin 0 -> 4152 bytes icons/linkedin.png | Bin 0 -> 1841 bytes icons/twitter.png | Bin 0 -> 1743 bytes icons/vkontakte.png | Bin 0 -> 1890 bytes icons/whatsapp.png | Bin 0 -> 4262 bytes icons/youtube.png | Bin 0 -> 1422 bytes {font => images}/esp32.bmp | Bin {font => images}/esp32.jpeg | Bin {font => images}/esp32_ro.bmp | Bin {font => images}/esp_logo.png | Bin images/facebook.png | Bin 0 -> 9216 bytes images/git.png | Bin 0 -> 12520 bytes images/instagram.png | Bin 0 -> 15559 bytes images/linkedin.png | Bin 0 -> 10356 bytes images/twitter.png | Bin 0 -> 10494 bytes images/vkontakte.png | Bin 0 -> 11198 bytes images/whatsapp.png | Bin 0 -> 15850 bytes images/youtube.png | Bin 0 -> 8673 bytes main/Kconfig.projbuild | 70 +++++++++++----- main/ili9340.c | 68 ++++++++++----- main/ili9340.h | 4 +- main/main.c | 154 ++++++++++++++++++++++++---------- partitions.csv | 5 +- sdkconfig.defaults | 1 + 28 files changed, 226 insertions(+), 93 deletions(-) create mode 100644 icons/facebook.png create mode 100644 icons/git.png create mode 100644 icons/instagram.png create mode 100644 icons/linkedin.png create mode 100644 icons/twitter.png create mode 100644 icons/vkontakte.png create mode 100644 icons/whatsapp.png create mode 100644 icons/youtube.png rename {font => images}/esp32.bmp (100%) rename {font => images}/esp32.jpeg (100%) rename {font => images}/esp32_ro.bmp (100%) rename {font => images}/esp_logo.png (100%) create mode 100644 images/facebook.png create mode 100644 images/git.png create mode 100644 images/instagram.png create mode 100644 images/linkedin.png create mode 100644 images/twitter.png create mode 100644 images/vkontakte.png create mode 100644 images/whatsapp.png create mode 100644 images/youtube.png diff --git a/CMakeLists.txt b/CMakeLists.txt index e38d163..2828d79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,4 +9,6 @@ project(ili9340) # that fits the partition named 'storage'. FLASH_IN_PROJECT indicates that # the generated image should be flashed when the entire project is flashed to # the target with 'idf.py -p PORT flash -spiffs_create_partition_image(storage font FLASH_IN_PROJECT) +spiffs_create_partition_image(storage0 font FLASH_IN_PROJECT) +spiffs_create_partition_image(storage1 icons FLASH_IN_PROJECT) +spiffs_create_partition_image(storage2 images FLASH_IN_PROJECT) diff --git a/README.md b/README.md index 6cb49ff..5165af5 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,7 @@ Left:2.8" Right:2.4" --- # 2.8" ILI9341 Built-In 320x240 +Vendor part number is ESP32-2432S028R. ![config-ESP32-2432S028R](https://github.com/nopnop2002/esp-idf-ili9340/assets/6020549/2d6dfc02-747d-46fb-8881-65dffdadcf14) ![ESP32-2432S028R-1](https://github.com/nopnop2002/esp-idf-ili9340/assets/6020549/e9e4b502-4063-49b2-b58a-d60aeccdd380) @@ -321,13 +322,21 @@ Previously it was called HSPI_HOST / VSPI_HOST, but now it is called SPI2_HOST / --- # XPT2046 Touch Screen +A library of XPT2046 Touch Screen is included in this project. There is a TFT equipped with XPT2046. ![XPT2046-3](https://user-images.githubusercontent.com/6020549/144333924-5236bff3-3f4d-4be4-8e99-b6e31878e4f3.jpg) -A library of XPT2046 Touch Screen is included in this project. +XPT2046 shares the TFT and SPI bus. Use the menu to enable XPT2046. ![config-xpt2046-1](https://user-images.githubusercontent.com/6020549/167235381-0d72389f-51a0-417d-8693-542d0ac5482d.jpg) +This module also has an XPT2046. +![ESP32-2432S028R-2](https://github.com/nopnop2002/esp-idf-ili9340/assets/6020549/af351771-6c08-4949-b541-1c9d35e97c8e) + +XPT2046 uses a different SPI bus than TFT. +SPI SCLK and MISO use a separate GPIO than TFT SCLK. +![config-xpt2046-3](https://github.com/nopnop2002/esp-idf-ili9340/assets/6020549/8942ead0-9020-4fcf-a2b1-4434d1d1c42a) + - Touch position accuacy The coordinates read from XPT2046 are not stable. The difference between the coordinates read last time and the coordinates read this time is determined, and if it is within this range, it is regarded as a valid coordinate. @@ -387,7 +396,7 @@ Keep touching the point. ## Draw with touch If there is no touch for 10 seconds, it will end. ![XPT2046-3](https://user-images.githubusercontent.com/6020549/145127161-c92ab0c9-a5d7-41f0-99c3-8a1981eb1597.JPG) - +![XPT2046-4](https://github.com/nopnop2002/esp-idf-ili9340/assets/6020549/fa87dff0-2df3-4a4c-b104-1e71fa27833f) --- diff --git a/icons/facebook.png b/icons/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f6edd77873abe75f52149b4c1693a2cb8e40c7 GIT binary patch literal 1769 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0006m zP)t-s|NsB(@ASOI*_ENgbcL{5ZlXqAmN`<7Gfa$?qQktz+3fH1v%J)1d8j2ogd8}3 zBR+#DLWL_uhb~BoFiDCsON(WAsL$2pVs)n*H+~{Lf-y>q&eh|%!PhrXjvYCFH&2eY zz}GfUjvqRKFGz_pON=s1j5be=&C}vtaHASFeq3;)!pYnoIe;ldhAKpc!O7ftiL)6s zeRzqpN?@5aO^hi+hBHl!E=P$qO^r!ln0bn`BRzw{$=x10fL(E;&eY@0)8o0p*B?57 zI#Q3&*5n;He`9v1Vs@sqz16e5)Mt6AW_YM3K!rig<{#YJICFL4}s0!*qqQL0ObPR+2te zl08+CJyelARFOPWkvmh6I#Q51QjmU*wswcIKUR}1M~Ejug_xzqyTjN=U6-1s#xYBa zFiMI>U6+}q#naj58a91^kGG$z$xvmSF-nSTeXL+}rJSh8mZHRFc&Xsy?ShiIC_;u> zZ=xYQf^~+mZGNl~E_m?q_9Q=ql%d0km%Mw6w2GL$yTsXZgs_pGz@V$igOjE9)#S?0;K|S6(bnZmVVWgBgdI76Aw7a4J%VC&rnkV>A3K3IPL0ph zc!;t|UzjvajKRpyS4TM|JS$Hx*KmDpurLm-57?ZEILGAvUI#nMU>3rn=LEKAC?thCE4%e2Gp zQ#;L0yR-hg)?HL~*?al^Hv8;+p7))1-go950Qi-#U}2&rDH+1#Bu!#UY8p@=?IIn5 z>M?^6CuKBXdKA$u*2-g;(#;mk3R$vZ7IXR%$q-wH9m64~aLn#lD$SD2EFv57Y8jEW ze1$k=rIUanBAhuQkX5c+T#Q1xmgmYBq7=BT;t*=J-K+U29*YE1A_k!zKFXRxsgM~J zuH~i}FgX+mF)tUTNG65kK#p~hj z6-~*>RYrj@w{)IT=2YYo<(6~f9L6D7qGhQfG1bC8dF==(yU>=vwvw1_f_dQG4r*#^ zYj)HLaI66U>JdR>3U|`s+!Yk~2}uJDs4!+XjoBlFK^s70i1iI8NHsMzHB$=gr7`{sX9snm+6^T2C4@KJFn7%YeURA#$IrpUHba5Xbq3hGjCYP zf&S(#YS7pc6Yvq?1fNX?I;U>ayP+=-v;9W(GBBY#oEZHmNEJ!Vy9~@dP7HcqtWX3W zL~@G8JfsGXSQsP$0G(jj!n-RUKY98LJf|W-)Qye57=QVS85Zkn@gj<2LpqD^O=KeR zc9;|^xKt6W{m36sF9s?(nsj(ZN)6FCkYwGm@~AS!yuvCub8sQ_VH$ z!(9CsQ*&wiIA4cK6<;Cq7_F5nE*Dymuk?ETiCJC?6r}|EnO&w8wH{w$%l(x6Mrexb z*zm@sEhFub*Cb8>9(g9Dx2(myEo;0QXmbCQNNnf70%3iV^0@FFh^oTj6ME{%CVUPF zPaULeKm7a;FaDpuBtd3ms^ohH`fZX7q4Z}ufS{rIN2w5s1g5LxF=*8{w2o+c!Vrdg zG=Ee6)eHRkA15R7etbI`Y5)KLC3HntbYx+4WjbSWWnpw>05UK#GA%JNEip4xF)=zZ zH99mgD=;}aFfaxz4Q>Dc03~!qSaf7zbY(hiZ)9m^c>ppnGBPbOF)cAOR539+F*G_b zG%GMUIxsL!!T+%U000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs00000 LNkvXXu0mjfPdXN^ literal 0 HcmV?d00001 diff --git a/icons/git.png b/icons/git.png new file mode 100644 index 0000000000000000000000000000000000000000..253ae517ca354af888d954dba83e255e2a591869 GIT binary patch literal 2306 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 literal 0 HcmV?d00001 diff --git a/icons/twitter.png b/icons/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..6142d584d56f76703bfb57be428091b2f6b2a4f6 GIT binary patch literal 1743 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 literal 0 HcmV?d00001 diff --git a/icons/whatsapp.png b/icons/whatsapp.png new file mode 100644 index 0000000000000000000000000000000000000000..36f546ab2cfdacefe9213207ad524898b55c03db GIT binary patch literal 4262 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 literal 0 HcmV?d00001 diff --git a/icons/youtube.png b/icons/youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8da7f4b5449e57f395ceb7333b00ff311e4cbe GIT binary patch literal 1422 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 literal 0 HcmV?d00001 diff --git a/images/git.png b/images/git.png new file mode 100644 index 0000000000000000000000000000000000000000..0bf93910cc2518381502a686ab46ed738b1ec8d5 GIT binary patch literal 12520 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

jsxlmN)FO^dbT}mLybdQn*?nu|)~66l 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 literal 0 HcmV?d00001 diff --git a/images/twitter.png b/images/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..f8837f2198788768d7a2e7e63502f7fcce46e263 GIT binary patch literal 10494 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 literal 0 HcmV?d00001 diff --git a/images/vkontakte.png b/images/vkontakte.png new file mode 100644 index 0000000000000000000000000000000000000000..200ada2d2ffcc5b7bf3f7443d7f121ee59f38230 GIT binary patch literal 11198 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 literal 0 HcmV?d00001 diff --git a/images/whatsapp.png b/images/whatsapp.png new file mode 100644 index 0000000000000000000000000000000000000000..ab22f1aafb32565e97273848c5b734f52cb0d7d2 GIT binary patch literal 15850 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 literal 0 HcmV?d00001 diff --git a/images/youtube.png b/images/youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..3593918cdf611101ef14e68dbb397ba8c46042a7 GIT binary patch literal 8673 zcmZ9ybyyVN`#wHPEZyBL_yVMtrCS=5W&!DvlwNuP=@dz66qIhIQzax8l@wSdm6VW% z@9_To_4{3W&7PUF=ggTi`^>rT=e{T5k)ApUAtNCG03@0kss>=??h^}mL!DDuN4Fg>O2)+jZkud;p0aitB0f4_S0Q|850O?!+pz|*1cq|M4 z0JYOrR|RhGJ|*3inP3fpw}!bd0FVydZICQ}QYNqx&refV4R3>pgqn$|k*w)HI7qdo zs*+LA!fs)hAN6e5O|gvFWe>k%d|)0pCcy#G9ELucqjvWn_c{-0ss-;jYOXQtM}_}| za=3_%_gLei9o74Q0-MaDf+2rhQkalOCVWn$&V#wH;*&;XObmgt4X5qYp4LK6-sPpe z#Gux~_X(}e5a)p2Vqd@X?4|a}Zr|eT<@Wky-w7o%M%E-$u{_D{vFpK%$pH~vNoy798Sy~-_0E=4FU78$hk`z+T@wKd1h zUMJ>rs*+p;tK!q6JQ0s4ex!%_vf;9GJM)h`yJ<#Q0u}Qmh-zwd(x<1N6I%i;{{r6b z_avR|Ej?NZXF~Xj!J&+XFCRBQuRMDNNw2Er5JKQMu4@fTt`NKKn4t}lSVg^y9+5FC z?qr#guXNHOw8wzKg^x8(Kd-}`f!FU0O9d>TpR0`1=^juEHu7;`Z>FDB*K=O{N_w;s zgpCkKe2X1djZo1}#9Al20Y{G4|52ms- zIq2>H?y7`n9sLXb3h@Aef>*Hqb4+xZqdB3dw-9=>NX20n5!}>6|aQm=l7NV8N8AAB5jz*4Ra=KHmfE>AJP zirQSy(GHMpUn8z5luN36qg@JiMvvE)%TLN*Xgyqj^a$9eZ&_eo4QvY z!O}mHSt=o^f|d84-bTa7E_{z!x!I{SWL<0Z*;{Hp0&Ml(+b|p!(xLEwVxpcIWlU0S zZgf$el4Ta}6SIwSL+N~}5FYNTr-?L=(%33DdSwxyEqzE|9fxe9-aM;f2~Qld@N`}kcY zd69y`deJD3h!H(y20V03Fy3>X6QLKdusa>Ihuq>&4L?(PDoTY^@iOS_IT8F2amRyFpz8OjS{*;yEGJfP2ZEA&Jmi>;Ki>TK* zf!L>^N3Y@~#nX`qFHn$pNr_VD@%*dGtjT+RJDUpXvrB=7l{Aliwk8LcbF5=mi$V^w z^=^onlYST@Q7@D^j)xTSUi_!scHYTyt&B_@v)|U% z@}-jc_?QU(tcjY0v6fLZW}{=Xy+nS@ZsxtQ4ajY(jqu&>#P3e8e-5(`Sa?Q zADoho%1Ts~?U+gX^do|vh?SE z6|w6!*gNCR*)TH~k4a{jkzVe`G#*97Cd=E)Q+H@&xUeQ&hAU#25bG3G4Qrd(5K$mzw&H-ct`gY8L27S!)~Nr_Jh{)L6d#d2?+Kntlv(}Xr zehPkGYA_GcYX(Co_yk1;ACzoenNvEVIfs!y{2RxXfxhxSZ^`c-xAWxEJLYT+Y_M-ki*6CmnE$rEh_a}U2Vw^q|4pDE) zPs!D7um%Du)v-p2t6yq3pHr|El{guisbrujeIQp87xmJ5ecy1nODZyjh3H+CRtxc1 zss7F*CPrx3N(nSIbU(ylS$vp?E;0L&_;3fe!%2+imDSYdO~pTd3P#GOg$UEud=m=#0!ms@U&XZp|)=XCkV zEGRTGD<>)Yv3NrUmzs71cgJm6^zp;W-RBjJE8o1iVdY2f-)AQH;`I6vlqM2-PrU0n z;rg2EJ&Mn~*s9&)>9%?jmBPq_P($}UOu-UpBdYu!-~A6UI%~-EAyAhyjHx0P*$tFW zk1!;gdoo#7m&`WJwRzmXRd|E?F1buzySQ+6T}DIAW>gXVVj>fpm{}o+T$Ylec6M4L zlQ${*k>8^{Qqr`KSlTB+w4-99jBYmjZjASSLo3Q_8+=b>Z@$O_cvt2u8t!k zgTGGvkSI^dYiyd7ZQ!Rt#XGH2qcr7Q<;oU1wRs{BP2FG8-jIOs^HT|yo*i7eN;^X7 zBZGSXVtSzA*Zye6-TrtAa0)ERqu;3iO0Mi2y|=YtB~+5}*J_csP^5sLrlZC|3Ktz1 zz!<>hqG`1(LBNp|Y zx>+`!nlI4>SB)T(TiBddaF7;cE%d#ouF6#RygSwS`JT8aMc;>tmm+0JYg>(59$2ua zu<(O(yX=+Dc!ie|zl5gF|%LAo(i3@CxTz>s$G;)YX zGMT4->Rv{$v{-acM-e)~X4F>k`-u39kR^HTXV{~c!))I=MACX{9{sG!hyQ2T!r7UQ zhpm3Qs?cZoK(T4WYD)Y-17||v62!7>C;L2={e+E1dTKqQvt~{6ELJ;ASPfHy5fn^s(U+&F9i-jbHp-jKIdbbP3Z?YfKcH?tBLjwMXuRdl9rlRY zXZu?2%`q?V7AsC8EL@4L z3|{Q9Su4EFD&sQW915^VukU=IKv#Ls&*b1}bEMBa^YcgIz2a-)NQv@>I?dT!x&l4) zd<#uiEeWNU7hUb(leK3fOkfHy-?P*N{pY?ynysEG5~tz^^T6HTiX0NMqO2V>S!>3^ zj%8$W|^RvYMJVJY*UOBAnc+@PM^TS{nAb%tq1JEyBu z_!iRIl7|1L z%eU;b_B|o%^ArZt%Tqe>`sWWU7Ry}|@O4%~Hbzc`rz4LoAAFGX`0oR1=@pFT_!)#R zbbf&$Ru#v|6wrfCBzv;o=7}lmWs+rQq41)Sw@vFBH6IAMSymqNwKO|Z{1LRM%FO!- zaBuja&n##U%ycw5mai|5mS4j1C%n2ixYN2S)ipW-Vz|(D8E;qFWz6=&yPiMn`3Z&h z9%gk_u3n9rvak4Mrpt={NgE;6)KazKB*HNfJ=G6?k)EFBexj{{AJxOWtHp`+m9nme zeEy656Cv42h2o=%7Lkq1t0U#vwL=#pvxT;y{W#T4v_k?WteTlj9v^veTwrZlB+rtH z$3~qm8C)<%Sx-l~+my@F)oIa!6BMwk-)U8G8G{!~tf4uR(2IbcKa6tijL; zLQst0magHK`S3hgORm00dW}@DeD&!j7>XYfs}fCY_|4RCxna-BTv+}MC?_erq~S05 zQYdpgIax>q!YJ5^P6CB|bnHc@^7uB){lY3Z-aX=@znbYHQj z(A(ZcwzwURWtzeR#6LxkZb$7f^hSDx4r-{XT5Y?5MwXgVkb|d4E<_aeCMC66E<|-q zw^qN8kWXf?s)}7iQ&dleOVs|mR)xS5;>|=FhLugr9_GI!WU9u^Fuf zc_I%-fbX(Ii+twsr4! zE7;_-j*$Cx`7dF{DNF!P#m_Q<$4V~9!S5nfD)oB1uJfYvCdvJKe^|AW_VQue^X#XH zJcoKlsL5VergW1|pH$`Yv}|8z2cgfurlp_2OPM|48yK;`_wVSJTA614(r*fX<_INa z+aTeTg{Z<)>$}m~_lYykL~!G_0+m`u z-(e!!<$EUuvI9dPlIv z?h^)u$SB)?qF3P=GWPR@!u8Ez_ql|zORj#hCC+%7f2ctJSYjSfxJ*WfN0$hgzxbCV zxclsAB94vqa3t^}se0KoMLVi(S~F!&Vbl6bZQ=B_L_?Duu7tBeNlt=^_1)boVU;6{ z%%6N`Lk|xVWpHgEw+AZ2(e9VBZ&46-xE)TAGcS!N<-8CDSE1ZPh{rxVGcY^Fj!3K}FgCqYfjY8cJcmVfvF9*6_J97GnD(-1F|m9)VFuLq)z1`vmX1?+g1o5_L<)B|1Ioj1K>~QVV}&2{I|oMJWy93XKBidNUeROa7A8< zJmTX!j>b+0#gqLx5yO2+Ipwv5u6d0}jS|zIJ%w{Bw1K<&X_KSFa`@J=&-JQ8{!Owg zHvd>Q%GfA=qI@0XPT91o@7*Z`Kf+XD9#O%2%z2WyHD#RDR?nL9%YQC>$l&xQq>tR| zy_9hgZ{*_ogD&5i|B&(J6;^7@=cfK+u?D@VeLS+b-_Ya1+#l%gxEp`tv+Xro#&Rea zB?tkD!plL3a2g(}uC7Kt=R`nrmP((VfYKDr@9?%J`5#;l0*0%o7h|&X3UBe3i)M3m zaJC(m7&PBfJoVP|-!h@}hh50Bb+f3mMX&PhwnZQvY1j`Dj>ATAFxN}J_9v{XwMdCc z=%LRz`@}?XC*d*wJPy5F1T#J1GOzl|CPxhldLRk~1o5d#@{nB6HyS-5Jh)pH*2Stq#hX|L;p813rJh|F z9}%50q5&}Q5PUt7sW!$Ge#1#|U|4w<#wXpUB|Vo9TDa6pAmS5lSR|2wr=D;F_XW>b z4kr4Ngsu6$%j-H*PuMfg*Gyh9vVjj?=ZS$!w@TGJ2$P6%%bL6ks37PSVtKj81Yf~h zz_7VqxmDVh+v&QE^)uoX9fW8YRt_j6pJN6^8)jx=F|ReLpT_}gYZB#$GR*1K)l|*{ zdIk78`8dd5sttcv`$xx6iG&*E>e!Bs=3bvB2W{EuV`i2~>uxPS0H8SA0{RPWFc)22 zjPvBbc_zU^k&%Ww$>M4+FuktbX?T`C8wDxZbhB1Dev`8W-ALDwO98W%tpN7;E56@0CVdO z30~)P5*e)R7&kXi!clsh%ML|hr&sF7?XQg#SPD5`>+f}kkf3msh*eKxLr(V!ti+t5 z*_FD{peWCQO{K~R2R5y*Y1Z<@d;`V{Buf32*Vm`yFO&19aWZi5*g@ebA~kJo2 zvoLT=hbKxy`83-3_NKrZ)TOew|6sz8AB&18VXBZzE7uR!-0H{APe3VahCnwDYxfJo zQ!OeU5A=|^3iNA1B_;oCamlpDwA8%RE5~9vSk(yjyUvu-uaQ9PLzP-Gs zMcKU^VjV8!wSjx+Vgq>BAaG|Tdz7H}v`9(&PEP6vpH0dkb$PvX!9`chSy>MGB7a&{ zvkwBY-vdd>O}W}TxzC?tZZVmiit1x>3m;)& zkq`s!L-;rkEVm5VacupGkBSt?W zeTsGqdHV;pfP>vY2Y0dT{kzN-ThWHsB}JwD2=;5X=G zT{Y%9juV;9^(mH}?|8XIH#rahq9Pd)$I^Fn@Amvinb$S9f8kH?-AAB+D!4h;!uohvhJ)k z5;wJTpH|S>Y;L&^=nDxZ@A-##tE=naz$y4J6J#nqX$sJz;QzTD?#ice?Mnxeuz~A2 z`){xB8Q2w2e(+?u8Xs4)eNv*q=`9MXiv#bMpE8T;p+B^UI2mVU^`Gu_raOUj@_r?? z8qQv3X@@k<1FI;vUBv1J&38#^+r+hy{opfOoI1<<(nnZo^r+0o`i07qhwGq<{Yd-) zhu`Xd-@kkJUOat5I@3m|Mu*DG0M~%}9@e6WOG$t_K^tQK@cT^dL7}wqw+-AxSuEbc z)n~^)0@=zG&I#03IfrsTht67g_a0N`j`1K2l=v91w_P?TO5J`N*bfu1i!CygXFi?g z4q6GNIz0Ye#zXV6%u~7Y3n=#AP4qO$TJcX|muRpDx8In$pQm z%HeGsDPgNQRHGGsbrgruqV_!Dpf7`-jxqF^?8}SqIpZwbo>keF6TvERc6iKfs`IXi za^f><^ij{H>R1!C14ex4-;R>sAaqFKB3`0_)rUg?J6p}IWO?(XIKSkvRLcd)|7&iGwCQ_jnLT#s@9mC4*Fki+ zsUU=~d#nt70CbgO|2 zBOO(%EKAy23IRRxM`SEf0U#WM9{J|vsYoh=SY=3B9@CP7pz8pRhJ-}=Q#X#4Ag*$;^g#GdwbQz+va-xlmB6SP!U9W-~MzuiHk1{q!jWli5P%)g{{)&Aq zlHXQ83cks}_dc = GPIO_DC; dev->_bl = GPIO_BL; dev->_TFT_Handle = tft_handle; -#if CONFIG_XPT2046 +#if CONFIG_XPT2046_ENABLE_DIFF_BUS + ESP_LOGI(TAG, "XPT_SCLK=%d",XPT_SCLK); + ESP_LOGI(TAG, "XPT_MOSI=%d",XPT_MOSI); + ESP_LOGI(TAG, "XPT_MISO=%d",XPT_MISO); + spi_bus_config_t xpt_buscfg = { + .sclk_io_num = XPT_SCLK, + .mosi_io_num = XPT_MOSI, + .miso_io_num = XPT_MISO, + .quadwp_io_num = -1, + .quadhd_io_num = -1 + }; + + ret = spi_bus_initialize( XPT_ID, &xpt_buscfg, SPI_DMA_CH_AUTO ); + ESP_LOGI(TAG, "spi_bus_initialize(XPT) ret=%d XPT_ID=%d",ret, XPT_ID); + assert(ret==ESP_OK); +#endif + +#if CONFIG_XPT2046_ENABLE_SAME_BUS || CONFIG_XPT2046_ENABLE_DIFF_BUS ESP_LOGI(TAG, "XPT_CS=%d",XPT_CS); gpio_reset_pin( XPT_CS ); gpio_set_direction( XPT_CS, GPIO_MODE_OUTPUT ); @@ -138,7 +158,11 @@ void spi_master_init(TFT_t * dev, int16_t GPIO_MOSI, int16_t GPIO_SCLK, int16_t }; spi_device_handle_t xpt_handle; - ret = spi_bus_add_device( HOST_ID, &xpt_devcfg, &xpt_handle); +#if CONFIG_XPT2046_ENABLE_SAME_BUS + ret = spi_bus_add_device( TFT_ID, &xpt_devcfg, &xpt_handle); +#else + ret = spi_bus_add_device( XPT_ID, &xpt_devcfg, &xpt_handle); +#endif ESP_LOGD(TAG, "spi_bus_add_device=%d",ret); assert(ret==ESP_OK); dev->_XPT_Handle = xpt_handle; diff --git a/main/ili9340.h b/main/ili9340.h index 7acce3e..4fd793c 100644 --- a/main/ili9340.h +++ b/main/ili9340.h @@ -47,8 +47,8 @@ typedef struct { int16_t _max_yc; // Maximum y coordinate } TFT_t; -void spi_master_init(TFT_t * dev, int16_t GPIO_MOSI, int16_t GPIO_SCLK, int16_t TFT_CS, int16_t GPIO_DC, int16_t GPIO_RESET, int16_t GPIO_BL, - int16_t GPIO_MISO, int16_t XPT_CS, int16_t XPT_IRQ); +void spi_master_init(TFT_t * dev, int16_t TFT_MOSI, int16_t TFT_SCLK, int16_t TFT_CS, int16_t GPIO_DC, int16_t GPIO_RESET, int16_t GPIO_BL, + int16_t XPT_MISO, int16_t XPT_CS, int16_t XPT_IRQ, int16_t XPT_SCLK, int16_t XPT_MOSI); bool spi_master_write_byte(spi_device_handle_t SPIHandle, const uint8_t* Data, size_t DataLength); bool spi_master_write_comm_byte(TFT_t * dev, uint8_t cmd); bool spi_master_write_comm_word(TFT_t * dev, uint16_t cmd); diff --git a/main/main.c b/main/main.c index 8ac8b72..0b78e80 100644 --- a/main/main.c +++ b/main/main.c @@ -26,17 +26,6 @@ static const char *TAG = "ILI9340"; -static void SPIFFS_Directory(char * path) { - DIR* dir = opendir(path); - assert(dir != NULL); - while (true) { - struct dirent*pe = readdir(dir); - if (!pe) break; - ESP_LOGI(__FUNCTION__,"d_name=%s d_ino=%d d_type=%x", pe->d_name,pe->d_ino, pe->d_type); - } - closedir(dir); -} - // You have to set these CONFIG value using menuconfig. #if 0 #define CONFIG_WIDTH 240 @@ -1058,7 +1047,7 @@ TickType_t CodeTest(TFT_t * dev, FontxFile *fx, int width, int height, uint16_t return diffTick; } -#if CONFIG_XPT2046 +#if CONFIG_XPT2046_ENABLE_SAME_BUS || CONFIG_XPT2046_ENABLE_DIFF_BUS void TouchPosition(TFT_t * dev, FontxFile *fx, int width, int height, TickType_t timeout) { ESP_LOGW(TAG, "Start TouchPosition"); @@ -1081,7 +1070,7 @@ void TouchPosition(TFT_t * dev, FontxFile *fx, int width, int height, TickType_t // Clear XPT2046 int _xp; int _yp; - xptGetxy(dev, &_xp, &_yp); + xptGetxy(dev, &_xp, &_yp); bool isRunning = true; while(isRunning) { @@ -1138,9 +1127,9 @@ void TouchCalibration(TFT_t * dev, FontxFile *fx, int width, int height) { int counter = 0; // Clear XPT2046 - int _xp; - int _yp; - xptGetxy(dev, &_xp, &_yp); + int _xp; + int _yp; + xptGetxy(dev, &_xp, &_yp); while(1) { int level = gpio_get_level(dev->_irq); @@ -1218,7 +1207,7 @@ void TouchCalibration(TFT_t * dev, FontxFile *fx, int width, int height) { dev->_calibration = false; } -void TouchTest(TFT_t * dev, FontxFile *fx, int width, int height, TickType_t timeout) { +void TouchPenTest(TFT_t * dev, FontxFile *fx, int width, int height, TickType_t timeout) { // get font width & height uint8_t buffer[FontxGlyphBufSize]; uint8_t fontWidth; @@ -1304,7 +1293,7 @@ void TouchTest(TFT_t * dev, FontxFile *fx, int width, int height, TickType_t tim lastTouched = xTaskGetTickCount(); } } -#endif +#endif // CONFIG_XPT2046_ENABLE_SAME_BUS || CONFIG_XPT2046_ENABLE_DIFF_BUS void ILI9341(void *pvParameters) { @@ -1326,18 +1315,30 @@ void ILI9341(void *pvParameters) InitFontx(fx32M,"/spiffs/ILMH32XB.FNT",""); // 16x32Dot Mincyo TFT_t dev; -#if CONFIG_XPT2046 - ESP_LOGI(TAG, "Enable XPT2046 Touch Contoller"); - int MISO_GPIO = CONFIG_MISO_GPIO; +#if CONFIG_XPT2046_ENABLE_SAME_BUS + ESP_LOGI(TAG, "Enable Touch Contoller using the same SPI bus as TFT"); + int XPT_MISO_GPIO = CONFIG_XPT_MISO_GPIO; + int XPT_CS_GPIO = CONFIG_XPT_CS_GPIO; + int XPT_IRQ_GPIO = CONFIG_XPT_IRQ_GPIO; + int XPT_SCLK_GPIO = -1; + int XPT_MOSI_GPIO = -1; +#elif CONFIG_XPT2046_ENABLE_DIFF_BUS + ESP_LOGI(TAG, "Enable Touch Contoller using the same SPI bus as TFT"); + int XPT_MISO_GPIO = CONFIG_XPT_MISO_GPIO; int XPT_CS_GPIO = CONFIG_XPT_CS_GPIO; int XPT_IRQ_GPIO = CONFIG_XPT_IRQ_GPIO; + int XPT_SCLK_GPIO = CONFIG_XPT_SCLK_GPIO; + int XPT_MOSI_GPIO = CONFIG_XPT_MOSI_GPIO; #else - int MISO_GPIO = -1; + ESP_LOGI(TAG, "Disable Touch Contoller"); + int XPT_MISO_GPIO = -1; int XPT_CS_GPIO = -1; int XPT_IRQ_GPIO = -1; + int XPT_SCLK_GPIO = -1; + int XPT_MOSI_GPIO = -1; #endif spi_master_init(&dev, CONFIG_MOSI_GPIO, CONFIG_SCLK_GPIO, CONFIG_TFT_CS_GPIO, CONFIG_DC_GPIO, - CONFIG_RESET_GPIO, CONFIG_BL_GPIO, MISO_GPIO, XPT_CS_GPIO, XPT_IRQ_GPIO); + CONFIG_RESET_GPIO, CONFIG_BL_GPIO, XPT_MISO_GPIO, XPT_CS_GPIO, XPT_IRQ_GPIO, XPT_SCLK_GPIO, XPT_MOSI_GPIO); #if CONFIG_ILI9225 uint16_t model = 0x9225; @@ -1369,7 +1370,7 @@ void ILI9341(void *pvParameters) lcdBGRFilter(&dev); #endif -#if CONFIG_XPT2046 +#if CONFIG_XPT2046_ENABLE_SAME_BUS || CONFIG_XPT2046_ENABLE_DIFF_BUS #if CONFIG_XPT_CHECK TouchPosition(&dev, fx24G, CONFIG_WIDTH, CONFIG_HEIGHT, 1000); #endif @@ -1377,12 +1378,33 @@ void ILI9341(void *pvParameters) #if 0 while(1) { - FillTest(&dev, CONFIG_WIDTH, CONFIG_HEIGHT); +#if CONFIG_XPT2046_ENABLE_SAME_BUS || CONFIG_XPT2046_ENABLE_DIFF_BUS + TouchCalibration(&dev, fx24G, CONFIG_WIDTH, CONFIG_HEIGHT); + TouchPenTest(&dev, fx24G, CONFIG_WIDTH, CONFIG_HEIGHT, 1000); +#endif + + ArrowTest(&dev, fx16G, model, CONFIG_WIDTH, CONFIG_HEIGHT); WAIT; -#if CONFIG_XPT2046 - TouchCalibration(&dev, fx24G, CONFIG_WIDTH, CONFIG_HEIGHT); - TouchTest(&dev, fx24G, CONFIG_WIDTH, CONFIG_HEIGHT, 2000); + char file[32]; + if (CONFIG_WIDTH >= CONFIG_HEIGHT) { + strcpy(file, "/images/esp32.bmp"); + } else { + strcpy(file, "/images/esp32_ro.bmp"); + } + BMPTest(&dev, file, CONFIG_WIDTH, CONFIG_HEIGHT); + WAIT; + +#ifdef ENABLE_JPG + strcpy(file, "/images/esp32.jpeg"); + JPEGTest(&dev, file, CONFIG_WIDTH, CONFIG_HEIGHT); + WAIT; +#endif + +#ifdef ENABLE_PNG + strcpy(file, "/images/esp_logo.png"); + PNGTest(&dev, file, CONFIG_WIDTH, CONFIG_HEIGHT); + WAIT; #endif } @@ -1390,9 +1412,9 @@ void ILI9341(void *pvParameters) while(1) { -#if CONFIG_XPT2046 +#if CONFIG_XPT2046_ENABLE_SAME_BUS || CONFIG_XPT2046_ENABLE_DIFF_BUS TouchCalibration(&dev, fx24G, CONFIG_WIDTH, CONFIG_HEIGHT); - TouchTest(&dev, fx24G, CONFIG_WIDTH, CONFIG_HEIGHT, 1000); + TouchPenTest(&dev, fx24G, CONFIG_WIDTH, CONFIG_HEIGHT, 1000); #endif FillTest(&dev, CONFIG_WIDTH, CONFIG_HEIGHT); @@ -1457,21 +1479,21 @@ void ILI9341(void *pvParameters) char file[32]; if (CONFIG_WIDTH >= CONFIG_HEIGHT) { - strcpy(file, "/spiffs/esp32.bmp"); + strcpy(file, "/images/esp32.bmp"); } else { - strcpy(file, "/spiffs/esp32_ro.bmp"); + strcpy(file, "/images/esp32_ro.bmp"); } BMPTest(&dev, file, CONFIG_WIDTH, CONFIG_HEIGHT); WAIT; #ifdef ENABLE_JPG - strcpy(file, "/spiffs/esp32.jpeg"); + strcpy(file, "/images/esp32.jpeg"); JPEGTest(&dev, file, CONFIG_WIDTH, CONFIG_HEIGHT); WAIT; #endif #ifdef ENABLE_PNG - strcpy(file, "/spiffs/esp_logo.png"); + strcpy(file, "/images/esp_logo.png"); PNGTest(&dev, file, CONFIG_WIDTH, CONFIG_HEIGHT); WAIT; #endif @@ -1542,15 +1564,22 @@ void ILI9341(void *pvParameters) } } +static void listSPIFFS(char * path) { + DIR* dir = opendir(path); + assert(dir != NULL); + while (true) { + struct dirent*pe = readdir(dir); + if (!pe) break; + ESP_LOGI(__FUNCTION__,"d_name=%s d_ino=%d d_type=%x", pe->d_name,pe->d_ino, pe->d_type); + } + closedir(dir); +} -void app_main(void) -{ - ESP_LOGI(TAG, "Initializing SPIFFS"); - +esp_err_t mountSPIFFS(char * path, char * label, int max_files) { esp_vfs_spiffs_conf_t conf = { - .base_path = "/spiffs", - .partition_label = NULL, - .max_files = 16, + .base_path = path, + .partition_label = label, + .max_files = max_files, .format_if_mount_failed =true }; @@ -1559,24 +1588,57 @@ void app_main(void) esp_err_t ret = esp_vfs_spiffs_register(&conf); if (ret != ESP_OK) { - if (ret == ESP_FAIL) { + if (ret ==ESP_FAIL) { ESP_LOGE(TAG, "Failed to mount or format filesystem"); - } else if (ret == ESP_ERR_NOT_FOUND) { + } else if (ret== ESP_ERR_NOT_FOUND) { ESP_LOGE(TAG, "Failed to find SPIFFS partition"); } else { ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)",esp_err_to_name(ret)); } - return; + return ret; } +#if 0 + ESP_LOGI(TAG, "Performing SPIFFS_check()."); + ret = esp_spiffs_check(conf.partition_label); + if (ret != ESP_OK) { + ESP_LOGE(TAG, "SPIFFS_check() failed (%s)", esp_err_to_name(ret)); + return ret; + } else { + ESP_LOGI(TAG, "SPIFFS_check() successful"); + } +#endif + size_t total = 0, used = 0; - ret = esp_spiffs_info(NULL, &total,&used); + ret = esp_spiffs_info(conf.partition_label, &total, &used); if (ret != ESP_OK) { ESP_LOGE(TAG,"Failed to get SPIFFS partition information (%s)",esp_err_to_name(ret)); } else { + ESP_LOGI(TAG,"Mount %s to %s success", path, label); ESP_LOGI(TAG,"Partition size: total: %d, used: %d", total, used); } - SPIFFS_Directory("/spiffs/"); + return ret; +} + + +void app_main(void) +{ + ESP_LOGI(TAG, "Initializing SPIFFS"); + esp_err_t ret; + ret = mountSPIFFS("/spiffs", "storage0", 10); + if (ret != ESP_OK) return; + listSPIFFS("/spiffs/"); + + // Image file borrowed from here + // https://www.flaticon.com/packs/social-media-343 + ret = mountSPIFFS("/icons", "storage1", 10); + if (ret != ESP_OK) return; + listSPIFFS("/icons/"); + + ret = mountSPIFFS("/images", "storage2", 14); + if (ret != ESP_OK) return; + listSPIFFS("/images/"); + xTaskCreate(ILI9341, "ILI9341", 1024*6, NULL, 2, NULL); } diff --git a/partitions.csv b/partitions.csv index 6d9ee2e..6c01a79 100644 --- a/partitions.csv +++ b/partitions.csv @@ -3,4 +3,7 @@ nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, factory, app, factory, 0x10000, 1M, -storage, data, spiffs, , 0xF0000, +#storage, data, spiffs, , 0xF0000, +storage0, data, spiffs, , 0x20000, +storage1, data, spiffs, , 0x10000, +storage2, data, spiffs, , 0xB0000, diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 0705ace..42e00d9 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -9,6 +9,7 @@ CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" CONFIG_ESP_INT_WDT=n CONFIG_INT_WDT=n CONFIG_TASK_WDT=n +CONFIG_ESP_TASK_WDT_EN=n # # ESP32-specific