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 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)
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
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)
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.
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.
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
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
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.