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 0000000..a1f6edd Binary files /dev/null and b/icons/facebook.png differ diff --git a/icons/git.png b/icons/git.png new file mode 100644 index 0000000..253ae51 Binary files /dev/null and b/icons/git.png differ diff --git a/icons/instagram.png b/icons/instagram.png new file mode 100644 index 0000000..20c03a7 Binary files /dev/null and b/icons/instagram.png differ diff --git a/icons/linkedin.png b/icons/linkedin.png new file mode 100644 index 0000000..19c5cdf Binary files /dev/null and b/icons/linkedin.png differ diff --git a/icons/twitter.png b/icons/twitter.png new file mode 100644 index 0000000..6142d58 Binary files /dev/null and b/icons/twitter.png differ diff --git a/icons/vkontakte.png b/icons/vkontakte.png new file mode 100644 index 0000000..20660d6 Binary files /dev/null and b/icons/vkontakte.png differ diff --git a/icons/whatsapp.png b/icons/whatsapp.png new file mode 100644 index 0000000..36f546a Binary files /dev/null and b/icons/whatsapp.png differ diff --git a/icons/youtube.png b/icons/youtube.png new file mode 100644 index 0000000..4b8da7f Binary files /dev/null and b/icons/youtube.png differ diff --git a/font/esp32.bmp b/images/esp32.bmp similarity index 100% rename from font/esp32.bmp rename to images/esp32.bmp diff --git a/font/esp32.jpeg b/images/esp32.jpeg similarity index 100% rename from font/esp32.jpeg rename to images/esp32.jpeg diff --git a/font/esp32_ro.bmp b/images/esp32_ro.bmp similarity index 100% rename from font/esp32_ro.bmp rename to images/esp32_ro.bmp diff --git a/font/esp_logo.png b/images/esp_logo.png similarity index 100% rename from font/esp_logo.png rename to images/esp_logo.png diff --git a/images/facebook.png b/images/facebook.png new file mode 100644 index 0000000..91295fc Binary files /dev/null and b/images/facebook.png differ diff --git a/images/git.png b/images/git.png new file mode 100644 index 0000000..0bf9391 Binary files /dev/null and b/images/git.png differ diff --git a/images/instagram.png b/images/instagram.png new file mode 100644 index 0000000..0b9b104 Binary files /dev/null and b/images/instagram.png differ diff --git a/images/linkedin.png b/images/linkedin.png new file mode 100644 index 0000000..269f10f Binary files /dev/null and b/images/linkedin.png differ diff --git a/images/twitter.png b/images/twitter.png new file mode 100644 index 0000000..f8837f2 Binary files /dev/null and b/images/twitter.png differ diff --git a/images/vkontakte.png b/images/vkontakte.png new file mode 100644 index 0000000..200ada2 Binary files /dev/null and b/images/vkontakte.png differ diff --git a/images/whatsapp.png b/images/whatsapp.png new file mode 100644 index 0000000..ab22f1a Binary files /dev/null and b/images/whatsapp.png differ diff --git a/images/youtube.png b/images/youtube.png new file mode 100644 index 0000000..3593918 Binary files /dev/null and b/images/youtube.png differ diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 3d5397d..639af68 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -2,7 +2,7 @@ menu "TFT Configuration" config GPIO_RANGE_MAX int - default 33 if IDF_TARGET_ESP32 + default 39 if IDF_TARGET_ESP32 default 46 if IDF_TARGET_ESP32S2 default 48 if IDF_TARGET_ESP32S3 default 19 if IDF_TARGET_ESP32C3 @@ -152,7 +152,25 @@ menu "TFT Configuration" help Change BGR color filter to RGB color filter. + choice XPT2046 + prompt "XPT2046 Touch Contoller" + default "XPT2046_DISABLE" + help + Select XPT2046 Touch Contoller. + config XPT2046_DISABLE + bool "Disable Touch Contoller" + config XPT2046_ENABLE_SAME_BUS + bool "Enable Touch Contoller using the same SPI bus as TFT" + help + Enable Touch Contoller using the same SPI bus as TFT. + config XPT2046_ENABLE_DIFF_BUS + bool "Enable Touch Contoller using a different SPI bus than TFT" + help + Enable Touch Contoller using a different SPI bus than TFT. + endchoice + choice SPI_HOST + depends on XPT2046_DISABLE || XPT2046_ENABLE_SAME prompt "SPI peripheral that controls this bus" default SPI2_HOST help @@ -168,50 +186,64 @@ menu "TFT Configuration" USE SPI3_HOST. This is also called VSPI_HOST endchoice - config XPT2046 - bool "Enable XPT2046 Touch Contoller" - default false - help - Enable XPT2046 Touch Contolle. - config MISO_GPIO - depends on XPT2046 - int "MISO GPIO number" + config XPT_MISO_GPIO + depends on XPT2046_ENABLE_SAME_BUS || XPT2046_ENABLE_DIFF_BUS + int "XPT2046 MISO GPIO number" range 0 GPIO_RANGE_MAX default 19 if IDF_TARGET_ESP32 default 37 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 default 6 help - GPIO number (IOxx) to SPI MISO. + GPIO number (IOxx) to XPT2046 MISO. Some GPIOs are used for other purposes (flash connections, etc.) and cannot be used to MISO. config XPT_CS_GPIO - depends on XPT2046 + depends on XPT2046_ENABLE_SAME_BUS || XPT2046_ENABLE_DIFF_BUS int "XPT2046 CS GPIO number" range 0 GPIO_RANGE_MAX - default 22 if IDF_TARGET_ESP32 + default 21 if IDF_TARGET_ESP32 default 38 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 default 7 help GPIO number (IOxx) to XPT2046 CS. Some GPIOs are used for other purposes (flash connections, etc.) and cannot be used to CS. - On the ESP32, GPIOs 35-39 are input-only so cannot be used as outputs. - On the ESP32-S2, GPIO 46 is input-only so cannot be used as outputs. config XPT_IRQ_GPIO - depends on XPT2046 + depends on XPT2046_ENABLE_SAME_BUS || XPT2046_ENABLE_DIFF_BUS int "XPT2046 IRQ GPIO number" range 0 GPIO_RANGE_MAX - default 21 if IDF_TARGET_ESP32 + default 22 if IDF_TARGET_ESP32 default 39 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 default 8 help GPIO number (IOxx) to XPT2046 IRQ. Some GPIOs are used for other purposes (flash connections, etc.) and cannot be used to IRQ. - On the ESP32, GPIO12 is used as a bootstrapping pin to select output voltage of an internal regulator which powers the flash chip (VDD_SDIO), + + config XPT_SCLK_GPIO + depends on XPT2046_ENABLE_DIFF_BUS + int "XPT2046 SCLK GPIO number" + range 0 GPIO_RANGE_MAX + default 25 if IDF_TARGET_ESP32 + default 40 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 + default 8 + help + GPIO number (IOxx) to XPT2046 CLK. + Some GPIOs are used for other purposes (flash connections, etc.) and cannot be used to IRQ. + + config XPT_MOSI_GPIO + depends on XPT2046_ENABLE_DIFF_BUS + int "XPT2046 MOSI GPIO number" + range 0 GPIO_RANGE_MAX + default 26 if IDF_TARGET_ESP32 + default 41 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 + default 8 + help + GPIO number (IOxx) to XPT2046 CLK. + Some GPIOs are used for other purposes (flash connections, etc.) and cannot be used to IRQ. config XPT_ACCURACY - depends on XPT2046 + depends on XPT2046_ENABLE_SAME_BUS || XPT2046_ENABLE_DIFF_BUS int "Touch position accuracy" range 2 10 default 5 @@ -221,7 +253,7 @@ menu "TFT Configuration" The higher the value, the less accurate the position, but the less responsive it is. config XPT_CHECK - depends on XPT2046 + depends on XPT2046_ENABLE_SAME_BUS || XPT2046_ENABLE_DIFF_BUS bool "Enable XPT2046 Touch Check" default false help diff --git a/main/ili9340.c b/main/ili9340.c index f01d7c8..9379a03 100644 --- a/main/ili9340.c +++ b/main/ili9340.c @@ -16,16 +16,17 @@ #define _DEBUG_ 0 #if CONFIG_SPI2_HOST -#define HOST_ID SPI2_HOST +#define TFT_ID SPI2_HOST #elif CONFIG_SPI3_HOST -#define HOST_ID SPI3_HOST +#define TFT_ID SPI3_HOST #else -#define HOST_ID SPI2_HOST // When not to use menuconfig +#define TFT_ID SPI2_HOST // When not to use menuconfig +#define XPT_ID SPI3_HOST // When not to use menuconfig #endif -//static const int GPIO_MOSI = 23; -//static const int GPIO_SCLK = 18; +//static const int TFT_MOSI = 23; +//static const int TFT_SCLK = 18; static const int SPI_Command_Mode = 0; static const int SPI_Data_Mode = 1; @@ -34,21 +35,23 @@ static const int SPI_Data_Mode = 1; static const int TFT_Frequency = SPI_MASTER_FREQ_40M; ////static const int TFT_Frequency = SPI_MASTER_FREQ_80M; -#if CONFIG_XPT2046 +#if CONFIG_XPT2046_ENABLE_SAME_BUS || CONFIG_XPT2046_ENABLE_DIFF_BUS static const int XPT_Frequency = 1*1000*1000; //static const int XPT_Frequency = 2*1000*1000; //static const int XPT_Frequency = 4*1000*1000; -//#define GPIO_MISO 19 +//#define XPT_MISO 19 //#define XPT_CS 4 //#define XPT_IRQ 5 #endif -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) { esp_err_t ret; + ESP_LOGI(TAG, "TFT_MOSI=%d",TFT_MOSI); + ESP_LOGI(TAG, "TFT_SCLK=%d",TFT_SCLK); ESP_LOGI(TAG, "TFT_CS=%d",TFT_CS); gpio_reset_pin( TFT_CS ); gpio_set_direction( TFT_CS, GPIO_MODE_OUTPUT ); @@ -76,26 +79,26 @@ void spi_master_init(TFT_t * dev, int16_t GPIO_MOSI, int16_t GPIO_SCLK, int16_t gpio_set_level( GPIO_BL, 0 ); } -#if CONFIG_XPT2046 - spi_bus_config_t buscfg = { - .sclk_io_num = GPIO_SCLK, - .mosi_io_num = GPIO_MOSI, - .miso_io_num = GPIO_MISO, +#if CONFIG_XPT2046_ENABLE_SAME_BUS + spi_bus_config_t tft_buscfg = { + .sclk_io_num = TFT_SCLK, + .mosi_io_num = TFT_MOSI, + .miso_io_num = XPT_MISO, .quadwp_io_num = -1, .quadhd_io_num = -1 }; #else - spi_bus_config_t buscfg = { - .sclk_io_num = GPIO_SCLK, - .mosi_io_num = GPIO_MOSI, + spi_bus_config_t tft_buscfg = { + .sclk_io_num = TFT_SCLK, + .mosi_io_num = TFT_MOSI, .miso_io_num = -1, .quadwp_io_num = -1, .quadhd_io_num = -1 }; #endif - ret = spi_bus_initialize( HOST_ID, &buscfg, SPI_DMA_CH_AUTO ); - ESP_LOGD(TAG, "spi_bus_initialize=%d",ret); + ret = spi_bus_initialize( TFT_ID, &tft_buscfg, SPI_DMA_CH_AUTO ); + ESP_LOGI(TAG, "spi_bus_initialize(TFT) ret=%d TFT_ID=%d",ret, TFT_ID); assert(ret==ESP_OK); spi_device_interface_config_t tft_devcfg={ @@ -106,14 +109,31 @@ void spi_master_init(TFT_t * dev, int16_t GPIO_MOSI, int16_t GPIO_SCLK, int16_t }; spi_device_handle_t tft_handle; - ret = spi_bus_add_device( HOST_ID, &tft_devcfg, &tft_handle); + ret = spi_bus_add_device( TFT_ID, &tft_devcfg, &tft_handle); ESP_LOGD(TAG, "spi_bus_add_device=%d",ret); assert(ret==ESP_OK); dev->_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