New boards Wishlist
Elecrow 7" ESP32-P4 (DHE04107D-1 V1.0)
CrowPanel Advanced 7" ESP32-P4: notes for official support
Elecrow CrowPanel Advanced 7" (ESP32-P4, board revision V1.0) runs Tessera with a custom hardware section. It is stable on app 0.4.86 / firmware 0.54.0 / ESPHome 2026.9.0. Below is what a board file would need, plus the install steps I tested from factory firmware.
Hardware
| Part | Detail |
|---|---|
| SoC | ESP32-P4 rev 1.3 (engineering_sample: true), 360 MHz, 16 MB flash, hex PSRAM 200 MHz |
| Panel | 1024 x 600 MIPI-DSI, EK79007. ESPHome built-in model: WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-7B works as is; reset GPIO41 |
| LDO | channel 3 at 2.5 V (DSI PHY), channel 4 at 2.5 V |
| Touch | GT911 on I2C SDA GPIO45 / SCL GPIO46, reset GPIO40, interrupt GPIO42 |
| Backlight | LEDC PWM on GPIO31 |
| Wi-Fi | ESP32-C6 over SDIO, 1-bit bus: CLK GPIO18, CMD GPIO19, D0 GPIO14, D1 GPIO15, reset GPIO32 (active high) |
| Unused so far | AHT20 at 0x38 on the touch I2C bus, LED on GPIO48 |
Pins come from Elecrow's ESPHome example (example/V1.0/ESPHome/Code/advance-p4-7-inch.yaml in their repo), with one correction: see below.
The SDIO bus width
Elecrow's ESPHome example declares a 4-bit SDIO bus (D2 GPIO16, D3 GPIO17). With that, the screen boots and joins Wi-Fi, then the loop task gets stuck retrying writes and the task watchdog reboots it about every 40 seconds:
H_SDIO_DRV: sdio_get_tx_buffer_num: err: 265
sdmmc_io: sdmmc_io_rw_extended: sdmmc_send_cmd returned 0x109
task_wdt: Task watchdog got triggered ... loopTask
Elecrow's own C6 update tool (host_performs_slave_ota) uses CONFIG_ESP_HOSTED_SDIO_1_BIT_BUS=y with CMD/CLK/D0/D1 only. With bus_width: 1 there are zero CRC errors. The ESPHome default of 40 MHz is fine; lowering it to 20 MHz did not help on 4-bit.
C6 firmware
- Elecrow's factory P4 firmware uses ESP-Hosted host 2.7.0.
- Elecrow's published C6 image (firmware upgrade guide folder, "V2.12.3") has 2.12.3 in its app header.
- ESPHome 2026.9 builds host 2.12.12.
With C6 2.12.3 and the 1-bit bus, the screen worked without errors. I added update: platform: esp32_hosted (embedded, ESPHome's prebuilt network_adapter_esp32c6.bin 2.12.12, sha256 bad97ce8...b6c12db), and the HA update entity took the C6 to 2.12.12 in under a minute. A board file could ship this update entity, so users with older C6 firmware can update from HA.
From a much older C6 (2.3.0) the same update works, but the final activate RPC returns ESP_ERR_NOT_SUPPORTED. The image is still applied on the next C6 reset.
Suggested board section
Modelled on guition-jc1060p470.yaml plus hardware/esp32p4-c6.yaml. I borrowed BOARD_ID: jc1060p470 (same 1024 x 600 glass, 4 x 4 grid), and the editor and grid behave normally. An own board ID would only need the catalog entry.
substitutions:
BOARD_ID: "jc1060p470" # borrowed; same glass
PANEL_W: "1024"
PANEL_H: "600"
DISPLAY_DPI: "169.548"
GRID_COLS: "4"
GRID_ROWS: "4"
GRID_COLS_PORTRAIT: "2"
GRID_ROWS_PORTRAIT: "7"
SCREEN_MAX_TILES: "256"
SCREEN_MAX_PAGES: "16"
SCREEN_MAX_BAR_ITEMS: "12"
LVGL_BUFFER_SIZE: "50%"
esp32:
variant: esp32p4
engineering_sample: true
cpu_frequency: 360MHz
flash_size: 16MB
framework:
type: esp-idf
advanced:
execute_from_psram: true
sdkconfig_options:
CONFIG_ESP_HOSTED_USE_MEMPOOL: "n"
CONFIG_ESP_HOSTED_DFLT_TASK_FROM_SPIRAM: "y"
CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS: "1"
psram:
mode: hex
speed: 200MHz
esp_ldo:
- {channel: 3, id: dsi_phy_enable, voltage: 2.5V, adjustable: true}
- {channel: 4, voltage: 2.5V}
esp32_hosted:
variant: esp32c6
reset_pin: GPIO32
active_high: true
clk_pin: GPIO18
cmd_pin: GPIO19
d0_pin: GPIO14
d1_pin: GPIO15
bus_width: 1
logger:
tx_buffer_size: 2048
hardware_uart: UART0
i2c:
id: touch_bus
sda: GPIO45
scl: GPIO46
frequency: 400kHz
output:
- {platform: ledc, pin: GPIO31, id: gpio_backlight_pwm}
display:
- platform: mipi_dsi
id: my_display
model: WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-7B
reset_pin: GPIO41
update_interval: never
auto_clear_enabled: false
color_order: RGB
dimensions: {width: 1024, height: 600}
touchscreen:
- platform: gt911
id: ts_touch
i2c_id: touch_bus
display: my_display
update_interval: 20ms
reset_pin: GPIO40
interrupt_pin: GPIO42
update:
- platform: esp32_hosted
id: c6_update
name: "Wi-Fi coprocessor firmware"
type: embedded
path: crowpanel-c6-2.12.12.bin
sha256: bad97ce81e7fcf5f3365898f633b80941ae863db9c754d87a78f89c8f61f2e94
Packages used from the release: core, hardware/esp-idf, looks/standard, features/capacitive-touch, backlight, camera, self-test, snapshot, hotspot, plus the smart_display external component.
Tested
- Display, touch, dimming/standby, and Wake and Sleep from HA
- OTA for the screen, and the C6 update from HA
- Tessera auto-pairs and allows actions once the link is stable
- About 490 KB internal heap and 26 MB PSRAM free with 37 tiles over 5 pages
- Not confirmed yet: camera tiles, portrait, the AHT20, audio, SD card
Install from scratch (tested from factory firmware)
- In
/config/esphome, create:crowpanel-p4.yaml: a normal Tessera screen profile (name,apikey, OTA password, Wi-Fi secrets, hotspot) whosepackages:lists the release files above, plus the board section above. The complete file is in the longer write-up.crowpanel-p4.local.yaml, containing{}.crowpanel-c6-2.12.12.bin, from https://esphome.github.io/esp-hosted-firmware/v2.12.12/network_adapter_esp32c6.bin
- Connect the board's UART USB-C port to the HA machine.
- In Tessera, open Firmware & USB and install
crowpanel-p4.yamlover USB. The first build on a Pi takes about 30 minutes. - Tessera pairs the screen and allows actions by itself.
- In HA, install the "Wi-Fi coprocessor firmware" update if one is offered.
- Add tiles in the editor. Later updates go over Wi-Fi.
Back to stock: erase the flash, then flash Elecrow's factory_firmware/V1.0 images at 0x2000 (bootloader), 0x8000 (partition table), 0x10000 (app) and 0xb10000 (storage).
Discussion 0
Add a commentStart the conversation
Share an example, ask a question or explain how you would use this.