Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[lvgl] Stage 4 #7166

Merged
merged 95 commits into from
Aug 5, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
a01a671
LVGL base implementation
clydebarrow Jul 22, 2024
3f86537
CODEOWNERS
clydebarrow Jul 22, 2024
c49c113
script/custom-ci
clydebarrow Jul 22, 2024
cddc71d
Remove esp8266 test
clydebarrow Jul 22, 2024
0e42141
Newline
clydebarrow Jul 22, 2024
b4c0d64
clang-tidy
clydebarrow Jul 22, 2024
5c09226
Fix bug introduced by clang-tidy's suggestion.
clydebarrow Jul 22, 2024
6cbba2f
Fix output of lv_scr_act()
clydebarrow Jul 22, 2024
f56b4b5
clang-tidy fixes
clydebarrow Jul 22, 2024
5100695
clang-tidy
clydebarrow Jul 22, 2024
cfc13f0
Fix fonts
clydebarrow Jul 22, 2024
034d7ec
Cleanup
clydebarrow Jul 22, 2024
8678f9f
Add test for font
clydebarrow Jul 22, 2024
dcfb19b
CI fix
clydebarrow Jul 23, 2024
e72d4ec
Add touchscreens
clydebarrow Jul 23, 2024
caee7b0
Add test images
clydebarrow Jul 23, 2024
7cf47e8
Add tests for all obj styles
clydebarrow Jul 23, 2024
9d16c30
`ruff check --fix`
jesserockz Jul 23, 2024
b58a37e
`ruff format`
jesserockz Jul 23, 2024
54ee3da
ruff
clydebarrow Jul 23, 2024
dc95aa8
ruff
clydebarrow Jul 23, 2024
abf823e
Ruff
clydebarrow Jul 23, 2024
1d797ac
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-base
clydebarrow Jul 24, 2024
24434d6
Review fixes
clydebarrow Jul 24, 2024
07c3e2b
Fail hard when display mis-configured
clydebarrow Jul 24, 2024
b656fc1
Fix default_font for esphome font
clydebarrow Jul 24, 2024
9b10ce8
Merge branch 'lvgl-base' into lvgl-input
clydebarrow Jul 24, 2024
74de2a0
Implement btn.
clydebarrow Jul 24, 2024
2428819
Add percent width
clydebarrow Jul 24, 2024
a3eb919
Review changes
clydebarrow Jul 24, 2024
6c8b7cd
Review changes
clydebarrow Jul 24, 2024
b2a248d
Properly handle display list
clydebarrow Jul 24, 2024
2b7782e
Properly handle display
clydebarrow Jul 24, 2024
7dd4b47
Add btn.py
clydebarrow Jul 24, 2024
38f4f36
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-base
clydebarrow Jul 24, 2024
e0bd889
Improve display schema
clydebarrow Jul 24, 2024
d5c29c6
Merge branch 'lvgl-base' into lvgl-input
clydebarrow Jul 24, 2024
de17834
Clean up touchscreen config
clydebarrow Jul 24, 2024
61d66f6
Fix import
clydebarrow Jul 24, 2024
f253541
Merge remote-tracking branch 'upstream/dev' into lvgl-input
clydebarrow Jul 25, 2024
7912d20
Remove unused function
clydebarrow Jul 25, 2024
4e0898e
Use ESPHome image for test
clydebarrow Jul 25, 2024
70efbd0
Fix add_flag
clydebarrow Jul 25, 2024
2915d92
Ensure undefined fonts are found in id validation step
clydebarrow Jul 25, 2024
9a33af2
Issue warning if touchscreen configured but not used.
clydebarrow Jul 25, 2024
25aff25
Allow for case of ESPHOME_LOG_LEVEL_NONE
clydebarrow Jul 25, 2024
df58faa
Rotary encoder working
clydebarrow Jul 27, 2024
322afc7
pages WIP
clydebarrow Jul 27, 2024
bff1b37
Rename `btn` to `button`
clydebarrow Jul 27, 2024
fd591b4
Add triggers and align_to
clydebarrow Jul 28, 2024
b11c82e
Rename automation.py to trigger.py
clydebarrow Jul 28, 2024
f150c56
Add tests for actions.
clydebarrow Jul 28, 2024
c90ece1
Rename bg_img to bg_image
clydebarrow Jul 28, 2024
5d7eae1
add bg_image
clydebarrow Jul 28, 2024
72637f6
CONF_BUTTON from esphome.const
clydebarrow Jul 28, 2024
7fb8824
Address review:
clydebarrow Jul 29, 2024
cb878ef
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-3
clydebarrow Jul 29, 2024
a14495c
Add check for image type
clydebarrow Jul 29, 2024
c5271c5
Add update actions
clydebarrow Jul 29, 2024
fdb27dd
update tests
clydebarrow Jul 29, 2024
55effa9
Added pause/resume actions, idle and paused conditions.
clydebarrow Jul 29, 2024
fb78eb1
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-3
clydebarrow Jul 29, 2024
c61f11d
comments on endifs
clydebarrow Jul 29, 2024
d3b6ec9
Add lvgl.widget.{hide,show,enable,disable} actions
clydebarrow Jul 29, 2024
5148a97
Touchscreen listener add in main code
clydebarrow Jul 29, 2024
a8a51b1
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-3
clydebarrow Jul 29, 2024
2d0d88b
Remove redundant define
clydebarrow Jul 29, 2024
c0e1a9f
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-3
clydebarrow Jul 29, 2024
b79a429
Revert lv_validation.py
clydebarrow Jul 29, 2024
6e060e9
Fix CI failures.
clydebarrow Jul 29, 2024
2670f49
CI fixes
clydebarrow Jul 30, 2024
101e5fb
CI fix
clydebarrow Jul 30, 2024
515ff15
Cleanup create_modify_schema
clydebarrow Jul 30, 2024
7eaf438
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-3
clydebarrow Jul 30, 2024
f5bf2ef
Merge branch 'lvgl-3' into lvgl-4
clydebarrow Jul 30, 2024
d5e38e6
Added pages and associated actions
clydebarrow Jul 30, 2024
3e2add8
Implement page wrap and skip
clydebarrow Jul 30, 2024
3e7c36f
Review changes
clydebarrow Jul 30, 2024
ae02208
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-4
clydebarrow Jul 30, 2024
f58e015
Additional comments
clydebarrow Jul 30, 2024
574fb2f
Added bar
clydebarrow Jul 30, 2024
6e1076a
Add bar and slider
clydebarrow Jul 30, 2024
52a9b8a
Add arc
clydebarrow Jul 30, 2024
7d74d36
Allow lists of widgets on update/hide/show/enable/disable actions
clydebarrow Jul 30, 2024
342e4e2
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-4
clydebarrow Jul 31, 2024
f19cc1f
Rationalise defines
clydebarrow Jul 31, 2024
bf4e778
Add widgets:
clydebarrow Jul 31, 2024
3735074
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-4
clydebarrow Jul 31, 2024
3260d3e
Fix imports
clydebarrow Jul 31, 2024
6da6b42
Fix image modify schema
clydebarrow Jul 31, 2024
fcdabfa
Fix for config without pages
clydebarrow Jul 31, 2024
198f040
Merge branch 'dev' of https://github.com/esphome/esphome into lvgl-4
clydebarrow Aug 4, 2024
5cad98d
Backport changed files from lvgl-6
clydebarrow Aug 4, 2024
68059a8
Code cleanup
clydebarrow Aug 4, 2024
bf1e1cd
Backport from lvgl-6
clydebarrow Aug 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add arc
  • Loading branch information
