Problem z AM2320 w esphome

nodemcuv2 i am3023.

Czujnik AM2320 przestaje działać po przewie w zasilaniu. Wystarczy przy włączonym zasilaniu zresetować nodemcu i wszystko wraca do normy do następnej przerwy w zasilaniu.

Czujnik podłączony do
sda D5
Scl D6

W logach po starcie systemu jest brak komunikacji z czujnikiem

Czy jeżeli esphome nie wykryje czujnika przy starcie systemu to już go potem nie odczytuje?

Czujnik jest zasilany z 3.3v z płytki nodemcu.
Podejrzewam że am2320 startuje dłużej niż nodemcu.

Mam działające 5 takich układów i wszędzie jest tak samo.

Czy jest możliwe wykonanie zwłoki w starcie nodemcu tak żeby czujnik zdążył się uruchomić?

Aby móc znaleźć rozwiązanie nie wystarczy opis Twoich przypuszczeń. Umieść w temacie pełen kod YAML z konfiguracji ESPHome oraz logi z procesu uruchomienia ESP. Problem tkwi pewnie w szczegółach, których z opisu nie widzimy.

Na moje oko, to powinny być inne piny:

Na tych pinach działało na easyesp bo miałem takie złącze i tak podpiąłem. System działał na QNAP. Najpierw działał na QIOT, ale przestało być wspierane i przesiadam się na HomeAssistant. Jestem tutaj nowy i dopiero się tego uczę. Logi i yamla wrzucę jak dostanę się do komputera bo z komórki mi nie wychodzi.
Pozdrawiam

Szyna I2C nie jest w ESP8266 przypisana sprzętowo (ma “wędrujące piny”), więc jeśli tylko nie przypiszemy do jakiegoś nietypowego GPIO to działa wszędzie
(D1 i D2 = GPIO5 i GPIO4 są po prostu często domyślną konfiguracją softu, ale nie są obowiązkowe)
Jeśli konfiguracja nie używa kontrolera SPI (a konkretnie kontrolera HSPI, bo SPI jest zawsze wykorzystywane do połączenia z flashem, ale na innym kontrolerze SPI) to piny D5 i D6 można używać do dowolnych zastosowań.
(ESP8266 zawiera cale mnóstwo “trefnych” GPIO, ale te do nich nie należą)

Tak, jeśli nie znajdzie urządzeń I2C podczas skanowania po reboocie, to ich później nie odczytuje, być może jest to do przeskoczenia, wiem że ktoś kiedyś miał podobny problem, ale nie wiem czy go rozwiązał - poszukaj po forum.
Dlatego potrzebne logi do jakiejkolwiek diagnostyki.

z tego co widzę, te czujniki były raczej projektowane do pracy w logice 5V i do zasilania 5V, a wsparcie 3.3V jest dodane “tylko przy okazji”

więc bezpośrednio na pinach czujników warto zmierzyć jakie mają faktyczne napięcie zasilania, bo minimum dla nich to 3.1V (to dość wysoka wartość minimalna jak na sprzęt pracujący przy znamionowych 3.3V)

W tej drugiej kwestii - no nie sądzę aby MCU AMS bootował wolniej od MCU ESP (ale nie wnikałem w timingi w datasheet’cie)

zawartość yaml

esphome:
  name: esphome01
  friendly_name: EspHome01

esp8266:
  board: nodemcuv2


logger:


api:
  encryption:
    key: "************************************************"

ota:
  password: "************************************************"

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

  ap:
    ssid: "***********************8"
    password: "*************************"

captive_portal:


i2c:
  sda: D5
  scl: D6
  scan: true
  frequency: 100kHz
  id: bus_a

sensor:
  - platform: wifi_signal
    name: "WiFi Signal Sensor"
    update_interval: 60s

  - platform: am2320
    temperature:
      name: "Temperatura"
    humidity:
      name: "Wilgotność"
    update_interval: 60s

switch:
  - platform: gpio
    pin: 1
    name: "wyj1"

  - platform: gpio
    pin: 3
    name: "wyj2"

  - platform: gpio
    pin: 15
    name: "wyj3"

  - platform: gpio
    pin: 13
    name: "wyj4"

