esphome:
name: lilka
friendly_name: lilka
on_boot:
priority: 600
then:
- output.turn_on: display_power
- delay: 100ms
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
logger:
api:
encryption:
key: "Yw3yq8lxsaze+jdggjAwxKpV4GD6gNZptvw4d6OPfOc="
ota:
- platform: esphome
password: "bb198feb99159fdaefc8092f10039acd"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Lilka Fallback Hotspot"
password: "hnYImYM4O6I0"
captive_portal:
# Веб-сервер
web_server:
port: 80
# Увімкнення живлення дисплея
output:
- platform: gpio
pin: 46
id: display_power
inverted: false
# Сенсор батареї
sensor:
- platform: adc
pin: GPIO3
name: "Battery Voltage"
id: battery_voltage
update_interval: 10s
attenuation: 12db
filters:
- multiply: 1.33
- platform: template
name: "Battery Level"
id: battery_level
unit_of_measurement: "%"
accuracy_decimals: 0
update_interval: 10s
lambda: |-
float voltage = id(battery_voltage).state;
float percent = (voltage - 3.0) / (4.2 - 3.0) * 100.0;
if (percent > 100) percent = 100;
if (percent < 0) percent = 0;
return percent;
# SPI шина
spi:
clk_pin: 18
mosi_pin: 17
# Дисплей ST7789V
display:
- platform: mipi_spi
model: ST7789V
id: my_display
dc_pin: 15
cs_pin: 7
rotation: 270
invert_colors: false
color_order: RGB
pixel_mode: 16bit
dimensions:
width: 240
height: 280
offset_width: 0
offset_height: 0
auto_clear_enabled: false
# LVGL - мінімальний варіант
lvgl:
log_level: INFO
pages:
- id: main_page
widgets:
# Заголовок
- label:
text: "Lilka LVGL"
align: TOP_MID
y: 20
# Батарея
- label:
id: battery_label
text: "Battery: --"
align: TOP_MID
y: 50
# Текст по центру
- label:
text: "LVGL Works!"
align: CENTER
# Кнопки керування - БЕЗ lvgl дій поки що
binary_sensor:
- platform: gpio
pin:
number: 38
mode: INPUT_PULLUP
inverted: true
name: "Button Up"
id: button_up
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 41
mode: INPUT_PULLUP
inverted: true
name: "Button Down"
id: button_down
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 39
mode: INPUT_PULLUP
inverted: true
name: "Button Left"
id: button_left
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 40
mode: INPUT_PULLUP
inverted: true
name: "Button Right"
id: button_right
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 5
mode: INPUT_PULLUP
inverted: true
name: "Button A"
id: button_a
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 6
mode: INPUT_PULLUP
inverted: true
name: "Button B"
id: button_b
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 10
mode: INPUT_PULLUP
inverted: true
name: "Button C"
id: button_c
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 9
mode: INPUT_PULLUP
inverted: true
name: "Button D"
id: button_d
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 4
mode: INPUT_PULLUP
inverted: true
name: "Button Start"
id: button_start
filters:
- delayed_on_off: 50ms
- platform: gpio
pin:
number: 0
mode: INPUT_PULLUP
inverted: true
name: "Button Select"
id: button_select
filters:
- delayed_on_off: 50ms
# Оновлення батареї
interval:
- interval: 5s
then:
- lvgl.label.update:
id: battery_label
text: !lambda |-
return std::string("Battery: ") + to_string((int)id(battery_level).state) + "%";