New boards Wishlist

Elecrow 7" ESP32-P4 (DHE04107D-1 V1.0)

PJBuzzSuggested this wish ·

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)

  1. In /config/esphome, create:
  2. Connect the board's UART USB-C port to the HA machine.
  3. In Tessera, open Firmware & USB and install crowpanel-p4.yaml over USB. The first build on a Pi takes about 30 minutes.
  4. Tessera pairs the screen and allows actions by itself.
  5. In HA, install the "Wi-Fi coprocessor firmware" update if one is offered.
  6. 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).

Hardware testing

We often do not have this board ourselves. Community testing helps establish what actually works. A successful report is evidence for the maintainer to review, not an automatic compatibility claim.

Board details & configuration
Model
Elecrow CrowPanel Advanced 7", ESP32-P4, DHE04107D-1 V1.0
Chip, RAM and flash
ESP32-P4 rev 1.3 (engineering_sample: true), 360 MHz, 16 MB flash, hex PSRAM 200 MHz
Display and touch
1024 x 600 MIPI-DSI, EK79007
Already tried
The board runs Tessera 0.4.86 (firmware 0.54.0, ESPHome 2026.9.0) using a custom profile: - Tessera's release packages (core, standard look, capacitive touch, backlight, camera, hotspot). - My own hardware section, based on Elecrow's ESPHome example. It uses ESPHome's built-in WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-7B panel model (EK79007, 1024x600), GT911 touch, backlight on GPIO31, and the ESP32-C6 over SDIO. - The jc1060p470 board ID, which has the same glass. What works: display, touch, the 4x4 grid and editor, dimming and standby, and the Wake and Sleep buttons. Tessera adds the screen to HA by itself, firmware updates go over Wi-Fi, and the C6 firmware updates from HA (2.12.3 to 2.12.12). It has been stable since the fix below. I've also tested it from scratch: factory firmware first, then the full install. What failed, and the fix: Elecrow's ESPHome example uses a 4-bit SDIO bus for the C6. With that, the screen joins Wi-Fi, then reboots about every 40 seconds with sdmmc_send_cmd returned 0x109 CRC errors and a loopTask watchdog reset. Only CMD, CLK, D0 and D1 are wired (Elecrow's own C6 update tool uses 1-bit), so bus_width: 1 fixes it completely. Very old C6 firmware (2.3.0) also caused trouble; updating it with ESPHome's esp32_hosted update fixed that. Not tested yet: camera tiles, portrait orientation, the onboard AHT20 sensor, audio, SD card.
Configuration status
working
View shared configuration
# Elecrow CrowPanel Advanced 7" ESP32-P4 (board V1.0) on Tessera - working screen profile
# Tested: Tessera app 0.4.86 / screen firmware 0.54.0 / ESPHome 2026.9.0, installed from factory firmware.
# Hardware section adapted from Elecrow's ESPHome example (example/V1.0/ESPHome/Code/advance-p4-7-inch.yaml),
# with one fix: the C6 SDIO link is 1-bit (bus_width: 1). Elecrow's 4-bit setting gives sdmmc 0x109 CRC errors
# and a loopTask watchdog reboot about every 40 s.
# Needs next to it: crowpanel-p4.local.yaml containing {} and crowpanel-c6-2.12.12.bin from
# https://esphome.github.io/esp-hosted-firmware/v2.12.12/network_adapter_esp32c6.bin
# BOARD_ID borrows jc1060p470 (same 1024x600 glass).
substitutions:
  DEVICE_NAME: "crowpanel-p4"
  DEVICE_FRIENDLY_NAME: "Kitchen Panel"
  LANGUAGE: "en-GB"
  GITHUB_REF: "screens-v0.4.86"
  FONT_DIR: "https://raw.githubusercontent.com/MaxGramser/homeassistant_espscreen/${GITHUB_REF}/fonts"
  BOARD_ID: "jc1060p470"
  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%"

esphome:
  name: "crowpanel-p4"
  friendly_name: "Kitchen Panel"

packages:
  tessera:
    url: https://github.com/MaxGramser/homeassistant_espscreen
    ref: screens-v0.4.86
    refresh: 0s
    files:
      - packages/core.yaml
      - packages/hardware/esp-idf.yaml
      - packages/looks/standard.yaml
      - packages/features/capacitive-touch.yaml
      - packages/features/backlight.yaml
      - packages/features/camera.yaml
      - packages/features/self-test.yaml
      - packages/features/snapshot.yaml
      - packages/features/hotspot.yaml
  local_overrides: !include crowpanel-p4.local.yaml

external_components:
  - source:
      type: git
      url: https://github.com/MaxGramser/homeassistant_espscreen.git
      ref: ${GITHUB_REF}
      path: components
    refresh: 0s
    components: [smart_display]

# ---- CrowPanel hardware ----
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
  cmd_pin: GPIO19
  clk_pin: GPIO18
  d0_pin: GPIO14
  d1_pin: GPIO15
  bus_width: 1          # only CMD/CLK/D0/D1 are wired to the C6
  active_high: true

logger:
  tx_buffer_size: 2048
  hardware_uart: UART0

i2c:
  id: touch_bus
  sda: GPIO45
  scl: GPIO46
  frequency: 400kHz
  scan: true

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

# Updates the C6 Wi-Fi co-processor firmware (ESP-Hosted) from Home Assistant
update:
  - platform: esp32_hosted
    id: c6_update
    name: "Wi-Fi coprocessor firmware"
    type: embedded
    path: crowpanel-c6-2.12.12.bin
    sha256: bad97ce81e7fcf5f3365898f633b80941ae863db9c754d87a78f89c8f61f2e94
# ----------------------------

api:
  encryption:
    key: !secret crowpanel_api_key
ota:
  - platform: esphome
    password: !secret crowpanel_ota_password
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  power_save_mode: none
  ap:
    ssid: "Tessera Kitchen Panel"
    password: !secret crowpanel_ap_password
captive_portal:

1 owner has volunteered to test.

Sign in to volunteer

Discussion 0

Add a comment

Start the conversation

Share an example, ask a question or explain how you would use this.

Add your thoughts, a screenshot or a useful link.

Markdown & basic HTML
Paste or drop images · URLs on their own line become previews0 / 10,000
Create your account to join in

We need a verified email address to reach you about your contribution. Your address stays private.

Continue with GitHub

Your draft stays in this tab. Return here after verification.