ESP WakeUP pin a nasledná akcia

www
Odpovědět
Uživatelský avatar
tiimsvk
Dárce - Donátor
Dárce - Donátor
Příspěvky: 801
Registrován: 06. květen 2021, 07:03
Dal poděkování: 72 poděkování
Dostal poděkování: 65 poděkování

ESP WakeUP pin a nasledná akcia

Příspěvek od tiimsvk »

Ahojte mám jednoduchú otázku a predpokladám, že je ťažška odpoveď na to

Mám esp32 s deep sleep a wake pinom
Tlačidlo, ktoré keď stlačim zobú esp32.
Ja by som chcel aby toto tlačidlo bolo pouzitelné aj na inú akciu napriklad zapnutie svetla. to znamená, že po stlačení tlačidla sa zobudí esp32 a nasledne sa zapne svetlo.

Nepotrebujem to ale aktivovať iba jedným tlačidlom ale na zariadení mam 3ks a každe ovláda iné zariadenie ale mali by tieto tlačidla aj zobudiť modul.

Problém je, že nedokážem napísať kód, ktorý detekuje, ktorým tlačidlom sa zariadenie zobudiloa naledne by poslal lubovolnu akciu.

Viete poradiť?

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: ESP WakeUP pin a nasledná akcia

Příspěvek od kiklhorn »



base.yaml a fonty zde: https://github.com/pulimento/TTGO-T-Dis ... ome-sample


Vyřešil jsem to takto, vezmi to jen jako koncept. Bylo by asi vhodné začít on_boot lambdu testováním co jej vlastně probudilo přes esp_sleep_get_wakeup_cause() a pouze v případě že ESP_SLEEP_WAKEUP_EXT1 tak počítat který pin. Ale vzhledem k tomu že mne jiné budíky nezajímají tak je to asi jedno.

Kód: Vybrat vše

esphome:
  name: wakeuptest
  on_boot:
    priority: 900
    then:
      lambda: |-
        id(wake_up_pin) = ((log(esp_sleep_get_ext1_wakeup_status()))/log(2));;
        esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); //INTERNAL PD

<<: !include base.yaml

esp32:
  board: featheresp32

  framework:
    type: arduino


globals:
   - id: wake_up_pin
     type: uint64_t
     restore_value: no
     initial_value: '0'

deep_sleep:
  run_duration: 20s
  sleep_duration: 10min
  esp32_ext1_wakeup: 
    pins: 
      - 25 
      - 27
    mode: ANY_HIGH
  wakeup_pin_mode: KEEP_AWAKE
  id: deep_sleep_1
  
# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "SQgkn9j23ki8fiG8fWO9kNiXb4ZID0fbXMjxxLLB0uo="

ota:
  password: "58ff98b3d759d79c62c8964001c798cb"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Wakeuptest Fallback Hotspot"
    password: "QSd3UqMR6j7m"

captive_portal:



### CUSTOM!!

spi:
  clk_pin: GPIO18
  mosi_pin: GPIO19

time:
  - platform: homeassistant
    id: esptime

binary_sensor:


  - platform: status
    name: "Node Status"
    id: system_status       
    
  - platform: gpio
    pin: 
      number: GPIO25
      inverted: True
      mode: INPUT_PULLDOWN
    name: "vstup GPIO25"
    id: vstup_GPIO25
  - platform: gpio
    pin: 
      number: GPIO27
      inverted: True
      mode: INPUT_PULLDOWN
    name: "vstup GPIO27"
    id: vstup_GPIO27
  

# We can still control the backlight independently
switch:
  - platform: gpio
    pin: GPIO4
    name: "Backlight"
    id: backlight              

sensor:

  - platform: adc
    pin: 34
    attenuation: 11db
    name: VBatt
    id: vcc
    update_interval: 60s

  - platform: template
    name: batterylevel
    id: batterylevel
    unit_of_measurement: '%'
    update_interval: 60s
    lambda: |-
      // I know infering the battery from voltage only is misleading, but I'll take it. Considering linear decay (again, i'll take it), max=2.23, min=1.38
      return ((id(vcc).state * 118) - 162);   

  - platform: template
    name: "Kdo mne budi"
    id: kdo_mne_budi
    accuracy_decimals: 0
    lambda: |-
      return (id(wake_up_pin));
      

