ESP32-P4-NANO + WAVESHARE_10.1"_800x1280_DSI

Hey Guys

I am trying to get my ESP32-P4-NANO + WAVESHARE_10.1"_800x1280_DSI running in ESPHOME

so i got the firmware on it and also ESPHOME in HA recognize it as online, but it doesnt work smoothly as my esp32-s3 display

1.) i get this errors in the log

2.) i also doesnt see anything on the display

maybe i configed something wrong with the backlight or so, but i searched the whole internet for this combo but it looks to be to new, so i guess not many people have got this running

3.) i also constant pinged my esp-p4 and it looks like it reboots every few minutes because its not pingable now and then

4.) here is my current code i tried with

api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"




# Esphome
esphome:
  name: hh-esphome-esp32-p4-display-1
  friendly_name: HH_ESPHOME_ESP32-P4_DISPLAY_1

# Wifi Settings via Secret File
wifi:
  use_address: 192.168.1.136

  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: !secret wifi_ssid_backup
    password: !secret wifi_password_backup

# Logging
logger:
  level: debug

# esp32 Settings
esp32:
  board: esp32-p4-evboard
  flash_size: 16MB
  cpu_frequency: 400MHz
  framework:
    type: esp-idf
    advanced:
      enable_idf_experimental_features: yes

##### CODE #####

substitutions:
  name: waveshare-p4-10-1
  friendly_name: Waveshare P4 10.1

external_components:
# For the backlight
  - source: github://pr#9879
    components: [mipi_dsi]
    refresh: 1h


psram:
  speed: 200MHz


esp_ldo:
  - channel: 3
    voltage: 2.5V

esp32_hosted:
  variant: ESP32C6
  reset_pin: GPIO54
  cmd_pin: GPIO19
  clk_pin: GPIO18
  d0_pin: GPIO14
  d1_pin: GPIO15
  d2_pin: GPIO16
  d3_pin: GPIO17
  active_high: true


display:
  - platform: mipi_dsi
    id: my_display
    model: WAVESHARE-P4-NANO-10.1
    rotation: 90
    update_interval: 1s
    lambda: |-
      it.print(0, 0, id(my_font), "Hello World");

font:
  - file: gfonts://Roboto
    id: my_font
    size: 20

i2c:
  sda: GPIO7
  scl: GPIO8
  frequency: 400kHz

light:
  - platform: mipi_dsi
    id: backlight_id
    pwm_register: 0x86
    restore_mode: ALWAYS_ON

maybe we have a person here who has allready solved this, i guess this combo from waveshare will be bought many times, so this would help many people :wink:

thanks up front for your helps guys

use_address: does not do what you think it does. It is specifically for changing IP address of a known device during OTA flashing and should be used only for the flashing process.

Use manual_ip: - eg:

  manual_ip:
    static_ip: 192.168.1.136
    gateway: 192.168.1.1
    subnet: 255.255.255.0

I haven’t look at anything else yet. Try that and see what happens first.

thanks for this infos, but the ip is my smallest probleme :wink:

Really? The screen shot shows connection errors and you haven’t posted any logs, so apart from your description it’s a bit hard to diagnose any other issues…

How are you flashing the device? Can you get logs in text format?

1 Like

Since your backlight component is in PR and still in testing, maybe jump on Discord and see if Clyde is around to answer your issue.

You will need a stable network connection and some text logs first though.

so i got into the discord and searched a little bit arround, i am getting near i guess

# Wifi Settings via Secret File
wifi:
  manual_ip:
    static_ip: 192.168.1.136
    gateway: 192.168.1.1
    subnet: 255.255.255.0

  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: !secret wifi_ssid_backup
    password: !secret wifi_password_backup

# Logging
logger:
  level: debug

# esp32 Settings
esp32:
  board: esp32-p4-evboard
  flash_size: 16MB
  cpu_frequency: 400MHz
  framework:
    type: esp-idf
    advanced:
      enable_idf_experimental_features: yes

# Esphome
esphome:
  name: hh-esphome-esp32-p4-display-1
  friendly_name: HH_ESPHOME_ESP32-P4_DISPLAY_1

  on_boot:
    priority: 850
    then:
      - logger.log: Writing i2c stuff
      - lambda: |-
          id(display_i2c).write_byte(0x95, 0x11);
          id(display_i2c).write_byte(0x95, 0x17);
          id(display_i2c).write_byte(0x96, 0x00);
      - delay: 100ms
      - lambda: |-
          id(display_i2c).write_byte(0x96, 0xFF);

i2c_device:
  - address: 0x45
    id: display_i2c

##### CODE #####

