Esphome przełączanie stron wyswietlacza Lcd2004

Działa
Musiałem dodać rezystor pomiedzy pin: (przełącznik) u mnie GPIO15 a mase 10k Ohm bo inaczej samoistnie zmienial stan i przełączał on-off kilka razy na sekunde. Aktualnie zmienia jak zewre GPIO do 3,3v - czasami jak zadługo przytrzymam to przełaczy kilka stron ale to bajka. Najważniejsze że działa.
Stawiam DUZE PIWO…Dziekuje Bardzo.

Pod spodem cała działająca konfiguracja dla zainteresowanych - przełączania stron na wyswietlaczu 1602 /2004 , - pamietac dodac rezystor 10k ohm.
Oraz fajny test połączen wifi i homeassiatnt sygnalizowany diodą na ESP32 odrazu wiadomo czy cos jest nie tak z połączeniami lub jak ESP wpadnie w pętle restartów.

substitutions:
  name: esphome-web-de7470
  friendly_name: ESPHome Web de7470

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  min_version: 2024.6.0
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: dev

esp32:
  board: esp32dev
  framework:
    type: arduino
    
packages:
  esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic.yaml@main

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# Allow Over-The-Air updates
ota:
  - platform: esphome
    password: !secret ota_password

# Allow provisioning Wi-Fi via serial
improv_serial:

wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_password
    priority: 0.0
  - ssid: !secret wifi_ssid2
    password: !secret wifi_password2
    priority: 5.0
  - ssid: !secret wifi_ssid3
    password: !secret wifi_password3
    priority: 4.0
  use_address: 192.168.0.147
  
  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.0.147
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.0.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0
    # Set this to the IP address of the router. Often ends with .1
    dns1: 192.168.0.1
    dns2: 8.8.8.8
  
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: !secret wifi_ap_ssid
    password: !secret wifi_ap_password

web_server:
  port: 80
  version: 2
  auth:
    username: !secret web_server_username
    password: !secret web_server_password
# Pobieranie czasu z HA
#time:
#  - platform: homeassistant
#    id: ha_time
time:
  - platform: sntp
    id: time_sntp
    timezone: Europe/Berlin


# Dioda LED Informacyjna o stanie połącznia.
#status_led:
#  pin: 
#    number: GPIO2 # PIN D4
#    inverted: yes # "yes" - Dioda mryga gdy nie można nawiązać połączenie.
#                  # "no"  - Dioda świeci gdy połączenie jest nawiązane.

# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:

dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
  import_full_config: true

# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
esp32_improv:
  authorizer: none

# To have a "next url" for improv serial
binary_sensor:
# Tekst sensor do zmiany stron wyswietlacza dziala tylko z oled nie z 1602 i 2004
  - platform: gpio
    pin: GPIO15
    id: "przelacznik"
    on_press:
      then:
        - lambda: |-
            id(page) = (id(page) + 1);
            if (id(page) > 4) {
            id(page) = 1;
            }
#      then:
#        - display.page.show_next: lcd
#        - component.update: lcd
button:
  - platform: restart
    name: "Restart ESP"
    icon: mdi:restart

switch:
  - platform: gpio
    id: led_wifi
    pin: GPIO2
    inverted: False

i2c:
  sda: 21
  scl: 22
  scan: True
  frequency: 400kHz

display:
  - platform: lcd_pcf8574
    dimensions: 20x4
    address: 0x27
    id: lcd
    lambda: |-
          switch (id(page)){
            case 1:
              it.print(0, 0, "Licznik1");
              it.strftime(10, 0, "%d.%m.%Y", id(time_sntp).now());
              it.print(0, 2, "Woda Zimna  :%.1f m3");
              it.print(0, 3, "Woda Ciepla :%.1f m3");
              break;
            case 2:
              it.print(0, 0, "Licznik2");
              it.strftime(10, 0, "%d.%m.%Y", id(time_sntp).now());
              it.print(0, 2, "Woda Zimna  :%.1f m3");
              it.print(0, 3, "Woda Ciepla :%.1f m3");
              break;
            case 3:
              it.print(0, 0, "Licznik3");
              it.strftime(10, 0, "%d.%m.%Y", id(time_sntp).now());
              it.print(0, 2, "Woda Zimna  :%.1f m3");
              it.print(0, 3, "Woda Ciepla :%.1f m3");
              break;
            case 4:
              it.print(0, 0, "Termin Odczytu");
              it.strftime(0, 1, "Czas     "  "%H:%M ", id(time_sntp).now());
              it.strftime(0, 2, "Data   "  "%d.%m.%Y", id(time_sntp).now());
              it.printf(0, 3, "Ip :%s", id(esp_ip_address).state.c_str());
              break;
          }

globals:
- id: page
  type: int
  initial_value: "1"

interval:
  - interval: 5s                                        # wykonaj co 1 sekundę
    then:
      if:                                               # jeżeli
        condition:
          wifi.connected:                               # połączenie z Wi-Fi
        then:                                           
          - if:
              condition:
                api.connected:                          
              then:                                     # jeżeli połączono z Wi-Fi
                - switch.turn_on: led_wifi              # to włącz LED Wi-Fi
              else:                                     # jeśli nie ma połączenia z HA to mrugaj LED Wi-Fi
                - switch.turn_on: led_wifi              # włącz LED Wi-Fi
                - delay: 500ms                          # odczekaj
                - switch.turn_off: led_wifi             # wyłącz LED Wi-Fi
                - delay: 500ms                          # odczekaj
        else:                                           # jeżeli nie połączono z Wi-Fi (automatycznie z HA również nie)
          - switch.turn_off: led_wifi
#  - interval: 5s
#    then:
#      - lambda: |-
#          id(page) = (id(page) + 1);
#          if (id(page) > 4) {
#            id(page) = 1;
#          }

text_sensor:
  - platform: wifi_info
    ip_address:
      id: esp_ip_address
      icon: mdi:ip-network
      name: ESP IP Address
      address_0:
        name: ESP IP Address 0
    ssid:
      name: ESP Connected SSID
    bssid:
      name: ESP Connected BSSID
    mac_address:
      name: ESP Mac Wifi Address
    scan_results:
      name: ESP Latest Scan Results
    dns_address:
      name: ESP DNS Address

Pozdrawiam