ESPHome i oczyszczacz powietrza Webber - prośba o pomoc w podłączeniu

Witam, postanowiłem że spróbuję podłączyć oczyszczacz powietrza Webber AP8500 przez ESPhome do Home Assistanta. Od razu piszę, że jestem początkujący w temacie ESPHome, i o amatorskiej wiedzy elektronicznej, więc rzeczy oczywiste wcale dla mnie nie muszą takie być. Poczytałem trochę dokumentację projektu ESPHome i inne strony i próbuję. Ale jednak potrzebuję pomocy ludzi, którzy się na tym znają.
Po rozebraniu stwierdziłem, że elektronika składa się z dwóch płytek: jednej głównej ‘prądowej’, która uruchamia i zasila poszczególne elementy , oraz mniejszej płytki kontrolera zintegrowanej z wyświetlaczem i przyciskami. Płytka kontrolera zasilana jest napięciem 5V z płyty głównej, oraz ma 5 przewodów sterujących tym, co ma się włączyć na płycie głównej (3 szybkości silnika, sterylizator i wytwornicę anionów). Te sygnały sterujące, jak sprawdziłem, to 5V kiedy dana funkcja się włącza i 0V kiedy wyłącza.
Więc pomyślałem sobie, rzecz ma szansę się udać. Mój plan minimum na funkcje smart: włączanie, wyłączanie i pokazywanie czy urządzenie pracuje. Podłączenie zrobię przez ESPHome i moduł ESP-01S wpięty w płytkę z przekaźnikiem. Zasilanie podłączyłem do tego samego co płytka kontrolera, przycisk on/off równolegle z przekaźnikiem. Przycisk w konfiguracji ustawiłem na chwilowy. I włączanie/wyłączanie działa.
Ale w dalszej części zaczęły się schody, bo potrzebuję informacji czy oczyszczacz pracuje. Od razu mówię że poniższa część mi nie chce działać, więc coś robię źle tylko nie wiem co. Wykombinowałem że podłączę 3 przewody sterujące napięciem 5V trzema szybkościami silnika (przy każdej z 3 prędkości 5v pojawia się na innym przewodzie) do wolnych pinów GPIO i zrobię sensory binarne wykrywające wysoki stan na pinie. Oczywiście wiem że logika ESP01 to 3,3v, więc zastosowałem konwerter stanów logicznych. Oprócz tego jest taki problem, że żeby podłączyć 3 przewody jako sensory, muszę wykorzystać piny RX i TX od Uart. Ale na jakiejś stronie wyczytałem, że po wyłączeniu loggera jest to możliwe (to prawda? będę miał w tym temacie więcej pytań). Ale na razie spróbowałem podłączyć jeden przewód do GPIO2, żeby zobaczyć czy wykryje cokolwiek (GPIO0 steruje przekaźnikiem, więc jest zajęte).
Do konwertera stanów logicznych podłączyłem od strony HV sygnał 5V ze sterownika oczyszczacza, masę oraz zasilanie 5V. Po stronie LV zasilanie 3,3v, masę oraz sygnał do pinu GPIO2 na moim ESP01. I niestety w tej konfiguracji ESP włącza się z zapaloną na stałe diodą (normalnie tylko krótko błyska) i prawdopodobnie nie startuje, bo nie łączy się z Home Assistant. Po odłączeniu sygnału sterującego od ESP startuje prawidłowo. Przy odłączonym zasilaniu konwertera od strony 5V jest to samo. Sprawdziłem też co się pojawia na kabelku sygnałowym od konwertera do ESP - przy podanym sygnale 5V od strony HV po stronie LV mam 2,5V.
Co może być źle?

