From e503a32d849ca88720c89e1f33162632fa08609a Mon Sep 17 00:00:00 2001 From: Y1hsiaochunnn <66012385+Y1hsiaochunnn@users.noreply.github.com> Date: Thu, 19 Mar 2026 03:05:08 +0800 Subject: [PATCH] feat: Add Waevshare Product ESP32-P4-WIFI6-Touch-LCD-4.3 Support (#1858) * feat: Add Waevshare Product ESP32-P4-WIFI6-Touch-LCD-4.3 Support * feat: Supplement README * feat: Remove redundant conf --- main/CMakeLists.txt | 6 +++ main/Kconfig.projbuild | 6 ++- .../esp32-p4-wifi6-touch-lcd/README.md | 1 + .../esp32-p4-wifi6-touch-lcd/config.h | 7 +++ .../esp32-p4-wifi6-touch-lcd/config.json | 14 +++++ .../esp32-p4-wifi6-touch-lcd.cc | 42 +++++++++++++++ .../esp32-p4-wifi6-touch-lcd/lcd_init_cmds.h | 51 +++++++++++++++++++ 7 files changed, 126 insertions(+), 1 deletion(-) diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 41f4c9c..d04fa5c 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -429,6 +429,12 @@ elseif(CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B) set(BUILTIN_TEXT_FONT font_puhui_basic_30_4) set(BUILTIN_ICON_FONT font_awesome_30_4) set(DEFAULT_EMOJI_COLLECTION twemoji_64) +elseif(CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3) + set(MANUFACTURER "waveshare") + set(BOARD_TYPE "esp32-p4-wifi6-touch-lcd") + set(BUILTIN_TEXT_FONT font_puhui_basic_30_4) + set(BUILTIN_ICON_FONT font_awesome_30_4) + set(DEFAULT_EMOJI_COLLECTION twemoji_64) elseif(CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B) set(MANUFACTURER "waveshare") set(BOARD_TYPE "esp32-p4-wifi6-touch-lcd") diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 25e3185..98272b9 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -350,6 +350,9 @@ choice BOARD_TYPE config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4B" depends on IDF_TARGET_ESP32P4 + config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3 + bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4.3" + depends on IDF_TARGET_ESP32P4 config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-7B" depends on IDF_TARGET_ESP32P4 @@ -754,7 +757,8 @@ config USE_DEVICE_AEC default n depends on USE_AUDIO_PROCESSOR && (BOARD_TYPE_ESP_BOX_3 || BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_LITE \ || BOARD_TYPE_LICHUANG_DEV_S3 || BOARD_TYPE_ESP_KORVO2_V3 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75C || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_83\ - || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_06 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B \ + || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_06 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3 \ + || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B \ || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C || BOARD_TYPE_ESP_S3_LCD_EV_Board_2 || BOARD_TYPE_YUNLIAO_S3 \ || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_8 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_10_1 \ || BOARD_TYPE_ESP_VOCAT || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49 || BOARD_TYPE_WAVESHARE_ESP32_S3_RLCD_4_2 || BOARD_TYPE_ZHENGCHEN_CAM || BOARD_TYPE_ZHENGCHEN_CAM_ML307 \ diff --git a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/README.md b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/README.md index 5a42caa..3f5f1d5 100644 --- a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/README.md +++ b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/README.md @@ -9,6 +9,7 @@ Configuration in `menuconfig`. Selection Board Type `Xiaozhi Assistant --> Board Type` - Waveshare ESP32-P4-WIFI6-Touch-LCD-4B +- Waveshare ESP32-P4-WIFI6-Touch-LCD-4.3 - Waveshare ESP32-P4-WIFI6-Touch-LCD-7B - Waveshare ESP32-P4-WIFI6-Touch-LCD-3.4C - Waveshare ESP32-P4-WIFI6-Touch-LCD-4C diff --git a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/config.h b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/config.h index a75e523..057f3d5 100644 --- a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/config.h +++ b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/config.h @@ -29,6 +29,13 @@ #define DISPLAY_BACKLIGHT_PIN GPIO_NUM_26 #define DISPLAY_BACKLIGHT_OUTPUT_INVERT true #define LCD_MIPI_DSI_LANE_BITRATE_MBPS (480) +#elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3 +#define DISPLAY_WIDTH (480) +#define DISPLAY_HEIGHT (800) +#define PIN_NUM_LCD_RST GPIO_NUM_27 +#define DISPLAY_BACKLIGHT_PIN GPIO_NUM_26 +#define DISPLAY_BACKLIGHT_OUTPUT_INVERT true +#define LCD_MIPI_DSI_LANE_BITRATE_MBPS (500) #elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B #define DISPLAY_WIDTH (1024) #define DISPLAY_HEIGHT (600) diff --git a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/config.json b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/config.json index 750fe86..971934a 100644 --- a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/config.json +++ b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/config.json @@ -16,6 +16,20 @@ "CONFIG_XIAOZHI_ENABLE_CAMERA_ENDIANNESS_SWAP=y" ] }, + { + "name": "esp32-p4-wifi6-touch-lcd-4.3", + "sdkconfig_append": [ + "CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=0", + "CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH=y", + "CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3=y", + "CONFIG_USE_WECHAT_MESSAGE_STYLE=n", + "CONFIG_USE_DEVICE_AEC=y", + "CONFIG_CAMERA_OV5647=y", + "CONFIG_CAMERA_OV5647_AUTO_DETECT_MIPI_INTERFACE_SENSOR=y", + "CONFIG_CAMERA_OV5647_MIPI_RAW8_800X800_50FPS=y", + "CONFIG_XIAOZHI_ENABLE_CAMERA_ENDIANNESS_SWAP=y" + ] + }, { "name": "esp32-p4-wifi6-touch-lcd-7b", "sdkconfig_append": [ diff --git a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/esp32-p4-wifi6-touch-lcd.cc b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/esp32-p4-wifi6-touch-lcd.cc index 3993585..556fefa 100644 --- a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/esp32-p4-wifi6-touch-lcd.cc +++ b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/esp32-p4-wifi6-touch-lcd.cc @@ -15,6 +15,8 @@ #if CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B #include "esp_lcd_st7703.h" +#elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3 +#include "esp_lcd_st7701.h" #elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B #include "esp_lcd_ek79007.h" #elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C || CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C \ @@ -136,6 +138,46 @@ private: .vendor_config = &vendor_config, }; esp_lcd_new_panel_st7703(io, &lcd_dev_config, &disp_panel); +#elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3 + esp_lcd_dpi_panel_config_t dpi_config = { + .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, + .dpi_clock_freq_mhz = 30, + .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB565, + .num_fbs = 1, + .video_timing = { + .h_size = 480, + .v_size = 800, + .hsync_pulse_width = 12, + .hsync_back_porch = 42, + .hsync_front_porch = 42, + .vsync_pulse_width = 8, + .vsync_back_porch = 2, + .vsync_front_porch = 60, + }, + .flags = { + .use_dma2d = true, + }, + }; + st7701_vendor_config_t vendor_config = { + .init_cmds = vendor_specific_init_default, + .init_cmds_size = sizeof(vendor_specific_init_default) / sizeof(st7701_lcd_init_cmd_t), + .mipi_config = { + .dsi_bus = mipi_dsi_bus, + .dpi_config = &dpi_config, + }, + .flags = { + .use_mipi_interface = 1, + }, + + }; + + const esp_lcd_panel_dev_config_t lcd_dev_config = { + .reset_gpio_num = PIN_NUM_LCD_RST, + .rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB, + .bits_per_pixel = 16, + .vendor_config = &vendor_config, + }; + esp_lcd_new_panel_st7701(io, &lcd_dev_config, &disp_panel); #elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B esp_lcd_dpi_panel_config_t dpi_config = { .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, diff --git a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/lcd_init_cmds.h b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/lcd_init_cmds.h index ae01f27..38b0f31 100644 --- a/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/lcd_init_cmds.h +++ b/main/boards/waveshare/esp32-p4-wifi6-touch-lcd/lcd_init_cmds.h @@ -1,5 +1,56 @@ #ifdef CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B // Leave it blank +#elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3 +static const st7701_lcd_init_cmd_t vendor_specific_init_default[] = { + {0xFF, (uint8_t[]){0x77, 0x01, 0x00, 0x00, 0x13}, 5, 0}, + {0xEF, (uint8_t[]){0x08}, 1, 0}, + {0xFF, (uint8_t[]){0x77, 0x01, 0x00, 0x00, 0x10}, 5, 0}, + {0xC0, (uint8_t[]){0x63, 0x00}, 2, 0}, + {0xC1, (uint8_t[]){0x0D, 0x02}, 2, 0}, + {0xC2, (uint8_t[]){0x17, 0x08}, 2, 0}, + {0xCC, (uint8_t[]){0x10}, 1, 0}, + {0xB0, (uint8_t[]){0x40, 0xC9, 0x94, 0x0E, 0x10, 0x05, 0x0B, 0x09, 0x08, 0x26, 0x04, 0x52, 0x10, 0x69, 0x6B, 0x69}, 16, 0}, + + {0xB1, (uint8_t[]){0x40, 0xD2, 0x98, 0x0C, 0x92, 0x07, 0x09, 0x08, 0x07, 0x25, 0x02, 0x0E, 0x0C, 0x6E, 0x78, 0x55}, 16, 0}, + + {0xFF, (uint8_t[]){0x77, 0x01, 0x00, 0x00, 0x11}, 5, 0}, + {0xB0, (uint8_t[]){0x5D}, 1, 0}, + {0xB1, (uint8_t[]){0x4E}, 1, 0}, + {0xB2, (uint8_t[]){0x87}, 1, 0}, + {0xB3, (uint8_t[]){0x80}, 1, 0}, + {0xB5, (uint8_t[]){0x4E}, 1, 0}, + {0xB7, (uint8_t[]){0x85}, 1, 0}, + {0xB8, (uint8_t[]){0x21}, 1, 0}, + {0xB9, (uint8_t[]){0x10, 0x1F}, 2, 0}, + {0xBB, (uint8_t[]){0x03}, 1, 0}, + {0xBC, (uint8_t[]){0x00}, 1, 0}, + + {0xC1, (uint8_t[]){0x78}, 1, 0}, + {0xC2, (uint8_t[]){0x78}, 1, 0}, + {0xD0, (uint8_t[]){0x88}, 1, 0}, + {0xE0, (uint8_t[]){0x00, 0x3A, 0x02}, 3, 0}, + {0xE1, (uint8_t[]){0x04, 0xA0, 0x00, 0xA0, 0x05, 0xA0, 0x00, 0xA0, 0x00, 0x40, 0x40}, 11, 0}, + + {0xE2, (uint8_t[]){0x30, 0x00, 0x40, 0x40, 0x32, 0xA0, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0xA0, 0x00}, 13, 0}, + + {0xE3, (uint8_t[]){0x00, 0x00, 0x33, 0x33}, 4, 0}, + {0xE4, (uint8_t[]){0x44, 0x44}, 2, 0}, + {0xE5, (uint8_t[]){0x09, 0x2E, 0xA0, 0xA0, 0x0B, 0x30, 0xA0, 0xA0, 0x05, 0x2A, 0xA0, 0xA0, 0x07, 0x2C, 0xA0, 0xA0}, 16, 0}, + + {0xE6, (uint8_t[]){0x00, 0x00, 0x33, 0x33}, 4, 0}, + {0xE7, (uint8_t[]){0x44, 0x44}, 2, 0}, + {0xE8, (uint8_t[]){0x08, 0x2D, 0xA0, 0xA0, 0x0A, 0x2F, 0xA0, 0xA0, 0x04, 0x29, 0xA0, 0xA0, 0x06, 0x2B, 0xA0, 0xA0}, 16, 0}, + + {0xEB, (uint8_t[]){0x00, 0x00, 0x4E, 0x4E, 0x00, 0x00, 0x00}, 7, 0}, + {0xEC, (uint8_t[]){0x08, 0x01}, 2, 0}, + + {0xED, (uint8_t[]){0xB0, 0x2B, 0x98, 0xA4, 0x56, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x65, 0x4A, 0x89, 0xB2, 0x0B}, 16, 0}, + + {0xEF, (uint8_t[]){0x08, 0x08, 0x08, 0x45, 0x3F, 0x54}, 6, 0}, + {0xFF, (uint8_t[]){0x77, 0x01, 0x00, 0x00, 0x00}, 5, 0}, + {0x11, (uint8_t[]){0x00}, 0, 120}, + {0x29, (uint8_t[]){0x00}, 0, 0}, +}; #elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B // Leave it blank #elif CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C