En esta entrada te traigo una pantalla muy interesante para manejar tus dispositivos, vamos a integrar el MaTouch ESP32-S3 Rotary 2.1″ en HA.
Índice
MaTouch ESP32-S3 Rotary 2,1″
Esta pantalla fabricada por Makerfabs es un dispositivos muy popular. Se trata de una pantalla ST7701 táctil circular de 2,1″ (480×480 pixels), RGB, con una tasa de refresco de 75 FPS y una resolución de color de 65K. Además del control táctil, nos permite navegar con ella con el encoder que trae alrededor y un botón al pulsar la pantalla. Personalmente me recuerda mucho al Google Nest Thermostat, sólo que mucho más barato 😅.
Además funciona sobre una placa ESP32-S3, con 8 MB de PSRAM y 16 MB de memoria flash integrada, por lo que podemos integrarla con ESPHome y hacer muchas más cosas. Tiene Wi-Fi y Bluetooth 5.0 por lo que, entre otras, podemos usarla como Bluetooth Proxy con Bermuda. Se alimenta con un cable USB-C y tiene dos conectores de expansión (I2C y UART), por lo que puedes añadir sensores externos.

Requisitos previos
Para integrar el MaTouch ESP32-S3 Rotary 2.1″ en HA previamente necesitas:
- Una pantalla MaTouch ESP32-S3 Rotary 2,1″.
- Haber instalado ESPHome en Home Assistant.
- Un cable USB-C para alimentar la placa de DATOS (con un cable de carga no vas a poder instalar el software).
- Opcionalmente, el soporte que hemos diseñado.
Configuración en ESPHome
Sigue estos pasos para integrar el MaTouch ESP32-S3 Rotary 2.1″ en HA:
- En Home Assistant, ve a tu complemento de ESPHome, pulsa en “New device” y “Continue”.
- Dale un nombre a tu dispositivo (por ejemplo, “MaTouch Rotary ST7701”) y pulsa en “Next”.
- Como tipo de dispositivo selecciona “ESP32-S3”. Observarás de fondo que se ha creado un nuevo bloque para tu dispositivo.
- Pulsa en “Skip” y haz clic en “Edit”, sobre el bloque de tu dispositivo. Copia el código que aparece y consérvalo, ya que vas a necesitar alguna parte del mismo.
- Copia el siguiente código y úsalo para reemplazar el código anterior en ESPHome.
substitutions:
name: "matouch-rotary-st7701"
friendly_name: "MaTouch Rotary ST7701"
esphome:
name: "${name}"
friendly_name: "${friendly_name}"
min_version: 2024.11.0
name_add_mac_suffix: false
platformio_options:
board_build.flash_mode: dio
board_build.arduino.memory_type: qio_opi
build_flags: "-DBOARD_HAS_PSRAM"
board_upload.maximum_ram_size: 524288
esp32:
board: esp32-s3-devkitc-1
flash_size: 16MB
framework:
type: esp-idf
version: recommended
sdkconfig_options:
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: y
CONFIG_ESP32S3_DATA_CACHE_64KB: y
CONFIG_SPIRAM_FETCH_INSTRUCTIONS: y
CONFIG_SPIRAM_RODATA: y
psram:
speed: 80MHz
mode: octal
# Enable logging
logger:
level: DEBUG
debug:
update_interval: 30s
# Enable Home Assistant API
api:
encryption:
key: "k522xpMnuyqLiQDfjzNs40UMIJJATLY7NdAkP4GrJnE="
# Allow Over-The-Air updates
ota:
- platform: esphome
password: "9a95fbbd5964f3eb28c043ee1fb641d4"
mdns:
disabled: false
wifi:
power_save_mode: none
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Matouch-Rotary-St7701"
password: "TbK3wh8IPTC0"
external_components:
- source: github://sEbola76/Makerfabs
components: [ cst826 ]
captive_portal:
binary_sensor:
- platform: gpio
name: Button
id: front_button
pin:
number: GPIO14
inverted: true
i2c:
- id: i2c_bus
sda: 17
scl: 18
scan: true
frequency: 400kHz
light:
- platform: monochromatic
name: "Backlight"
output: backlight_output
id: display_backlight
restore_mode: ALWAYS_ON
output:
- platform: ledc
pin: GPIO38
id: backlight_output
sensor:
- platform: rotary_encoder
id: encoder
pin_a: GPIO10
pin_b: GPIO13
spi:
id: spi_bus
mosi_pin: GPIO0
clk_pin: GPIO46
time:
- platform: homeassistant
id: esptime
touchscreen:
platform: cst826
id: touch
#interrupt_pin: GPIO40
#reset_pin: GPIO16
i2c_id: i2c_bus
skip_probe: True
update_interval: 25ms
#touch_timeout: 5ms
on_touch:
- logger.log:
format: Touch at (%d, %d)
args: [touch.x, touch.y]
- lambda: |-
ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%0d",
touch.x,
touch.y,
touch.x_raw,
touch.y_raw
);
display:
- platform: st7701s
id: round_display
auto_clear_enabled: false
color_order: rgb
data_rate: 10MHz
spi_mode: MODE3
dimensions:
width: 480
height: 480
cs_pin: GPIO1
#reset_pin: GPIO
de_pin: GPIO2
hsync_pin: GPIO3
vsync_pin: GPIO42
pclk_pin: GPIO45
pclk_frequency: 12MHz
pclk_inverted: false
hsync_front_porch: 10
hsync_pulse_width: 8
hsync_back_porch: 50
vsync_front_porch: 10
vsync_pulse_width: 8
vsync_back_porch: 20
data_pins:
red:
- 11 #r1
- 15 #r2
- 12 #r3
- 16 #r4
- 21 #r5
green:
- 39 #g0
- 07 #g1
- 47 #g2
- 08 #g3
- 48 #g4
- 09 #g5
blue:
- 04 #b1
- 41 #b2
- 05 #b3
- 40 #b4
- 06 #b5
init_sequence:
- [0x01]
- delay 120ms
- [0xFF, 0x77, 0x01, 0x00, 0x00, 0x10]
- [0xC0, 0x3B, 0x00]
- [0xC1, 0x0B, 0x02]
- [0xC2, 0x00, 0x02]
- [0xCC, 0x10]
- [0xCD, 0x08]
- [0xB0, 0x02, 0x13, 0x1B, 0x0D, 0x10, 0x05, 0x08, 0x07, 0x07, 0x24, 0x04, 0x11, 0x0E, 0x2C, 0x33, 0x1D]
- [0xB1, 0x05, 0x13, 0x1B, 0x0D, 0x11, 0x05, 0x08, 0x07, 0x07, 0x24, 0x04, 0x11, 0x0E, 0x2C, 0x33, 0x1D]
- [0xFF, 0x77, 0x01, 0x00, 0x00, 0x11]
- [0xB0, 0x5d]
- [0xB1, 0x43]
- [0xB2, 0x81]
- [0xB3, 0x80]
- [0xB5, 0x43]
- [0xB7, 0x85]
- [0xB8, 0x20]
- [0xC1, 0x78]
- [0xC2, 0x78]
- [0xD0, 0x88]
- [0xE0, 0x00, 0x00, 0x02]
- [0xE1, 0x03, 0xA0, 0x00, 0x00, 0x04, 0xA0, 0x00, 0x00, 0x00, 0x20, 0x20]
- [0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
- [0xE3, 0x00, 0x00, 0x11, 0x00]
- [0xE4, 0x22, 0x00]
- [0xE5, 0x05, 0xEC, 0xA0, 0xA0, 0x07, 0xEE, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
- [0xE6, 0x00, 0x00, 0x11, 0x00]
- [0xE7, 0x22, 0x00]
- [0xE8, 0x06, 0xED, 0xA0, 0xA0, 0x08, 0xEF, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
- [0xEB, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00]
- [0xEd, 0xFF, 0xFF, 0xFF, 0xBA, 0x0A, 0xBF, 0x45, 0xFF, 0xFF, 0x54, 0xFB, 0xA0, 0xAB, 0xFF, 0xFF, 0xFF]
- [0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F]
- [0xFF, 0x77, 0x01, 0x00, 0x00, 0x13]
- [0xEF, 0x08]
- [0xFF, 0x77, 0x01, 0x00, 0x00, 0x00]
- [0x36, 0x08]
- [0x3A, 0x60]
- [0x11]
- delay 100ms
- [0x29]
- delay 50ms
lvgl:
displays:
- round_display
touchscreens:
- touch
encoders:
sensor: encoder
enter_button: front_button
buffer_size: 100%
widgets:
- label:
align: CENTER
id: lbl_title
text_font: montserrat_28
text: "Aguacatec"
- Parte importante. En este código no se han incluido las credenciales para que el dispositivo se conecte a tu WiFi y tu instancia de Home Assistant y tienes que incluirlas manualmente. En concreto me refiero a las siguientes líneas del código que has copiado en el paso 4.
# Enable Home Assistant API
api:
encryption:
key: "bg6hash6sjdjsdjk02hh0qnQeYVwm123vdfKE8BP5"
ota:
- platform: esphome
password: "asddasda27aab65a48484502b332f"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Assist Fallback Hotspot"
password: "ZsasdasdHGP2234"
- Lo que tienes que hacer es, encontrar las líneas correspondientes en el código (está al principio) y añadir la información correspondiente.
- Ahora sí, pulsa en “Save” e “Install”. Selecciona “Manual download” y espera a que se compile el código.
- Cuando termine, selecciona la opción “Modern format” para descargar el fichero ‘.bin’ correspondiente.
- Conecta el Matouch Rotary con el cable USB-C de datos por el puerto que trae en la parte posterior a tu ordenador.
- Ahora ve a la página de ESPHome y pulsa en “Connect”. En la ventana emergente selecciona tu placa y pulsa en “Conectar”.
- Ahora pulsa en “Install” y selecciona el fichero ‘.bin’ obtenido en el paso 9. De nuevo, pulsa en “Install”.
- Vuelve a Home Assistant y ve a Configuración > Dispositivos y servicios. Lo normal es que tu dispositivo haya sido descubierto y aparezca en la parte superior, esperando únicamente a que pulses el botón de “Configurar”. De lo contrario pulsa en el botón de “Añadir integración”, busca “ESPHome” e introduce la IP de tu placa en el campo ‘Host’. Como siempre, te recomiendo que asignes una IP fija en tu router para evitar fallos en el futuro si esta cambia.
- Para terminar ve a Configuración > Dispositivos y servicios > ESPHome. Pulsa sobre el enlace «Configurar» correspondiente tu dispositivo. En la ventana emergente marca la casilla «Permitir que el dispositivo realice acciones de Home Assistant» y pulsa en «Enviar». Esto va a permitir que podamos controlar nuestros dispositivos desde la pantalla.
Si todo ha ido bien, deberías estar viendo lo siguiente:

Código del Radar de Dragon Ball
Como seguro que ya te has imaginado, no podíamos dejar así este tremendo dispositivo. He creado un código de ejemplo para que puedas controlar tus dispositivos. Además he aprovechado para alimentar nuestro espíritu «friki» y convertirlo en el radar de Dragon Ball 😁
A continuación te dejo el código completo para que lo adaptes como quieras, así como el enlace al soporte que he diseñado.
substitutions:
# Device customization
# Personalización del dispositivo
name: "matouch-rotary-st7701"
friendly_name: "MaTouch Rotary ST7701"
# Example of Devices
# Ejemplo de Dispositivos
device1: light.tira_led_escritorio
device1_name: "Lámpara"
device1_brightness: sensor.light_brightness
device2: climate.salon
device2_name: "Calefacción"
device2_temperature: sensor.climate_temperature
device3: switch.impresora_3d
device3_name: "Ventilador"
device4: switch.impresora_3d
device4_name: "Impresora"
# Other settings
# Otros ajustes
allowed_characters: " ¿?¡!#%'()+,-./:°0123456789ABCDEFGHIJKLMNOPQRSTUVWYZabcdefghijklmnopqrstuvwxyzáéíóú"
################################################################################################################
esphome:
name: ${name}
friendly_name: ${friendly_name}
min_version: 2024.11.0
name_add_mac_suffix: false
platformio_options:
board_build.flash_mode: dio
board_build.arduino.memory_type: qio_opi
build_flags: "-DBOARD_HAS_PSRAM"
board_upload.maximum_ram_size: 524288
esp32:
board: esp32-s3-devkitc-1
flash_size: 16MB
framework:
type: esp-idf
version: recommended
sdkconfig_options:
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: y
CONFIG_ESP32S3_DATA_CACHE_64KB: y
CONFIG_SPIRAM_FETCH_INSTRUCTIONS: y
CONFIG_SPIRAM_RODATA: y
psram:
speed: 80MHz
mode: octal
# Enable logging
logger:
level: DEBUG
debug:
update_interval: 30s
# Enable Home Assistant API
api:
encryption:
key: "k522xpMadsasdJATLY7NdA879as"
# Allow Over-The-Air updates
ota:
- platform: esphome
password: "9a95fads935erfdfd212e1fb"
mdns:
disabled: false
wifi:
power_save_mode: none
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Matouch-Rotary-St7701"
password: "2134K3wasd"
external_components:
- source: github://sEbola76/Makerfabs
components: [ cst826 ]
captive_portal:
binary_sensor:
- platform: gpio
name: Button
id: front_button
internal: true
pin:
number: GPIO14
inverted: true
on_press:
then:
- lvgl.page.show: page_home
- light.turn_on: display_backlight
- if:
condition:
light.is_on: display_backlight
then:
- if:
condition:
lambda: |-
return id(device_menu).state == "${device1_name}";
then:
- homeassistant.action:
service: light.toggle
data:
entity_id: ${device1}
- delay: 1s
- lvgl.label.update:
id: lbl_device_state
text: !lambda |-
if (id(device_1).state == "off") {
return "Apagada";
} else {
return (std::to_string((int)id(light_brightness).state) + "%").c_str();
}
- if:
condition:
lambda: |-
return id(device_1).state == "on";
then:
- lvgl.widget.show:
- id: arc_light
else:
- lvgl.widget.hide:
- id: arc_light
- if:
condition:
lambda: |-
return id(device_menu).state == "${device2_name}";
then:
- homeassistant.action:
service: climate.toggle
data:
entity_id: ${device2}
- delay: 1s
- lvgl.label.update:
id: lbl_device_state
text: !lambda |-
if (id(device_2).state == "off") {
return "Apagada";
} else {
return (std::to_string((int)id(climate_temperature).state) + "°C").c_str();
}
- if:
condition:
lambda: |-
return id(device_2).state == "heat";
then:
- lvgl.widget.show:
- id: arc_climate
else:
- lvgl.widget.hide:
- id: arc_climate
- if:
condition:
lambda: |-
return id(device_menu).state == "${device3_name}";
then:
- homeassistant.action:
service: switch.toggle
data:
entity_id: ${device3}
- delay: 1s
- lvgl.label.update:
id: lbl_device_state
text: !lambda |-
return std::string(id(device_3).state == "on" ? "Encendido" : "Apagado");
- if:
condition:
lambda: |-
return id(device_menu).state == "${device4_name}";
then:
- homeassistant.action:
service: switch.toggle
data:
entity_id: ${device4}
- delay: 1s
- lvgl.label.update:
id: lbl_device_state
text: !lambda |-
return std::string(id(device_4).state == "on" ? "Encendida" : "Apagada");
font:
- file: "gfonts://Montserrat"
id: font_menu
size: 28
glyphs: ${allowed_characters}
- file: "gfonts://Montserrat"
id: font_state
size: 20
glyphs: ${allowed_characters}
i2c:
- id: i2c_bus
sda: 17
scl: 18
scan: true
frequency: 400kHz
image:
- file: https://aguacatec.es/wp-content/uploads/2025/05/radar_off.jpg
id: radar_off
resize: 480x480
type: RGB565
transparency: alpha_channel
- file: https://aguacatec.es/wp-content/uploads/2025/05/radar_on.jpg
id: radar_on
resize: 480x480
type: RGB565
transparency: alpha_channel
- file: https://aguacatec.es/wp-content/uploads/2025/05/icon_goku.png
id: icon_goku
resize: 240x240
type: RGB565
transparency: alpha_channel
light:
- platform: monochromatic
name: "Backlight"
output: backlight_output
id: display_backlight
restore_mode: ALWAYS_ON
on_turn_off:
lvgl.animimg.stop: animation_radar
on_turn_on:
select.first:
id: device_menu
output:
- platform: ledc
pin: GPIO38
id: backlight_output
select:
- platform: template
name: Dispositivos
id: device_menu
optimistic: true
options:
- ${device1_name}
- ${device2_name}
- ${device3_name}
- ${device4_name}
on_value:
then:
- lvgl.label.update:
id: lbl_device
text: !lambda 'return x;'
- lvgl.label.update:
id: lbl_device_state
text: !lambda |-
if (x == "${device1_name}") {
if ((id(device_1).state == "off") || isnan(id(light_brightness).state)) {
return "Apagada";
} else {
return (std::to_string((int)id(light_brightness).state) + "%").c_str();
}
} else if (x == "${device2_name}") {
if (id(device_2).state == "off") {
return "Apagada";
} else {
return (std::to_string((int)id(climate_temperature).state) + "°C").c_str();
}
} else if (x == "${device3_name}") {
return id(device_3).state == "on" ? "Encendido" : "Apagado";
} else if (x == "${device4_name}") {
return id(device_4).state == "on" ? "Encendida" : "Apagada";
} else {
return "Bienvenido!";
}
- if:
condition:
lambda: |-
return id(device_menu).state == "${device1_name}" && id(device_1).state == "on";
then:
- lvgl.widget.show:
- id: arc_light
else:
- lvgl.widget.hide:
- id: arc_light
- if:
condition:
lambda: |-
return id(device_menu).state == "${device2_name}" && id(device_2).state == "heat";
then:
- lvgl.widget.show:
- id: arc_climate
else:
- lvgl.widget.hide:
- id: arc_climate
sensor:
- platform: rotary_encoder
id: encoder
pin_a: GPIO10
pin_b: GPIO13
on_clockwise:
then:
- lvgl.page.show: page_home
- light.turn_on: display_backlight
- select.next:
id: device_menu
cycle: true
on_anticlockwise:
then:
- lvgl.page.show: page_home
- light.turn_on: display_backlight
- select.previous:
id: device_menu
cycle: true
- platform: homeassistant
id: light_brightness
entity_id: ${device1_brightness}
on_value:
then:
- lvgl.arc.update:
id: arc_light
value: !lambda 'return (int)x;'
- if:
condition:
lambda: |-
return id(device_menu).state == "${device1_name}" && id(device_1).state == "on";
then:
- lvgl.label.update:
id: lbl_device_state
text:
format: "%.0f%%"
args:
- id(light_brightness).state
- platform: homeassistant
id: climate_temperature
entity_id: ${device2_temperature}
on_value:
then:
- lvgl.arc.update:
id: arc_climate
value: !lambda 'return (int)x;'
- if:
condition:
lambda: |-
return id(device_menu).state == "${device2_name}" && id(device_2).state == "heat";
then:
- lvgl.label.update:
id: lbl_device_state
text:
format: "%.0f °C"
args:
- id(climate_temperature).state
spi:
id: spi_bus
mosi_pin: GPIO0
clk_pin: GPIO46
text_sensor:
- platform: homeassistant
id: device_1
entity_id: ${device1}
internal: true
- platform: homeassistant
id: device_2
entity_id: ${device2}
internal: true
- platform: homeassistant
id: device_3
entity_id: ${device3}
internal: true
- platform: homeassistant
id: device_4
entity_id: ${device4}
internal: true
time:
- platform: homeassistant
id: esptime
touchscreen:
platform: cst826
id: touch
#interrupt_pin: GPIO40
#reset_pin: GPIO16
i2c_id: i2c_bus
skip_probe: True
update_interval: 25ms
#touch_timeout: 5ms
on_touch:
- lvgl.page.show: page_home
- logger.log:
format: Touch at (%d, %d)
args: [touch.x, touch.y]
- lambda: |-
ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%0d",
touch.x,
touch.y,
touch.x_raw,
touch.y_raw
);
on_release:
then:
- if:
condition: lvgl.is_paused
then:
- lvgl.page.show: page_home
- light.turn_on: display_backlight
- lvgl.resume:
- lvgl.widget.redraw:
display:
- platform: st7701s
id: round_display
auto_clear_enabled: false
color_order: rgb
data_rate: 10MHz
spi_mode: MODE3
dimensions:
width: 480
height: 480
cs_pin: GPIO1
#reset_pin: GPIO
de_pin: GPIO2
hsync_pin: GPIO3
vsync_pin: GPIO42
pclk_pin: GPIO45
pclk_frequency: 12MHz
pclk_inverted: false
hsync_front_porch: 10
hsync_pulse_width: 8
hsync_back_porch: 50
vsync_front_porch: 10
vsync_pulse_width: 8
vsync_back_porch: 20
data_pins:
red:
- 11 #r1
- 15 #r2
- 12 #r3
- 16 #r4
- 21 #r5
green:
- 39 #g0
- 07 #g1
- 47 #g2
- 08 #g3
- 48 #g4
- 09 #g5
blue:
- 04 #b1
- 41 #b2
- 05 #b3
- 40 #b4
- 06 #b5
init_sequence:
- [0x01]
- delay 120ms
- [0xFF, 0x77, 0x01, 0x00, 0x00, 0x10]
- [0xC0, 0x3B, 0x00]
- [0xC1, 0x0B, 0x02]
- [0xC2, 0x00, 0x02]
- [0xCC, 0x10]
- [0xCD, 0x08]
- [0xB0, 0x02, 0x13, 0x1B, 0x0D, 0x10, 0x05, 0x08, 0x07, 0x07, 0x24, 0x04, 0x11, 0x0E, 0x2C, 0x33, 0x1D]
- [0xB1, 0x05, 0x13, 0x1B, 0x0D, 0x11, 0x05, 0x08, 0x07, 0x07, 0x24, 0x04, 0x11, 0x0E, 0x2C, 0x33, 0x1D]
- [0xFF, 0x77, 0x01, 0x00, 0x00, 0x11]
- [0xB0, 0x5d]
- [0xB1, 0x43]
- [0xB2, 0x81]
- [0xB3, 0x80]
- [0xB5, 0x43]
- [0xB7, 0x85]
- [0xB8, 0x20]
- [0xC1, 0x78]
- [0xC2, 0x78]
- [0xD0, 0x88]
- [0xE0, 0x00, 0x00, 0x02]
- [0xE1, 0x03, 0xA0, 0x00, 0x00, 0x04, 0xA0, 0x00, 0x00, 0x00, 0x20, 0x20]
- [0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
- [0xE3, 0x00, 0x00, 0x11, 0x00]
- [0xE4, 0x22, 0x00]
- [0xE5, 0x05, 0xEC, 0xA0, 0xA0, 0x07, 0xEE, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
- [0xE6, 0x00, 0x00, 0x11, 0x00]
- [0xE7, 0x22, 0x00]
- [0xE8, 0x06, 0xED, 0xA0, 0xA0, 0x08, 0xEF, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
- [0xEB, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00]
- [0xEd, 0xFF, 0xFF, 0xFF, 0xBA, 0x0A, 0xBF, 0x45, 0xFF, 0xFF, 0x54, 0xFB, 0xA0, 0xAB, 0xFF, 0xFF, 0xFF]
- [0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F]
- [0xFF, 0x77, 0x01, 0x00, 0x00, 0x13]
- [0xEF, 0x08]
- [0xFF, 0x77, 0x01, 0x00, 0x00, 0x00]
- [0x36, 0x08]
- [0x3A, 0x60]
- [0x11]
- delay 100ms
- [0x29]
- delay 50ms
lvgl:
displays:
- round_display
touchscreens:
- touch
encoders:
sensor: encoder
enter_button: front_button
buffer_size: 100%
bg_color: 0x000000
text_color: 0xff6600
style_definitions:
- id: style_roller
text_font: font_menu
align: CENTER
pad_top: 300
- id: style_device_state
text_font: font_state
text_color: 0x7f5100
align: CENTER
pad_top: 375
- id: style_arc
align: CENTER
width: 400
height: 400
arc_color: 0x7f5100
on_idle:
- timeout: 20s
then:
- lvgl.animimg.start: animation_radar
- logger.log: idle 20s timeout
- lvgl.page.show: page_iddle
- delay: 5s
- lvgl.pause:
- light.turn_off:
id: display_backlight
transition_length: 5s
pages:
- id: page_iddle
widgets:
- animimg:
align: CENTER
id: animation_radar
src: [ radar_off, radar_on ]
duration: 1000ms
- id: page_home
widgets:
- image:
align: CENTER
src: icon_goku
id: icongoku
- label:
styles: style_roller
id: lbl_device
text: "Aguacatec"
- label:
styles: style_device_state
id: lbl_device_state
text: "Bienvenido!"
- arc:
styles: style_arc
id: arc_light
indicator:
arc_color: 0xff6600
knob:
bg_color: 0xff6600
adjustable: true
value: 50
min_value: 0
max_value: 100
hidden: true
on_release:
- homeassistant.action:
action: light.turn_on
data:
entity_id: ${device1}
brightness_pct: !lambda return int(x);
- arc:
styles: style_arc
id: arc_climate
indicator:
arc_color: 0xff6600
knob:
bg_color: 0xff6600
adjustable: true
value: 20
min_value: 5
max_value: 25
hidden: true
on_release:
- homeassistant.action:
action: climate.set_temperature
data:
entity_id: ${device2}
temperature: !lambda return int(x);

