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

WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze

p.kaczmarek2 18 Lip 2022 08:56 7644 33
  • WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Witajcie, przedstawię tu wnętrze oraz zmianę firmware kolejnej lampki LED. Temat wyróżni się tym, że ta LEDówka korzysta z protokołu I2C do kontroli swoich kolorów, a dokładniej do komunikacji między modułem WiFi/Bluetooth WBLC5 (BK7231T) i stałoprądowym kontrolerem LED SM2135Eh. Opiszę tu też sam protokół komunikacji z SM2135Eh i dam prosty przykład jego implementacji bazujący na cyfrowym IO, czyli bez sprzętowego I2C.
    Na koniec tematu też pokażę jej konfiguracje w OpenBeken.


    Zakup WOJ14415
    Lampką tą zakupiłem na polskim portalu aukcyjnym na skutek prośby jednego z użytkowników mojego OpenBeken - zostałem poproszony, by dodać wsparcie układu SM2135.
    Produkt znalazłem pod hasłem Żarówka LED GU10 5W RGB SPECTRUM SMART WIFI TUYA, poza tytułem oferty jest też jego kod producenta - WOJ14415.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Kupiłem go wraz z innymi lampkami smart, dzięki czemu miałem darmową przesyłkę.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Produkt przybył w takim pudełeczku:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    UWAGA - produkt jest brandowany na "spectrum", ale jest kompatybilny z aplikacją Tuya! Sprawdzane.

    Wnętrze WOJ14415
    Plastikowe "szkiełko" wyjąć jest dość łatwo. Wtedy już widać, że w środku jest SM2135:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Z usunięciem płytki z LED trochę się siłowałem. Ciężko było. Ostatecznie zrobiłem mały otwór z drugiej strony i ją wypchałem na zewnątrz.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Piny od płytki są podpisane. Widać tu m. in CLK, które jest zegarem od I2C. Niepodpisany obok pin to pewnie DATA, linia danych I2C. Oprócz tego m. in. jest 3.3V (zasilanie kontrolera LED), 20V (zasilanie LEDów?), masa...
    LEDy są osobno ciepłe, zimne i kolorowe (RGB).
    Reszta układu z modułem WiFi:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Na płytce raczej to co zwykle, rezystor bezpiecznikowy (FR1, Fusible Resistor), jakaś przetwornica step down 8HMP (wraz z dławikiem 4R7 czyli 4.7uH), pewnie do zasilania modułu WiFi...
    Te 8HMP to może być TP6841S6:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Co kryje się pod naklejką? Moduł z BK7231T:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WBLC5. Wymiary:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Wyprowadzenia:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Niestety piny od programowania nie są podpisane. Na szczęście uzupełniłem dla was grafikę:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Przylutować trzeba się będzie pod co najmniej TX1 i RX1.
    Jeszcze dla zasady, spód płytki, m. in. mostek prostowniczy, jakiś jeszcze inny element w SMD (ktoś rozpozna?):
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Nie analizowałem głębiej już płytki z zasilaniem, pora skupić się na SM2135.


    Pięciokanałowy kontroler I2C LED SM2135
    Kontroler SM2135 służy do obsługi lampek RGBCW, czyli obsługuje 5 osobnych kanałów. Sterowany jest poprzez linie I2C, czyli do sterowania 5-cioma kanałami starczają dwie linie, DAT i CLK. Dodatkowo wymaga też zasilania. 5 kanałów + 2 linie + zasilanie daje nam już 8 pinów, więc sprytny producent masę dał na spodzie układu:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    SM2135 pracuje na wyprostowanym napięciu sieciowym. Nie potrzeba dla niego dodatkowego zasilacza. Przykładowa aplikacja SM2135 przedstawiona jest poniżej:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Niezbyt zgadzam się z tym podpisem "AC->DC" na przetwornicy step down zasilającej mikrokontroler (moduł WiFi/Bluetooth), gdyż tam już na wejściu jest już DC. Oprócz tego wszystko się zgadza, choć czasem między step down a modułem MCU nie ma osobnego regulatora LDO, o ile przetwornica daje stabilne 3.3V dla układów ESP czy tam Beken (bądź innych, rzadziej stosowanych).
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Diagram komunikacji I2C:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Oto jego opis z noty katalogowej, niezbyt się z nim zgadzam, chociażby to "8byte + 1ack" to raczej błąd, powinno być 8 bitów i jeden ack.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Spróbuję go Wam przetłumaczyć i wyjaśnić.
    Start transmisji oznaczany jest poprzez przejście DATA ze stanu wysokiego na niski gdy CLK jest wysoki.
    Koniec transmisji oznaczany jest poprzez przejście DATA ze stanu niskiego na wysoki gdy CLK jest wysoki.
    W trakcie wysyłania danych, zmiana stanu DAT powinna następować gdy zegar jest nisko.
    Po 9 cyklach zegara układ sam generuje ACK, tj. ustawia pin DATA w stan niski.
    Wysyłanie danych odbywa się poprzez podanie bajtu adresu rejestru i kolejnych bajtów zawartości (można podać ich kilka).
    Jeśli chodzi o rejestry, to kolejno mamy:
    - limit prądu (1 bajt) - adres 0xC0
    - tryb RGB lub CW (1 bajt) - adres 0xC1
    - dane koloru (5 bajtów, RGBCW) - adres 0xC2 itd
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Wartości limitu prądu:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Wartości koloru oraz wyboru trybu:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Po wysłaniu danych (można wysyłać różne ilości bajtów, wskaźnik na docelowy adres zwiększa się sam) należy również wygenerować sygnał stop.
    Oto cała transmisja:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Wiem, że to wszystko może wydawać się niezbyt intuicyjne, więc spójrzmy już na praktyczny przykład:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Uważny czytelnik zobaczy tu już pewną nieścisłość... tryb RGB ale 5 kolorów? W praktyce tak to działa, że w trybie RGB można ustawić wszystkie 5 wyjść i dodatkowo w ten sposób sterować również odcieniami bieli (zimny i ciepły). Kolejność bajtów z tablicy jest zmieniona, bo na tej płytce tak były podłączone LEDy.
    W moim przypadku tyle starczyło by obsłużyć wszystkie tryby. Innych sposobów nie implementowałem.
    Zostaje kwestia samego I2C. Można użyć sprzętowego, ale można też zrobić to w software poprzez proste digitalWrite i digitalRead, czyli zmiany stanów pinów cyfrowych w stylu Arduino.
    Dokładnie taką implementację mają popularne software dla ESP (bazujące na Arduino) i to z tego podejścia skorzystałem.
    (Uzupełnienie: poprzez "taką implementację" mam na myśli implementację komunikacji z SM2135, nie ogólnie całe software I2C. Podkreślam to dla zasady - dzięki @khoam)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Tu już powinno pojawić się pierwsze pytanie od czytelnika - czemu "SetHigh" ustawia w tryb.... wejścia? A nie wyjścia w stanie wysokim?
    To dlatego, że urządzenie powinno móc wygenerować odpowiedź, te właśnie słynne ACK, czyli "nadpisać" stan wysoki ustawiony poprzez rezystor pull up (programowalny) na pinie input.
    Można to sobie wyobrazić tak jak działanie przycisku, gdy na pinie wejściowym mamy przycisk (między nim a masą) to ustawiamy programowany pull-up i domyślnie jest stan 1, ale jak ktoś wciśnie przycisk to jest stan 0.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Oto procedura pisania jednego bajtu. Ta dziwna pętla z przesunięciem bitowym po prostu iteruje kolejne bity bajtu i kolejno sprawdza, czy dany bit jest zapalony w bajcie który chcemy wysłać.
    Następnie ma miejsce odebranie bitu ACK, zgodnie z tym co pisałem wcześniej pin DAT ustawiony jest w tryb wysoki ale poprzez input pullup (a nie output o stanie 1), dzięki czemu można odczytać odpowiedź od układu poprzez ReadDigitalInput. Stanowi to proste sprawdzenie, czy komunikacja się powiodła.
    To był dość uproszczony opis, ale myślę, że tyle starczy. Wiemy już jak działa ustawianie kolorów w lampkach na SM2135 oraz przy okazji też nieco dowiedzieliśmy się o samym I2C.
    Swoją drogą nie widzę tu opcji wyboru adresu urządzenia (czyli nie ma możliwości chyba połączenia wielu SM2135 na jednej magistrali), ale chyba producent tego wcale nie planował...
    Pełny kod implementacji komunikacji na którym się wzorowałem (oparty o digitalWrite itd):
    https://github.com/arendst/Tasmota/blob/devel...tasmota/tasmota_xlgt_light/xlgt_04_sm2135.ino

    Szybki test z aplikacją Tuya
    Aplikacja Tuya była omawiana wielokrotnie, więc bez większego komentarza.
    W tryb parowania wszedłem poprzez pięciokrotne podłączenie i odcięcie zasilania lampki. Bluetooth musiał być włączony w telefonie. Parowanie wymagało podania danych mojego WiFi, by podłączyć lampkę do internetu. Parowanie przebiegło bez problemów.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze


    SM2135 w OpenBeken
    Ten akapit przeznaczony jest już dla użytkownika. Wgrywanie OpenBeken realizujemy tak jak np. opisywałem tutaj:
    Ogrodowy podwójny przekaźnik Tuya CCWFIO232PK - BK7231T - programowanie
    RESET wykonałem poprzez odcięcie zasilania. Aby nie przeciążyć portu USB prądem pobieranym po podłączeniu przez kondensatory, zasilanie pociągnąłem osobno. Oczywiście przez zewnętrzny LDO 3.3V.
    W samym OpenBeken po standardowej konfiguracji wybieramy piny SM2135 I2C:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    To zasadniczo wszystko. Od tego momentu możemy kontrolować lampkę z Home Assistant:
    Kod: YAML
    Zaloguj się, aby zobaczyć kod

    (konfiguracja YAML nie różni się niczym od konfiguracji lampki RGBCW opartej o pięć kanałów PWM na BK7231T)
    Można też kontrolować ją z poziomu OpenBeken, ale wymaga to jeszcze zaznaczenia jednej flagi w Options->General, gdyż bez pinów PWM sam system na razie nie wykryje, że to RGBCW:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Od tego momentu uzyskujemy panel:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Opcja poziomu jasności jest wspólna, natomiast z trybów "temperatura bieli" oraz "barwa RGB" możemy wybrać tylko jeden w danym momencie. Tak jak w Home Assistant.


    Kolejność kanałów w OpenBeken
    Kolejność kanałów RGB nie jest standaryzowana. Przekonałem się o tym dzięki pomocy testerów mojego firmware. W związku z tym do OpenBeken dodana została komenda:
    
    SM2135_Map 0 1 2 3 4
    

    Komenda ta mapuje kolejno kanały RGBCW (pięć kanałów) na indeksy kanałów SM2135.
    Urządzenie nie zapamiętuje mapowania samo z siebie, komendę należy dodać do "short startup command" z Options bądź "autoexec.bat" z LittleFS w nowym panelu javascript.

    Kompatybilność z Tasmota Device Groups
    OpenBeken jest kompatybilny z Tasmota Device Groups, które pozwalają synchronizować pracę wielu urządzeń jednocześnie, jak również sterować dużą ilością urządzeń bez pośrednictwa Home Assistant.

    Podsumowanie
    W ten sposób udało uruchomić się SM2135. Dzięki dobrej dokumentacji oraz dostępności gotowych sterowników nie było z tym żadnego problemu. Proste operacje na pinach IO są dostępne na każdej platformie, więc wystarczy przeportować kod. Co prawda w przypadku mojego OpenBeken sterowanie jest zrealizowane nieco inaczej niż w innych systemach (na ten moment wszystko idzie przez tryb RGB, wszystkie 5 kolorów) ale na ten moment nie odczułem z tym żadnych problemów.
    Na koniec dodam, że obecność I2C (jak i tym bardziej modułu WiFi/Bluetooth, 32-bitowego) w zwykłych LEDówkach (no dobra, kolorowych) w pewien sposób skłania mnie do przemyśleń. Pomału wszystko robi się "online", nic dziwnego, że prowadzę projekt OpenBeken który pozwala odciąć takie gadżety od serwerów producenta i uniezależnić się od inwigilacji i ewentualnych problemów (co jak chmura padnie?).
    Chciałbym też podziękować użytkownikowi @rawilson za polecenie mi sprawdzenia tej lampki. Przygoda była ciekawa a OpenBeken zyskał kolejny sterownik.
    Załączam notę katalogową omawianego układu SM2135 .

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
  • #2 20106211
    khoam
    Poziom 42  
    p.kaczmarek2 napisał:
    Zostaje kwestia samego I2C. Można użyć sprzętowego, ale można też zrobić to w software poprzez proste digitalWrite i digitalRead, czyli zmiany stanów pinów cyfrowych w stylu Arduino. Dokładnie taką implementację mają popularne software dla ESP (bazujące na Arduino) i to z tego podejścia skorzystałem.

    Oczywiście, nie jest to prawda. Obsługa programowa I2C w Arduino Core dla ESP8266 bazuje na przerwaniach i nie korzysta z funkcji digitalWrite() czy digitalRead() - Link. Natomiast w ESP32, Arduino Core korzysta z kontrolerów sprzętowych I2C (Link).
  • #3 20106326
    p.kaczmarek2
    Moderator Smart Home
    Obsługa programowa komunikacji I2C dla SM2135, której dotyczy tamto zdanie i którą omawiałem i pokazywałem w tym temacie, korzysta z funkcji digitalWrite i digitalRead, co może zobaczyć każdy kto chce poszukać nieco więcej informacji niż te zawarte w artykule:
    https://github.com/arendst/Tasmota/blob/devel...tasmota/tasmota_xlgt_light/xlgt_04_sm2135.ino
    O proszę, implementacji Tasmoty oparta o digitalWrite i digitalRead.
    Zresztą, pisałem o portowaniu.

    Mimo wszystko, dziękuję za próbę weryfikację moich informacji. To się chwali. Jakbyś znalazł jakieś rzeczywiste błędy to pisz śmiało. A te zdanie może i poprawię, chociaż mam wrażenie, że Twój komunikat wynika z Twojej nieświadomości, jak zrealizowany jest sterownik SM2135 (brzmi tak, jakbyś myślał, że korzysta z biblioteki programowego I2C w Arduino a nie z prostych operacji cyfrowych zdefiniowanych w tym samym pliku).

    Mimo wszystko, masz ode mnie plusika za przeczytanie.


    EDIT: By nie było, tu masz to samo w ESPHome:
    https://github.com/esphome/esphome/blob/dev/esphome/components/sm2135/sm2135.h
    Linkuję byście nie musieli szukać.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Pomogłem? Kup mi kawę.
  • #4 20106369
    khoam
    Poziom 42  
    p.kaczmarek2 napisał:
    chociaż mam wrażenie, że Twój komunikat wynika z Twojej nieświadomości, jak zrealizowany jest sterownik SM2135 (brzmi tak, jakbyś myślał, że korzysta z biblioteki programowego I2C w Arduino

    Nie ma czegoś takiego, jak sterownik I2C w Arduino dla SM2135. To, że akurat w Tasmota (oraz dalej kopia tego softu w ESPHome [1]) została zaimplementowana obsługa typu bit-bang dla układu SM2135 wynika głównie z faktu, że to co jest nazywane "IIC" w SM2135 nie jest do końca kompatybilne ze standardem I2C. Być może niezbyt uważnie przeanalizowałeś notę tego układu i stąd wynika Twoja nieświadomość o różnicach pomiędzy implementacją obsługi I2C w Arduino Core dla ESP a tzw. "IIC" w SM2135. Nie zawsze należy dowierzać chińskim notom aplikacyjnym - chociaż w tym wypadku używają oni sformułowań CLK/DATA zamiast SCL/SDA, zapewne z przezorności.

    [1]
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 20106378
    p.kaczmarek2
    Moderator Smart Home
    khoam napisał:

    Nie ma czegoś takiego, jak sterownik I2C w Arduino dla SM2135. To, że akurat w Tasmota

    A czy ja gdzieś napisałem, że w samym Arduino jest sterownik SM2135?

    A co do nazewnictwa... oficjalne nazewnictwo Tuya jest I2C/IIC:
    https://github.com/TuyaInc/tuya_zigbee_sdk/bl...ee/app/light/common/src/light_driver/sm2135.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Swoją drogą, mają też driver sm16726b, przyda się:
    https://github.com/TuyaInc/tuya_zigbee_sdk/bl.../app/light/common/src/light_driver/sm16726b.c
    Znasz jakiś produkt z sm16726b?
    Pomogłem? Kup mi kawę.
  • #6 20106403
    khoam
    Poziom 42  
    p.kaczmarek2 napisał:
    A co do nazewnictwa... oficjalne nazewnictwo Tuya jest I2C/IIC

    Tuya nie ustanawia standardów w zakresie protokołu I2C.
  • #7 20107873
    rawilson
    Poziom 11  
    @p.kaczmarek2 dzieki za ogarniecie sterownika! Oczywiscie wszystko dziala, nic tylko pozostaje teraz poczekac na stworzenie profilu urzadzenia dla tuya-cloudcutter
  • #8 20108012
    p.kaczmarek2
    Moderator Smart Home
    Nie ma za co, podziękuj Theo za przetarcie szlaków z tym driverem, jeszcze te kilka lat temu.

    Teraz będę finalizować kompatybilność z Tasmota DGR, by móc grupować urządzenia na różnych mikrokontrolerach (mam też ledówki na BL602, więc będzie jak znalazł).
    https://tasmota.github.io/docs/Device-Groups/
    Driver od razu ruszy u mnie na platformach: BK7231T, BK7231N, XR809, BL602, W800 (pewnie docelowo na W600 i RTL też).

    Miałem problem z testowaniem tego drivera DGR, bo jakoś na złość nie mogłem dostać żadnej LEDówki RGBCW z ESP8266, mimo iż kupowałem je losowo (a nie wedle wytycznych "gdzie jest beken" - za wyjątkiem tej, którą wskazałeś), ale ostatnio przyfarciłem no i mam. Dużo mi to prób zajęło. Znalezione ESPowe LEDówki to BKL1262 i BKL1250 (z tym, że była przy nich data 2019).

    @rawilson , czy Twoim zdaniem jest teraz nieco trudniej trafić na produkt Tuya z ESP niż kilka lat temu? :)
    Pomogłem? Kup mi kawę.
  • #9 20108336
    rawilson
    Poziom 11  
    Niestety tak, sam o tym sie przekonalem - wtedy jednak przeszczep był mozliwy :)

    Co do zarówki - zauwazyłem, ze w trybie standby delikatnie sie ona grzeje, powierdza to miernik - pokazuje jakies 0,5W w idle - po podpieciu innej sztuki z oryginalnym firmware pobor spada niemal do zera. Moglbys sprawdzic po swojej stronie czy tez tak masz?
  • #10 20108468
    p.kaczmarek2
    Moderator Smart Home
    Całkiem możliwe, że oni usypiają moduł WiFi, zwłaszcza, że SM2135 "trzyma" kolory po ich ustawieniu, bez potrzeby dalszej ingerencji modułu WiFi. Tym dopiero będę musiał się zająć.

    Co do Tuya-cloudcutter - może uda się nam zrobić profil samodzielnie?
    Jak masz chwilę to spróbuj:
    spectrum-W...k7231t.zip Download (3.24 MB)
    Instrukcja po angielsku (częściowa, moje notatki):
    Cytat:

    1. Read flash from device
    2. Decrypt with https://github.com/notkmhn/bk7231tools

    $ pipenv run python bk7231tools.py dissect_dump -e -O dump_extract_dir dump.bin

    RBL containers:
    0x10f9a: bootloader - [encoding_algorithm=NONE, size=0xdd40]
    extracted to dump_extract_dir
    0x129f0a: app - [encoding_algorithm=NONE, size=0xfd340]
    extracted to dump_extract_dir


    3. So you get bk7231s_dump-2022- 5-19-21-41-28_app_1.00_decrypted file
    4. Use haxomatic
    https://github.com/tuya-cloudcutter/cloudcutter-bk7231-haxomatic

    W:\GIT\cloudcutter-bk7231-haxomatic>haxomatic.py "C:\Users\openshw\Downloads\bk_writer1.60-20210523\orange_socket-Mycket PE-01E IP44\after_pairing\extracted\bk7231s_dump-2022- 5-19-21-41-28_app_1.00_decrypted.bin"
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    [+] mf_cmd_process gadget address (THUMB): 0x92041
    [+] Found usable intermediate gadget at address 0x9ea48:

    5. Decrypt settings
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    6. Command decrypt_settings.py "bk7231s_dump-2022- 5-19-21-13-22.bin" result.bin
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    7. Open result in text viewer


    Jak masz chwilę to zrób to do punktu haxomatic i pokaż jakie adresy znalazł, jak nie to ja spróbuję w wolnym momencie...

    Jeśli natomiast haxomatic nie znajdzie (rzuci wyjątkiem) to trzeba z Ghidra siedzieć ale z tym raczej już nie pomogę.
    Pomogłem? Kup mi kawę.
  • #11 20108881
    rawilson
    Poziom 11  
    [!] Loading and disassembling code - may take a moment
    [+] Code loaded!
    [!] Searching for post-vuln code patterns
    0[+] Found a post-vuln code pattern match!
    [+] Matched instructions: 
            0xb678c: adds r4, #0xfc
            0xb678e: ldr r3, [r4, #0x50]
            0xb6790: ldr r1, [pc, #0xb0]
            0xb6792: adds r0, r6, #0
    [+] Identified lan object register as r4
    [!] Searching for JSON object register
    [+] Identified JSON object register as r7
    [!] Searching for ty_cJSON_Parse function address
    [+] ty_cJSON_Parse address: 0xc79b8
    [!] Searching for mf_cmd_process gadget address
    [+] mf_cmd_process gadget address (THUMB): 0xad51d
    [!] Searching for a mov r0, r7 intermediate gadget
    [+] Found usable intermediate gadget at address 0xba664:
            0xba664: ldr r3, [r4]
            0xba666: adds r0, r7, #0
            0xba668: blx r3
    [+] Payload gadgets (THUMB): intermediate_gadget_addr=0xba665 mf_cmd_gadget_addr=0xad51d
    
  • #12 20108924
    p.kaczmarek2
    Moderator Smart Home
    Ale fart, no to można łatwo zrobić profil.

    Ciąg dalszy instrukcji angielskojęzycznej z moich notatek (na brudno, mam nadzieję, że nie ma dużych błędów):
    Cytat:


    5. Decrypt settings
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    6. Command decrypt_settings.py "bk7231s_dump-2022- 5-19-21-13-22.bin" result.bin
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    7. Open result in text viewer
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    8. Find schema
    Copy schema
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    9. Fix string
    10. My string (I chosen secnd one):
    [{"type":"obj","mode":"rw","property":{"type":"bool"},"id":1},{"mode":"rw","property":{"min":0,"max":86400,"scale":0,"step":1,"type":"value"},"id":9,"type":"obj"},{"mode":"ro","property":{"min":0,"max":50000,"scale":3,"step":100,"type":"value"},"id":17,"ty:"obj"},{"mode":"ro","property":{"min":0,"max":100000000,"scale":0,"step":1,"type":"value"},"id":23,"type":"obj"},{"mode":"ro","property":{"min":0,"max":1000000000,"scale":0,"step":1,"type":"value"},"id":24,"type":"obj"},{"mode":"ro","property":{"min":0,"max":1000000,"scale":0,"step":1,"type":"value"},"id":25,"type":"obj"},{"mode":"ro","property":{"type":"bitmap","maxlen":6},"id":26,"type":"obj"}]
    11. Generate profile, open payload_builder.py, add here:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    12. Copy
    [+] mf_cmd_process gadget address (THUMB): 0x92041
    [+] Found usable intermediate gadget at address 0x9ea48:
    intermediate gadget = prep_gadget
    mf_cmd_gadget = pwn gadget
    And copied:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    13. Run it
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    14. Result
    {
    "chip": "BK7231T",
    "payload": "eyJhdXprZXkiOiJBVVRIS0VZQUFBQUFBQUFBIiwidXVpZCI6IlVVSURBQUFBQUFBQSIsInBza0tleSI6IiIsInByb2RfdGVzdCI6ZmFsc2UsImFwX3NzaWQiOiJBIiwic3NpZCI6IkE
    iLCJ0b2tlbiI6IkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUjqCSJ9",
    "authkey_template": "AUTHKEYAAAAAAAAA",
    "uuid_template": "UUIDAAAAAAAA",
    "datagram_padding": "QkJCQkEgCQBBIAkAQSAJAEEgCQBBIAkAQSAJAEEgCQBBIAkAQSAJAA=="
    }
    15. In device-profiles, create directory for manufacturer and device . copy template ( I copied fromk treatlife nl10)
    16. Update profile (with generated one)
    17. Open tuya.device.active.json
    18. Escape your string
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    into
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    19. Replace into copied active json
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    C:\Users\openshw\Downloads\bk_writer1.60-20210523\orange_socket-Mycket PE-01E IP44\after_pairing\extracted\bk7231s_dump-2022- 5-19-21-41-28_app_1.00_decrypted.bin



    Mój dodatkowy komentarz - w punkcie 8 znajdujesz schema opisujące urządzenie, przy przekopiowywaniu go musisz uważać bo kopiujesz ASCII z danych binarnych, z systemu plików i tam mogą być nagłówki sektorów które musisz pominąć (np jak widzisz nienaturalnie przerwany napis to go poprawriasz ręcznie)
    Schema można też wziąć z innego gotowego urządzenia w Tuya-cloudcutter, o ile jest to ten sam, powiedzmy, typ urządzenia.

    W 11 payload_builder.py tworzysz 'payload' stringa do przepełnienia bufora json (do nadpisania adresów)

    Ogółem weź profil analogicznie działającej lampki (RGBCW też) gotowy i w nim rób zmiany (może nawet schema przypasuje).

    Tu masz przykład mojego pull request dla nich jak sam zrobiłem profil dla urządzenia:
    https://github.com/tuya-cloudcutter/tuya-cloudcutter/pull/97
    Obejrzyj sobie diff:
    https://github.com/tuya-cloudcutter/tuya-clou...mits/41f82d20b0e4d450ec6d788441e612910740dc32

    Wymagane skrypty Python:
    payload_bu..der.zip Download (2.54 kB)
    decrypt_se..ngs.zip Download (890 bajtów)
    O ile dobrze pamiętam, decrypt_settings.py modyfikowałem by brał zrzuty z BKwriter 1.60 a nie z bk7231tools, gdyż bkWriter1.60 pomija bootloader (jest inny offset).

    Na razie tyle, zwłaszcza że zaraz wychodzę a potem będę na innej maszynie, ale masz chyba wszystko by zrobić pełny profil. Jak coś to spróbuję pomóc.

    UWAGA: sprawdź każdy krok dwa razy i pamiętaj, że istnieje ryzyko że zablokujesz sobie urządzenie jak zrobisz źle
    Pomogłem? Kup mi kawę.
  • #13 20109119
    chemik_16
    Poziom 26  
    oo dzięki za temat, akurat zastanawiałem się dlaczego moduły zdemontowane z żarówek DGM dają mi fazę na wyjściach esp8266.
    Sterownik LED oparty jest na SM2123, i faktycznie idzie do niego faza.
    Sam zasilacz wygląda na odseparowany od sieci, trafo ma 2 pary odczepów.
    Spaliłem już jeden łącząc GPIO4 i 5 z wejściem modbus falownika. Poszła różnicówka, esp8266, max485 i układ zasilacza ?L700?
    Na każdym z wyjść esp8266 i VCC mam fazę, zapala się neonówka.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
  • #14 20110359
    rawilson
    Poziom 11  
    @p.kaczmarek2 dzis postaram sie zrobic profil i go przetestowac - jesli zadziała stworze PR na githubie.
  • #15 20143599
    hode0055
    Poziom 2  
    Czy ktoś ma problemy z mqtt i homeassistant . z jakiegoś powodu chip nie reaguje na żadne polecenia mqtt i homeassistant go nie wykrywa. wszystko wydaje się być skonfigurowane ok
  • #16 20144417
    p.kaczmarek2
    Moderator Smart Home
    Hej @hode0055, czy możesz podać nam więcej informacji o swojej konfiguracji? Moja żarówka I2C działa dobrze z HA. Co masz na myśli przez ,,wykryj to"? Obecnie musisz dodać go ręcznie do configuration.yaml, czy próbowałeś tego?
    Czy możesz pokazać zrzuty ekranu swojej konfiguracji?
    Zrobię co w mojej mocy, aby ci pomóc.
    Pomogłem? Kup mi kawę.
  • #17 20145727
    hode0055
    Poziom 2  
    Cześć @p.kaczmarek2 :) Dzięki za tak szybki powrót .
    Myślę, że teraz to rozumiem. Używałem nieprawidłowej konfiguracji w pliku configuration.yaml. Nowością jest

    mqtt:
    światło:
    nazwa: "Lampa nocna"
    rgb_command_template: "{{ '%02x%02x%02x' | format(czerwony, zielony, niebieski)}}"
    rgb_state_topic: "lampka_łóżkowa/led_basecolor_rgb/get"
    rgb_command_topic: "cmnd/lampa_łóżkowa/led_basecolor_rgb"
    rgb_value_template: "{{ value[0:2]|int(base=16) }},{{ value[2:4]|int(base=16) }},{{ value[4:6]|int( baza=16) }}"
    command_topic: "cmnd/lampa_łóżkowa/led_enableAll"
    state_topic: "lampka_łóżkowa/led_enableAll/get"
    Availability_topic: "lampka_łóżkowa/podłączona"
    payload_on: "1"
    payload_off: "0"
    bright_command_topic: "cmnd/bedside_lamp/led_dimmer"
    jasność_skala: 100
    bright_state_topic: "lampka_łóżkowa/ściemniacz led/get"
    bright_value_template: "{{value}}"
    color_temp_command_topic: "cmnd/lampka_łóżkowa/temperatura_led"
    color_temp_state_topic: "lampka_łóżkowa/temperatura_led/pobierz"
    #color_temp_value_template: "{{value}}"
    zachowaj: prawda

    i wydaje się, że działa dobrze. Będę musiał zrobić jeszcze jakiś test jak wrócę z pracy bo w tej chwili chip nie jest w żarówce .

    Spodziewałem się, że komar odkryje to automagicznie lub wykryje wiadomości mqtt z mojego urządzenia, ale tak nie jest. To mnie zdezorientowało.
  • #18 20145982
    p.kaczmarek2
    Moderator Smart Home
    Ach ok, martwię się, że jest jakiś błąd, a jak wszyscy wiemy, błędy się zdarzają.

    Automatyczne wykrywanie jest na mojej liście TODO, teraz są rzeczy z większymi priorytetami.
    Pomogłem? Kup mi kawę.
  • #19 20246055
    skrc1
    Poziom 5  
    Jaki jest maksymalny prąd, jaki dopuszcza sterownik cm2135 w obecnej implementacji? Znacznie zmniejszyłem jasność kanału CW / WW w porównaniu do oprogramowania z tuya. Kanały RGB - normalne.
    Czekając na odpowiedź sprawdzę przywracając firmware z Tuya BK7231T i podmieniając wb2l na esp8266 na firmware esphome. Musimy się upewnić, że jest to problem OBK
  • #20 20246171
    p.kaczmarek2
    Moderator Smart Home
    Witaj @skrc1 , aktualna wersja używa domyślnego SM2135_20MA, ale rozumiem, że możesz chcieć to zmienić.

    Dodałem dla Ciebie nowe polecenie - SM2135_Prąd RGBPrąd CWPrąd . Do użytku jako ,,krótkie polecenie startowe", możesz umieścić tam wiele poleceń z zaległościami, np. zaległości SM2135_Current 0x02 0x02; SM2135_Mapa 1 2 3 4 0 ,

    Włącz także flagę - [SM2135] Użyj oddzielnych trybów RGB/CW zamiast zapisywać wszystkie 5 wartości jako RGB

    Nie testowałem tego sam - zaktualizuj do 1.14.37 i przetestuj i powiedz mi, czy działa dla Ciebie.
    https://github.com/openshwprojects/OpenBK7231T_App/releases/tag/1.14.37
    Uważaj, sam jeszcze tego nie przetestowałem.

    Oto aktualne wartości:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze

    Sprawdź i powiedz mi, czy potrzebujesz czegoś więcej. Zapewniam codzienne wsparcie dla mojego oprogramowania i mogę zaimplementować potrzebne funkcje.
    Pomogłem? Kup mi kawę.
  • #21 20246829
    skrc1
    Poziom 5  
    p.kaczmarek2 napisał:
    SM2135_Current RGBcurrent CWcurrent[/b]. Do użytku jako ,,krótkie polecenie startowe", możesz umieścić tam wiele poleceń z zaległościami, np. [b]Zaległości SM2135_Current 0x02 0x02

    SM2135_Prąd 0x07 0x02
    eq SM2135_Prąd CWprąd RGB !!!
    Najlepsze!
  • #22 20246867
    p.kaczmarek2
    Moderator Smart Home
    Może rzeczywiście masz rację.

    Rozważam również dodanie do konfiguracji autozapisu bieżących wartości, aby ludzie nie musieli używać krótkiej komendy startowej. Co myślisz?
    Pomogłem? Kup mi kawę.
  • #23 20248341
    skrc1
    Poziom 5  
    p.kaczmarek2 napisał:
    Może rzeczywiście masz rację.

    Rozważam również dodanie do konfiguracji autozapisu bieżących wartości, aby ludzie nie musieli używać krótkiej komendy startowej. Co myślisz?

    Z punktu widzenia użytkownika nie ma dużej różnicy. Kolejna kwestia: trudność znalezienia rozwiązania dla prostego użytkownika. Łatwiej jest mu umieścić niezbędny znacznik wyboru lub wybrać element w interfejsie. Niebezpieczne: może być destrukcyjne dla diod led cmd
  • #24 20299274
    rawilson
    Poziom 11  
    @p.kaczmarek2 czy istnieje mozliwość plynnego zapalania / wygaszania / zmiany jasnosci jak w przypadku tasmota i sterowania ledami poprzez pwm (tzw. fade)?
  • #25 20299331
    p.kaczmarek2
    Moderator Smart Home
    Od niedawna jest flaga, która pozwala włączyć łagodne przejścia między kolorami.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Pomogłem? Kup mi kawę.
  • #26 20299358
    rawilson
    Poziom 11  
    @p.kaczmarek2 super, działa! Czy istnieje (lub planowana jest) mozliwosc konfiguracji czasu tranzycji?
  • #27 20299385
    p.kaczmarek2
    Moderator Smart Home
    Mogę Ci to wyprowadzić na zmienną jakoś jak wrócę z wieczornego spaceru, umiesz używać "Short startup command"?

    EDIT: A nie, czekaj... to już jest wyprowadzone.
    led_lerpSpeed LICZBA gdzie liczba to ilość jednostek koloru (powiedzmy!) na sekundę, czyli jak dasz np. 255, to od 0 do 255 lerpuje w sekundę, jak dasz 128 to jakieś dwie sekundy, a jak 500 to w pół sekundy....

    To bardzo prosta interpolacja jest, wręcz ktoś mógłby powiedzieć, że "niepoprawna", ale ludzie są zadowoleni.
    Pomogłem? Kup mi kawę.
  • #28 20315666
    s1dave
    Poziom 2  
    Cześć, czy możesz mi pomóc z moimi żarówkami LVWIT 5W 350Lm RGB?

    Moduł WBLC9 (BK7231T) oraz kontroler stałoprądowy LED SM2135Eh.

    Przesłałem wątek, ale obecnie jest widoczny w postach tymczasowych, więc nie jestem pewien, czy wymaga zatwierdzenia, czy też będzie widoczny.

    Ustawiłem SM2135 na P24 i P26 ale nic nie dostaję od światła
  • #29 20315739
    p.kaczmarek2
    Moderator Smart Home
    @s1dave nie martw się tymczasowymi postami, wkrótce zostaną zatwierdzone. Nie widziałem jeszcze wątku, ale powiem tak: niektóre urządzenia używają innych pinów do komunikacji z SM2135, więc być może będziesz musiał upewnić się, że wybrałeś właściwe. W przypadku WBLC9 masz do dyspozycji następujące sygnały:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Nr styku Symbol Typ we/wy Funkcjonować
    1 P9 we/wy Sprzętowy pin PWM, który jest podłączony do P9
    2 P16 we/wy Wspólny pin I/O, który jest podłączony do P16
    3 P7 we/wy Sprzętowy pin PWM, który jest podłączony do P7
    4 P8 we/wy Sprzętowy pin PWM, który jest podłączony do P8
    5 P26 we/wy Sprzętowy pin PWM, który jest podłączony do P26
    6 VCC P Kołek zasilający (3,3 V)
    7 P24 we/wy Sprzętowy pin PWM, który jest podłączony do P24
    8 GND P Kołek uziemiający

    Czy jesteś pewien, że używane są dokładnie P24 i P26, a nie jakieś inne piny?
    Pomogłem? Kup mi kawę.
  • #30 20458850
    yuretskor
    Poziom 6  
    Temat wiosenny jak rozumiem to autor sterownika do sterowania kontrolerem sm2135.
    W tej chwili podłączyłem moduł led i mogę nim sterować, ale zauważyłem pewną funkcję przed włączeniem flagi
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Dioda RGB świeci jaśniej. Gdy tylko go włączyłem i stało się możliwe sterowanie światłem zimnym - ciepłym, maksymalna jasność diod LED stała się mniejsza.
    Ja też używam Twojego sterownika w połączeniu ze sterownikiem do czujnika sht30 i razem nie działają (gdy są włączone razem to widzę że przy wyborze koloru nagrywanie przechodzi na kanał 2 gdzie są odczyty wilgotności z sht30 obecnie jedzie.Może jakoś wspólnie rozwiążemy problem?
    Oto link do mojego tematu https://www.elektroda.com/rtvforum/topic3959243.html
    Przepraszam również za mój angielski, używam tłumacza. I cześć wam z Ukrainy)
REKLAMA