clydebarrow committed Jul 30, 2024
commit 52a9b8a47edd3adad3e0fa19e75dea934e064271
3 changes: 2 additions & 1 deletion esphome/components/lvgl/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from esphome.helpers import write_file_if_changed

from . import defines as df, helpers, lv_validation as lvalid
from .arc import arc_spec
from .automation import update_to_code
from .btn import btn_spec
from .defines import CONF_SKIP
Expand Down Expand Up @@ -57,7 +58,7 @@
CODEOWNERS = ("@clydebarrow",)
LOGGER = logging.getLogger(__name__)

for w_type in (label_spec, obj_spec, btn_spec, bar_spec, slider_spec):
for w_type in (label_spec, obj_spec, btn_spec, bar_spec, slider_spec, arc_spec):
WIDGET_TYPES[w_type.name] = w_type

WIDGET_SCHEMA = any_widget_schema()
Expand Down
78 changes: 78 additions & 0 deletions esphome/components/lvgl/arc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import esphome.config_validation as cv
from esphome.const import (
CONF_MAX_VALUE,
CONF_MIN_VALUE,
CONF_MODE,
CONF_ROTATION,
CONF_VALUE,
)

from ...cpp_types import nullptr
from .defines import (
ARC_MODES,
CONF_ADJUSTABLE,
CONF_ARC,
CONF_CHANGE_RATE,
CONF_END_ANGLE,
CONF_INDICATOR,
CONF_KNOB,
CONF_MAIN,
CONF_START_ANGLE,
literal,
)
from .lv_validation import angle, get_start_value, lv_float
from .lvcode import lv, lv_obj
from .types import LvNumber
from .widget import Widget, WidgetType