# TODO brightness
display:
  - platform: st7789v
    model: TTGO TDisplay 135x240
    backlight_pin: GPIO4
    cs_pin: GPIO5
    dc_pin: GPIO16
    reset_pin: GPIO23
    rotation: 270°
    #brightness: 0.5
    update_interval: 5s
    lambda: |-
      if (id(vcc).has_state()) {
        it.printf(4, 4, id(font_arial_12), id(color_teal_blue), "%.2f VBat (%.2f %%)", id(vcc).state, id(batterylevel).state);
      }
      it.print(212, 4, id(font_slkscr_8), id(color_teal_blue), "MICRO");
      it.print(190, 120, id(font_slkscr_8), id(color_teal_blue), "TV CAMA");
      if (id(kdo_mne_budi).has_state()) {
        int tlacitko = id(kdo_mne_budi).state;
        if (tlacitko == 25) {
          it.printf(16, 18, id(font_bebas_56), id(color_green), "%d ZELENA", tlacitko);
        } else if (tlacitko == 27) {
          it.printf(16, 18, id(font_bebas_56), id(color_blue), "%d MODREJ", tlacitko);
        } else { 
          it.printf(16, 18, id(font_bebas_48), id(color_red), "%d ", tlacitko);
        }
      }
     
Vycházel jsem z: https://randomnerdtutorials.com/esp32-e ... eep-sleep/
plus reference https://docs.espressif.com/projects/esp ... modes.html
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Uživatelský avatar
tiimsvk
Dárce - Donátor
Dárce - Donátor
Příspěvky: 801
Registrován: 06. květen 2021, 07:03
Dal poděkování: 72 poděkování
Dostal poděkování: 65 poděkování

Re: ESP WakeUP pin a nasledná akcia

Příspěvek od tiimsvk »

Dik to je presne to co potrebujem hned ako bude cas budem testovať.

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: ESP WakeUP pin a nasledná akcia

Příspěvek od kiklhorn »

Jen doplním

esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); //INTERNAL PD nechává aktivní RTC power domain - tzn v sleepu jsou aktivní pulldown a pullup rezistory takže nepotřebuješ dávat externí.

input pulldown je nastavený u tlačítek v kódu
a tlačítka jsou spínána přes rezistor na +3.3V


V honbě za co nejnižší spotřebou ve sleepu bude velmi užitečná dokumentace: https://docs.espressif.com/projects/esp ... modes.html
Vypínání wifi, ram, flash, izolování gpio - nevím o co vše se postará ESPHome a co (a jestli) bude třeba přes lamda.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Uživatelský avatar
tiimsvk
Dárce - Donátor
Dárce - Donátor
Příspěvky: 801
Registrován: 06. květen 2021, 07:03
Dal poděkování: 72 poděkování
Dostal poděkování: 65 poděkování

Re: ESP WakeUP pin a nasledná akcia

Příspěvek od tiimsvk »

No keby som vedel programovacii jazyk a anglictinu tak by som velmi rad sskusal 🤣
Na začiatok začnem tym tvojim kodom a uvidime co sa stane

EDIT:
Všimol som si že v tom kode máš aj bateriu v dvoch senzoroch ja to pouzivam tak ze mam vsetko v senzore adc takto:

Kód: Vybrat vše

  - platform: adc
    pin: ${battery_pin}
    name: "${friendly_name} Battery"
    attenuation: 11db
    accuracy_decimals: 0
    update_interval: 10s
    id: adcbattery
    entity_category: diagnostic
    unit_of_measurement: "%"
    device_class: battery
    filters:
      - calibrate_linear:
          - 2.0 -> 0
          - 2.81 -> 100
      - lambda: 'return min((float)100.0, x);'

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: ESP WakeUP pin a nasledná akcia

Příspěvek od kiklhorn »

Ten kód okolo vůbec neřeš, stejně ukazuje nesmysly.
Koukal jsem že tu mám pár modulů "TTGO 19-6-28 V1.1 XY-CP" tak jsem vzal první kus kódu z githubu na který jsem narazil abych rozsvítil displej a nezdržoval se s pátráním jak je to zapojené.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Odpovědět

Zpět na „ESPHome“