207 lines
4.8 KiB
YAML
207 lines
4.8 KiB
YAML
# Waveshare ESP32-P4-WIFI6-Touch-LCD-4B — doorbell JPEG viewer (DRAFT)
|
|
# Square 720x720 IPS. Bring this up when the board arrives; the S3 yaml stays as-is.
|
|
#
|
|
# Touch cycles: stream A (default) -> stream B -> off -> stream A ...
|
|
#
|
|
# Notes:
|
|
# - ESPHome has a first-class 4C model (round 720x720), not 4B. Start with 4C;
|
|
# if the panel looks wrong, switch to CUSTOM + Waveshare ST7703 init.
|
|
# - Wi-Fi is via onboard ESP32-C6 (esp32_hosted). Use fast_connect.
|
|
# - fast_jpeg still works as software decode initially; HW JPEG is a follow-up.
|
|
|
|
substitutions:
|
|
name: doorbell-display-p4
|
|
friendly_name: Doorbell Display P4
|
|
stream_a_url: "http://10.0.1.195:8080/doorbell/?size=720"
|
|
stream_b_url: "http://10.0.1.195:8080/oprit/?size=720"
|
|
|
|
external_components:
|
|
- source:
|
|
type: local
|
|
path: components
|
|
|
|
esphome:
|
|
name: ${name}
|
|
friendly_name: ${friendly_name}
|
|
min_version: "2026.2.0"
|
|
on_boot:
|
|
- priority: 600
|
|
then:
|
|
- lambda: |-
|
|
id(touch_state) = 0;
|
|
id(doorbell_jpg).set_url("${stream_a_url}");
|
|
id(doorbell_jpg).set_enabled(true);
|
|
- switch.turn_on: backlight_enable
|
|
- light.turn_on:
|
|
id: backlight
|
|
brightness: 100%
|
|
|
|
esp32:
|
|
board: esp32-p4-evboard
|
|
variant: esp32p4
|
|
flash_size: 32MB
|
|
framework:
|
|
type: esp-idf
|
|
advanced:
|
|
enable_idf_experimental_features: true
|
|
include_builtin_idf_components:
|
|
- esp_http_client
|
|
|
|
psram:
|
|
speed: 200MHz
|
|
|
|
logger:
|
|
hardware_uart: UART0
|
|
logs:
|
|
fast_jpeg: INFO
|
|
|
|
api:
|
|
ota:
|
|
- platform: esphome
|
|
|
|
wifi:
|
|
ssid: !secret wifi_ssid
|
|
password: !secret wifi_password
|
|
power_save_mode: none
|
|
fast_connect: true
|
|
|
|
esp32_hosted:
|
|
variant: ESP32C6
|
|
active_high: true
|
|
reset_pin: GPIO54
|
|
cmd_pin: GPIO19
|
|
clk_pin: GPIO18
|
|
d0_pin: GPIO14
|
|
d1_pin: GPIO15
|
|
d2_pin: GPIO16
|
|
d3_pin: GPIO17
|
|
|
|
esp_ldo:
|
|
- channel: 3
|
|
voltage: 2.5V
|
|
|
|
i2c:
|
|
sda: GPIO7
|
|
scl: GPIO8
|
|
frequency: 400kHz
|
|
scan: true
|
|
|
|
globals:
|
|
- id: touch_state
|
|
type: int
|
|
restore_value: false
|
|
initial_value: "0"
|
|
|
|
script:
|
|
- id: cycle_stream
|
|
mode: restart
|
|
then:
|
|
- lambda: |-
|
|
id(touch_state) = (id(touch_state) + 1) % 3;
|
|
- if:
|
|
condition:
|
|
lambda: "return id(touch_state) == 0;"
|
|
then:
|
|
- lambda: |-
|
|
id(doorbell_jpg).set_url("${stream_a_url}");
|
|
id(doorbell_jpg).set_enabled(true);
|
|
- switch.turn_on: backlight_enable
|
|
- light.turn_on:
|
|
id: backlight
|
|
brightness: 100%
|
|
- if:
|
|
condition:
|
|
lambda: "return id(touch_state) == 1;"
|
|
then:
|
|
- lambda: |-
|
|
id(doorbell_jpg).set_url("${stream_b_url}");
|
|
id(doorbell_jpg).set_enabled(true);
|
|
- switch.turn_on: backlight_enable
|
|
- light.turn_on:
|
|
id: backlight
|
|
brightness: 100%
|
|
- if:
|
|
condition:
|
|
lambda: "return id(touch_state) == 2;"
|
|
then:
|
|
- lambda: "id(doorbell_jpg).set_enabled(false);"
|
|
- light.turn_off: backlight
|
|
|
|
switch:
|
|
- platform: gpio
|
|
id: backlight_enable
|
|
name: "Backlight Enable"
|
|
pin: GPIO33
|
|
restore_mode: ALWAYS_ON
|
|
internal: true
|
|
|
|
- platform: template
|
|
name: "Screen"
|
|
id: screen_power
|
|
icon: mdi:monitor
|
|
lambda: |-
|
|
return id(backlight).current_values.is_on();
|
|
turn_on_action:
|
|
- lambda: |-
|
|
id(touch_state) = 0;
|
|
id(doorbell_jpg).set_url("${stream_a_url}");
|
|
id(doorbell_jpg).set_enabled(true);
|
|
- switch.turn_on: backlight_enable
|
|
- light.turn_on:
|
|
id: backlight
|
|
brightness: 100%
|
|
turn_off_action:
|
|
- lambda: |-
|
|
id(touch_state) = 2;
|
|
id(doorbell_jpg).set_enabled(false);
|
|
- light.turn_off: backlight
|
|
|
|
output:
|
|
- platform: ledc
|
|
id: backlight_pwm
|
|
pin: GPIO26
|
|
inverted: true
|
|
frequency: 1000Hz
|
|
|
|
light:
|
|
- platform: monochromatic
|
|
id: backlight
|
|
name: "Backlight"
|
|
output: backlight_pwm
|
|
restore_mode: ALWAYS_ON
|
|
default_transition_length: 0s
|
|
on_turn_on:
|
|
- switch.turn_on: backlight_enable
|
|
- lambda: |-
|
|
if (id(touch_state) != 2) {
|
|
id(doorbell_jpg).set_enabled(true);
|
|
}
|
|
on_turn_off:
|
|
- lambda: "id(doorbell_jpg).set_enabled(false);"
|
|
|
|
touchscreen:
|
|
- platform: gt911
|
|
id: touch
|
|
display: lcd
|
|
reset_pin: GPIO23
|
|
update_interval: 50ms
|
|
on_touch:
|
|
- script.execute: cycle_stream
|
|
|
|
display:
|
|
- platform: mipi_dsi
|
|
id: lcd
|
|
model: WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-4C
|
|
dimensions: 720x720
|
|
reset_pin: GPIO27
|
|
color_order: RGB
|
|
auto_clear_enabled: false
|
|
update_interval: never
|
|
|
|
fast_jpeg:
|
|
id: doorbell_jpg
|
|
url: ${stream_a_url}
|
|
display_id: lcd
|
|
update_interval: 150ms
|
|
big_endian: false
|