Użyj innego modułu, ESP-01 (i ESP-01s) to po prostu dramat, bo ma za mało GPIO do wykorzystania tak jak planujesz, ten moduł jest zaprojektowany do użytku jako “modem WiFi” i o ile można w nim bezproblemowo wykorzystać port szeregowy właśnie jako port szeregowy, reszta to “rzeźba” (wyprowadzone są dokładnie 4 GPIO, ale z gatunku tych “niekomfortowych” w używaniu, a “normalne” GPIO są dostępne tylko przez dolutowanie się bezpośrednio do nóżek układu ESP8266, więc dla elektroników-hardkorów).

Tak też sobie już po napisaniu tego posta pomyślałem, że ESP01 to ślepa uliczka. Ale akurat nic innego nie miałem pod ręką. Zamówiłem już D1 mini, jak przyjadą to powalczę dalej.

Ale skoro już będzie lepsza płytka, to pokuszę się chyba o sterowanie wszystkimi funkcjami. I tu mam kolejne zapytanie, bo z elektroniki jestem słaby, a pewien pomysł chodzi mi po głowie. Czy może dałoby się sterować funkcjami, czyli symulować wciśnięcie przycisku bezpośrednio przez ESP (w sensie że bez przekaźników)?

Sprawdziłem że wciśnięcie przycisku zwiera go do masy. Natomiast drugi jego styk (ten zwierany) bez wciśnięcia nie wykazuje żadnego potencjału (nie ma między nim a masą żadnego napięcia). Czyli (to już moje przemyślenia) podłączę go bezpośrednio do ESP i będę go załączał stanem niskim na pinie. Czy dobrze kombinuję?

To może chociaż jakieś tranzystory, lub transoptory.

Jeśli ESP zasilasz z głównego układu i chcesz tylko odczytać napięcia, nie potrzebujesz konwertera stanów logicznych. Wystarczy prosty dzielnik napięcia na rezystorach. Np takie coś
image

1 polubienie

Rano nie miałem czasu na żadne większe konkrety.

Jeśli wykorzystano dwuobwodowy przycisk (to raczej rzadkie zjawisko w dzisiejszych czasach, by użyć coś, co jest droższe od najtańszego możliwego realizującego daną funkcję, no ale załóżmy, że zastosowano takie rozwiązanie by produkować całą gamę zbliżonych modeli na tych samych podzespołach) i chcesz sprawdzać fakt wciśnięcia tego przycisku, to oczywiście możesz go wykorzystać.

Zaraz, zaraz, czytam to co napisałeś drugi raz i… mam wrażenie, że nie masz bladego pojęcia o elektronice…
To jest przecież oczywiste, że przycisk który zwiera jakiś obwód do masy z jednej strony jest podłączony do tej właśnie masy, a z drugiej do rzeczonego obwodu o niezerowym potencjale (względem masy oczywiście).

Masa danego układu jest zawsze o zerowym potencjale masy :smiley: (bo to takie założenie, że masa to punkt układu będący naszym punktem odniesienia, więc ma umowne 0V).

“Na bezczelnego” nie możesz tego wykorzystać, ale stosując obwód taki jak pokazał @Marek można już o czymś pomyśleć. Jeśli układ źródłowy pracuje z logiką TTL (5V) to podepnij równolegle z przyciskiem lewą stronę tego układu i sprawdź czy nie zakłóca działania modyfikowanego urządzenia, jeśli nie, to po prawej możesz podpiąć GPIO ESP w trybie wejścia.

To tak w kwestii sprawdzania czy przycisk został wciśnięty, jeśli chcesz “wciskać” przycisk za pomocą ESP, to sugeruję układ wyjściowy z tranzystorem w układzie otwartego kolektora (albo jak sugeruje wyżej @artpc transoptor, wtedy większość problemów masz “z dyni” bo układy są izolowane galwanicznie). W sumie można wykorzystać konwerter poziomów logicznych jeśli jesteś pewien tego co robisz (przynajmniej będzie w formie gotowca, a przetestować działanie możesz eksperymentalnie).

Prawdopodobnie nie startuje, bo wykorzystałeś w ESP jakiś pin odpowiadający za bootstrap i podciągnięcie go do innego poziomu logicznego niż jest to wymagane podczas normalnego bootowania uniemożliwia zabootowanie ESP (i w ogóle to nie ma nic wspólnego z HA).

