-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Added Waveshare ESP32-P4-WIFI6-Touch-LCD-7B third party board #1243
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+335
−8
Merged
Changes from 3 commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
c41c171
Modify the MIPILCDDISPLAY class
Y1hsiaochunnn 7020cd5
Added Waveshare ESP32-P4-WIFI6-Touch-LCD-7B third party board
Y1hsiaochunnn 3263852
Add config,json for Waveshare ESP32-P4 series boards
Y1hsiaochunnn 072ebcc
Fix some errors
Y1hsiaochunnn File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| { | ||
| "target": "esp32p4", | ||
| "builds": [ | ||
| { | ||
| "name": "waveshare-p4-nano-10.1-a", | ||
| "sdkconfig_append": [ | ||
| "CONFIG_USE_WECHAT_MESSAGE_STYLE=y", | ||
| "CONFIG_USE_ESP_WAKE_WORD=y", | ||
| "CONFIG_LCD_TYPE_800_1280_10_1_INCH_A=y" | ||
| ] | ||
| } | ||
| ] | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| { | ||
| "target": "esp32p4", | ||
| "builds": [ | ||
| { | ||
| "name": "waveshare-p4-wifi6-touch-lcd-4b", | ||
| "sdkconfig_append": [ | ||
| "CONFIG_USE_WECHAT_MESSAGE_STYLE=n", | ||
| "CONFIG_USE_ESP_WAKE_WORD=y", | ||
Y1hsiaochunnn marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| "CONFIG_USE_DEVICE_AEC=y" | ||
| ] | ||
| } | ||
| ] | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| # Waveshare ESP32-P4-WIFI6-Touch-LCD-7B | ||
|
|
||
|
|
||
| [ESP32-P4-WIFI6-Touch-LCD-7B](https://www.waveshare.com/esp32-p4-wifi6-touch-lcd-7b.htm) is waveshare electronics designed an intelligent 86 box based on ESP32-P4 module equipped with a 1024*600 IPS capacitive touch screen | ||
|
|
||
|
|
||
| ## Configuration | ||
|
|
||
| Configuration in `menuconfig`. | ||
|
|
||
| Selection Board Type `Xiaozhi Assistant --> Board Type` | ||
| - Waveshare ESP32-P4-WIFI6-Touch-LCD-7B |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| #ifndef _BOARD_CONFIG_H_ | ||
| #define _BOARD_CONFIG_H_ | ||
|
|
||
| #include <driver/gpio.h> | ||
|
|
||
| #define AUDIO_INPUT_SAMPLE_RATE 24000 | ||
| #define AUDIO_OUTPUT_SAMPLE_RATE 24000 | ||
|
|
||
| #define AUDIO_INPUT_REFERENCE true | ||
|
|
||
| #define AUDIO_I2S_GPIO_MCLK GPIO_NUM_13 | ||
| #define AUDIO_I2S_GPIO_WS GPIO_NUM_10 | ||
| #define AUDIO_I2S_GPIO_BCLK GPIO_NUM_12 | ||
| #define AUDIO_I2S_GPIO_DIN GPIO_NUM_11 | ||
| #define AUDIO_I2S_GPIO_DOUT GPIO_NUM_9 | ||
|
|
||
| #define AUDIO_CODEC_PA_PIN GPIO_NUM_53 | ||
| #define AUDIO_CODEC_I2C_SDA_PIN GPIO_NUM_7 | ||
| #define AUDIO_CODEC_I2C_SCL_PIN GPIO_NUM_8 | ||
| #define AUDIO_CODEC_ES8311_ADDR ES8311_CODEC_DEFAULT_ADDR | ||
| #define AUDIO_CODEC_ES7210_ADDR ES7210_CODEC_DEFAULT_ADDR | ||
|
|
||
| #define BOOT_BUTTON_GPIO GPIO_NUM_35 | ||
|
|
||
| #define DISPLAY_WIDTH 1024 | ||
| #define DISPLAY_HEIGHT 600 | ||
|
|
||
| #define LCD_BIT_PER_PIXEL (16) | ||
| #define PIN_NUM_LCD_RST GPIO_NUM_33 | ||
|
|
||
| #define DELAY_TIME_MS (3000) | ||
| #define LCD_MIPI_DSI_LANE_NUM (2) // 2 data lanes | ||
|
|
||
| #define MIPI_DSI_PHY_PWR_LDO_CHAN (3) | ||
| #define MIPI_DSI_PHY_PWR_LDO_VOLTAGE_MV (2500) | ||
|
|
||
| #define DISPLAY_SWAP_XY false | ||
| #define DISPLAY_MIRROR_X false | ||
| #define DISPLAY_MIRROR_Y false | ||
|
|
||
| #define DISPLAY_OFFSET_X 0 | ||
| #define DISPLAY_OFFSET_Y 0 | ||
|
|
||
| #define DISPLAY_BACKLIGHT_PIN GPIO_NUM_32 | ||
| #define DISPLAY_BACKLIGHT_OUTPUT_INVERT true | ||
|
|
||
| #endif // _BOARD_CONFIG_H_ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| { | ||
| "target": "esp32p4", | ||
| "builds": [ | ||
| { | ||
| "name": "waveshare-p4-wifi6-touch-lcd-7b", | ||
| "sdkconfig_append": [ | ||
| "CONFIG_USE_WECHAT_MESSAGE_STYLE=n", | ||
| "CONFIG_USE_ESP_WAKE_WORD=y", | ||
Y1hsiaochunnn marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| "CONFIG_USE_DEVICE_AEC=y" | ||
| ] | ||
| } | ||
| ] | ||
| } | ||
204 changes: 204 additions & 0 deletions
204
main/boards/waveshare-p4-wifi6-touch-lcd-7b/esp32-p4-wifi6-touch-lcd-7b.cc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,204 @@ | ||
| #include "wifi_board.h" | ||
| #include "codecs/box_audio_codec.h" | ||
| #include "application.h" | ||
| #include "display/lcd_display.h" | ||
| // #include "display/no_display.h" | ||
| #include "button.h" | ||
| #include "config.h" | ||
|
|
||
| #include "esp_lcd_panel_ops.h" | ||
| #include "esp_lcd_mipi_dsi.h" | ||
| #include "esp_ldo_regulator.h" | ||
|
|
||
| #include "esp_lcd_ek79007.h" | ||
|
|
||
| #include <wifi_station.h> | ||
| #include <esp_log.h> | ||
| #include <driver/i2c_master.h> | ||
| #include <esp_lvgl_port.h> | ||
| #include "esp_lcd_touch_gt911.h" | ||
| #define TAG "WaveshareEsp32p47b" | ||
|
|
||
| class WaveshareEsp32p47b : public WifiBoard { | ||
| private: | ||
| i2c_master_bus_handle_t i2c_bus_; | ||
| Button boot_button_; | ||
| LcdDisplay *display_; | ||
|
|
||
| void InitializeCodecI2c() { | ||
| // Initialize I2C peripheral | ||
| i2c_master_bus_config_t i2c_bus_cfg = { | ||
| .i2c_port = I2C_NUM_1, | ||
| .sda_io_num = AUDIO_CODEC_I2C_SDA_PIN, | ||
| .scl_io_num = AUDIO_CODEC_I2C_SCL_PIN, | ||
| .clk_source = I2C_CLK_SRC_DEFAULT, | ||
| .glitch_ignore_cnt = 7, | ||
| .intr_priority = 0, | ||
| .trans_queue_depth = 0, | ||
| .flags = { | ||
| .enable_internal_pullup = 1, | ||
| }, | ||
| }; | ||
| ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_bus_cfg, &i2c_bus_)); | ||
| } | ||
|
|
||
| static esp_err_t bsp_enable_dsi_phy_power(void) { | ||
| #if MIPI_DSI_PHY_PWR_LDO_CHAN > 0 | ||
| // Turn on the power for MIPI DSI PHY, so it can go from "No Power" state to "Shutdown" state | ||
| static esp_ldo_channel_handle_t phy_pwr_chan = NULL; | ||
| esp_ldo_channel_config_t ldo_cfg = { | ||
| .chan_id = MIPI_DSI_PHY_PWR_LDO_CHAN, | ||
| .voltage_mv = MIPI_DSI_PHY_PWR_LDO_VOLTAGE_MV, | ||
| }; | ||
| esp_ldo_acquire_channel(&ldo_cfg, &phy_pwr_chan); | ||
| ESP_LOGI(TAG, "MIPI DSI PHY Powered on"); | ||
| #endif // BSP_MIPI_DSI_PHY_PWR_LDO_CHAN > 0 | ||
|
|
||
| return ESP_OK; | ||
| } | ||
|
|
||
| void InitializeLCD() { | ||
| bsp_enable_dsi_phy_power(); | ||
| esp_lcd_panel_io_handle_t io = NULL; | ||
| esp_lcd_panel_handle_t disp_panel = NULL; | ||
|
|
||
| esp_lcd_dsi_bus_handle_t mipi_dsi_bus = NULL; | ||
| esp_lcd_dsi_bus_config_t bus_config = { | ||
| .bus_id = 0, | ||
| .num_data_lanes = 2, | ||
| .phy_clk_src = MIPI_DSI_PHY_CLK_SRC_DEFAULT, | ||
| .lane_bit_rate_mbps = 900, | ||
| }; | ||
| esp_lcd_new_dsi_bus(&bus_config, &mipi_dsi_bus); | ||
|
|
||
| ESP_LOGI(TAG, "Install MIPI DSI LCD control panel"); | ||
| // we use DBI interface to send LCD commands and parameters | ||
| esp_lcd_dbi_io_config_t dbi_config = EK79007_PANEL_IO_DBI_CONFIG(); | ||
| esp_lcd_new_panel_io_dbi(mipi_dsi_bus, &dbi_config, &io); | ||
|
|
||
| esp_lcd_dpi_panel_config_t dpi_config = { | ||
| .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, | ||
| .dpi_clock_freq_mhz = 52, | ||
| .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB565, | ||
| .num_fbs = 1, | ||
| .video_timing = { | ||
| .h_size = 1024, | ||
| .v_size = 600, | ||
| .hsync_pulse_width = 10, | ||
| .hsync_back_porch = 160, | ||
| .hsync_front_porch = 160, | ||
| .vsync_pulse_width = 1, | ||
| .vsync_back_porch = 23, | ||
| .vsync_front_porch = 12, | ||
| }, | ||
| .flags = { | ||
| .use_dma2d = true, | ||
| }, | ||
| }; | ||
| ek79007_vendor_config_t vendor_config = { | ||
| .mipi_config = { | ||
| .dsi_bus = mipi_dsi_bus, | ||
| .dpi_config = &dpi_config, | ||
| }, | ||
| }; | ||
|
|
||
| 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_ek79007(io, &lcd_dev_config, &disp_panel); | ||
| esp_lcd_panel_reset(disp_panel); | ||
| esp_lcd_panel_init(disp_panel); | ||
|
|
||
| display_ = new MipiLcdDisplay(io, disp_panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, | ||
| DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); | ||
|
|
||
| lv_display_t *disp = lv_display_get_default(); | ||
| if (disp) { | ||
| lv_disp_set_rotation(disp, LV_DISPLAY_ROTATION_180); | ||
| ESP_LOGI(TAG, "Display rotated 180 degrees"); | ||
| } else { | ||
| ESP_LOGE(TAG, "Failed to get default display for rotation"); | ||
| } | ||
| } | ||
| void InitializeTouch() | ||
| { | ||
| esp_lcd_touch_handle_t tp; | ||
| esp_lcd_touch_config_t tp_cfg = { | ||
| .x_max = DISPLAY_WIDTH, | ||
| .y_max = DISPLAY_HEIGHT, | ||
| .rst_gpio_num = GPIO_NUM_23, | ||
| .int_gpio_num = GPIO_NUM_NC, | ||
| .levels = { | ||
| .reset = 0, | ||
| .interrupt = 0, | ||
| }, | ||
| .flags = { | ||
| .swap_xy = 0, | ||
| .mirror_x = 0, | ||
| .mirror_y = 0, | ||
| }, | ||
| }; | ||
| esp_lcd_panel_io_handle_t tp_io_handle = NULL; | ||
| esp_lcd_panel_io_i2c_config_t tp_io_config = ESP_LCD_TOUCH_IO_I2C_GT911_CONFIG(); | ||
| tp_io_config.scl_speed_hz = 400 * 1000; | ||
| ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c(i2c_bus_, &tp_io_config, &tp_io_handle)); | ||
| ESP_LOGI(TAG, "Initialize touch controller"); | ||
| ESP_ERROR_CHECK(esp_lcd_touch_new_i2c_gt911(tp_io_handle, &tp_cfg, &tp)); | ||
| const lvgl_port_touch_cfg_t touch_cfg = { | ||
| .disp = lv_display_get_default(), | ||
| .handle = tp, | ||
| }; | ||
| lvgl_port_add_touch(&touch_cfg); | ||
| ESP_LOGI(TAG, "Touch panel initialized successfully"); | ||
| } | ||
| void InitializeButtons() { | ||
| boot_button_.OnClick([this]() { | ||
| auto& app = Application::GetInstance(); | ||
| if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { | ||
| ResetWifiConfiguration(); | ||
| } | ||
| app.ToggleChatState(); }); | ||
| } | ||
|
|
||
| public: | ||
| WaveshareEsp32p47b() : | ||
| boot_button_(BOOT_BUTTON_GPIO) { | ||
| InitializeCodecI2c(); | ||
| InitializeLCD(); | ||
| InitializeTouch(); | ||
| InitializeButtons(); | ||
| GetBacklight()->RestoreBrightness(); | ||
| } | ||
|
|
||
| virtual AudioCodec* GetAudioCodec() override { | ||
| static BoxAudioCodec audio_codec( | ||
| i2c_bus_, | ||
| AUDIO_INPUT_SAMPLE_RATE, | ||
| AUDIO_OUTPUT_SAMPLE_RATE, | ||
| AUDIO_I2S_GPIO_MCLK, | ||
| AUDIO_I2S_GPIO_BCLK, | ||
| AUDIO_I2S_GPIO_WS, | ||
| AUDIO_I2S_GPIO_DOUT, | ||
| AUDIO_I2S_GPIO_DIN, | ||
| AUDIO_CODEC_PA_PIN, | ||
| AUDIO_CODEC_ES8311_ADDR, | ||
| AUDIO_CODEC_ES7210_ADDR, | ||
| AUDIO_INPUT_REFERENCE); | ||
| return &audio_codec; | ||
| } | ||
|
|
||
| virtual Display *GetDisplay() override { | ||
| return display_; | ||
| } | ||
|
|
||
| virtual Backlight* GetBacklight() override { | ||
| static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); | ||
| return &backlight; | ||
| } | ||
|
|
||
| }; | ||
|
|
||
| DECLARE_BOARD(WaveshareEsp32p47b); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| { | ||
| "target": "esp32p4", | ||
| "builds": [ | ||
| { | ||
| "name": "waveshare-p4-wifi6-touch-lcd-3.4c", | ||
Y1hsiaochunnn marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| "sdkconfig_append": [ | ||
| "CONFIG_USE_WECHAT_MESSAGE_STYLE=n", | ||
| "CONFIG_USE_ESP_WAKE_WORD=y", | ||
Y1hsiaochunnn marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| "CONFIG_USE_DEVICE_AEC=y", | ||
| "CONFIG_LCD_TYPE_800_800_3_4_INCH=y" | ||
| ] | ||
| }, | ||
| { | ||
| "name": "waveshare-p4-wifi6-touch-lcd-4c", | ||
Y1hsiaochunnn marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| "sdkconfig_append": [ | ||
| "CONFIG_USE_WECHAT_MESSAGE_STYLE=n", | ||
| "CONFIG_USE_ESP_WAKE_WORD=y", | ||
Y1hsiaochunnn marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| "CONFIG_USE_DEVICE_AEC=y", | ||
| "CONFIG_LCD_TYPE_720_720_4_INCH=y" | ||
| ] | ||
| } | ||
| ] | ||
| } | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.