substitutions:
  name: waveshare-p4-10-1
  friendly_name: Waveshare P4 10.1

external_components:
# For the backlight
  - source: github://pr#9879
    components: [mipi_dsi]
    refresh: 1h


psram:
  speed: 200MHz


esp_ldo:
  - channel: 3
    voltage: 2.5V

esp32_hosted:
  variant: ESP32C6
  reset_pin: GPIO54
  cmd_pin: GPIO19
  clk_pin: GPIO18
  d0_pin: GPIO14
  d1_pin: GPIO15
  d2_pin: GPIO16
  d3_pin: GPIO17
  active_high: true

font:
  - file: gfonts://Roboto
    id: roboto_48
    size: 48

display:
  - platform: mipi_dsi
    model: WAVESHARE-P4-NANO-10.1
    rotation: 90

i2c:
  sda: GPIO7
  scl: GPIO8
  frequency: 400kHz

touchscreen:
  - platform: gt911
    id: touchscreen_
    transform:
      swap_xy: true
      mirror_y: true
      mirror_x: false

light:
  - platform: mipi_dsi
    id: backlight_id
    #pwm_register: 0x86
    restore_mode: ALWAYS_ON

lvgl:
  byte_order: little_endian
  disp_bg_color: 0xFFFFFF
  widgets:
    - label:
        id: hello_label
        align: center
        text: "HELLO WORLD"
        text_font: roboto_48
        text_color: 0x000000

but stil nothing showing on the display

but the logs are now very promising

