Obsługa przycisków w SuplaDevice

Zybi
Posty: 1451
Rejestracja: ndz cze 26, 2016 4:24 pm

czw lut 20, 2020 12:53 am

Oczywiście, że wszystko trzeba z głową robić.
Dlatego też w swoich kompilacjach unikam rozwiązań nazbyt uniwersalnych, przy których niedoświadczeni użytkownicy mogą mieć problemy wynikające z niewłaściwej konfiguracji/zastosowania danego GPIO.
lukfud
Posty: 236
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

czw lut 20, 2020 7:01 pm

klew pisze:
śr lut 19, 2020 11:11 pm

Dobrze kojarzę, że button masz ustawiony na GPIO0 a relay01 na GPIO15?

GPIO0 jest "pulled up", więc tam ustawianie input pullup nic nie zmienia. W związu z tym musiałbyś tworząc buttona ustawić mu trzeci parametr na "true", aby odwrócić logikę:

Kod: Zaznacz cały

Button(0, true, true)
Druga sprawa to używanie GPIO0 do przycisku nie jest najlepszym pomysłem, bo jeśli podczas resetu układu, przycisk będzie wciśnięty, to płytka wejdzie w tryb flashowania i program się nie odpali.

Problemu z przekaźnikiem nie udało mi się zaobserwować u mnie. Napisz coś więcej - mówisz o fizycznym stanie przekaźnika (sterujesz low czy high) ? Jaki jest stan przekaźnika widoczny w aplikacji?

pinMode nie ustawiaj samemu. Klasy button, relay same sobie to ustawią bazując na parametrach, które podasz podczas ich tworzenia.
Dobrze kojarzysz. Podegrałem przed chwilą najnowszą wersję biblioteki. Zostawiłem jeden przycisk na gpio0 i dodałem na gpio4.

Kod: Zaznacz cały

Supla::Control::Button touch_button(0, true, true);
Supla::Control::Button switch_button(4);

touch_button.willTrigger(*relay01, Supla::Control::Button::ON_RELEASE, Supla::Control::Relay::TOGGLE);
- zwiera do GND
touch_button.setSwNoiseFilterDelay(100);

switch_button.willTrigger(*relay02, Supla::Control::Button::ON_PRESS, Supla::Control::Relay::TOGGLE);
- zwiera do V3,3 + 4k7
Działa tak jak powinno, filtr też :)

Kod: Zaznacz cały

Supla::Control::Button switch_button(4, true); - zwiera do GND bez rezystora.
Załączniki
bread.jpg
bread.jpg (453.25 KiB) Przejrzano 449 razy
.newbie
daniel
Posty: 32
Rejestracja: czw lut 15, 2018 7:29 am

czw lut 20, 2020 7:11 pm

klew pisze:
czw lut 20, 2020 12:10 am
Akcja ON_CHANGE jest dodana na moim githubie.
Dodałem też software'owe filtrowanie szumów na gpio. Domyślnie ustawione na 20 ms, ale można sobie ustawić inną wartść przez:
Dzięki :)
tomkowski
Posty: 109
Rejestracja: wt paź 09, 2018 7:16 pm
Lokalizacja: Orzesze

ndz mar 01, 2020 3:14 pm

Cześć,

Jako że szukam rozwiązania na moje problemy z InCanem (samozałączanie, niespodziewana zmiana stanu przekaźników itp.) postanowiłem przetestować obsługę przycisków w nowej SuplaDevice.

Kod: Zaznacz cały

Supla::Control::Relay relay_1(D1);
Supla::Control::Button button_1(D5, true);

Supla::Control::Relay relay_2(D7);
Supla::Control::Button button_2(D6, true);


  button_1.willTrigger(relay_1, Supla::Control::Button::ON_RELEASE, Supla::Control::Relay::TOGGLE);
  button_1.setSwNoiseFilterDelay(50);
  
  button_2.willTrigger(relay_2, Supla::Control::Button::ON_RELEASE, Supla::Control::Relay::TOGGLE);
  button_2.setSwNoiseFilterDelay(50);
