Licznik kontrakton ESP-01S

Chce sobie przerobić GLOW do pomiaru zużycia wody, poprzez liczenie impulsów na kontraktonie wodomierza. Chcę podłączyć do GPIO0 i GND na ESP-01S

Proszę o sprawdzenie i ewentualne uwagi, gdyż jeszcze nie testowałem.

---
# Home Assistant Glow
#
# Read your electricity meter by means of the pulse LED on your 
# meter, useful if you do not have a serial port (P1).
#
substitutions:
  device_name: home-assistant-glow
  friendly_name: Water
  device_description: "pomiar zużycia wody"
  pulse_pin: GPIO0
  
 # imp/l rate ⬇ #
  pulse_rate: '1'

  # Webserver credentials ⬇ #
  web_username: 'glow'
  web_password: 'esphome'

dashboard_import:
  package_import_url: github://klaasnicolaas/home-assistant-glow/home_assistant_glow.yaml

esphome:
  name: water-meter
  project:
    name: "klaasnicolaas.home_assistant_glow"
    version: "3.0.0"
  platform: esp8266
  board: esp01_1m


# WiFi credentials #
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Water-Meter"
    password: "XXXXXXXXXXXXXXX"

captive_portal:

# Enable logging
logger:

# Enable improv over serial
improv_serial:

# Enable Home Assistant API
api:
 
ota:
  safe_mode: true
  reboot_timeout: 10min
  num_attempts: 5
  password: "XXXXXXXXXXXXXXXXXXXXXX"

web_server:
  port: 80
  auth:
    username: '${web_username}'
    password: '${web_password}'

output:

# Sensors for ESP version and WIFI information
text_sensor:
  - platform: version
    hide_timestamp: true
    name: '${friendly_name} - ESPHome Version'
  - platform: wifi_info
    ip_address:
      name: '${friendly_name} - IP Address'
      icon: mdi:wifi
    ssid:
      name: '${friendly_name} - Connected SSID'
      icon: mdi:wifi-strength-2

sensor:
  # WiFi signal
  - platform: wifi_signal
    name: "${friendly_name} - WiFi Signal"
    update_interval: 120s

  # Pulse meter
  - platform: pulse_meter
    name: '${friendly_name} - Water Consumption'
    id: water_pulse_meter
    unit_of_measurement: 'L'
    state_class: measurement
    #device_class: ????
    icon: mdi:water
    accuracy_decimals: 0
    pin: ${pulse_pin}
    # internal_filter: 100ms
    
    total:
      name: '${friendly_name} - Total Water'
      id: sensor_total_water
      unit_of_measurement: 'L'
      icon: mdi:water
      state_class: total_increasing
      #device_class: ?????
      accuracy_decimals: 0
      
  # Total day useage
  - platform: total_daily_water
    name: '${friendly_name} - Daily Water'
    id: sensor_total_daily_water
    power_id: sensor_water_pulse_meter
    unit_of_measurement: 'L'
    icon: mdi:water
    state_class: total_increasing
   # device_class: ?????
accuracy_decimals: 0
    

# Enable time component to reset energy at midnight
time:
  - platform: sntp
    id: my_time

device_class chyba całkiem można usunąć???

Tylko nie GPIO0 i GPIO2 - ponieważ nie jesteś w stanie przewidzieć stanu kontaktronu po restarcie modułu, może się zdarzyć że nie wystartuje.

2 Likes

Cenna uwaga. Zastanawiam się czy wystarczy podłączyć bezpośrednio do pinów czy trzeba coś dokładać, typu rezystor. Czytam jeszcze o tym sensorze to wydaję mi się że najlepiej by było żeby liczył na zboczu opadającym

