supla-device 23.02

User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Dzisiaj została opublikoawana kolejna wersja biblioteki supla-device 23.02.

Zmian jest niewiele:
- wsparcie dla Wyzwalaczy akcji na linuxie (więcej na ten temat tutaj: viewtopic.php?t=12584 )
- usprawnione dodawanie innych interfejsów GPIO (np. przez ekspandery)

Większość klas pracujących na GPIO dostała możliwość podania wskaźnika na "interfejs", który steruje GPIO.
Do tej pory aby dodać np. ekspander portów, trzeba było dodać własną instancje klasy dziedziącą po Supla::Io. Trzeba było nadpisać metody zaczynające się do "custom" i jakoś to działało. Rozróżnienie między GPIO np. ESP8266 a ekspandera było robione poprzez dodanie jakiegoś offsetu do numeru GPIO. Np. zakładaliśmy, że GPIO od 0 do 49 to "ESP", od 50 do 99, to ekspander 1, itd.
Miało to swoje ograniczenia - np. ilość dostępnych w ten sposób GPIO była ograniczona do 255. Do tego dodawanie kilku ekspanderów było trudniejsze, bo wszystko trzeba było upchać w jedną klasę (a co jeśli ktoś chce użyć trzech ekspanderów, każdy innego typu?)

W nowym podejściu możemy utworzyć osobną klasę interfejsu GPIO dla każdego ekspandera. Numeracja GPIO dla każdego z nich leci normalnie od 0 w górę. Każdy ekspander działa niezależnie, co pozwala na mniej sztucznych ograniczeń w kodzie.

Ogólna koncepcja wylgąda tak:

Code: Select all

...
#include <supla/io.h>
...

class ExpanderTheFirst : public Supla::Io {
  ExpanderTheFirst(...) : Supla::Io(false)  {   // to jest bardzo ważne, aby przekazać "false" do konstruktora klasy bazowej
  ...
  }
  
  // następnie nadpisujemy metody "custom..."
  ...
  };
  
// w setup
auto exp1 = new ExpanderTheFirst(...);
auto relay1 = new Supla::Control::Relay(exp1, GPIO_4, ...);
auto relay2 = new Supla::Control::Relay(GPIO_4, ...);
W powyższym kodzie mamy dwa przekaźniki - jeden pracujący na GPIO 4 na ekspanderze, a drugi pracujący na GPIO 4 na ESP.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Mon Feb 20, 2023 8:43 am - usprawnione dodawanie innych interfejsów GPIO (np. przez ekspandery)
Korzystam i jestem zadowolony. Dzięki za dodanie takiej opcji bardzo ułatwiło to pracę.
https://gui-generic-builder.supla.io/
radzik_r
Posts: 404
Joined: Sun Aug 11, 2019 5:32 pm

Post

klew wrote: Mon Feb 20, 2023 8:43 am Dzisiaj została opublikoawana kolejna wersja biblioteki supla-device 23.02.

Zmian jest niewiele:
- wsparcie dla Wyzwalaczy akcji na linuxie (więcej na ten temat tutaj: viewtopic.php?t=12584 )
- usprawnione dodawanie innych interfejsów GPIO (np. przez ekspandery)

Większość klas pracujących na GPIO dostała możliwość podania wskaźnika na "interfejs", który steruje GPIO.
Do tej pory aby dodać np. ekspander portów, trzeba było dodać własną instancje klasy dziedziącą po Supla::Io. Trzeba było nadpisać metody zaczynające się do "custom" i jakoś to działało. Rozróżnienie między GPIO np. ESP8266 a ekspandera było robione poprzez dodanie jakiegoś offsetu do numeru GPIO. Np. zakładaliśmy, że GPIO od 0 do 49 to "ESP", od 50 do 99, to ekspander 1, itd.
Miało to swoje ograniczenia - np. ilość dostępnych w ten sposób GPIO była ograniczona do 255. Do tego dodawanie kilku ekspanderów było trudniejsze, bo wszystko trzeba było upchać w jedną klasę (a co jeśli ktoś chce użyć trzech ekspanderów, każdy innego typu?)

W nowym podejściu możemy utworzyć osobną klasę interfejsu GPIO dla każdego ekspandera. Numeracja GPIO dla każdego z nich leci normalnie od 0 w górę. Każdy ekspander działa niezależnie, co pozwala na mniej sztucznych ograniczeń w kodzie.

Ogólna koncepcja wylgąda tak:

Code: Select all

