nene1234

lilka + display + button

Nov 11th, 2025
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 4.73 KB | None | 0 0
  1. esphome:
  2.   name: lilka
  3.   friendly_name: lilka
  4.   on_boot:
  5.     priority: 600
  6.     then:
  7.       - output.turn_on: display_power
  8.       - delay: 100ms
  9.  
  10. esp32:
  11.   board: esp32-s3-devkitc-1
  12.   framework:
  13.     type: esp-idf
  14.  
  15. logger:
  16. api:
  17.   encryption:
  18.     key: "Yw3yq8lxsaze+jdggjAwxKpV4GD6gNZptvw4d6OPfOc="
  19.  
  20. ota:
  21.   - platform: esphome
  22.     password: "bb198feb99159fdaefc8092f10039acd"
  23.  
  24. wifi:
  25.   ssid: !secret wifi_ssid
  26.   password: !secret wifi_password
  27.   ap:
  28.     ssid: "Lilka Fallback Hotspot"
  29.     password: "hnYImYM4O6I0"
  30.  
  31. captive_portal:
  32. # Веб-сервер для моніторингу
  33. web_server:
  34.   port: 80
  35.  
  36. # Увімкнення живлення дисплея
  37. output:
  38.   - platform: gpio
  39.     pin: 46
  40.     id: display_power
  41.     inverted: false
  42.  
  43. # Кнопки керування
  44. binary_sensor:
  45.  # D-Pad (ліва група)
  46.   - platform: gpio
  47.     pin:
  48.       number: 38
  49.       mode: INPUT_PULLUP
  50.       inverted: true
  51.     name: "Button Up"
  52.     id: button_up
  53.     filters:
  54.       - delayed_on_off: 50ms
  55.    
  56.   - platform: gpio
  57.     pin:
  58.       number: 41
  59.       mode: INPUT_PULLUP
  60.       inverted: true
  61.     name: "Button Down"
  62.     id: button_down
  63.     filters:
  64.       - delayed_on_off: 50ms
  65.    
  66.   - platform: gpio
  67.     pin:
  68.       number: 39
  69.       mode: INPUT_PULLUP
  70.       inverted: true
  71.     name: "Button Left"
  72.     id: button_left
  73.     filters:
  74.       - delayed_on_off: 50ms
  75.    
  76.   - platform: gpio
  77.     pin:
  78.       number: 40
  79.       mode: INPUT_PULLUP
  80.       inverted: true
  81.     name: "Button Right"
  82.     id: button_right
  83.     filters:
  84.       - delayed_on_off: 50ms
  85.  
  86.   # Кнопки A, B, C, D (права група)
  87.   - platform: gpio
  88.     pin:
  89.       number: 5
  90.       mode: INPUT_PULLUP
  91.       inverted: true
  92.     name: "Button A"
  93.     id: button_a
  94.     filters:
  95.       - delayed_on_off: 50ms
  96.    
  97.   - platform: gpio
  98.     pin:
  99.       number: 6
  100.       mode: INPUT_PULLUP
  101.       inverted: true
  102.     name: "Button B"
  103.     id: button_b
  104.     filters:
  105.       - delayed_on_off: 50ms
  106.  
  107.   - platform: gpio
  108.     pin:
  109.       number: 10
  110.       mode: INPUT_PULLUP
  111.       inverted: true
  112.     name: "Button C"
  113.     id: button_c
  114.     filters:
  115.       - delayed_on_off: 50ms
  116.  
  117.   - platform: gpio
  118.     pin:
  119.       number: 9
  120.       mode: INPUT_PULLUP
  121.       inverted: true
  122.     name: "Button D"
  123.     id: button_d
  124.     filters:
  125.       - delayed_on_off: 50ms
  126.  
  127.   # Кнопки Start і Select (центральні)
  128.   - platform: gpio
  129.     pin:
  130.       number: 4
  131.       mode: INPUT_PULLUP
  132.       inverted: true
  133.     name: "Button Start"
  134.     id: button_start
  135.     filters:
  136.       - delayed_on_off: 50ms
  137.  
  138.   - platform: gpio
  139.     pin:
  140.       number: 0
  141.       mode: INPUT_PULLUP
  142.       inverted: true
  143.     name: "Button Select"
  144.     id: button_select
  145.     filters:
  146.       - delayed_on_off: 50ms
  147.  
  148. # Сенсор батареї
  149. sensor:
  150.   - platform: adc
  151.     pin: GPIO3
  152.     name: "Battery Voltage"
  153.     id: battery_voltage
  154.     update_interval: 10s
  155.     attenuation: 11db
  156.     filters:
  157.       - multiply: 1.33  # Дільник напруги R1=33kΩ, R2=100kΩ (1/0.7519)
  158.    
  159.   - platform: template
  160.     name: "Battery Level"
  161.     id: battery_level
  162.     unit_of_measurement: "%"
  163.     accuracy_decimals: 0
  164.     update_interval: 10s
  165.     lambda: |-
  166.       float voltage = id(battery_voltage).state;
  167.       // LiPo: 4.2V = 100%, 3.0V = 0%
  168.       float percent = (voltage - 3.0) / (4.2 - 3.0) * 100.0;
  169.       if (percent > 100) percent = 100;
  170.       if (percent < 0) percent = 0;
  171.       return percent;
  172.  
  173. # SPI шина
  174. spi:
  175.   clk_pin: 18
  176.   mosi_pin: 17
  177.  
  178. # Шрифти
  179. font:
  180.   - file: "gfonts://Roboto"
  181.     id: default_font
  182.     size: 20
  183.   - file: "gfonts://Roboto"
  184.     id: small_font
  185.     size: 14
  186.  
  187. # Дисплей ST7789V
  188. display:
  189.   - platform: mipi_spi
  190.     model: ST7789V
  191.     dc_pin: 15
  192.     cs_pin: 7
  193.     update_interval: 1s
  194.     rotation: 270    
  195.     invert_colors: false
  196.     color_order: RGB
  197.     pixel_mode: 16bit
  198.     dimensions:
  199.       width: 240
  200.       height: 280
  201.       offset_width: 0
  202.       offset_height: 0
  203.     lambda: |-
  204.       it.fill(Color::BLACK);
  205.      
  206.       // Головний текст по центру
  207.       it.print(140, 120, id(default_font), Color::WHITE, TextAlign::CENTER, "Lilka Works!");
  208.      
  209.       // Відображення заряду батареї
  210.       if (id(battery_level).has_state()) {
  211.         it.printf(140, 90, id(small_font), Color(0, 255, 0), TextAlign::CENTER,
  212.                   "Battery: %.0f%%", id(battery_level).state);
  213.       }
  214.      
  215.       // Відображення напруги
  216.       if (id(battery_voltage).has_state()) {
  217.         it.printf(140, 150, id(small_font), Color(255, 255, 0), TextAlign::CENTER,
  218.                   "Voltage: %.2fV", id(battery_voltage).state);
  219.       }
Advertisement
Add Comment
Please, Sign In to add comment