Moduł\y ESP-01 (we wszystkich odmianach) są szczególnie niewdzięczne do budowania DIY, bo były zaprojektowane jako “modem WIFi”, czyli taki mostek między UART a WiFi i są praktycznie pozbawione typowych GPIO (trzeba kombinować, aby użyć te kilka wyprowadzonych, bo są one dedykowane do innych celów), każdy inny moduł jest lepszy, bo był już projektowany jako developerski i ma wyprowadzone przynajmniej kilka w pełni uniwersalnych GPIO.

Więc zależy dla jakich pinów się chcesz podpinać - w przypadku pinów, które są konfigurowalne nie musisz nic robić tylko je skonfigurować i są opcje by wymusić np. pull-up lub pull-down (gdybyś użył GPIO z domyślnie wyłączonym np. pullupem, to zamiast zewnętrznego rezystora wystarczy włączyć pullup)

jeśli chcesz użyć pinu, który w trakcie bootowania ma np. stan wysoki, to z kontaktronem powinieneś dać rezystor szeregowy

LeA mi 2 esp01s i chciałem użyć, ale im dłużej w tym grzebie tym bardziej wydaje mi się że lepiej wemos D1 użyć

1 Like

Dla tego projektu możesz spokojnie użyć ESP-01 tylko na Gpio1 lub Gpio3 czyli inaczej Rx TX - jeden z nich na pewno będzie działał.

Tylko GPIO3 nadaje się na wejście, trzeba wyłączyć logi (debug) na UART’cie.
Też zalega mi kilka ESP-01, z którymi za bardzo nie ma co zrobić, bo są za biedne (kiedyś nadawały się idealnie na WLED, ale teraz za małe zasoby na ten projekt), ale nadają się np.na budowę czujnika PM na bazie VINDRIKTNING z Ikei.

1 Like

Dlatego myślę że liczenie impulsów i przesyłanie do HA to nie jest za dużo na ten mały układ. Ewentualnie przychodzi mi jeszcze na myśl zwieranie styków, np do otwarcia bramy wjazdowej… No nic przyjdzie mi programator to się będę bawił, bo te co mam w domu to żaden nie chce podjąć rozmowy z ESP01. Wydaje mi się że chodzi tu o różne masy, bo jak zasilam z zasilacza 3.3V a z kontrolera ttl podaję tylko sygnał to coś mu nie gra. Jeszcze spróbuje przepuścić przez ttl konwerter żeby wszystkie sygnały na 3.3V szły.

To nie ma prawa działać - jak sobie wyobrażasz jakikolwiek sygnał bez poziomu odniesienia?
Masy zasilania i mostka USB-UART musisz oczywiście połączyć (no nie wyraziłem się precyzyjnie, ale to nie ma znaczenia - zasilanie musisz podpiąć używając m.in. sygnału masy, to samo dotyczy UARTa).
ESP-01 masz zasilać z 3,3V, jego UART daje radę pracować przy poziomach TTL.
Aby przeflaszować musisz tymczasowo podać GPIO0 na masę (już przed uruchomieniem układu).
Myślę że pamiętasz o połączeniu RX mostka USB-UART do TX modułu i odpowiednio TX do RX.

:smiley: ten układ ma moc obliczeniową większą niż mój pierwszy PeCet (bo nie w tym leży problem, swoją drogą to porównanie pokazuje jak bardzo współczesne metody programowania są nieefektywne).
Na sprzęcie o zbliżonej mocy obliczeniowej ludzie odpalają gry.

Czyli po uruchomieniu mam odłączyć GPIO0 od masy? Bo na wszystkich materiałach jest cały czas podłączona podczas programowania

Jak Ci pasuje, może być cały czas.

Odłaczyć możesz później (nie ma to znaczenia), ważne by podłączyć przed uruchomieniem układu.

PS gdyby się okazało, że to nie jest ESP-01s tylko ESP-01, to są też pewne dodatkowe strzały w kolano (CH_PD trzeba samodzielnie podciągnąć do zasilania, bo producent tego nie zrobił, wystarczy zewrzeć na zawsze z pinem 3.3V, ESP-01s ma wbudowany rezystor pull-up, więc nie jest to konieczne).

