LVGL cookbook (#4110)

Co-authored-by: Keith Burzinski <kbx81x@gmail.com>
Co-authored-by: clydebarrow <2366188+clydebarrow@users.noreply.github.com>
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
H. Árkosi Róbert 2024-09-15 12:00:17 +02:00 committed by Jesse Hills
parent 0f6122ec36
commit 300327649e
No known key found for this signature in database
GPG Key ID: BEAAE804EFD8E83A
24 changed files with 2276 additions and 6 deletions

View File

@ -16,6 +16,7 @@ The graphic display should be configured with ``auto_clear_enabled: false`` and
For interactivity, a :doc:`Touchscreen </components/touchscreen/index>` (capacitive highly preferred), a :doc:`/components/sensor/rotary_encoder` or a custom keypad made up from discrete :doc:`Binary Sensors </components/binary_sensor/index>` can be used. For interactivity, a :doc:`Touchscreen </components/touchscreen/index>` (capacitive highly preferred), a :doc:`/components/sensor/rotary_encoder` or a custom keypad made up from discrete :doc:`Binary Sensors </components/binary_sensor/index>` can be used.
Check out the detailed examples in :ref:`the Cookbook <lvgl-cookbook>` which demonstrate a number of ways you can integrate your environment with LVGL and ESPHome.
Basics Basics
------ ------
@ -146,6 +147,7 @@ The following configuration variables apply to the main ``lvgl`` component, in o
align: CENTER align: CENTER
text: 'Hello World!' text: 'Hello World!'
See :ref:`lvgl-cookbook-navigator` in the Cookbook for an example which demonstrates how to implement a page navigation bar at the bottom of the screen.
.. _lvgl-color: .. _lvgl-color:
@ -176,6 +178,7 @@ You can use :ref:`fonts configured normally<display-fonts>`, the glyphs will be
For best results, set ``bpp: 4`` to get the glyphs rendered with proper anti-aliasing. For best results, set ``bpp: 4`` to get the glyphs rendered with proper anti-aliasing.
Check out :ref:`lvgl-cookbook-icontext`, :ref:`lvgl-cookbook-iconstat` and :ref:`lvgl-cookbook-iconbatt` in the Cookbook for examples which demonstrate how to use icons and text with TrueType/OpenType fonts.
**Library fonts** **Library fonts**
@ -378,6 +381,7 @@ So the precedence happens like this: state based styles override the locally spe
Feel free to experiment to discover inheritance and precedence of the styles based on states between the nested widgets. Feel free to experiment to discover inheritance and precedence of the styles based on states between the nested widgets.
:ref:`lvgl-cookbook-theme` The Cookbook contains an example which demonstrates how to implement a gradient style for your widgets.
.. _lvgl-layouts: .. _lvgl-layouts:
@ -388,6 +392,7 @@ Layouts aim to position widgets automatically, eliminating the need to specify `
The layout configuration options are applied to any parent widget or page, influencing the appearance of the children. The position and size calculated by the layout overwrites the *normal* ``x``, ``y``, ``width``, and ``height`` settings of the children. The layout configuration options are applied to any parent widget or page, influencing the appearance of the children. The position and size calculated by the layout overwrites the *normal* ``x``, ``y``, ``width``, and ``height`` settings of the children.
Check out :ref:`lvgl-cookbook-flex`, :ref:`lvgl-cookbook-grid` and :ref:`lvgl-cookbook-weather` in the Cookbook for examples which demonstrate how to automate widget positioning, potentially reducing the size of your device's YAML configuration, and saving you from lots of manual calculations.
The ``hidden``, ``ignore_layout`` and ``floating`` :ref:`flags <lvgl-widget-flags>` can be used on widgets to ignore them in layout calculations. The ``hidden``, ``ignore_layout`` and ``floating`` :ref:`flags <lvgl-widget-flags>` can be used on widgets to ignore them in layout calculations.
@ -594,7 +599,7 @@ This :ref:`action <actions-action>` redraws the entire screen, or optionally onl
This :ref:`action <actions-action>` pauses the activity of LVGL, including rendering. This :ref:`action <actions-action>` pauses the activity of LVGL, including rendering.
- **show_snow** (*Optional*, boolean): When paused, display random colored pixels across the entire screen in order to minimize screen burn-in, to relief the tension put on each individual pixel. - **show_snow** (*Optional*, boolean): When paused, display random colored pixels across the entire screen in order to minimize screen burn-in, to relief the tension put on each individual pixel. See :ref:`lvgl-cookbook-antiburn` for an example which demonstrates how to use this.
.. code-block:: yaml .. code-block:: yaml
@ -801,6 +806,7 @@ The ``on_idle`` :ref:`triggers <automation>` are activated when inactivity time
- light.turn_off: display_backlight - light.turn_off: display_backlight
- lvgl.pause: - lvgl.pause:
See :ref:`lvgl-cookbook-idlescreen` for an example which demonstrates how to implement screen saving with idle settings.
See Also See Also
-------- --------
@ -811,6 +817,7 @@ See Also
* *
- :doc:`LVGL Examples in the Cookbook </cookbook/lvgl>`
- :doc:`/components/display/index` - :doc:`/components/display/index`
- :doc:`/components/touchscreen/index` - :doc:`/components/touchscreen/index`
- :doc:`/components/sensor/rotary_encoder` - :doc:`/components/sensor/rotary_encoder`

View File

@ -83,6 +83,8 @@ To apply styles to the states, you need to specify them one level above, for exa
The state itself can be can be changed by interacting with the widget, or through :ref:`actions <lvgl-automation-actions>` with ``lvgl.widget.update``. The state itself can be can be changed by interacting with the widget, or through :ref:`actions <lvgl-automation-actions>` with ``lvgl.widget.update``.
See :ref:`lvgl-cookbook-cover` for a cookbook example which demonstrates how to use styling and properties to show different states of a Home Assistant entity.
.. _lvgl-widget-flags: .. _lvgl-widget-flags:
In addition to visual styling, each widget supports some boolean **flags** to influence the behavior: In addition to visual styling, each widget supports some boolean **flags** to influence the behavior:
@ -114,7 +116,7 @@ In addition to visual styling, each widget supports some boolean **flags** to in
.. note:: .. note::
LVGL only supports **integers** for numeric ``value``. Visualizer widgets can't display floats directly, but they allow scaling by 10s. LVGL only supports **integers** for numeric ``value``. Visualizer widgets can't display floats directly, but they allow scaling by 10s. Some examples in the :doc:`Cookbook </cookbook/lvgl>` cover how to do that.
.. _lvgl-widget-parts: .. _lvgl-widget-parts:
@ -264,6 +266,8 @@ The animation image is similar to the normal ``image`` widget. The main differen
repeat_count: 100 repeat_count: 100
duration: 300ms duration: 300ms
See :ref:`lvgl-cookbook-animbatt` in the Cookbook for a more detailed example.
.. _lvgl-widget-arc: .. _lvgl-widget-arc:
``arc`` ``arc``
@ -345,7 +349,9 @@ If the ``adv_hittest`` :ref:`flag <lvgl-widget-flags>` is enabled the arc can be
The ``on_value`` trigger is sent as the arc knob is dragged or changed with keys. The event is sent *continuously* while the arc knob is being dragged; this generally has a negative effect on performance. To mitigate this, consider using a :ref:`universal interaction trigger <lvgl-automation-triggers>` like ``on_release``, to get the ``x`` variable once after the interaction has completed. The ``on_value`` trigger is sent as the arc knob is dragged or changed with keys. The event is sent *continuously* while the arc knob is being dragged; this generally has a negative effect on performance. To mitigate this, consider using a :ref:`universal interaction trigger <lvgl-automation-triggers>` like ``on_release``, to get the ``x`` variable once after the interaction has completed.
The ``arc`` can be also integrated as :doc:`Number </components/number/lvgl>` or :doc:`Sensor </components/sensor/lvgl>` component. The ``arc`` can be also integrated as a :doc:`Number </components/number/lvgl>` or :doc:`Sensor </components/sensor/lvgl>` component.
See :ref:`lvgl-cookbook-bright` and :ref:`lvgl-cookbook-volume` for examples which demonstrate how to use a slider (or an arc) to control entities in Home Assistant.
.. _lvgl-widget-bar: .. _lvgl-widget-bar:
@ -466,6 +472,8 @@ To have a button with a text label on it, add a child :ref:`lvgl-widget-label` w
The ``button`` can be also integrated as a :doc:`Binary Sensor </components/binary_sensor/lvgl>` or as a :doc:`Switch </components/switch/lvgl>` component. The ``button`` can be also integrated as a :doc:`Binary Sensor </components/binary_sensor/lvgl>` or as a :doc:`Switch </components/switch/lvgl>` component.
See :ref:`lvgl-cookbook-binent` for an example which demonstrates how to use a checkable button to act on a Home Assistant service.
.. _lvgl-widget-buttonmatrix: .. _lvgl-widget-buttonmatrix:
``buttonmatrix`` ``buttonmatrix``
@ -596,7 +604,7 @@ The button matrix widget is a lightweight way to display multiple buttons in row
.. tip:: .. tip::
The Button Matrix widget supports the :ref:`key_collector` to collect the button presses as key press sequences for further automations. The Button Matrix widget supports the :ref:`key_collector` to collect the button presses as key press sequences for further automations. Check out :ref:`lvgl-cookbook-keypad` for an example.
.. _lvgl-widget-checkbox: .. _lvgl-widget-checkbox:
@ -656,7 +664,7 @@ The checkbox widget is made internally from a *tick box* and a label. When the c
.. note:: .. note::
In case you configure ``default_font`` in the main section to a custom font, the checkmark will not be shown correctly when the checkbox is in the checked state. In case you configure ``default_font`` in the main section to a custom font, the checkmark will not be shown correctly when the checkbox is in the checked state. See :ref:`lvgl-cookbook-ckboxmark` for how to easily resolve this.
The ``checkbox`` can be also integrated as a :doc:`Switch </components/switch/lvgl>` component. The ``checkbox`` can be also integrated as a :doc:`Switch </components/switch/lvgl>` component.
@ -988,6 +996,8 @@ The ``led`` can be also integrated as :doc:`Light </components/light/lvgl>` comp
If configured as a light component, ``color`` and ``brightness`` are overridden by the light at startup, according to its ``restore_mode`` setting. If configured as a light component, ``color`` and ``brightness`` are overridden by the light at startup, according to its ``restore_mode`` setting.
Check out :ref:`lvgl-cookbook-keypad` in the Cookbook for an example which demonstrates how to change the ``led`` styling properties from an automation.
.. _lvgl-widget-line: .. _lvgl-widget-line:
``line`` ``line``
@ -1139,6 +1149,8 @@ The meter widget can visualize data in very flexible ways. It can use arcs, need
id: temperature_needle id: temperature_needle
value: 3 value: 3
See :ref:`lvgl-cookbook-gauge`, :ref:`lvgl-cookbook-thermometer` and :ref:`lvgl-cookbook-clock` in the Cookbook for examples which demonstrate how to effectively use this widget.
.. _lvgl-widget-msgbox: .. _lvgl-widget-msgbox:
``msgboxes`` ``msgboxes``
@ -1362,6 +1374,8 @@ Normally, the slider can be adjusted either by dragging the knob, or by clicking
The ``slider`` can be also integrated as :doc:`Number </components/number/lvgl>` or :doc:`Sensor </components/sensor/lvgl>` component. The ``slider`` can be also integrated as :doc:`Number </components/number/lvgl>` or :doc:`Sensor </components/sensor/lvgl>` component.
See :ref:`lvgl-cookbook-bright` and :ref:`lvgl-cookbook-volume` for examples which demonstrate how to use a slider to control entities in Home Assistant.
.. _lvgl-widget-spinbox: .. _lvgl-widget-spinbox:
``spinbox`` ``spinbox``
@ -1437,7 +1451,9 @@ The spinbox contains a numeric value (as text) which can be increased or decreas
format: "Spinbox value is %f" format: "Spinbox value is %f"
args: [ x ] args: [ x ]
The ``spinbox`` can be also integrated as :doc:`Number </components/number/lvgl>` or :doc:`Sensor </components/sensor/lvgl>` component. The ``spinbox`` can be also integrated as a :doc:`Number </components/number/lvgl>` or :doc:`Sensor </components/sensor/lvgl>` component.
See :ref:`lvgl-cookbook-climate` for an example which demonstrates how to implement a thermostat control using the spinbox.
.. _lvgl-widget-spinner: .. _lvgl-widget-spinner:
@ -1531,6 +1547,8 @@ The switch looks like a little slider and can be used to turn something on and o
The ``switch`` can be also integrated as a :doc:`Switch </components/switch/lvgl>` component. The ``switch`` can be also integrated as a :doc:`Switch </components/switch/lvgl>` component.
See :ref:`lvgl-cookbook-relay` for an example which demonstrates how to use a switch to act on a local component.
.. _lvgl-widget-tabview: .. _lvgl-widget-tabview:
``tabview`` ``tabview``
@ -1781,6 +1799,7 @@ This powerful :ref:`action <actions-action>` allows changing/updating any widget
id: my_label_id id: my_label_id
hidden: true hidden: true
Check out in the Cookbook :ref:`lvgl-cookbook-binent` for an example which demonstrates how to use a template to update the state.
.. _lvgl-automation-shorthands: .. _lvgl-automation-shorthands:

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

2242
cookbook/lvgl.rst Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1155,6 +1155,7 @@ Cookbook
.. imgtable:: .. imgtable::
Lambda Magic: Tips and Tricks, cookbook/lambda_magic, head-lightbulb-outline.svg, dark-invert Lambda Magic: Tips and Tricks, cookbook/lambda_magic, head-lightbulb-outline.svg, dark-invert
LVGL Recipes, cookbook/lvgl, lvgl.png
Garage Door Template Cover, cookbook/garage-door, garage-variant.svg, dark-invert Garage Door Template Cover, cookbook/garage-door, garage-variant.svg, dark-invert
Time & Temperature on OLED Display, cookbook/display_time_temp_oled, display_time_temp_oled_2.jpg Time & Temperature on OLED Display, cookbook/display_time_temp_oled, display_time_temp_oled_2.jpg
ESP32 Water Leak Detector, cookbook/leak-detector-m5stickC, leak-detector-m5stickC_main_index.jpg ESP32 Water Leak Detector, cookbook/leak-detector-m5stickC, leak-detector-m5stickC_main_index.jpg

View File

@ -396,6 +396,7 @@ def lint_directive_formatting(fname, content):
exclude=[ exclude=[
"components/web_server.rst", "components/web_server.rst",
"components/image.rst", "components/image.rst",
"cookbook/lvgl.rst",
], ],
) )
def lint_esphome_io_link(fname, match): def lint_esphome_io_link(fname, match):