binary_sensor:
  - platform: gpio
    pin: D0
    name: "wej1"
    device_class: window

  - platform: gpio
    pin: D1
    name: "wej2"
    device_class: window

  - platform: gpio
    pin: D3
    name: "wej3"
    device_class: window

  - platform: gpio
    pin: D4
    name: "wej4"
    device_class: window

logi po zaniku zasilania

INFO ESPHome 2023.9.3
INFO Reading configuration /config/esphome/esphome01.yaml...
INFO Starting log output from esphome01.local using esphome API
INFO Successfully connected to esphome01.local
[15:34:42][I][app:102]: ESPHome version 2023.9.3 compiled on Oct  9 2023, 17:12:37
[15:34:42][C][wifi:546]: WiFi:
[15:34:42][C][wifi:382]:   Local MAC: E0:98:06:1F:1C:AD
[15:34:42][C][wifi:383]:   SSID: 'ASUS'[redacted]
[15:34:42][C][wifi:384]:   IP Address: 192.168.50.160
[15:34:42][C][wifi:385]:   BSSID: 18:31:BF:AA:A2:70[redacted]
[15:34:42][C][wifi:387]:   Hostname: 'esphome01'
[15:34:42][C][wifi:389]:   Signal strength: -71 dB ▂▄▆█
[15:34:42][C][wifi:393]:   Channel: 9
[15:34:42][C][wifi:394]:   Subnet: 255.255.255.0
[15:34:42][C][wifi:395]:   Gateway: 192.168.50.1
[15:34:42][C][wifi:396]:   DNS1: 192.168.50.1
[15:34:42][C][wifi:397]:   DNS2: 0.0.0.0
[15:34:42][C][logger:357]: Logger:
[15:34:42][C][logger:358]:   Level: DEBUG
[15:34:42][C][logger:359]:   Log Baud Rate: 115200
[15:34:42][C][logger:361]:   Hardware UART: UART0
[15:34:42][C][i2c.arduino:053]: I2C Bus:
[15:34:42][C][i2c.arduino:054]:   SDA Pin: GPIO14
[15:34:42][C][i2c.arduino:055]:   SCL Pin: GPIO12
[15:34:42][C][i2c.arduino:056]:   Frequency: 100000 Hz
[15:34:42][C][i2c.arduino:059]:   Recovery: bus successfully recovered
[15:34:42][I][i2c.arduino:069]: Results from i2c bus scan:
[15:34:42][I][i2c.arduino:071]: Found no i2c devices!
[15:34:43][C][switch.gpio:068]: GPIO Switch 'wyj1'
[15:34:43][C][switch.gpio:090]:   Restore Mode: always OFF
[15:34:43][C][switch.gpio:031]:   Pin: GPIO1
[15:34:43][C][switch.gpio:068]: GPIO Switch 'wyj2'
[15:34:43][C][switch.gpio:090]:   Restore Mode: always OFF
[15:34:43][C][switch.gpio:031]:   Pin: GPIO3
[15:34:43][C][switch.gpio:068]: GPIO Switch 'wyj3'
[15:34:43][C][switch.gpio:090]:   Restore Mode: always OFF
[15:34:43][C][switch.gpio:031]:   Pin: GPIO15
[15:34:43][C][switch.gpio:068]: GPIO Switch 'wyj4'
[15:34:43][C][switch.gpio:090]:   Restore Mode: always OFF
[15:34:43][C][switch.gpio:031]:   Pin: GPIO13
[15:34:43][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'wej1'
[15:34:43][C][gpio.binary_sensor:015]:   Device Class: 'window'
[15:34:43][C][gpio.binary_sensor:016]:   Pin: GPIO16
[15:34:43][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'wej2'
[15:34:43][C][gpio.binary_sensor:015]:   Device Class: 'window'
[15:34:43][C][gpio.binary_sensor:016]:   Pin: GPIO5
[15:34:43][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'wej3'
[15:34:43][C][gpio.binary_sensor:015]:   Device Class: 'window'
[15:34:43][C][gpio.binary_sensor:016]:   Pin: GPIO0
[15:34:43][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'wej4'
[15:34:43][C][gpio.binary_sensor:015]:   Device Class: 'window'
[15:34:43][C][gpio.binary_sensor:016]:   Pin: GPIO2
[15:34:43][D][am2320:047]: AM2320:
[15:34:43][C][am2320:048]:   Address: 0x5C
[15:34:43][E][am2320:050]: Communication with AM2320 failed!
[15:34:43][C][am2320:052]:   Temperature 'Temperatura'
[15:34:43][C][am2320:052]:     Device Class: 'temperature'
[15:34:43][C][am2320:052]:     State Class: 'measurement'
[15:34:43][C][am2320:052]:     Unit of Measurement: '°C'
[15:34:43][C][am2320:052]:     Accuracy Decimals: 1
[15:34:43][C][am2320:053]:   Humidity 'Wilgotność'
[15:34:43][C][am2320:053]:     Device Class: 'humidity'
[15:34:43][C][am2320:053]:     State Class: 'measurement'
[15:34:43][C][am2320:053]:     Unit of Measurement: '%'
[15:34:43][C][am2320:053]:     Accuracy Decimals: 1
[15:34:43][C][captive_portal:088]: Captive Portal:
[15:34:43][C][mdns:115]: mDNS:
[15:34:43][C][mdns:116]:   Hostname: esphome01
[15:34:43][C][ota:097]: Over-The-Air Updates:
[15:34:43][C][ota:098]:   Address: esphome01.local:8266
[15:34:43][C][ota:101]:   Using Password.
[15:34:43][C][api:138]: API Server:
[15:34:43][C][api:139]:   Address: esphome01.local:6053
[15:34:43][C][api:141]:   Using noise encryption: YES
[15:34:43][C][wifi_signal.sensor:009]: WiFi Signal 'WiFi Signal Sensor'
[15:34:43][C][wifi_signal.sensor:009]:   Device Class: 'signal_strength'
[15:34:43][C][wifi_signal.sensor:009]:   State Class: 'measurement'
[15:34:43][C][wifi_signal.sensor:009]:   Unit of Measurement: 'dBm'
[15:34:43][C][wifi_signal.sensor:009]:   Accuracy Decimals: 0
[15:35:32][D][sensor:093]: 'WiFi Signal Sensor': Sending state -71.00000 dBm with 0 decimals of accuracy

logi po resecie z przycisku zaraz po włączeniu zasilania

INFO ESPHome 2023.9.3
INFO Reading configuration /config/esphome/esphome01.yaml...
INFO Starting log output from esphome01.local using esphome API
INFO Successfully connected to esphome01.local
[15:38:59][I][app:102]: ESPHome version 2023.9.3 compiled on Oct  9 2023, 17:12:37
[15:38:59][C][wifi:546]: WiFi:
[15:38:59][C][wifi:382]:   Local MAC: E0:98:06:1F:1C:AD
[15:38:59][C][wifi:383]:   SSID: 'ASUS'[redacted]
[15:38:59][C][wifi:384]:   IP Address: 192.168.50.160
[15:38:59][C][wifi:385]:   BSSID: 18:31:BF:AA:A2:70[redacted]
[15:38:59][C][wifi:387]:   Hostname: 'esphome01'
[15:38:59][C][wifi:389]:   Signal strength: -72 dB ▂▄▆█
[15:38:59][C][wifi:393]:   Channel: 9
[15:38:59][C][wifi:394]:   Subnet: 255.255.255.0
[15:38:59][C][wifi:395]:   Gateway: 192.168.50.1
[15:38:59][C][wifi:396]:   DNS1: 192.168.50.1
[15:38:59][C][wifi:397]:   DNS2: 0.0.0.0
[15:38:59][C][logger:357]: Logger:
[15:38:59][C][logger:358]:   Level: DEBUG
[15:38:59][C][logger:359]:   Log Baud Rate: 115200
[15:38:59][C][logger:361]:   Hardware UART: UART0
[15:38:59][C][i2c.arduino:053]: I2C Bus:
[15:38:59][C][i2c.arduino:054]:   SDA Pin: GPIO14
[15:38:59][C][i2c.arduino:055]:   SCL Pin: GPIO12
[15:38:59][C][i2c.arduino:056]:   Frequency: 100000 Hz
[15:38:59][C][i2c.arduino:059]:   Recovery: bus successfully recovered
[15:38:59][I][i2c.arduino:069]: Results from i2c bus scan:
[15:38:59][I][i2c.arduino:071]: Found no i2c devices!
[15:38:59][C][switch.gpio:068]: GPIO Switch 'wyj1'
[15:38:59][C][switch.gpio:090]:   Restore Mode: always OFF
[15:38:59][C][switch.gpio:031]:   Pin: GPIO1
[15:38:59][C][switch.gpio:068]: GPIO Switch 'wyj2'
[15:38:59][C][switch.gpio:090]:   Restore Mode: always OFF
[15:38:59][C][switch.gpio:031]:   Pin: GPIO3
[15:38:59][C][switch.gpio:068]: GPIO Switch 'wyj3'
[15:38:59][C][switch.gpio:090]:   Restore Mode: always OFF
[15:38:59][C][switch.gpio:031]:   Pin: GPIO15
[15:38:59][C][switch.gpio:068]: GPIO Switch 'wyj4'
[15:38:59][C][switch.gpio:090]:   Restore Mode: always OFF
[15:38:59][C][switch.gpio:031]:   Pin: GPIO13
[15:38:59][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'wej1'
[15:38:59][C][gpio.binary_sensor:015]:   Device Class: 'window'
[15:38:59][C][gpio.binary_sensor:016]:   Pin: GPIO16
[15:38:59][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'wej2'
[15:38:59][C][gpio.binary_sensor:015]:   Device Class: 'window'
[15:38:59][C][gpio.binary_sensor:016]:   Pin: GPIO5
[15:38:59][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'wej3'
[15:38:59][C][gpio.binary_sensor:015]:   Device Class: 'window'
[15:38:59][C][gpio.binary_sensor:016]:   Pin: GPIO0
[15:38:59][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'wej4'
[15:38:59][C][gpio.binary_sensor:015]:   Device Class: 'window'
[15:38:59][C][gpio.binary_sensor:016]:   Pin: GPIO2
[15:38:59][D][am2320:047]: AM2320:
[15:38:59][C][am2320:048]:   Address: 0x5C
[15:38:59][C][am2320:052]:   Temperature 'Temperatura'
[15:38:59][C][am2320:052]:     Device Class: 'temperature'
[15:38:59][C][am2320:052]:     State Class: 'measurement'
[15:38:59][C][am2320:052]:     Unit of Measurement: '°C'
[15:38:59][C][am2320:052]:     Accuracy Decimals: 1
[15:38:59][C][am2320:053]:   Humidity 'Wilgotność'
[15:38:59][C][am2320:053]:     Device Class: 'humidity'
[15:38:59][C][am2320:053]:     State Class: 'measurement'
[15:38:59][C][am2320:053]:     Unit of Measurement: '%'
[15:38:59][C][am2320:053]:     Accuracy Decimals: 1
[15:38:59][C][captive_portal:088]: Captive Portal:
[15:38:59][C][mdns:115]: mDNS:
[15:38:59][C][mdns:116]:   Hostname: esphome01
[15:38:59][C][ota:097]: Over-The-Air Updates:
[15:38:59][C][ota:098]:   Address: esphome01.local:8266
[15:38:59][C][ota:101]:   Using Password.
[15:38:59][C][api:138]: API Server:
[15:38:59][C][api:139]:   Address: esphome01.local:6053
[15:38:59][C][api:141]:   Using noise encryption: YES
[15:38:59][C][wifi_signal.sensor:009]: WiFi Signal 'WiFi Signal Sensor'
[15:38:59][C][wifi_signal.sensor:009]:   Device Class: 'signal_strength'
[15:38:59][C][wifi_signal.sensor:009]:   State Class: 'measurement'
[15:38:59][C][wifi_signal.sensor:009]:   Unit of Measurement: 'dBm'
[15:38:59][C][wifi_signal.sensor:009]:   Accuracy Decimals: 0
[15:39:05][D][sensor:093]: 'WiFi Signal Sensor': Sending state -72.00000 dBm with 0 decimals of accuracy
[15:39:09][D][am2320:029]: Got temperature=23.8°C humidity=61.8%
[15:39:09][D][sensor:093]: 'Temperatura': Sending state 23.80000 °C with 1 decimals of accuracy
[15:39:09][D][sensor:093]: 'Wilgotność': Sending state 61.80000 % with 1 decimals of accuracy

Moja uwaga do YAMLa - używasz 2 różnych notacji pinów w/g nadruku na soldermasce Dx oraz numrów GPIO, nie jest to błąd, ale utrudnia wyłapanie potencjalnych błędów.

Druga sprawa ustawiłeś na sztywno częstotliwość pracy I2C - poeksperymentowałbym z tym parametrem (na dobry początek zakomentuj i sprawdź jak się zachowa na defaulcie)

Trzecia sprawa - popatrz jak się wstawia kod - edytowałem Twoje posty (możesz też użyć znaczników BBCode), ponadto nie pisz posta pod własnym postem - dodawaj brakujące treści przez edycję, teraz scalam, ale flood postami grozi ostrzeżeniami od moderatorów. Oczywiście dalsze odpowiedzi pisz normalnie pod moim…

Faktycznie nie pomyślałem o tym napięciu zasilania. Kupiłem czujniki w przekonaniu że są na 3,3V. Na espeasy działały bez zarzutu przez prawie rok. Płytki zostały przeprogramowane i podłączone tak jak w były wcześniej. Pracują na tych samych zasilaczach. Efekt jest dokładnie taki sam na wszystkich.

Problem może być w tym że procesor zaczyna startować przy narastającym napięciu zasilania troszkę wcześniej niż czujnik.

Czy istnieje jakiś sposób żeby go programowo troszkę opóźnić?

pozostałe płytki są na defaulcie. Tu eksperymentowałem więc zostało na 100kHz. Próbowałem na 50 i było to samo. Na 100 chodzi stabilnie do zaniku napięcia zasilania.
Te pozostałe na defaulcie też. Nie pamiętam, ale chyba default to też 100

OK. Przepraszam, poprawię się

To może faktycznie sugerować problem z timingami przy bootowaniu.

Musisz poszukać po forum, nie powinno się tak robić, ale pewnie można wrzucić jakieś opóźnienie np. bezczelny delay powiedzmy 2s przy on_boot z priorytetem 1000 lub 900 (by została opóźniona inicjalizacja szyn)

to raczej nie to.
Wstawiałem delay-a i nic

esphome:

  on_boot:
    priority: 1000

    then:
      - delay: 10s
          

  name: esphome01
  friendly_name: EspHome01

esp8266:
  board: nodemcuv2

zaczynałem od 1, 10 też nic
chyba że coś źle zrobiłem
jestem tu nowy i dopiero się tego uczę

Po takich zmianach wrzucaj też logi.

I faktycznie bootuje z opóźnieniem?
Bo tak naprawdę nie wiemy czy to opóźnienie w ogóle działa.
Priorytety 1000 i 900 są nieudokumentowane (i nie wiem czy w ogóle działają w aktualnym ESPHome), a moim zdaniem 800 to będzie już za daleka faza inicjalizacji (ale możesz spróbować, nie jestem nieomylny, nie jestem ekspertem, jestem takim samym amatorem jak wielu).

Jeśli ESP bootuje z opóźnieniem to przyczyna musi być inna, przejrzałem datasheeta AM2320 dość pobieżnie, ale nie wygląda na to by mógł startować dłużej niż 2 sekundy nawet w najbardziej niekorzystnych warunkach.
Mierzyłeś napięcie zasilania?

Przyczyną może być po prostu jakaś wada w komponencie/integracji am2320 w ESPHome.

wygląda to na brak pullupu

Nie sprawdzałem opóžnienia. Czy dioda mrugnie z opóźnieniem? Jeszcze poeksperymentuję

Dołóż rezystor pullup. Issue które podlinkowałem wyżej sugeruje takie rozwiązanie przy problemie opisanym jak twój.

spróbuję z rezystorami jak jakieś znajdę.
opóźnienie nie działa, ale jak przytrzymam reset na moment przy włączeniu zasilania to jest OK.
Pewnie przejdę na jakieś inne czujniki bo i tak muszę dokupić więcej.

Niestety rezystory nie pomogły

Mam też jeden taki czujnik i zachowywał się dokładnie tak samo. Też przy włączeniu zasilania był błąd komunikacji z czujnikiem. Ale po restarcie ESP z przycisku czujnik działał prawidłowo. Nie zagłębiałem się bardzo dlaczego tak jest. Ewentualne restarty ESP po braku zasilania załatwiałem automatyzacją w HA - jeżeli sensor temperatury czujnika był niedostępny powyżej 2 min to zrestartuj ESP. I wszystko zaczęło działać. Z ciekawości dzisiaj zerknąłem w issue które podlinkował @szopen. Dodałem wpis w sekcji sensora AM2320 o którym mowa w issue

setup_priority: -100

I teraz po ponownym uruchomieniu ESP po wyłączeniu zasilania w logu nie ma już błędu braku komunikacji z czujnikiem i działa od razu. Mimo to przy skanowaniu szyny I2C nadal nie znajduje żadnych urządzeń, Ale działa :slight_smile:

1 polubienie

Dziękuję. Też o tym pomyślałem (o resetowaniu z HA), ale muszę się dopiero tego nauczyć. Jak wcześniej napisałem dopiero zaczynam przygodę z HA. Wcześniej bawiłem się trochę z QIOT ale mi przestało działać po aktualizacji QNAPa. Przestali go wspierać. Może dobrze się stało bo HA zaczyna mi się bardziej podobać.
Pozdrawiam

Do tego wpisu

dopisz

setup_priority: -100

i powinien startować od razu po włączeniu zasilania.

 - platform: am2320
   temperature:
     name: "Temperatura"
   humidity:
     name: "Wilgotność"
   update_interval: 60s
   setup_priority: -100
1 polubienie

Dziękuję - Pomogło.
Rozumiem że nadanie priorytetu -100 spowodowało że jest to wykonywane na samym końcu, a nie jak najpierw zrozumiałem zaraz po starcie.
W logach też czujnik pojawia się na końcu. Przedtem był wcześniej. Pewnie daje to czas na fizyczne uruchomienie się czujnika.

Takie moje przemyślenie

  • napięcie zasilania procesora 2,5 - 3,6 V
  • napięcie zasilania czujnika 3,1-5,5 V
    Przy jakichś tanich zasilaczach (bo takich używam) narastanie napięcia jest dość wolne i procesor wystartuje wcześniej niż czujnik. Przesunięcie wykrycia czujnika na koniec dało mu trochę czasu i zdążył się uruchomić.
    Co Wy na to???
    A dlaczego przy easyesp działał? - nie wiem, ale tam był webserwer od razu wbudowany i nie wiadomo co się w jakiej kolejności uruchamiało
    Pozdrawiam

My na to jak na lato - najwyraźniej komponent jest źle napisany i nie przewiduje, że czujnik startuje tak długo, issue jest nadal otwarte, więc dopisz tam ze 3 słowa co o tym myślisz -tzn. że inicjalizacja sensora powinna być opóźniona (wystarczy, że napiszesz jak rozwiązałeś problem i na jakiej platformie masz ESPHome - ESP8266), możesz też wspomnieć o ESPEasy (że tam działa “od strzała”).

Widocznie ktoś (autor obsługi AM2320 w ESPEasy) wiedział, że trzeba poczekać, jak masz zdrowie do tego, to pokop po kodzie źródłowym.