Advertisement
JosefC

Untitled

Mar 2nd, 2025 (edited)
399
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 4.41 KB | Software | 0 0
  1. esphome:
  2.   name: keypad
  3.  
  4. esp32:
  5.   board: nodemcu-32s
  6.  
  7. logger:
  8. api:
  9.   encryption:
  10.     key: "Tvůj klíč"
  11.  
  12. ota:
  13.   platform: esphome
  14.   password: "Tvůj Klíč"
  15.  
  16. wifi:
  17.   ssid: "Tvé SSID WiFi"
  18.   password: "Heslo Wifi"
  19.   fast_connect: true
  20.  
  21.   ap:
  22.     ssid: "Keypad Fallback Hotspot"
  23.     password: "Heslo hotspotu"
  24.  
  25. captive_portal:
  26. globals:
  27.   - id: entered_code
  28.     type: std::string
  29.     initial_value: '" "'
  30.   - id: last_key_press_time
  31.     type: unsigned long
  32.     initial_value: "0"
  33.   - id: last_code_sent_time
  34.     type: unsigned long
  35.     initial_value: "0"
  36.   - id: send_empty_flag
  37.     type: bool
  38.     initial_value: "false"
  39.  
  40. matrix_keypad:
  41.   id: mykeypad
  42.   rows:
  43.     - pin: GPIO18
  44.     - pin: GPIO5
  45.     - pin: GPIO17
  46.     - pin: GPIO16
  47.   columns:
  48.     - pin: GPIO4
  49.     - pin: GPIO0
  50.     - pin: GPIO2
  51.   keys: "123456789*0#"
  52.   has_diodes: false
  53.   on_key:
  54.     then:
  55.       - lambda: |-
  56.           // Bliknutí LED při každém stisku klávesy
  57.           id(led_keypad).turn_on();
  58.           delay(100);
  59.           id(led_keypad).turn_off();
  60.  
  61.           if (x == '#') {
  62.             // Po stisku '#' odešle zadané číslo
  63.             id(keypad_pressed_key).publish_state(id(entered_code));
  64.             id(last_code_sent_time) = millis();  // Nastaví čas posledního odeslání
  65.             id(send_empty_flag) = true;  // Nastaví příznak pro odeslání prázdného znaku
  66.  
  67.             // Blikání LED podle počtu zadaných číslic
  68.             int blink_count = id(entered_code).length();
  69.             for (int i = 0; i < blink_count; i++) {
  70.               id(led_keypad).turn_on();
  71.               delay(100);
  72.               id(led_keypad).turn_off();
  73.               delay(100);
  74.             }
  75.             // Vymazání zadaného čísla po odeslání
  76.             id(entered_code) = "";
  77.           } else {
  78.             // Aktualizace času posledního stisku klávesy
  79.             id(last_key_press_time) = millis();
  80.             // Reset času posledního odeslání a příznaku při stisku klávesy
  81.             id(last_code_sent_time) = 0;
  82.             id(send_empty_flag) = false;
  83.  
  84.             // Přidání stisknuté klávesy do zadaného čísla
  85.             id(entered_code) += x;
  86.           }
  87.  
  88. interval:
  89.   - interval: 100ms
  90.     then:
  91.       - lambda: |-
  92.           // Kontrola, zda uplynulo 2 sekundy od posledního stisku klávesy
  93.           if (millis() - id(last_key_press_time) >= 2000 && id(entered_code).length() > 0) {
  94.             // Odeslání zadaného čísla
  95.             id(keypad_pressed_key).publish_state(id(entered_code));
  96.             id(last_code_sent_time) = millis();  // Nastaví čas posledního odeslání
  97.             id(send_empty_flag) = true;  // Nastaví příznak pro odeslání prázdného znaku
  98.  
  99.             // Blikání LED podle počtu zadaných číslic
  100.             int blink_count = id(entered_code).length();
  101.             for (int i = 0; i < blink_count; i++) {
  102.               id(led_keypad).turn_on();
  103.               delay(100);
  104.               id(led_keypad).turn_off();
  105.               delay(100);
  106.             }
  107.  
  108.             // Vymazání zadaného čísla po odeslání
  109.             id(entered_code) = "";
  110.           }
  111.           // Kontrola, zda uplynulo 2 sekundy od posledního odeslání čísla a je-li nastaven příznak
  112.           if (millis() - id(last_code_sent_time) >= 2000 && id(send_empty_flag)) {
  113.             // Odeslání prázdného znaku
  114.             id(keypad_pressed_key).publish_state("");
  115.             id(send_empty_flag) = false;  // Reset příznaku
  116.           }
  117.  
  118. text_sensor:
  119.   - platform: wifi_info
  120.     ip_address:
  121.       name: ESP IP Address
  122.   - platform: template
  123.     name: "Keypad Pressed Key"
  124.     id: keypad_pressed_key
  125.     lambda: |-
  126.       return {};
  127.     update_interval: 100ms
  128.  
  129. sensor:
  130.   - platform: wifi_signal
  131.     name: "WiFi Signal Strength"
  132.     update_interval: 60s
  133.  
  134. binary_sensor:
  135.   - platform: status
  136.     id: wifi_status
  137.     on_state:
  138.       then:
  139.         - if:
  140.             condition:
  141.               lambda: 'return id(wifi_status).state;'
  142.             then:
  143.               - switch.turn_on: wifi_led
  144.             else:
  145.               - switch.turn_off: wifi_led
  146.  
  147. switch:
  148.   - platform: restart
  149.     name: "Keypad - RESTART"
  150.   - platform: gpio
  151.     pin: GPIO15
  152.     id: wifi_led
  153.     name: "WiFi LED"
  154.   - platform: gpio
  155.     pin: GPIO25
  156.     id: led_keypad
  157.     name: "Keypad LED"
  158.  
  159. web_server:
  160.   port: 80
  161.   version: 2
  162.  
Tags: keypad
Advertisement
Comments
  • JosefC
    1 day (edited)
    # text 0.51 KB | 0 0
    1. Modul ESP32 (NodeMCU 32S)
    2. Klávesnice matrix 4x3 klávesy.
    3. Po stisku číslice (číslic) dojde k jejich odeslání naráz po uplynutí 2s, nebo okamžitě po stisku klávesy #.
    4. Poté dojde k odeslání prázdného znaku po dalších dvou sekundách. Pokud před odesláním prázdného znaku dojde ke stisknutí jakékoliv číslice, dojde k resetu časovače odeslání prázdného znaku.
    5. Při stisku kláves, bliká "Keypad LED".
    6. Po odeslání číslic, "Keypad LED" blikne tolikrát, kolik číslic bylo odesláno.
Add Comment
Please, Sign In to add comment
Advertisement