Tutaj pokażę podstawy sterowania indywidualnie adresowalnymi diodami LED w OpenBeken. Obecnie OpenBeken obsługuje diody WS2812B i wiele diod LED z podobnymi protokołami, jak na przykład SM16703P. W tym temacie skupię się na podstawach ręcznego sterowania diodami LED, nie będę tutaj omawiał zaawansowanych animacji. Mamy nadzieję, że już niedługo dodany zostanie zaawansowany system animacji, który zostanie omówiony w osobnym tutorialu.
Ogólne informacje na temat OBK można znaleźć na stronie:
https://github.com/openshwprojects/OpenBK7231T_App
Które urządzenia mają indywidualnie adresowalne diody LED?
Na rynku dostępnych jest wiele tego typu urządzeń, oto kilka przykładów:
- Inteligentna cyfrowa taśma LED LSC (2x5m RGBCW): BK7231N, SM16703P
- Feit Electric „Smart Color Chasing Strip Light” z BK7231N i SM16703
I wiele więcej.
Jak podłączyć diody LED?
Diody LED można podłączyć tylko do P16, czyli pinu MOSI. Dzieje się tak, ponieważ używamy sterownika SPI DMA, aby uzyskać precyzyjne taktowanie.
Zobacz nasz temat w arkuszu danych, aby zlokalizować P16:
Arkusz danych BK7231, pinout, programowanie, specyfikacja, wiki (BK7231T, BK7231N)
Jeśli Twój moduł nie ma wyprowadzonego P16, jak CB2S, zawsze możesz wyprowadzić go samodzielnie:
Jak uzyskać dostęp do sprzętowego portu SPI w CB2S? P16 (MOSI) Metoda przerwania GPIO
Jak stworzyć skrypt w OpenBeken?
Proszę zapoznać się z tym tutorialem:
Moje środowisko testowe
Nie mam żadnego urządzenia IoT z indywidualnie adresowalnymi diodami LED, więc użyłem po prostu CB2S z wyprowadzonym pinem P16 (jak w poradniku, o którym wspomniałem wcześniej) z podłączoną listwą WS2812B:
Próbka - test RGB
OK, więc utwórzmy przykładowy skrypt. Na razie zapalimy tylko dwie diody, żeby sprawdzić, czy listwa działa. Oto jak to wygląda z mojej strony:
Oto pełny skrypt:
startDriver SM16703P
SM16703P_Init 3
SM16703P_SetPixel 0 0 255 0
SM16703P_SetPixel 1 0 0 255
SM16703P_SetPixel 2 255 0 0
SM16703P_Start
Skrypt jest używany SM16703P poleceń, ale to samo działa w przypadku WS2812B. Po prostu najpierw opracowaliśmy sterownik SM16703P, a potem odkryliśmy, że czasy są również dopasowane do klasycznych diod WS.
Wynik:
Przykład - pełny pasek, pojedynczy kolor
W tym przykładzie możemy ustawić wszystkie piksele na jeden kolor. Można to zrobić na dwa sposoby. Pierwszym z nich jest użycie pętli:
startDriver SM16703P
// number of LEDs
setChannel 5 60
// init
SM16703P_Init $CH5
// iteration variable
setChannel 6 0
// loop for each LEd
again:
SM16703P_SetPixel $CH6 0 255 0
addChannel 6 1
if $CH6<$CH5 then goto again
// done
SM16703P_Start
Drugi sposób jest znacznie prostszy - jeśli podasz „all” jako indeks pikseli, ustawione zostaną wszystkie piksele:
SM16703P_SetPixel all 0 255 0
Wynik:
Przykład - Pełny pasek RGB
Prostą pętlę można również wykorzystać do ustawienia kolorów RGB. Najpierw czerwony, potem zielony, potem niebieski, ale kolejność kolorów może być inna, jeśli Twoja listwa jest np. w standardzie GBR.
startDriver SM16703P
// number of LEDs
setChannel 5 60
// init
SM16703P_Init $CH5
// iteration variable
setChannel 6 0
// loop for each LEd
again:
SM16703P_SetPixel $CH6 255 0 0
SM16703P_SetPixel $CH6+1 0 255 0
SM16703P_SetPixel $CH6+2 0 0 255
addChannel 6 3
if $CH6<$CH5 then goto again
// done
SM16703P_Start
Wynik:
Przykład - Podstawowy ściemniacz
startDriver SM16703P
setChannelType 1 Dimmer256
// number of LEDs
setChannel 5 60
// init
SM16703P_Init $CH5
// on channel 1 dimmer change, refresh
addEventHandler OnChannelChange 1 startScript autoexec.bat refresh
// refresh function
refresh:
// iteration variable
setChannel 6 0
// loop for each LEd
again:
SM16703P_SetPixel $CH6 $CH1 0 0
addChannel 6 1
if $CH6<$CH5 then goto again
// done
SM16703P_Start
Panel WWW OBK (na razie pomiń DDP):
Efekty podczas zabawy ze ściemniaczem:
Kontroler LED klasy (tylko jeden kolor)
Inną interesującą możliwością jest „hakowanie” skryptu OBK w celu sterowania diodami LED za pomocą starego, jednokolorowego interfejsu LED OBK. W tym celu musisz włączyć następującą flagę:
Następnie dodaj następujący skrypt:
startDriver SM16703P
SM16703P_Init 60
again:
SM16703P_SetPixel all $led_enableAll*$led_red*$led_dimmer/255 $led_enableAll*$led_green*$led_dimmer/255 $led_enableAll*$led_blue*$led_dimmer/255
SM16703P_Start
delay_s 1
goto againDzięki temu panel OBK będzie mógł sterować diodami LED:
Wszystko oprócz sterowania CW będzie działać, nawet dimmer i próbnik kolorów:
Bezpośredni dostęp
Możliwe jest również wysłanie strumienia surowych bajtów za pomocą polecenia. Bajty są wysyłane bezpośrednio, bez konwersji na kolory. Można to zrobić za pomocą komendy SM16703P_SetRaw z następującą składnią:
SM16703P_SetRaw bUpdateAfterSet firstByte hexData
Oto przykładowe użycie:
SM16703P_SetRaw 1 0 FF000000FF000000FF
Spowoduje to ustawienie pierwszych 3 diod LED na zielony, czerwony i niebieski na urządzeniu WS2812B.
Sterowanie poprzez Home Assistant/HTTP
Podobnie jak w Tasmocie, wszystkie nasze polecenia możemy wykonać poprzez cmnd interfejs, dzięki czemu możesz ustawić kolory bezpośrednio z zewnątrz.
Kontrola poprzez DDP w np. xLights
Możliwe jest także sterowanie diodami LED poprzez protokół DDP. W tym celu można wykorzystać wiele aplikacji, takich jak XLights:
Wymagana konfiguracja po stronie OBK jest minimalna:
startDriver SM16703P
startDriver DDP
SM16703P_Init 60
Oto kilka przykładowych efektów wykonanych przez DDP:
Podsumowanie
To dopiero początek przygody z diodami LED WS2812B. Na razie możesz po prostu samodzielnie napisać proste efekty lub użyć DDP (na przykład z xLights), aby uzyskać bardziej zaawansowane efekty. System animacji dostępny wyłącznie w OBK nie jest jeszcze gotowy, ale planuję go wkrótce dodać.
Bądź na bieżąco i daj mi znać, jak mogę ulepszyć system!
Mój obecny plan zakłada również stworzenie automatycznego, przyjaznego dla użytkownika systemu animacji z pewnymi wbudowanymi animacjami.
Nowy system będzie działał bez żadnych skryptów, ale więcej informacji opublikuję, gdy będzie gotowy!
Fajne? Ranking DIY Pomogłem? Kup mi kawę.