To np. tak jakbyś chciał włączyć komputer, ale cały czas absolutnie bez przerwy trzymał wciśnięty guzik “reset” i się dziwił, że nie chce się włączyć.
(chciałem to porównać do ruszania samochodem z zaciągniętym hamulcem ręcznym, no ale to nie jest za bardzo trafione, bo niejeden tak pojechał i się mu udało :stuck_out_tongue: , a jeśli wybrane bootstrap’owe piny GPIO w ESP nie są we właściwych stanach to ESP z całą pewnością się nie uruchomi).

@Marek: dzięki, faktycznie zrobię wejścia w ten dużo prostszy sposób
@szopen: ‘blade’ pojęcie to mam, i tylko blade, do tego mogę nie znać fachowego języka elektroników bo nim nie jestem, sorry moja wina. Ale za to mam dobre chęci i szybko się uczę ;-). Wyraziłem się niejasno. Przycisk jest zwykły, z jednej strony masa a z drugiej jakiś inny obwód. Kiedy przycisk nie jest wciśnięty sprawdzam napięcie pomiędzy tymi dwoma stronami miernikiem, i pokazuje mi 0V. A z tym startowaniem jest pewnie tak jak piszesz, dlatego projekt zrobię na D1 mini.
@artpc i @szopen: faktycznie transoptory to chyba dobre rozwiązanie na symulowanie wciśnięcia przycisku, ale nie miałem z nimi do czynienia więc powiedzcie czy dobrze chcę to połączyć (takie wnioski wyciągnąłem z czytania internetów):
-mam transoptory PC817
-włączenie przycisku będzie wyzwalane przez stan wysoki na nóżce ESP (3,3v)
-wyjściowy GPIO łączę przez opornik 100 omów z anodą (tą wartość wziąłem z jakiegoś kalkulatora internetowego, ani trochę nie jestem jej pewny)
-masę z katodą i emiterem (ESP i oczyszczacz mają wspólne zasilanie, więc i wspólne masy)
-kolektor ze ścieżką do której przylutowana jest druga strona przełącznika którego wciśnięcie symuluję

Czy tak będzie dobrze?

Tak wygląda raczej spoko, ja bym jednak sterował stanem niskim, a nie wysokim, czyli rezystor zamiast do GPIO dasz do 3,3V a diodę zamiast do masy to do GPIO.

W czym jest lepsze sterowanie niskim poziomem w tym przypadku? Ciekawi mnie to, bo mam w głowie kilka projektów i taka wiedza bardzo by mi się przydała na przyszłość. Może być link do jakiegoś artykułu na ten temat.

Pytanie nr 2: czy dobrze obliczyłem wartość rezystora?

  1. Zasadniczo to w tej kwestii powinno się czytać noty aplikacyjne producenta. Natomiast tu radośnie założyłem uproszczenie, dla którego przyjmuję, że GPIO w trybie wyjścia jest najbardziej zbliżone do układu open-drain (otwarty dren), a generalnie sterowanie stanem niskim dołączonej bezpośrednio diody LED (z rezystorem szeregowym oczywiście) jest optymalne dla wyjść typu OC (otwarty kolektor), OD i trój-stanowych bo generuje najmniejsze prądy obciążenia pobierane z MCU (a dążymy do układu o małym poborze energii).
    Tak przy okazji (to inne zagadnienie) przy wykorzystywaniu transoptora można mieć bezproblemową separację galwaniczną obu obwodów, więc masy nie muszą być wspólne, ani w układzie, który narysowałeś, ani w układzie ze sterowaniem staniem niskim.

  2. Nie wiem, nie sprawdzałem 100R wygląda wiarygodnie. (R można używać jako zamiennik literki omega dla wartości wyrażanych w pojedynczych omach).
    Obliczasz i tak w uproszczeniu (większość zastosowań nie wymaga idealnie dopasowanych wartości, przykład dla transoptorów Sharp PC8x7): od napięcia zasilania (3,3V) odejmujesz typowy spadek napięcia w/g danych katalogowych diody (niżej link dla typowego transoptora typowe Uf=1,2V przy If=20mA), czyli wychodzi z tego napięcie, które ma się odłożyć na rezystorze. Tu przy okazji Ifmax=50mA, ale patrząc po charakterystykach If=20mA jest dość optymalne. Zaniedbujesz parametry układu który to wysteruje (no chyba, że je znasz).
    U=Vcc-Uf
    I=If
    R=U/I
    Wychodzi 105R, więc 100R jest dobrym przybliżeniem przy takich założeniach.