Moduły ESP-01s mają nadruk dokładnie zawierający w treści końcówkę “s”.

Na fotce masz przykład ESP-01, który sprzedano mi jako ESP-01s, ale oczywiście nim nie jest

https://www.esp8266.com/viewtopic.php?p=62191

Rzucę później okiem jakie ja mam. Wrzucę fotkę

W tym ostatnim linku jest zdjęcie obu wersji.

Mam tą wersję z prawej z dwoma diodami


Edit:
ok. udało się połączyć i dodać urzadzenie w ESPHome, ale pomimo configuration installled mam cały czas offline

To wbrew napisowi na opakowaniu nie jest ESP-01S tylko ESP-01 1M i musisz się oprzeć na instrukcjach dla niego (biorąc pod uwagę nieco większy flash,. bo najstarsza wersja miała 512k), a nie dla ESP-01S!
Różnicą jest właśnie m.in. brak pull-up’u na wejściu usypiania układu (trzeba zrobić to co opisałem wyżej).

Nie rozumiem co masz na myśli, może jakiś screenshot, użyty rzeczywiście konfig?
Skonfigurowałeś sekrety wifi_ssid i wifi_password w ESPHome?

Układ w ogóle startuje? (po flashowaniu odpiąłeś GPIO0?, podciągnąłeś do zasilania CH_PD? jakieś LEDy świecą/migają)

tak secrets ustawione bo wcześniej korzystałem. mam CH_PD do 3.3V. Swieci tylko czerwona dioda

Czerwony LED to jeśli mnie pamięć nie myli jest tylko potwierdzenie, że masz zasilanie, niestety nie pamiętam czy w tym modelu trzeba coś konfigurować by druga dioda dała jakiś znak życia.
(edit: informacje o wewnętrznych połączeniach LED na module są w linku zapodanym gdzieś na początku przez @RobinI30 i jest to pin opisany jako TX - więc podczas programowania powinien mrugać, co moze być odczuwalne jako świecenie, a jeśli chcesz mieć na nim jakąś kontrolkę, to jest to GPIO1 i stanem aktywnym jest stan niski)

W sieci go widać?

A wyjaśnisz co to jest

zajrzałem u siebie w logi przy aktualizacji OTA i nic takiego nie widzę

Linking /data/barometr/.pioenvs/barometr/firmware.elf
RAM:   [====      ]  39.5% (used 32356 bytes from 81920 bytes)
Flash: [====      ]  39.0% (used 407629 bytes from 1044464 bytes)
Building /data/barometr/.pioenvs/barometr/firmware.bin
esp8266_copy_factory_bin(["/data/barometr/.pioenvs/barometr/firmware.bin"], ["/data/barometr/.pioenvs/barometr/firmware.elf"])
========================= [SUCCESS] Took 16.31 seconds =========================
INFO Successfully compiled program.
INFO Resolving IP address of barometr.local
INFO  -> 192.168.20.35
INFO Uploading /data/barometr/.pioenvs/barometr/firmware.bin (411776 bytes)
INFO Compressed to 285960 bytes
Uploading: [============================================================] 100% Done...


INFO Waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from barometr.local using esphome API
INFO Successfully connected to barometr.local

Wrzuć faktyczny konfig, jeśli znajdę mostek UART to przeflaszuję ten co na zdjęciu.
Flash Giga Device GD25Q80 ma istotnie 1MB, więc przynajmniej tu nie ma przekrętu

2




O kurna jaka nowoczesność - nie znam tego nowego interfejsu do końca jak widać :stuck_out_tongue: - chyba dawno nie tworzyłem żadnej nowej konstrukcji, może spytam bardziej konkretnie - której opcji użyłeś?
esphome_która_opcja_2022-03-01_20-30
i gdzie podpiąłeś mostek USB-UART?