Przedstawię tu analizę wnętrza oraz krótką inżynierię wsteczną protokołu UART kolejnego ściemniacza Tuya, tym razem opartego o dość nietypowy moduł LMB54 (BK7231N) oraz dwa mikrokontrolery HC32F003. W pełni tutaj opiszę, jak można go zaprogramować i dodać jego wsparcie OpenBeken przy użyciu języka skryptowego oferowanego przez te firmware. Przedstawiony ściemniacz będzie dość nietypowy, ponieważ nie korzysta on z protokołu TuyaMCU tak jak omawiane już wcześniej produkty, tylko z nieco innej, prostszej komunikacji UART, która w tym przypadku jest jednokierunkowa.
Zakup WXDM2
Ściemniacz podrzucił mi czytelnik (wraz z zestawem innych gadżetów), abym wgrał do nich OpenBeken, tak jak zresztą pisałem w poprzedniej części. Natomiast sam zakup ściemniacza odbył się na polskim portalu aukcyjnym:
Ściemniacz kosztował całe 80 zł, to jest dość dużo, ale przynajmniej wspiera on dwie żarówki i dwa włączniki.
Opis od sprzedawcy:
Ważna uwaga - w oryginalnym firmware ściemnia się wciskając przycisk, więc preferowany jest przycisk monostabilny:
Schemat montażowy:
Ale uwaga, produkt wysyłany ma zamienione miejsca N i L, należy sugerować się oznaczeniami na jego obudowie, to one mają "ostatnie słowo"
Otrzymany zestaw
Ten sprzedawca nie daje nawet śrubek mocujących ani taśmy w zestawie...
Wnętrze WXDM2, wyprowadzenia modułu i analiza PCB
Wystarczy podważyć pokrywę:
Części ściemniacza na analizowałem. Widać tu regulator LDO 3.3V, transoptor, MOSFET (7N65C), 8 diod S3M i kontroler przetwornicy PN8016.
Patrzymy dalej - moduł WiFI nie jest podpisany, to nie WB3S:
Wylutujmy górne PCB:
Oto i jest drugi MOSFET, 7N65C... i duży kondensator, ale nie analizowałem jego roli.
Na spodzie PCB z modułem WiFi, są aż dwa mikrokontrolery HC32F003 - czyżby to był produkt z TuyaMCU? Ale jak to dwa? Jeden na kanał ściemniania?
Teraz trzeba odlutować ekran z modułu WiFi, by zobaczyć co jest w środku.
BK7231N! Są szanse na zmianę firmware. Ale gdzie jest RX i TX?
Odlutujmy zatem moduł WiFi, by sprawdzić jego opis wyprowadzeń.
Gorące powietrze jest tu wręcz niezbędne.
Ostatecznie opracowałem szkic:
Wyjaśnienia:
- 3.3V i GND to wiadomo, zasilanie
- S1 i S2 to wejścia przycisków, one są podłączone do modułu WiFi
- RX i TX od modułu WiFi jest wyprowadzone na zewnątrz
- TX od modułu WiFi idzie do obu HC32F003
- R1 i R2 to wyjścia do ściemniaczy, każdy obsługuje jeden HC32F003
- ZC to wykrycie zera by ściemniacz wiedział kiedy zacząć przewodzić (podłączone jest przez tranzystor, do obu HC)
Spróbowałem podsłuchać również komunikację UART. Tylko na TX od układu WiFi coś się dzieje.
Zebrane dane jako tekst:
FF 55 01 3F 59 00 00 0A
FF 55 02 3F 3F 00 00 0A
FF 55 01 59 3F 00 00 0A
FF 55 02 59 59 00 00 0A
FF 55 01 3F 59 00 00 0A
FF 55 02 3F 3F 00 00 0A
FF 55 01 59 3F 00 00 0A
FF 55 02 59 59 00 00 0A
00
FF 55 01 FF 00 05 DC 0A
0A FF 55 02 FF FF 05 DC 0A
00 FF 55 01 FF 00 05 DC 0A FF 55 02 FF FF 05 DC 0A
FF
55 01 FF 00 05 DC 0A FF 55 02 FF FF 05 DC 0A
Bajt 0x55 wygląda jak protokół TuyaMCU, ale TuyaMCU to nie jest.
0x01 i 0x02 wyglądają jak identyfikatory który ściemniacz nastawiamy.
Postanowiłem wgrać OpenBeken i sprawdzić, czy jestem w stanie sam wysłać pakiet UART kontrolujący ściemniacz.
Wgranie firmware i pierwsze próby kontroli
Szybko się jednak okazało, że cała zabawa z wylutem była zbędna - tak naprawdę tutaj tylko "odzywa się" na UART moduł WiFI, więc można go programować w układzie. Nic nam MCU nie zakłóci. Pady oznaczyłem w poprzednim akapicie. Oto podłączenie programatora:
Wsad wgrałem poprzez:
https://github.com/openshwprojects/BK7231GUIFlashTool
zgodnie z instrukcją na stronie powyżej.
potem już w OpenBeken korzystałem z komendy uartSendHex aby testować wysyłanie różnych pakietów do ściemniaczy. Chciałem zasymulować działanie oryginalnego firmware. Jest to niezbędne, by te ściemniacze wysterować.
Po kilku testach doszedłem do wniosku, że następujący pakiet działa:
uartSendHex 0A FF 55 02 00 9F 00 00 0A
A 9F to wartość poziomu jasności, od 0 do 255, jeden bajt. Nie ma tu sumy kontrolnej. Nie wiem czym jest reszta bajtów, za wyjątkiem 0x02, który jest identyfikatorem który z dwóch ściemniaczy na pokładzie kontrolujemy.
Proof of concept - skrypt testowy
Mam już podejrzenie, jak to działa. Mogę zatem przygotować prosty skrypt OpenBeken, który w pętli zmienia jasność lampy. Czy skrypt zadziała zgodnie z oczekiwaniami?
again:
addChannel 10 1 0 255 1
delay_ms 100
uartSendHex 0A FF 55 02 00 $CH10$ 00 00 0A
goto again
Skrypt powyżej operuje na kanale 10 OpenBeken. Stopniowo go zwiększa, po osiągnięciu 255 go zapętla od 0. Wartość kanału 10 używana jest jako wartość bajtu w wysyłanym pakiecie.
Dokumentacja komend OBK:
https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/commands.md
Skrypt działa:
Finalny przykład - pasek i mapowanie jego zmiany na wartość UART
OpenBeken oferuje możliwość ustawienia typu kanałów, czyli sposobu, w jaki są one wyświetlane. Typ Dimmer256 to pasek ściemniacza o zakresie od 0 do 255, więc jest tutaj jak znalazł. W połączeniu z poniższym skryptem, możemy uzyskać kontrolę ściemniacza na panelu WWW:
addEventHandler OnChannelChange 0 uartSendHex 0A FF 55 02 00 $CH0$ 00 00 0A
W momencie zmiany kanału 0 wysłany zostanie dany komunikat na UART. To wystarczy, by mieć prawdziwą kontrolę nad tym ściemniaczem..
Rezultat:
Podsumowanie
To był dość nietypowy produkt. Nie spotkałem się wcześniej ze ściemniaczem od Tuya ale bez TuyaMCU, korzystającym zamiast tego z uproszczonego, "jednokierunkowego" protokołu UART (tj. tu tylko moduł WiFi wysyła informacje, nie odbiera nic). Ta "jednokierunkowość" jest jednak dla mnie troszkę uzasadniona dlatego, że w środku są osobne MCU do ściemnienia każdego z kanałów. Oba są podłączone do jednej linii TX1 od BK7231N i tylko wybierają sobie przeznaczone dla nich pakiety po ich zawartości (jeden z bajtów to 0x01 lub 0x02). Ściemniacz już działa w OpenBeken, chociaż można by go usprawnić nieco i np. dodać pamiętanie stanu ściemniacza (na ten moment jest tylko jedna zmienna, więc wyłączenie lampy jest równoznaczne z ustawieniem ściemniacza na 0). To wszystko jest możliwe do wykonania przez skrypty OBK, więc mimo wszystko uznaję już ściemniacz za wspierany a w przyszłości dam osobny temat o wspomnianych już skryptach.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
