Last active
November 1, 2024 20:42
-
-
Save clydebarrow/ef89e9a93bd44771483b9144ae9042a1 to your computer and use it in GitHub Desktop.
ESPHome LVGL samples
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Gitignore settings for ESPHome | |
# This is an example and may include too much for your use-case. | |
# You can modify this file to suit your needs. | |
/.esphome/ | |
/secrets.yaml | |
/wifi.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
time: | |
- platform: sntp | |
id: time_comp | |
on_time_sync: | |
then: | |
- script.execute: time_update | |
script: | |
- id: time_update | |
then: | |
- lvgl.indicator.line.update: | |
id: minute_hand | |
value: !lambda |- | |
return id(time_comp).now().minute; | |
- lvgl.indicator.line.update: | |
id: hour_hand | |
value: !lambda |- | |
auto now = id(time_comp).now(); | |
return std::fmod(now.hour, 12) * 60 + now.minute; | |
- lvgl.label.update: | |
id: date_label | |
text: | |
format: "%s %2d" | |
args: | |
- '(new const char *[12]{"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"})[id(time_comp).now().month-1]' | |
- 'id(time_comp).now().day_of_month' | |
- lvgl.label.update: | |
id: day_label | |
text: | |
format: "%s" | |
args: | |
- '(new const char *[7]{"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"})[id(time_comp).now().day_of_week-1]' | |
font: | |
- file: "gfonts://Roboto" | |
id: roboto10 | |
size: 10 | |
bpp: 4 | |
interval: | |
- interval: 1min | |
then: | |
- script.execute: time_update | |
lvgl: | |
style_definitions: | |
- id: date_style | |
text_font: roboto10 | |
align: center | |
text_color: 0x000000 | |
bg_opa: cover | |
radius: 4 | |
pad_all: 2 | |
widgets: | |
- obj: # Clock container | |
height: 170 | |
width: 170 | |
align: center | |
pad_all: 4 | |
widgets: | |
- meter: # Gradient color arc | |
height: 100% | |
width: 100% | |
align: center | |
bg_color: 0 | |
scales: | |
angle_range: 360 | |
rotation: 255 | |
range_from: 0 | |
range_to: 12 | |
ticks: | |
width: 35 | |
count: 13 | |
length: 8 | |
indicators: | |
- ticks: | |
local: true | |
start_value: 0 | |
end_value: 12 | |
color_start: 0xFF0000 | |
color_end: 0x0000FF | |
- meter: | |
height: 100% | |
width: 100% | |
align: center | |
bg_opa: TRANSP | |
text_color: 0xFFFFFF | |
scales: | |
- ticks: | |
width: 1 | |
count: 61 | |
length: 10 | |
color: 0xFFFFFF | |
range_from: 0 | |
range_to: 60 | |
angle_range: 360 | |
rotation: 270 | |
indicators: | |
- line: | |
id: minute_hand | |
width: 3 | |
color: 0xE0E0E0 | |
r_mod: -1 | |
- | |
angle_range: 330 | |
rotation: 300 | |
range_from: 1 | |
range_to: 12 | |
ticks: | |
width: 1 | |
count: 12 | |
length: 1 | |
major: | |
stride: 1 | |
width: 4 | |
length: 8 | |
color: 0xC0C0C0 | |
label_gap: 6 | |
- angle_range: 360 | |
rotation: 270 | |
range_from: 0 | |
range_to: 720 | |
indicators: | |
- line: | |
id: hour_hand | |
width: 4 | |
color: 0xA0A0A0 | |
r_mod: -20 | |
- label: | |
styles: date_style | |
id: day_label | |
y: -20 | |
- label: | |
id: date_label | |
styles: date_style | |
y: +20 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
substitutions: | |
name: indicator | |
friendly_name: "Indicator LVGL" | |
esphome: | |
name: indicator | |
friendly_name: "${friendly_name}" | |
name_add_mac_suffix: false | |
platformio_options: | |
build_unflags: -Werror=all | |
esp32: | |
board: esp32-s3-devkitc-1 | |
variant: esp32s3 | |
framework: | |
type: esp-idf | |
# Required to get the latest RGB driver | |
platform_version: 6.3.2 | |
version: 5.0.2 | |
# Required to achieve sufficient PSRAM bandwidth | |
sdkconfig_options: | |
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: y | |
CONFIG_ESP32S3_DATA_CACHE_64KB: y | |
CONFIG_SPIRAM_FETCH_INSTRUCTIONS: y | |
CONFIG_SPIRAM_RODATA: y | |
wifi: !include wifi.yaml | |
external_components: | |
- source: github://clydebarrow/esphome@lvgl | |
refresh: 10min | |
components: [lvgl, font, display, ft5x06] | |
- source: github://pr#5872 | |
refresh: 10min | |
components: [st7701s] | |
packages: | |
lvgl: !include lvgl-package.yaml | |
psram: | |
mode: octal | |
speed: 80MHz | |
logger: | |
level: DEBUG | |
hardware_uart: UART0 | |
output: | |
- platform: ledc | |
pin: | |
number: GPIO45 | |
ignore_strapping_warning: true | |
id: ledc_gpio4 | |
frequency: 100Hz | |
light: | |
- platform: monochromatic | |
output: ledc_gpio4 | |
name: Display Backlight | |
id: display_backlight | |
restore_mode: ALWAYS_ON | |
spi: | |
- id: lcd_spi | |
clk_pin: 41 | |
mosi_pin: 48 | |
i2c: | |
sda: 39 | |
scl: 40 | |
scan: false | |
id: bus_a | |
# I/O expander. Touchscreen RESET and INTERRUPT are not used. | |
pca9554: | |
- id: p_c_a | |
pin_count: 16 | |
address: 0x20 | |
touchscreen: | |
- platform: ft5x06 | |
id: ft5x06_touchscreen | |
transform: | |
mirror_x: true | |
mirror_y: true | |
on_release: | |
then: | |
- if: | |
condition: lvgl.is_paused | |
then: | |
- light.turn_on: display_backlight | |
- lvgl.resume: | |
- lvgl.widget.redraw: | |
display: | |
- platform: st7701s | |
auto_clear_enabled: false | |
update_interval: never | |
spi_mode: MODE3 | |
color_order: RGB | |
dimensions: | |
width: 480 | |
height: 480 | |
invert_colors: true | |
transform: | |
mirror_x: true | |
mirror_y: true | |
cs_pin: | |
pca9554: p_c_a | |
number: 4 | |
reset_pin: | |
pca9554: p_c_a | |
number: 5 | |
de_pin: 18 | |
hsync_pin: 16 | |
vsync_pin: 17 | |
pclk_pin: 21 | |
# Init sequence can be one of the defaults and/or custom sequences. | |
init_sequence: | |
- 1 # select canned init sequence number 1 | |
# Custom sequences are an array, first byte is command, the rest are data. | |
- [ 0xE0, 0x1F ] # Set sunlight readable enhancement | |
data_pins: | |
red: | |
- 4 #r1 | |
- 3 #r2 | |
- 2 #r3 | |
- 1 #r4 | |
- 0 #r5 | |
green: | |
- 10 #g0 | |
- 9 #g1 | |
- 8 #g2 | |
- 7 #g3 | |
- 6 #g4 | |
- 5 #g5 | |
blue: | |
- 15 #b1 | |
- 14 #b2 | |
- 13 #b3 | |
- 12 #b4 | |
- 11 #b5 | |
lvgl: | |
touchscreens: ft5x06_touchscreen | |
on_idle: | |
timeout: 120s | |
then: | |
- logger.log: "LVGL is idle" | |
- lvgl.pause: | |
- light.turn_off: | |
id: display_backlight | |
transition_length: 5s |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
# A random collection of LVGL stuff. | |
substitutions: | |
light_recessed: "\U000F179B" | |
wall_sconce_round: "\U000F0748" | |
gas_burner: "\U000F1A1B" | |
home_icon: "\U000F02DC" | |
menu_left: "\U000F0A02" | |
menu_right: "\U000F035F" | |
close: "\U000F0156" | |
delete: "\U000F01B4" | |
backspace: "\U000F006E" | |
check: "\U000F012C" | |
arrow_down: "\U000F004B" | |
esphome: | |
on_boot: | |
then: | |
- light.turn_on: | |
id: lv_light | |
brightness: 100% | |
red: 100% | |
green: 0 | |
blue: 0 | |
#sensor: | |
# - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB | |
# name: "WiFi Signal dB" | |
# id: wifi_signal_db | |
# update_interval: 20s | |
# entity_category: "diagnostic" | |
# on_value: | |
# then: | |
# - lvgl.label.update: | |
# id: wifi_label | |
# text: !lambda |- | |
# static char buf[10]; | |
# snprintf(buf, 10, "%.0fdBm", id(wifi_signal_db).get_state()); | |
# return buf; | |
light: | |
- platform: lvgl | |
name: LVGL LED | |
id: lv_light | |
led: lv_led | |
effects: | |
- pulse: | |
name: "Slow Pulse" | |
# transition_length: 1s # defaults to 1s | |
update_interval: 2s | |
- strobe: | |
- strobe: | |
name: Strobe Effect With Custom Values | |
colors: | |
- state: true | |
brightness: 100% | |
red: 100% | |
green: 90% | |
blue: 0% | |
duration: 500ms | |
- state: false | |
duration: 250ms | |
- state: true | |
brightness: 100% | |
red: 0% | |
green: 100% | |
blue: 0% | |
duration: 500ms | |
number: | |
- platform: lvgl | |
widget: lv_slider | |
id: lvgl_slider_sensor | |
name: LVGL Slider | |
- platform: lvgl | |
widget: lv_arc | |
id: lvgl_arc_sensor | |
name: LVGL Arc | |
- platform: lvgl | |
widget: lv_bar | |
id: lvgl_bar_sensor | |
name: LVGL Bar | |
# on_value: | |
# then: | |
# - if: | |
# condition: | |
# number.in_range: | |
# id: lvgl_arc_sensor | |
# below: 50 | |
# then: | |
# - lvgl.slider.update: | |
# id: lv_slider | |
# knob: | |
# bg_color: 0xFF0000 | |
# - lvgl.img.update: | |
# id: lv_img | |
# src: cat_image | |
# else: | |
# - lvgl.slider.update: | |
# id: lv_slider | |
# knob: | |
# bg_color: 0x00FF00 | |
# - lvgl.img.update: | |
# id: lv_img | |
# src: dog_img | |
binary_sensor: | |
- platform: lvgl | |
name: Pressbutton | |
widget: lv_page1_button | |
publish_initial_state: true | |
- platform: lvgl | |
name: ButtonMatrix button | |
widget: button_a | |
- platform: lvgl | |
id: switch_d | |
name: Matrix switch D | |
widget: button_d | |
on_click: | |
then: | |
- lvgl.page.previous: | |
animation: move_right | |
time: 600ms | |
- platform: lvgl | |
id: button_checker | |
name: LVGL button | |
widget: lv_button | |
on_state: | |
then: | |
- lvgl.checkbox.update: | |
id: lv_checkbox | |
state: | |
checked: !lambda return x; | |
text: Unchecked | |
- platform: lvgl | |
name: LVGL checkbox | |
widget: lv_checkbox | |
font: | |
- file: "gfonts://Roboto" | |
id: roboto20 | |
size: 20 | |
extras: | |
- file: 'materialdesignicons-webfont.ttf' | |
glyphs: [ | |
"\U000F004B", | |
"\U0000f0ed", | |
"\U000F006E", | |
"\U000F012C", | |
"\U000F179B", | |
"\U000F0748", | |
"\U000F1A1B", | |
"\U000F02DC", | |
"\U000F0A02", | |
"\U000F035F", | |
"\U000F0156", | |
"\U000F0C5F", | |
"\U000f0084", | |
"\U000f0091", | |
] | |
- file: "gfonts://Roboto" | |
id: roboto10 | |
size: 10 | |
bpp: 4 | |
extras: | |
- file: 'materialdesignicons-webfont.ttf' | |
glyphs: [ | |
"\U000F004B", | |
"\U0000f0ed", | |
"\U000F006E", | |
"\U000F012C", | |
"\U000F179B", | |
"\U000F0748", | |
"\U000F1A1B", | |
"\U000F02DC", | |
"\U000F0A02", | |
"\U000F035F", | |
"\U000F0156", | |
"\U000F0C5F", | |
"\U000f0084", | |
"\U000f0091", | |
] | |
- file: "gfonts://Helvetica" | |
id: helv20 | |
bpp: 2 | |
size: 20 | |
extras: | |
- file: 'materialdesignicons-webfont.ttf' | |
glyphs: [ | |
"\U000F004B", | |
"\U0000f0ed", | |
"\U000F006E", | |
"\U000F012C", | |
"\U000F179B", | |
"\U000F0748", | |
"\U000F1A1B", | |
"\U000F02DC", | |
"\U000F0A02", | |
"\U000F035F", | |
"\U000F0156", | |
"\U000F0C5F", | |
"\U000f0084", | |
"\U000f0091", | |
] | |
- file: 'gfonts://Roboto Condensed' | |
id: roboto42 | |
size: 28 | |
bpp: 4 | |
glyphs: 'aAbBcCxXyYzZáÁéÉíÍóÓőŐúÚűŰ' | |
- file: montserrat.ttf | |
id: mont20 | |
glyphs: 'aAbBDcCxXyYzZáÁéÉíÍóÓőŐúÚűŰ0' | |
size: 20 | |
bpp: 4 | |
image: | |
- file: cat.jpg | |
id: cat_image | |
resize: 100x100 | |
type: RGB565 | |
- file: cat.jpg | |
id: disp_bg | |
resize: 200x200 | |
type: RGB565 | |
- file: dog.jpg | |
id: dog_img | |
resize: 100x100 | |
type: RGB565 | |
color: | |
- id: color_back | |
hex: FF0000 | |
- id: color_blue | |
hex: 0000FF | |
select: | |
- platform: lvgl | |
widget: lv_dropdown | |
name: LVGL Dropdown | |
- platform: lvgl | |
widget: lv_roller | |
name: LVGL Roller | |
switch: | |
- platform: lvgl | |
name: Button switch | |
widget: lv_button | |
on_turn_on: | |
then: | |
- lvgl.widget.disable: lv_arc | |
- lvgl.widget.hide: button_c | |
on_turn_off: | |
then: | |
- lvgl.widget.show: button_c | |
- lvgl.widget.enable: lv_arc | |
- platform: lvgl | |
name: Matrix switch | |
widget: button_a | |
- platform: lvgl | |
name: Switch switch | |
widget: lv_switch | |
lvgl: | |
buffer_size: 100% | |
#default_font: roboto20 | |
msgboxes: | |
- id: message_box | |
close_button: true | |
title: Messagebox | |
body: | |
text: This is a sample messagebox | |
bg_color: 0x808080 | |
buttons: | |
- id: msgbox_close | |
text: close | |
- id: msgbox_apply | |
text: "Close" | |
on_click: | |
then: | |
- lvgl.widget.hide: message_box | |
on_idle: | |
- timeout: 10s | |
then: | |
- logger.log: idle timeout | |
- if: | |
condition: | |
lvgl.is_idle: | |
timeout: 5s | |
then: | |
- logger.log: LVGL is idle | |
- timeout: 15s | |
then: | |
- logger.log: idle 15s timeout | |
#- lvgl.pause: | |
#- light.turn_off: | |
# id: display_backlight | |
# transition_length: 5s | |
log_level: INFO | |
color_depth: 16 | |
disp_bg_image: disp_bg | |
bg_opa: TRANSP | |
style_definitions: | |
- id: style_line | |
line_color: color_blue | |
line_width: 8 | |
line_rounded: true | |
- id: date_style | |
text_font: roboto10 | |
align: center | |
text_color: 0x000000 | |
bg_opa: cover | |
radius: 4 | |
pad_all: 2 | |
theme: | |
arc: | |
scroll_on_focus: true | |
group: general | |
slider: | |
scroll_on_focus: true | |
group: general | |
btn: | |
text_font: roboto10 | |
scroll_on_focus: true | |
group: general | |
border_width: 2 | |
border_side: left | |
outline_pad: 6 | |
text_color: 0x000000 | |
checked: | |
text_color: 0xFF0000 | |
pressed: | |
border_color: 0xFF0000 | |
text_color: 0xFFFFFF | |
focused: | |
border_color: 0x00FF00 | |
checkbox: | |
border_color: 0xC0C0C0 | |
indicator: | |
text_font: montserrat_14 | |
checked: | |
bg_color: 0xC0C0C0 | |
top_layer: | |
text_font: helv20 | |
widgets: | |
btnmatrix: | |
width: 100% | |
height: 10% | |
align: bottom_mid | |
pad_all: 5 | |
outline_width: 0 | |
shadow_width: 0 | |
id: top_layer | |
rows: | |
- buttons: | |
- id: top_prev | |
text: "${menu_left}" | |
width: 1 | |
on_click: | |
then: | |
lvgl.page.previous: | |
- id: top_home | |
text: "${home_icon}" | |
width: 1 | |
on_click: | |
then: | |
lvgl.page.show: main_page | |
- id: top_next | |
text: "${menu_right}" | |
width: 1 | |
on_click: | |
then: | |
lvgl.page.next: | |
page_wrap: true | |
pages: | |
- id: main_page | |
skip: true | |
layout: flex | |
width: 100% | |
bg_color: 0x808080 | |
bg_opa: TRANSP | |
pad_all: 10 | |
widgets: | |
- btn: | |
text_color: 0x000000 | |
pressed: | |
border_color: color_blue | |
text_color: 0xFFFFFF | |
checkable: true | |
id: lv_button | |
pad_left: 20px | |
pad_top: 20px | |
pad_bottom: 8px | |
pad_right: 8px | |
widgets: | |
- img: | |
src: cat_image | |
bg_opa: TRANSP | |
align: bottom_right | |
- label: | |
styles: date_style | |
align: bottom_right | |
x: -20 | |
y: -20 | |
text: "Label text" | |
long_mode: dot | |
id: wifi_label | |
- checkbox: | |
scroll_on_focus: true | |
group: general | |
id: lv_checkbox | |
align: center | |
text: Checkbox | |
- switch: | |
id: lv_switch | |
- bar: | |
id: lv_bar | |
width: 50px | |
on_value: | |
then: | |
- logger.log: | |
format: "Bar value is %f" | |
args: [ x ] | |
- arc: | |
id: lv_arc | |
adjustable: true | |
#on_release: | |
#then: | |
#- lambda: |- | |
#esph_log_d("lvgl", "on_release %f", x); | |
on_value: | |
then: | |
- logger.log: | |
format: "Arc value is %f" | |
args: [ x ] | |
group: general | |
scroll_on_focus: true | |
value: 75 | |
min_value: 1 | |
max_value: 100 | |
arc_color: 0xFF0000 | |
indicator: | |
arc_color: 0xF000FF | |
pressed: | |
arc_color: 0xFFFF00 | |
focused: | |
arc_color: 0x808080 | |
- slider: | |
knob: | |
focused: | |
bg_color: 0x808080 | |
group: general | |
scroll_on_focus: true | |
id: lv_slider | |
height: 30% | |
align: center | |
width: 20 | |
min_value: 0 | |
max_value: 50 | |
on_value: | |
- logger.log: | |
format: "Value on_value: %.0f" | |
args: [ 'x' ] | |
on_release: | |
- logger.log: | |
format: "Value on_release: %.0f" | |
args: [ 'x' ] | |
- dropdown: | |
indicator: | |
text_font: helv20 | |
id: lv_dropdown | |
options: | |
- First | |
- Second | |
- Third | |
selected_index: 2 | |
dir: top | |
symbol: ${arrow_down} | |
dropdown_list: | |
bg_color: color_blue | |
text_color: 0x800000 | |
- label: | |
text_font: helv20 | |
outline_width: 1 | |
outline_color: 0xFFFFFF | |
text: "XX \U000f0084 \U0000f0ed XX" #mdi-battery-charging | |
- label: | |
outline_width: 1 | |
outline_color: 0xFFFFFF | |
text_font: montserrat_20 | |
text: 'aAbBDcCxXyYzZáÁéÉíÍóÓőŐúÚűŰ0' | |
- id: page_1 | |
layout: flex | |
pad_all: 10 | |
widgets: | |
- obj: | |
width: 100% | |
height: 50px | |
bg_color: 0xFFFFFF | |
outline_width: 0 | |
border_width: 2 | |
border_color: 0x000000 | |
- label: | |
height: size_content | |
width: 150px | |
long_mode: scroll_circular | |
text: 'Page 1 label with very long text wrapping lines' | |
- btn: | |
on_click: | |
then: | |
- logger.log: Button clicked | |
- lvgl.widget.show: message_box | |
width: size_content | |
id: change_btnm | |
widgets: | |
- label: | |
width: 100px | |
long_mode: scroll | |
text: Disable button matrix | |
on_press: | |
then: | |
- lvgl.widget.update: | |
id: b_matrix | |
state: | |
disabled: true | |
- lambda: |- | |
static const char * new_matrix[] = {"A","bbb","\n","ccc",LV_SYMBOL_PREV,"\n","E",NULL}; | |
lv_btnmatrix_set_map(id(b_matrix)->obj, new_matrix); | |
text_color: 0x000000 | |
align: center | |
- btn: | |
bg_color: 0x80FF00 | |
width: size_content | |
id: lv_page1_button0 | |
on_click: | |
then: | |
- lvgl.pause: | |
show_snow: true | |
widgets: | |
- label: | |
bg_color: 0x80ffff | |
width: 100px | |
long_mode: scroll | |
text: Disable button matrix | |
- btn: | |
bg_color: 0xFF80FF | |
width: size_content | |
id: lv_page1_button1 | |
on_click: | |
then: | |
- lvgl.widget.show: | |
id: b_matrix | |
widgets: | |
- label: | |
text_font: helv20 | |
bg_color: 0xFF80FF | |
width: 100px | |
long_mode: scroll | |
text: Disable button matrix | |
- btn: | |
on_click: | |
then: | |
- logger.log: Button clicked | |
- lvgl.widget.show: message_box | |
width: size_content | |
id: lv_page1_button | |
widgets: | |
- label: | |
width: 100px | |
long_mode: scroll | |
text: "Show message box" | |
- roller: | |
id: lv_roller | |
options: | |
- Jan | |
- Feb | |
- Mar | |
- Apr | |
- May | |
- Jun | |
- Jul | |
- Aug | |
- Sep | |
- Oct | |
- Nov | |
- Dec | |
selected_index: 2 | |
- led: | |
id: lv_led | |
color: 0xFF0000 | |
brightness: 50% | |
on_long_press: | |
then: | |
- lvgl.page.show: main_page | |
- btnmatrix: | |
items: | |
checked: | |
bg_color: 0xFFFF00 | |
id: b_matrix | |
rows: | |
- buttons: | |
- id: button_a | |
text: ${home_icon} | |
width: 2 | |
control: | |
checkable: true | |
- id: button_b | |
text: B | |
width: 1 | |
on_click: | |
then: | |
- lvgl.page.previous: | |
control: | |
hidden: false | |
- buttons: | |
- id: button_c | |
text: C | |
control: | |
checkable: false | |
- id: button_d | |
text: ${menu_left} | |
on_long_press: | |
then: | |
logger.log: Long pressed | |
on_long_press_repeat: | |
then: | |
logger.log: Long pressed repeated | |
- buttons: | |
- id: button_e | |
text: E | |
width: 2 | |
control: | |
checked: true | |
- id: page_2 | |
layout: flex | |
widgets: | |
- line: | |
styles: style_line | |
align: center | |
points: | |
- 5, 5 | |
- 70, 70 | |
- 120, 10 | |
- 180, 60 | |
- 240, 10 | |
- obj: | |
width: size_content | |
height: size_content | |
widgets: | |
- btnmatrix: | |
align: BOTTOM_MID | |
items: | |
disabled: | |
bg_color: 0x00FFFF | |
align: center | |
id: keypad_matrix | |
disabled: | |
bg_color: 0x00FF00 | |
rows: | |
- buttons: | |
- text: 1 | |
key_code: "1" | |
- text: 2 | |
key_code: "2" | |
- text: 3 | |
- buttons: | |
- text: 4 | |
- text: 5 | |
- text: 6 | |
key_code: 0x36 | |
- buttons: | |
- text: 7 | |
- text: 8 | |
- text: 9 | |
- buttons: | |
- text: ${backspace} | |
key_code: "*" | |
- text: 0 | |
- text: ${check} | |
key_code: '#' | |
- label: | |
text_align: center | |
height: 100 | |
id: pin_code | |
align: TOP_MID | |
- img: | |
x: 10 | |
y: 200 | |
src: cat_image | |
id: img_id | |
radius: 11 | |
clip_corner: true | |
- label: | |
id: lbl_cathome | |
align_to: | |
id: img_id | |
x: 0 | |
y: 10 | |
align: OUT_BOTTOM_MID | |
text: 'Home' | |
text_color: 0x00FF00 | |
- btn: | |
x: 100 | |
y: 200 | |
widgets: | |
- label: | |
text: Disable keypad | |
on_press: | |
then: | |
- lvgl.btnmatrix.update: | |
id: keypad_matrix | |
state: | |
disabled: true | |
items: | |
bg_color: 0x0000ff | |
- lvgl.spinner.update: | |
id: spinner_id | |
indicator: | |
arc_color: 0x0000FF | |
- btn: | |
x: 100 | |
y: 240 | |
widgets: | |
- label: | |
text: Enable keypad | |
on_press: | |
then: | |
- lvgl.btnmatrix.update: | |
id: keypad_matrix | |
state: | |
disabled: false | |
items: | |
bg_color: 0xf0f0f0 | |
- spinner: | |
id: spinner_id | |
indicator: | |
arc_color: 0xF000FF | |
x: 200 | |
y: 400 | |
height: 100 | |
width: 100 | |
spin_time: 2s | |
arc_length: 60deg | |
- id: page_3 | |
layout: flex | |
widgets: | |
- obj: | |
scrollbar_mode: "off" | |
pad_all: 0 | |
width: 230 | |
max_width: 230 | |
height: 40 | |
bg_opa: 0 | |
border_width: 1 | |
widgets: | |
- checkbox: | |
id: chk_stat_6 | |
text: "Pretty long blah blah blah to go wider than obj width" | |
x: 5 | |
y: 5 | |
key_collector: | |
- id: pincode_reader | |
source_id: keypad_matrix | |
min_length: 4 | |
max_length: 4 | |
end_keys: "#" | |
end_key_required: true | |
back_keys: "*" | |
allowed_keys: "0123456789S" | |
timeout: 10s | |
on_progress: | |
- lvgl.label.update: | |
id: pin_code | |
text: !lambda 'return x.c_str();' | |
border_color: 0 | |
- logger.log: | |
format: "input progress: '%s', started by '%c'" | |
args: [ 'x.c_str()', "(start == 0 ? '~' : start)" ] | |
on_result: | |
- logger.log: | |
format: "input result: '%s', started by '%c', ended by '%c'" | |
args: [ 'x.c_str()', "(start == 0 ? '~' : start)", "(end == 0 ? '~' : end)" ] | |
- lambda: id(text_sensor).publish_state(x); | |
on_timeout: | |
- logger.log: | |
format: "input timeout: '%s', started by '%c'" | |
args: [ 'x.c_str()', "(start == 0 ? '~' : start)" ] | |
text: | |
- platform: template | |
id: text_sensor | |
name: "Template text" | |
optimistic: true | |
#min_length: 0 | |
#max_length: 100 | |
mode: text | |
This file has been truncated, but you can view the full file.
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
You can use the host
platform and SDL display driver. See https://esphome.io/components/display/sdl
You can use the
host
platform and SDL display driver. See https://esphome.io/components/display/sdl
Thank you very much, this works perfectly.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@clydebarrow
First, thanks for all the work you have done to port LVGL to ESPHome.
Is there a way to test the LVGL YAML code in a PC simulator?
It would be great to be able to develop the code and see the result easily without having to flash the ESP32.
https://docs.lvgl.io/8.2/get-started/pc-simulator.html
Thanks for your help