ARC_SCHEMA = cv.Schema(
{
cv.Optional(CONF_VALUE): lv_float,
cv.Optional(CONF_MIN_VALUE, default=0): cv.int_,
cv.Optional(CONF_MAX_VALUE, default=100): cv.int_,
cv.Optional(CONF_START_ANGLE, default=135): angle,
cv.Optional(CONF_END_ANGLE, default=45): angle,
cv.Optional(CONF_ROTATION, default=0.0): angle,
cv.Optional(CONF_ADJUSTABLE, default=False): bool,
cv.Optional(CONF_MODE, default="NORMAL"): ARC_MODES.one_of,
cv.Optional(CONF_CHANGE_RATE, default=720): cv.uint16_t,
}
)

ARC_MODIFY_SCHEMA = cv.Schema(
{
cv.Optional(CONF_VALUE): lv_float,
}
)


class ArcType(WidgetType):
def __init__(self):
super().__init__(
CONF_ARC,
LvNumber("lv_arc_t"),
parts=(CONF_MAIN, CONF_INDICATOR, CONF_KNOB),
schema=ARC_SCHEMA,
modify_schema=ARC_MODIFY_SCHEMA,
)

async def to_code(self, w: Widget, config):
if CONF_MIN_VALUE in config:
lv.arc_set_range(w.obj, config[CONF_MIN_VALUE], config[CONF_MAX_VALUE])
lv.arc_set_bg_angles(
w.obj, config[CONF_START_ANGLE] // 10, config[CONF_END_ANGLE] // 10
)
lv.arc_set_rotation(w.obj, config[CONF_ROTATION] // 10)
lv.arc_set_mode(w.obj, literal(config[CONF_MODE]))
lv.arc_set_change_rate(w.obj, config[CONF_CHANGE_RATE])
Comment on lines +60 to +67
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a default value of 0 so its always going to be there.

Suggested change
if CONF_MIN_VALUE in config:
lv.arc_set_range(w.obj, config[CONF_MIN_VALUE], config[CONF_MAX_VALUE])
lv.arc_set_bg_angles(
w.obj, config[CONF_START_ANGLE] // 10, config[CONF_END_ANGLE] // 10
)
lv.arc_set_rotation(w.obj, config[CONF_ROTATION] // 10)
lv.arc_set_mode(w.obj, literal(config[CONF_MODE]))
lv.arc_set_change_rate(w.obj, config[CONF_CHANGE_RATE])
lv.arc_set_range(w.obj, config[CONF_MIN_VALUE], config[CONF_MAX_VALUE])
lv.arc_set_bg_angles(
w.obj, config[CONF_START_ANGLE] // 10, config[CONF_END_ANGLE] // 10
)
lv.arc_set_rotation(w.obj, config[CONF_ROTATION] // 10)
lv.arc_set_mode(w.obj, literal(config[CONF_MODE]))
lv.arc_set_change_rate(w.obj, config[CONF_CHANGE_RATE])


if config.get(CONF_ADJUSTABLE) is False:
lv_obj.remove_style(w.obj, nullptr, literal("LV_PART_KNOB"))
w.clear_flag("LV_OBJ_FLAG_CLICKABLE")

value = await get_start_value(config)
if value is not None:
lv.arc_set_value(w.obj, value)


arc_spec = ArcType()
1 change: 1 addition & 0 deletions esphome/components/lvgl/defines.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ def extend(self, *choices):


# Widgets
CONF_ARC = "arc"
CONF_BAR = "bar"
CONF_LABEL = "label"
CONF_SLIDER = "slider"
Expand Down
21 changes: 21 additions & 0 deletions tests/components/lvgl/lvgl-package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,27 @@ lvgl:

- id: page2
widgets:
- arc:
align: left_mid
id: lv_arc
adjustable: true
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
- bar:
id: bar_id
align: top_mid
Expand Down