INFO Upload took 2.73 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.1.136 using esphome API
INFO Successfully resolved hh-esphome-esp32-p4-display-1 @ 192.168.1.136 in 0.000s
INFO Trying to connect to hh-esphome-esp32-p4-display-1 @ 192.168.1.136 in the background
INFO Successfully resolved hh-esphome-esp32-p4-display-1 @ 192.168.1.136 in 0.000s
INFO Successfully connected to hh-esphome-esp32-p4-display-1 @ 192.168.1.136 in 0.004s
INFO Successful handshake with hh-esphome-esp32-p4-display-1 @ 192.168.1.136 in 0.037s
[13:47:13][I][app:200]: ESPHome version 2025.8.2 compiled on Aug 30 2025, 13:46:40
[13:47:13][C][wifi:661]: WiFi:
[13:47:13][C][wifi:444]:   Local MAC: 30:ED:A0:E1:E1:89
[13:47:13][C][wifi:449]:   SSID: [redacted]
[13:47:13][C][wifi:452]:   IP Address: 192.168.1.136
[13:47:13][C][wifi:456]:   BSSID: [redacted]
[13:47:13][C][wifi:456]:   Hostname: 'hh-esphome-esp32-p4-display-1'
[13:47:13][C][wifi:456]:   Signal strength: -58 dB ▂▄▆█
[13:47:13][C][wifi:467]:   Channel: 1
[13:47:13][C][wifi:467]:   Subnet: 255.255.255.0
[13:47:13][C][wifi:467]:   Gateway: 192.168.1.1
[13:47:13][C][wifi:467]:   DNS1: 0.0.0.0
[13:47:13][C][wifi:467]:   DNS2: 0.0.0.0
[13:47:13][C][logger:252]: Logger:
[13:47:13][C][logger:252]:   Max Level: DEBUG
[13:47:13][C][logger:252]:   Initial Level: DEBUG
[13:47:13][C][logger:258]:   Log Baud Rate: 115200
[13:47:13][C][logger:258]:   Hardware UART: USB_SERIAL_JTAG
[13:47:13][C][logger:265]:   Task Log Buffer Size: 768
[13:47:13][C][i2c.idf:081]: I2C Bus:
[13:47:13][C][i2c.idf:082]:   SDA Pin: GPIO7
[13:47:13][C][i2c.idf:082]:   SCL Pin: GPIO8
[13:47:13][C][i2c.idf:082]:   Frequency: 400000 Hz
[13:47:13][C][i2c.idf:092]:   Recovery: bus successfully recovered
[13:47:13][C][i2c.idf:102]: Results from bus scan:
[13:47:13][C][i2c.idf:108]: Found device at address 0x18
[13:47:13][C][i2c.idf:108]: Found device at address 0x45
[13:47:13][C][i2c.idf:108]: Found device at address 0x5D
[13:47:13][C][esp_ldo:024]: ESP LDO Channel 3:
[13:47:13][C][esp_ldo:025]:   Voltage: 2.500000V
[13:47:13][C][esp_ldo:026]:   Adjustable: NO
[13:47:13][C][light:088]: Light 'backlight_id'
[13:47:13][C][light:091]:   Default Transition Length: 0.0s
[13:47:13][C][light:091]:   Gamma Correct: 2.00
[13:47:13][C][i2c_device:012]: I2CDevice
[13:47:13][C][i2c_device:013]:   Address: 0x45
[13:47:13][C][psram:016]: PSRAM:
[13:47:13][C][psram:019]:   Available: YES
[13:47:13][C][psram:021]:   Size: 32768 KB
[13:47:13][C][display.mipi_dsi:347]: MIPI_DSI RGB LCD
[13:47:13][C][display.mipi_dsi:347]:   Model: WAVESHARE-P4-NANO-10.1
[13:47:13][C][display.mipi_dsi:347]:   Width: 1280
[13:47:13][C][display.mipi_dsi:347]:   Height: 800
[13:47:13][C][display.mipi_dsi:347]:   Mirror X: NO
[13:47:13][C][display.mipi_dsi:347]:   Mirror Y: NO
[13:47:13][C][display.mipi_dsi:347]:   Swap X/Y: NO
[13:47:13][C][display.mipi_dsi:347]:   Rotation: 0 degrees
[13:47:13][C][display.mipi_dsi:347]:   DSI Lanes: 2
[13:47:13][C][display.mipi_dsi:347]:   Lane Bit Rate: 1500Mbps
[13:47:13][C][display.mipi_dsi:347]:   HSync Pulse Width: 20
[13:47:13][C][display.mipi_dsi:347]:   HSync Back Porch: 20
[13:47:13][C][display.mipi_dsi:347]:   HSync Front Porch: 40
[13:47:13][C][display.mipi_dsi:347]:   VSync Pulse Width: 4
[13:47:13][C][display.mipi_dsi:347]:   VSync Back Porch: 12
[13:47:13][C][display.mipi_dsi:347]:   VSync Front Porch: 30
[13:47:13][C][display.mipi_dsi:347]:   Buffer Color Depth: 16 bit
[13:47:13][C][display.mipi_dsi:347]:   Display Pixel Mode: 16 bit
[13:47:13][C][display.mipi_dsi:347]:   Color Order: RGB
[13:47:13][C][display.mipi_dsi:347]:   Invert Colors: NO
[13:47:13][C][display.mipi_dsi:347]:   Pixel Clock: 80MHz
[13:47:13][C][gt911.touchscreen:139]: GT911 Touchscreen:
[13:47:13][C][gt911.touchscreen:140]:   Address: 0x5D
[13:47:13][C][lvgl:088]: LVGL:
[13:47:13][C][lvgl:088]:   Display width/height: 800 x 1280
[13:47:13][C][lvgl:088]:   Buffer size: 100%
[13:47:13][C][lvgl:088]:   Rotation: 90
[13:47:13][C][lvgl:088]:   Draw rounding: 2
[13:47:13][C][esphome.ota:075]: Over-The-Air updates:
[13:47:13][C][esphome.ota:075]:   Address: 192.168.1.136:3232
[13:47:13][C][esphome.ota:075]:   Version: 2
[13:47:13][C][esphome.ota:082]:   Password configured
[13:47:13][C][safe_mode:018]: Safe Mode:
[13:47:13][C][safe_mode:019]:   Boot considered successful after 60 seconds
[13:47:13][C][safe_mode:019]:   Invoke after 10 boot attempts
[13:47:13][C][safe_mode:019]:   Remain for 300 seconds
[13:47:13][C][api:205]: Server:
[13:47:13][C][api:205]:   Address: 192.168.1.136:6053
[13:47:13][C][api:210]:   Noise encryption: YES
[13:47:13][C][mdns:124]: mDNS:
[13:47:13][C][mdns:124]:   Hostname: hh-esphome-esp32-p4-display-1
[13:47:59][I][safe_mode:042]: Boot seems successful; resetting boot loop counter
[13:47:59][D][esp32.preferences:142]: Writing 1 items: 0 cached, 1 written, 0 failed

bye the way i just found out that there are more then

one WAVESHARE_10.1”_800x1280_DSI display

i have bought the kit from waveshare

Waveshare ESP32-P4-NANO-KIT-D

the display in this kit should be the modelnumber: 10.1-DSI-TOUCH-A

Anyone gotten POE to work with the somewhat newer small form factor Waveshare POE versions with the POE hat? Also has a single mic using a supported codec (es8311), at least on the S3, may not be a working component yet on the P4. Still, 25 US for the board with POE hat is a heck of a deal, their S3 variant is the same price with no POE hat. Need to join Discord but finally the form factor I’ve been waiting for with a smaller pico version with no Ethernet available.