Jc8012p4a1-guition-esp32-p4_esp32-c6

Hello,

I have also tried landscape and didn’t find a way to get it in Landscape.
Another problem: I have the version with battery and tried to get battery reporting running, without success.

I also found another driver version for JC8012P4A1 collected from here (ESP32-P4 development board - #44 by KrX) that also works with rotation (some jd9365 driver) but I’m waiting for an official version to appear. I don’t want to start building a dashboard and after an update see that the video driver is no longer compatible with the new update

sensor:
  - platform: adc
    name: "Battery voltage"
    pin: GPIO52
    update_interval: 30s
    attenuation: 12dB
    samples: 10

Yes, you can get it now. It features a voltage divider circuit, where GPIO52≈1.8V indicates low battery, and GPIO52≈2.43V indicates full charge.

I’m also waiting for the addition of the rotation feature to start building.

I managed to turn it 90 degrees and make it functional, with a combination of several sources.

external_components:

  • source: github://kvj/esphome@jd9365_gsl3680
    refresh: 0s
    components: [gsl3680, jd9365]
    output:
  • platform: ledc
    pin: GPIO23
    id: backlight

light:

  • platform: monochromatic
    name: “brightness”
    output: backlight
    restore_mode: ALWAYS_ON

touchscreen:

  • platform: gsl3680
    id: my_touch
    reset_pin: GPIO22
    interrupt_pin: GPIO21
    transform:
    swap_xy: true
    mirror_y: false

display:

  • platform: jd9365
    reset_pin: GPIO27
    auto_clear_enabled: false
    update_interval: never
    rotation: 90
    id: my_display
2 Likes

Can someone tell me which connector is used for the UART?

Anyone got the camera working with esphome ?

Thank you for sharing the solution, it works perfectly for me!

Huge thanks to everyone who shared their configurations here: your insights were instrumental in helping me finish my Weather Dashboard this week!

I wanted to take the time to share back my project in case it helps or inspires others!

3 Likes

That screen looks amazing! Great work. I am inspired :slight_smile:

I see you have the screen rotated 90 degrees. In my experience this causes performance issues with MIPI-DSI displays. Does it get a little laggy? I am working on a way to use the build in PPA (2D graphics accelerator) to do rotation.

I haven’t compared landscape vs portrait performance, I had no idea rotation was done in software mode right now. I did notice that page animations were choppy so I removed those. Page transitions are relatively fast now. Also, since I don’t have any widgets it’s kind of hard to gauge responsiveness. Using the PPA seems like the way to go with this board though. I’m looking forward to trying that out!

great job! it looks cool and it is cool

Hi, I’m looking for a little help. I’ve been using Guition displays in smaller sizes and decided to try this version, JC8012P4A1. I’ve tried all the configs in this post and on GitHub, and for the most part everything is fine. I’m super happy with the screen quality at such a cheap price range (I’m using it in landscape).

The only issue I have, and wanted to see if anyone else has come across it, is that if I tap the same place on the screen while watching the logs, about 85% of the time I get the same coordinates, but then randomly the other 15% are totally different, sometimes even acting as though I’ve pressed another button.

I’m not sure whether to return it for a replacement to see if I get the same results, or try the same size screen from another manufacturer.

Edit: After some basic calculations, the random coordinates match the positions for portrait mode, suggesting that screen rotation isn’t working correctly.

Zkoušel jsem různou konfiguraci v chip pro mikrofon jc8012p4a1c_i_w_y ES7210 ale jedině kam jsem se dostal je :
Build:Jul 10 2024
rst:0x1 (POWERON),boot:0xf (SPI_FAST_FLASH_BOOT)
SPI mode:DIO, clock div:1
load:0x4ff33ce0,len:0x11dc
load:0x4ff29ed0,len:0xca0
load:0x4ff2cbd0,len:0x3348
entry 0x4ff29ed0

— BIT-BANG PROBUZENÍ ES7210 —
ES7210 nakonfigurován.

Has anyone been able to access the SD card slot to save and read data?

Just added info: https://www.aliexpress.com/s/wiki-ssr/article/esp32-display-panel

Looks awesome! How are you mounting it to the wall?

Anyone who might be "struggling" with this, please take a look at EspControl — No-Code Smart Home Touch Controller
It's using ESPHome but with a lot of features adding to it to allow for no-code creating and managing your (and some other) screens.

Used it on my 10.1" and setup was flawless.

Im looking for the same thing... Trying to interface another ESP32 w/ tx/rx....
I found this for this exact display:

  1. The Main External Hardware UART Header
    Look closely at the silkscreen on the back of the PCB module. There is a dedicated multi-pin physical connector labeled UART or IO / UART.
  • The Pins: It exposes GND, 3V3, TX, and RX.
  • GPIO 37: Dedicated to UART0 RX.
  • GPIO 38: Dedicated to UART0 TX.

but no matter what I try,

[15:09:02.220][I][uart_ui_tx:157]: Display: holding UI cmd 1.00 for UART (550ms

and on the external ESP32

[15:10:16.542][W][uart_rx_probe:248]: rx_ui_cmd: no state yet (no valid frame from display — check TX/RX/GND, pin swap)

So I'm sending the command, but it's not getting to the remote ESP. I had this working perfectly w/ a different (but similar) display. I think its just a matter of figuring out WHERE these GPIO's physically are and what numbers they are...

UPDATE:
mystery solved:

esphome:
  platformio_options:
    build_flags:
      - -D CORE_DEBUG_LEVEL=0         # Disables Espressif low-level framework debug text
      - -D ARDUINO_USB_CDC_ON_BOOT=0

logger:
  baud_rate: 0
  hardware_uart: USB_SERIAL_JTAG #<- NOT UART0!!!!
  level: DEBUG

# Now you can safely define your sensor's UART bus
uart:
  - id: sensor_uart_bus
    tx_pin: GPIO37
    rx_pin: GPIO38
    baud_rate: 9600 

I hope this helps someone else!

On board SD card slot unusable due to GPIO conflicts. Added external SD slot using GPIOs 28-34 via EXTEND2 connector.

Hi, for those who want to start with an ESPhome project here is some code that works on this display, tested on Core version 2026.6.0, Supervisor 2026.05.1, Operating System 17.3, Frontend 20260527.4, ESPHome 2026.5.3.


external_components:
  - source: github://kvj/esphome@jd9365_gsl3680
    refresh: 0s
    components: [gsl3680, jd9365]

esphome:
  name: "10-5"

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

logger:
  hardware_uart: USB_SERIAL_JTAG
  level: DEBUG
  logs:
    lvgl: DEBUG
    display: DEBUG
    app: DEBUG

esp_ldo:
  - channel: 3
    voltage: 2.5V


# Example minimal configuration entry
display:
  - platform: mipi_dsi
    model: JC8012P4A1
    id: my_display
    rotation: 0


esp32_hosted:
  variant: ESP32C6
  reset_pin: 54
  cmd_pin: 19
  clk_pin: 18
  d0_pin: 14
  d1_pin: 15
  d2_pin: 16
  d3_pin: 17
  active_high: true

psram:
  speed: 200MHz

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: "xxxxxxxxxxxx"
  password: "xxxxxxxxxxxxx"

  manual_ip:
    static_ip: 192.168.1.157
    gateway: 192.168.1.1
    subnet: 255.255.255.0  

output:
  # Backlight LED
  - platform: ledc
    pin: GPIO23
    id: GPIO23
    frequency: 100Hz
    min_power: 0.03
    zero_means_zero: true

light:
  - platform: monochromatic
    output: GPIO23
    name: Backlight
    id: backlight
    restore_mode: RESTORE_DEFAULT_ON

i2c:
  - id: i2c_bus
    sda: GPIO7
    scl: GPIO8
    scan: true
    frequency: 400kHz

touchscreen:
  - platform: gsl3680
    id: my_touch
    reset_pin: GPIO22
    interrupt_pin: GPIO21
    transform:
      swap_xy: false
      mirror_x: true

lvgl:
  rotation: 90
  byte_order: little_endian
  pages:
    - id: page_1
      bg_color: 0x0B4721
      pad_all: 0
      widgets:
        - button:
            id: button_0
            x: 90
            y: 140
            width: 250
            height: 115
            bg_color: 0x4F46E5
            border_width: 2
            border_color: 0x39FC03
            radius: 7
            outline_color: 0xE00040
            text_color: 0xFFFFFF
            text_font: montserrat_18
            widgets:
              - label:
                  text: "Button"
                  text_color: 0xFFFFFF

        - switch:
            id: switch_1
            x: 110
            y: 288
            width: 185
            height: 60
            state:
              checked: true
            bg_color: 0x4B5563
            indicator:
              checked:
                bg_color: 0x10B981
            knob:
              bg_color: 0xFFFFFF
              border_color: 0x9CA3AF
              border_width: 1

        - textarea:
            id: text_1
            x: 103
            y: 400
            width: 230
            height: 55
            placeholder_text: "Enter text here"
            bg_color: 0x1F2937
            border_width: 2
            border_color: 0xD8F519
            radius: 8
            text_color: 0xFFFFFF
            text_font: montserrat_20