...
#include <supla/io.h>
...

class ExpanderTheFirst : public Supla::Io {
  ExpanderTheFirst(...) : Supla::Io(false)  {   // to jest bardzo ważne, aby przekazać "false" do konstruktora klasy bazowej
  ...
  }
  
  // następnie nadpisujemy metody "custom..."
  ...
  };
  
// w setup
auto exp1 = new ExpanderTheFirst(...);
auto relay1 = new Supla::Control::Relay(exp1, GPIO_4, ...);
auto relay2 = new Supla::Control::Relay(GPIO_4, ...);
W powyższym kodzie mamy dwa przekaźniki - jeden pracujący na GPIO 4 na ekspanderze, a drugi pracujący na GPIO 4 na ESP.

@klew a to każdy ekspander można w ten sposób zaimplementować?

zrobisz kompletny przykład na jakimś ekspanderze dla laika? żebym wiedział lub inni jak temat ugryść.
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

radzik_r wrote: Sun Mar 05, 2023 12:14 pm
@klew a to każdy ekspander można w ten sposób zaimplementować?

zrobisz kompletny przykład na jakimś ekspanderze dla laika? żebym wiedział lub inni jak temat ugryść.
Nie wiem czy każdy, ale chyba tak.
lukfud i krycha88 już coś pisali na te ekspandery, więc może niech oni się podzielą przykładami :)
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

Tutaj masz gotowe rozwiązania które napisałem
https://github.com/krycha88/GUI-Generic ... c/expander

Wykorzystujesz to bardzo prosto

Code: Select all

auto *EX_OUTPUT = new Supla::Control::ExpanderMCP23017(&Wire1, 0x21);

new Supla::Control::Relay(EX_OUTPUT, pin1);
new Supla::Control::Relay(EX_OUTPUT, pin2);
...
https://gui-generic-builder.supla.io/
radzik_r
Posts: 404
Joined: Sun Aug 11, 2019 5:32 pm

Post

krycha88 wrote: Sun Mar 05, 2023 2:29 pm Tutaj masz gotowe rozwiązania które napisałem
https://github.com/krycha88/GUI-Generic ... c/expander

Wykorzystujesz to bardzo prosto

Code: Select all

auto *EX_OUTPUT = new Supla::Control::ExpanderMCP23017(&Wire1, 0x21);

new Supla::Control::Relay(EX_OUTPUT, pin1);
new Supla::Control::Relay(EX_OUTPUT, pin2);
...

oooo super, dzięki
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

radzik_r wrote: Sun Mar 05, 2023 4:02 pm
krycha88 wrote: Sun Mar 05, 2023 2:29 pm Tutaj masz gotowe rozwiązania które napisałem
https://github.com/krycha88/GUI-Generic ... c/expander

Wykorzystujesz to bardzo prosto

Code: Select all

auto *EX_OUTPUT = new Supla::Control::ExpanderMCP23017(&Wire1, 0x21);

new Supla::Control::Relay(EX_OUTPUT, pin1);
new Supla::Control::Relay(EX_OUTPUT, pin2);
...

oooo super, dzięki
Tylko użyj moich bibliotek, bo je poprawiłem aby działały lepiej.
https://gui-generic-builder.supla.io/
radzik_r
Posts: 404
Joined: Sun Aug 11, 2019 5:32 pm

Post

krycha88 wrote: Tylko użyj moich bibliotek, bo je poprawiłem aby działały lepiej.
ok, dzięki, już pobrałem, poskładam sobie to w całość w wolnej chwili
User avatar
lukfud
Posts: 2117
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Mon Feb 20, 2023 8:43 am Dzisiaj została opublikoawana kolejna wersja biblioteki supla-device 23.02.

Zmian jest niewiele:
- wsparcie dla Wyzwalaczy akcji na linuxie (więcej na ten temat tutaj: viewtopic.php?t=12584 )
- usprawnione dodawanie innych interfejsów GPIO (np. przez ekspandery)

Większość klas pracujących na GPIO dostała możliwość podania wskaźnika na "interfejs", który steruje GPIO.
Krzysztofie, czy mógłbyś także dodać tą możliwość dla klas rgbw i dimmera?
https://www.facebook.com/groups/supladiy/
User avatar
lukosław
Posts: 116
Joined: Mon Oct 28, 2019 8:20 am

Post

Podbijam temat. Byłbym wdzięczny bardzo za prosty przykład jak użyć tego już nie tak nowego podejścia :)

Return to “supla-dev”