New boards Wishlist

Add Elecrow CrowPanel Basic 7-inch support (DIS08070H, PCB V3.0)

adityapattiyeriSuggested this wish ·

Please add the Elecrow CrowPanel Basic 7-inch DIS08070H PCB V3.0 to Tessera’s board catalog and installer. I own this revision and have a working custom Tessera build. It makes a good 4 × 4 Home Assistant panel at 800 × 480.

This is the Basic model. Wishlist #238 covers the Advance DIS02170A, which uses different hardware.

On my V3.0 board, the GT911 works over I²C at 50 kHz on GPIO19 (SDA) and GPIO20 (SCL). The USB Serial/JTAG PHY pads and pull-up have to be released before I²C starts. The board’s USB-to-UART bridge still works for flashing and logs. The GPIO2 PWM backlight works at 1220 Hz.

The board has 4 MB flash. A still-image build with the New music plugin fits the two 1,984 KiB OTA slots by using the BMP decoder and 1-bit font antialiasing. Camera previews work as refreshed snapshots. Testing so far covers PCB V3.0.

The file has been fully generated using chatGPT, but fully tested on real hardware

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 Basic 7.0-inch HMI, DIS08070H, PCB V3.0
Chip, RAM and flash
ESP32-S3, 8 MB octal PSRAM, 4 MB flash on the tested V3.0 unit
Display and touch
7-inch 800 × 480 parallel RGB TFT (RGB565), Goodix GT911 capacitive touch
Already tried
A custom Tessera 0.60.0 build (Screen Manager 0.4.97, ESPHome 2026.9.0) works well on my physical V3.0 board. Confirmed display and touch, dimmable backlight, Home Assistant pairing and layout delivery, Wi-Fi OTA, and camera snapshots on a tile and full-screen. New music also loads as an installed firmware plugin.
Configuration status
working
View shared configuration
# Hardware fragment from the tested Tessera profile. Include it with the Tessera core.
# The crowpanel_touch_bus component is shown in the comments below.
substitutions:
  PANEL_W: "800"
  PANEL_H: "480"
  BACKLIGHT_FREQUENCY: "1220Hz"

# RGB panel, backlight and touch wiring for the DIS08070H V3.0.
esp32:
  flash_size: 4MB
  framework:
    sdkconfig_options:
      # GPIO19 and GPIO20 are wired to I2C. USB-C uses the board's separate UART0 bridge.
      CONFIG_ESP_CONSOLE_SECONDARY_NONE: "y"
      CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG: "n"

logger:
  hardware_uart: UART0

i2c:
  id: touch_bus
  sda: GPIO19
  scl: GPIO20
  frequency: 50kHz
  scan: false

# The USB-C connector is wired to UART0 through a bridge. GPIO19 and GPIO20 are the touch I2C bus.
crowpanel_touch_bus:

# Let the GT911 leave reset through the board's pull-up and poll it as in the original profile.
touchscreen:
  - platform: gt911
    id: ts_touch
    i2c_id: touch_bus
    display: my_display
    update_interval: 50ms

output:
  - platform: ledc
    pin: GPIO2
    id: gpio_backlight_pwm
    frequency: ${BACKLIGHT_FREQUENCY}

display:
  - platform: mipi_rgb
    model: RPI
    id: my_display
    dimensions:
      width: ${PANEL_W}
      height: ${PANEL_H}
    color_order: RGB
    invert_colors: false
    pclk_frequency: 15MHz
    pclk_inverted: true
    de_pin: GPIO41
    hsync_pin: GPIO39
    vsync_pin: GPIO40
    pclk_pin:
      number: GPIO0
      ignore_strapping_warning: true
    hsync_front_porch: 40
    hsync_pulse_width: 48
    hsync_back_porch: 13
    vsync_front_porch: 1
    vsync_pulse_width: 31
    vsync_back_porch: 13
    data_pins:
      red: [GPIO14, GPIO21, GPIO47, GPIO48, GPIO45]
      green:
        - GPIO9
        - number: GPIO46
          ignore_strapping_warning: true
        - number: GPIO3
          ignore_strapping_warning: true
        - GPIO8
        - GPIO16
        - GPIO1
      blue: [GPIO15, GPIO7, GPIO6, GPIO5, GPIO4]
    update_interval: never
    auto_clear_enabled: false

# Local external component: crowpanel_touch_bus/__init__.py
# """Release the USB PHY pins used by the DIS08070H V3.0 touch bus."""
# import esphome.config_validation as cv
# 
# DEPENDENCIES = ["i2c"]
# CONFIG_SCHEMA = cv.Schema({})

# Local external component: crowpanel_touch_bus/crowpanel_touch_bus.cpp
# #include "hal/usb_serial_jtag_ll.h"
# #include "soc/io_mux_reg.h"
# #include "soc/usb_serial_jtag_reg.h"
# 
# // Release the ESP32-S3 USB PHY before ESPHome initializes the GPIO19/20 I2C bus.
# // ESP-IDF can leave the USB pull-up and pin mux active after startup.
# // Reference: https://github.com/esphome/esphome/issues/15356
# __attribute__((constructor(101))) static void release_crowpanel_touch_pins() {
#   usb_serial_jtag_ll_phy_enable_pad(false);
#   REG_CLR_BIT(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLUP);
#   PIN_FUNC_SELECT(IO_MUX_GPIO19_REG, PIN_FUNC_GPIO);
#   PIN_FUNC_SELECT(IO_MUX_GPIO20_REG, PIN_FUNC_GPIO);
#   PIN_INPUT_ENABLE(IO_MUX_GPIO19_REG);
#   PIN_INPUT_ENABLE(IO_MUX_GPIO20_REG);
#   REG_SET_BIT(IO_MUX_GPIO19_REG, FUN_PU);
#   REG_SET_BIT(IO_MUX_GPIO20_REG, FUN_PU);
#   REG_CLR_BIT(IO_MUX_GPIO19_REG, FUN_PD);
#   REG_CLR_BIT(IO_MUX_GPIO20_REG, FUN_PD);
# }

0 owners have 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.