PS Najmniejsza bezpieczna wartość to 51R (bardzo małe prawdopodobieństwo przekroczenia prądu dopuszczalnego, oczywiście mam na myśli znamionową wartość), największą dla której układ nadal powinien działać poprawnie dość trudno oszacować, ale myślę, że to wartość w okolicy 1k.

OK, dzięki za pomoc. Uzbrojony w taką wiedzę, jak tylko przyjdą moduły zabieram się do działania. Na pewno mnie coś jeszcze zaskoczy, więc pewnie za kilka dni się znów odezwę w tym temacie.

Witam, wszystko udało się podłączyć według Waszych wskazówek, dziękuję. Jedyny problem to za mało GPIO, ale już zamówiłem ekspander i myślę że to załatwi sprawę. Ale teraz potrzebuję pomocy w zaprogramowaniu modułu.
Udało mi się na razie podłączyć 5 wejść wykrywających jedną z trzech prędkości wiatraka, pracę generatora anionów i lampy UV do sterylizacji. Poza tym 1 wyjście podłączone do chwilowego przycisku Power. Moja aktualna wiedza pozwoliła mi z tego zrobić 5 czujników i jeden switch:

switch:
  - platform: gpio
    pin: GPIO15
    id: relay
    name: "webber-switch-power"
    icon: "mdi:air-purifier"
    inverted: false
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: relay

binary_sensor:
  - platform: gpio
    device_class: power
    pin: GPIO12
    name: "webber12-sterilize"
    
  - platform: gpio
    device_class: power
    pin: GPIO13
    name: "webber13-anion"

  - platform: gpio
    device_class: power
    pin: GPIO14
    name: "webber14-speed2"

  - platform: gpio
    device_class: power
    pin: GPIO4
    name: "webber4-speed3"

  - platform: gpio
    device_class: power
    pin: GPIO5
    name: "webber5-speed1"

image

Ale czytam o tych lambdach, warunkach i zmiennych i nie do końca pojmuję jak to zrobić porządnie. A chciałbym żeby była jedna encja z urządzeniem które się przełącza on/off i pokazuje swój stan on lub off (tak jak np.light). To czy jest ON kontroler rozpoznawałby po tym czy którykolwiek speed byłby włączony, jeżeli żaden z nich to urządzenie miałoby stan off. I tu potrzebuję pomocy, bo nie wiem jak to zaprogramować. Na razie możemy pominąć sterylizację i aniony, a także konkretną prędkość-to będą już osobne encje.
W moich encjach cyferka po webber to numer podłączonego GPIO.
Czekam na wasze sugestie.

Nie używaj cytowania do wstawiania kodu, zobacz jak zedytowałem posta i rób to w ten sposób (to markdown jak na githubie).

PS sądzę, że klasa urządzenia power tutaj nie pasuje.

PPS Powyżej tam gdzie rozpatrywałem wartość rezystora dla diody LED w transoptorze brałem pod uwagę tylko dane katalogowe transoptora, należy wziąć pod uwagę też maksymalną obciążalność GPIO który nią steruje (przykładowo przy sterowaniu stanem wysokim dla ESP82xx dopuszczalny prąd to 12mA, czyli w takim wypadku warto dobrać elementy dla 10mA)