Obsługa przycisków w SuplaDevice

Zybi
Posts: 1511
Joined: Sun Jun 26, 2016 4:24 pm

Post

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.
User avatar
lukfud
Posts: 2301
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Wed Feb 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ę:

Code: Select all

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.

Code: Select all

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ż :)

Code: Select all

Supla::Control::Button switch_button(4, true); - zwiera do GND bez rezystora.
You do not have the required permissions to view the files attached to this post.
https://www.facebook.com/groups/supladiy/
daniel
Posts: 34
Joined: Thu Feb 15, 2018 7:29 am

Post

klew wrote: Thu Feb 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
Posts: 393
Joined: Tue Oct 09, 2018 7:16 pm
Location: Orzesze

Post

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.

Code: Select all

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
User avatar
klew
Posts: 10203
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

tomkowski wrote: Sun 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
Posts: 393
Joined: Tue Oct 09, 2018 7:16 pm
Location: Orzesze

Post

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
You do not have the required permissions to view the files attached to this post.
User avatar
klew
Posts: 10203
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

tomkowski wrote: Sun 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:

Code: Select all

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

Code: Select all

Button(D5, true, true);
tomkowski
Posts: 393
Joined: Tue Oct 09, 2018 7:16 pm
Location: Orzesze

Post

Pięknie dziękuję!

Zabrakło mi wiedzy o drugim parametrze dla Relay.
Oczywiście działa.
krycha88
Posts: 5420
Joined: Fri Nov 16, 2018 7:25 am

Post

Czy planujesz dodać opcję przywracania stanu przekaźnika po restarcie ESP?
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 10203
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

krycha88 wrote: Thu 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.

Return to “Arduino IDE”