logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak skompilować i skonfigurować WLED do obsługi DMX na LilyGo T-CAN485 ESP32?

p.kaczmarek2 15 Wrz 2025 11:33 936 0

TL;DR

  • Uruchomiono WLED na LilyGo T-CAN485 ESP32 do sterowania paskiem LED RGBW przez DMX512 i RS485.
  • Kompilacja w PlatformIO wymagała dodania -D WLED_ENABLE_DMX, wyłączenia audioreactive i przeróbki SparkFunDMX.cpp, aby użyć pinów LilyGO oraz włączyć transceiver RS485.
  • W Config->DMX Output ustawiono 4 kanały na piksel, odstęp 4, start channel 1 i role RGBW; w LED Preferences wpisano 40 pikseli.
  • Po wgraniu i sparowaniu z Wi‑Fi WLED sterował paskiem poprawnie, a pełna jasność wszystkich kanałów dała pobór 43.66 W.
  • Pasek nadal pobiera 12 W przy zgaszonych diodach, więc potrzebne może być odcinanie zasilania 24 V tranzystorem.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Telefon sterujący kolorem taśmy LED RGBW na rolce, świecącej na różowo
    Pokażę tutaj jak uruchomić pasek LED RGBW z DMX512 w oparciu o firmware WLED na płytce z wbudowaną obsługą RS485.
    DMX512 to protokół komunikacyjny używany głównie w oświetleniu scenicznym umożliwiający sterowanie wieloma urządzeniami, w tym kolorowymi paskami LED, za pomocą pojedynczej magistrali RS485.
    WLED to firmware open source dla mikrokontrolerów ESP8266 i ESP32, który umożliwia sterowanie adresowalnymi paskami LED (WS2812, SK6812, APA102 itp.) oraz integrację z popularnymi systemami automatyki i protokołami, takimi jak MQTT, HTTP czy Art-Net/DMX. Dzięki WLED można łatwo tworzyć i obsługiwać różne efekty świetlne z poziomu mikrokontrolera.

    Po informacje odnośnie DMX512 odsyłam do poprzedniego tematu:
    Taśma LED z interfejsem RS485? Protokół DMX512 - TM512C4 RGBW 24V

    Do prezentacji użyję opisywanego już LilyGO z RS485:
    LilyGO T-CAN485 - ESP32 do nauki łączności przemysłowej, magistrale RS485 i CAN

    Plan działania
    Oto kolejne cele na dzisiaj:
    1. Uruchomienie zwykłej kompilacji WLED w PlatformIO
    2. Zmiana ustawień projektu WLED tak, aby uruchomić sterownik DMX obecny już w tym środowisku
    3. Dostosowanie istniejącego sterownika DMX tak aby działał na LilyGO T-CAN485
    4. Wgranie własnej kompilacji WLED na LilyGO i końcowa konfiguracja oraz testy z paskiem

    Podstawa kompilacji WLED
    Przygodę zaczynamy od zapoznania się z podstawami kompilacji WLED. W zasadzie to wszystko opisane jest na ich oficjalnej stronie:
    https://kno.wled.ge/advanced/compiling-wled/
    Na tej samej stronie znajdują się również zalecenia co do DMX, ale niestety są bardzo niekompletne.
    https://kno.wled.ge/interfaces/dmx-output/
    Pobieramy repozytorium z Githuba, wykonujemy w nim npm install, a potem otwieram projekt w PlatformIO (rozszerzenie z Visual Code). Mamy już tam gotowe konfiguracje - wybrałem esp32dev. Operacje "Build" itd. powinny już działać:
    Widok PlatformIO z rozwiniętym projektem esp32dev i listą zadań kompilacji


    Kompilacja i poprawki wsparcia DMX
    Pora zmodyfikować ustawienia esp32dev. Ta konfiguracja jest zdefiniowana w platformio.ini. Tam dopisałem wsparcie DMX do build_flags:
    
    -D WLED_ENABLE_DMX
    

    Przełącznik -D po prostu dodaje #define WLED_ENABLE_DMX 1 do kompilacji. Niestety przy kompilacji jednak pojawiał się błąd:
    
    usermods/audioreactive/audio_reactive.cpp:10:4: error: #error This audio reactive usermod is not compatible with DMX Out. #error This audio reactive usermod is not compatible with DMX Out. ^~~~~
    

    Musiałem dodatkowo usunąć linijkę z:
    
    custom_usermods = audioreactive
    

    z tej samej sekcji konfiguracji.

    Ostatecznie wyszło tak:
    
    [env:esp32dev]
    board = esp32dev
    platform = ${esp32_idf_V4.platform}
    build_unflags = ${common.build_unflags}
    custom_usermods = 
    build_flags = ${common.build_flags} ${esp32_idf_V4.build_flags} -D WLED_RELEASE_NAME=\"ESP32_V4\" #-D WLED_DISABLE_BROWNOUT_DET
                  -DARDUINO_USB_CDC_ON_BOOT=0 
            -D WLED_ENABLE_DMX
    lib_deps = ${esp32_idf_V4.lib_deps}
    monitor_filters = esp32_exception_decoder
    board_build.partitions = ${esp32.default_partitions}
    board_build.flash_mode = dio
    

    Na tym etapie kompilacja powinna działać, ale to nie wszystko... trzeba jeszcze zmienić pin i uruchomić RS485 na LilyGO.

    WLED ma dwa osobne sterowniki DMX. Pierwszy znajduje się w ESPDMX.cpp i używany jest na ESP8266 oraz ESP32 C3 i S2:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Drugi znajduje się w SparkFunDMX.cpp i to on nas dziś interesuje:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Znajduje się tam wpisany na sztywno (!) indeks pinu z którego wysyłane są dane przez UART (a potem odpowiedni układ zamienia to na RS485):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Zmieniłem ten blok tak, by korzystał z definicji pinów od twórców LilyGO:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Zmiana pinu to nie wszystko - na LilyGO T-CAN485 należy jeszcze włączyć transceiver. Ostatecznie przerobiłem metodę initWrite w ten sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Konfiguracja WLED po wgraniu na ESP
    Po wgraniu musiałem sparować ESP z moim WiFi. WLED tworzy swój AP - hasło to wled1234. Strona konfiguracyjna ma IP 4.3.2.1. Tam można podać nasz SSID i hasło, by urządzenie dołączyło do naszej sieci.
    Interfejs WLED z wyborem koloru, efektów świetlnych i segmentów LED
    Potem w Config->LED Preferences należy ustawić ilość pikseli. Wiem, to jest dość dziwne, bo tu są ustawienia WS2812 i podobnych, ale tak w tej chwili to działa.
    Zrzut ekranu konfiguracji LED w WLED z ustawioną długością taśmy na 50 LEDów
    Co więcej, pasek nie działa mi stabilnie jak ustawię tu 50 LEDów - ustawiłem na razie 40.
    Następnie konfigurujemy DMX w Config->DMX Output. Kolejno:
    - channels per fixtures - kanały na piksel, tutaj 4, RGBW
    - spacing between start channels - odstęp między pikselami, też 4
    - start channel - początkowy kanał - 1
    - dodatkowo ustawiamy role kanałów - kolejno RGBW
    Tak jak na zrzucie ekranu:
    Interfejs ustawień DMX WLED z kanałami RGBW i konfiguracją DMX Map
    Swoją drogą, zabawny nagłówek - "Imma firin ma lazer". Ktoś ma poczucie humoru.
    Zapisujemy i można sprawdzić mapowanie wciskając przycisk DMX Map:
    Mapa kanałów DMX RGBW pokazująca przypisania kolorów w czterokanałowych sekcjach
    Od teraz WLED powinien być w stanie kontrolować pasek z DMX.


    Podłączenie paska do LilyGO
    Przypomnę podłączenie - zasadniczo tak jak w poprzednim temacie. Potrzebne jest:
    - osobne zasilanie, tutaj 24 V DC, zgodnie z dokumentacją paska
    - RS485 z LilyGO (nie potrzeba wspólnej masy)
    Płytka LilyGO T-CAN485 podłączona do taśmy LED RGBW i zasilacza laboratoryjnego

    Rezultaty
    Rezultaty przedstawiłem na filmach. WLED może zarówno animować pasek jednym kolorem (tak jakby jeden piksel), jak również oczywiście jest w stanie sterować poszczególnymi pikselami (tutaj: sekcjami) paska:







    Pomiary
    Na koniec jeszcze na próbę sprawdziłem pobór mocy całego paska. Wymusiłem ustawienie wszystkich kanałów na 255 (pełna jasność) w ustawieniach DMX:
    Zrzut ekranu konfiguratora DMX Map z ustawieniami kanałów 1-4 na wartość 255
    Rezultat:
    Wyświetlacz zasilacza pokazujący 1,85 A i 23,6 V z pokrętłami regulacyjnymi
    Podświetlona taśma LED RGBW zwinięta w rolkę, przygotowana do podłączenia.
    Wychodzi na to, że pełna jasność tego paska to 43.66 W.

    Niezbędne dalsze kroki
    Warto tu przypomnieć problem wykryty w poprzednim temacie z serii. Ten pasek pobiera 12 W przy wszystkich diodach zgaszonych. Nie zostało to jeszcze przeze mnie rozwiązane - pewnie potrzebny będzie tranzystor oraz możliwość odcinania linii 24 V w momencie gdy wszystkie piksele są zgaszone. Nie wiem na ten moment, czy WLED ma już taki gotowy mechanizm, czy będę musiał to od 0 implementować. Zobaczę w kolejnej części.

    Podsumowanie
    W ten sposób udało mi się uruchomić protokół DMX z oprogramowaniem open source WLED. Pierwszym zaskoczeniem było to, w jak bardzo niedopracowanym stanie jest wsparcie tego protokołu w tym projekcie. Nie ma tam nawet mechanizmu, by wybrać pin UART. Co więcej, WLED korzysta z dwóch różnych bibliotek do wysyłania DMX (osobno dla ESP8266 i osobno dla ESP32), co również mnie nieco dziwi, nie łatwiej byłoby to zrealizować razem?
    Z kompilacją też było nieco problemu, bo różne opcje kompilacji nie są ze sobą kompatybilne i z tego powodu musiałem wyłączyć efekty audio, które na szczęście nie są mi do niczego potrzebne.
    Reszta poszła sprawnie, zostało jedynie dodać te wyłączanie zasilania paska przy zgaszonych LEDach.
    Na razie to tyle - czy korzystacie z WLED w swoich projektach? Zapraszam też do podzielenia się efektami. U mnie jeszcze nie są gotowe...

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14416 postów o ocenie 12369, pomógł 650 razy. Jest z nami od 2014 roku.
  • REKLAMA
📢 Słuchaj (AI):
REKLAMA