Użyłem przykładu jak wyżej. Skompilowany dla Wemosa D1 (tak sądzę, bo nie ma oznaczeń, ale to "ta duża" płytka).
Podłączone dwa przekaźniki i dwa micro switche zwierające do masy (bez PullUp'u).

Po pierwsze po podłączeniu modułu przekaźniki załączają się i wyłączają od razu po czym załączają ponownie pozostając w tym stanie.
Zarówno app jak cloud pokazują stan odwrotny (urządzenie wyłączone). Wyłączenie/załączenie przekaźników fizycznym m-switchem powoduje zmianę stanu w app i cloud na przeciwny.

Sterowanie z app i clouda powiedziałbym, że nie działa lub działa w kompletnie dla mnie niezrozumiały sposób.
Czasem próba wywołania włącz lub wyłącz z clouda powoduje pojawienie się komunikatu "Błąd wykonania akcji w Supla-Server"
Sterowanie z poziomu App w telefonie działa czasem. Natomiast mam wrażenie sporego opóźnienia.
Równocześnie sterowanie innymi urządzeniami działa bez problemu.

Dodatkowo - nie zauważam żadnej różnicy w działaniu trzeciego parametru dla Supla::Control::Button".
Np. "Supla::Control::Button button_1(D5, true, true);".

Wyjaśnię tylko - nie jestem programistą. Jestem poszukującym rozwiązania problemu człowieczkiem, który próbując analizować różne przykłady stara się zrozumieć co nieco z magii, którą tu tworzycie :-D
Awatar użytkownika
klew
Posty: 829
Rejestracja: czw cze 27, 2019 12:16 pm

ndz mar 01, 2020 6:42 pm

tomkowski pisze:
ndz mar 01, 2020 3:14 pm
Cześć,

Jako że szukam rozwiązania na moje problemy z InCanem (samozałączanie, niespodziewana zmiana stanu przekaźników itp.) postanowiłem przetestować obsługę przycisków w nowej SuplaDevice
Napisz jeszcze jakie masz przekaźniki? Sterowane stanem wysokim czy niskim? Jak to masz podłączone? Może jakieś zdjęcie?
tomkowski
Posty: 109
Rejestracja: wt paź 09, 2018 7:16 pm
Lokalizacja: Orzesze

ndz mar 01, 2020 7:42 pm

Przekaźniki z transoptorami zasilane 3.3V/5V z możliwością osobnego zasilania cewek przekaźników (5V).
Sterowanie stanem niskim (GND na wejście sygnałowe załącza przekaźnik).
Buttony NO zawierające określone GPIO do masy. Bez rezystorów.
IMG_20200301_203555.jpg
IMG_20200301_203555.jpg (2.68 MiB) Przejrzano 342 razy
IMG_20200301_203443.jpg
IMG_20200301_203443.jpg (1.39 MiB) Przejrzano 342 razy
Awatar użytkownika
klew
Posty: 829
Rejestracja: czw cze 27, 2019 12:16 pm

ndz mar 01, 2020 7:49 pm

tomkowski pisze:
ndz mar 01, 2020 7:42 pm
Przekaźniki z transoptorami zasilane 3.3V/5V z możliwością osobnego zasilania cewek przekaźników (5V).
Sterowanie stanem niskim (GND na wejście sygnałowe załącza przekaźnik).
Buttony NO zawierające określone GPIO do masy. Bez rezystorów.

IMG_20200301_203555.jpg

IMG_20200301_203443.jpg
Relay sterowane stanem niskim konfiguruje się drugim parametrem:

Kod: Zaznacz cały

Relay(D1, false);
Natomaist Button z pullup trzeba potraktować "odwróceniem logiki" - czyli tym trzecim parametrem:

Kod: Zaznacz cały

Button(D5, true, true);
tomkowski
Posty: 109
Rejestracja: wt paź 09, 2018 7:16 pm
Lokalizacja: Orzesze

ndz mar 01, 2020 8:15 pm

Pięknie dziękuję!

Zabrakło mi wiedzy o drugim parametrze dla Relay.
Oczywiście działa.
krycha88
Posty: 703
Rejestracja: pt lis 16, 2018 7:25 am

czw mar 05, 2020 10:22 am

Czy planujesz dodać opcję przywracania stanu przekaźnika po restarcie ESP?
Awatar użytkownika
klew
Posty: 829
Rejestracja: czw cze 27, 2019 12:16 pm

czw mar 05, 2020 10:39 am

krycha88 pisze:
czw mar 05, 2020 10:22 am
Czy planujesz dodać opcję przywracania stanu przekaźnika po restarcie ESP?
Ogólnie tak. Zostało mi jeszcze parę rzeczy do przepisania "po nowemu" i wtedy między innymi zajmę się też zapisywaniem konfiguracji i stanów.
Dla niektórych kanałów jest to konieczne (np. rolety, liczniki impulsów). Zapamiętanie stanu przekaźnika będzie opcjonalne.
ODPOWIEDZ