Witajcie moi drodzy.
Przedstawię tu wnętrze kolejnego przekaźnika Tuya, który tym razem okazał się mieć w środku dość nietypowy moduł CB2S zrealizowany w oparciu o układ BK7231N (nie mylić z BK7231T). Podejmę również tu próbę przygotowania pod niego SDK oraz wgrania mu własnego wsadu. Opiszę jakie narzędzia mogą się do tego przydać oraz jakie musiałem rozwiązać problemy by dodać wsparcie BK7231N do mojego oprogramowania. Celem jak zwykle będzie powiązanie z Home Assistant i uniezależnienie się od serwerów producenta.
Powiązane tematy.
W ramach uzupełnienia polecam zapoznać się z powiązanymi tematami, m. in. z moją inicjatywą pisania własnego wsadu dla BK7231 (odpowiednika Tasmoty na ESP):
WB2S/BK7231 Tutorial - tworzymy własny firmware - UDP/TCP/HTTP/MQTT
[BK7231T] Mój serwer HTTP, konfigurator, wsparcie MQTT z Home Assistant
Samą aplikacje producenta (Tuya/eWeLink/Blitzwolf/SmartLife) opisywałem też w poprzednich tematach z serii. Tu jej tematu nie poruszę.
Dodatkowo: mój tutorial Home Assistant
Qiachip Smart Switch
Qiachip jest po prostu kolejnym inteligentnym przekaźnikiem sterowanym przez WiFi poprzez aplikację mobilną producenta. Na obudowie posiada przycisk, który też pozwala na jego sterowanie ręczne. Tym razem zestaw z nim jest dość ubogi:
Producent poleca dla niego aplikację SmartLife, którą opisywałem w poprzednich z tematach z serii.
Wnętrze Qiachip Smart Switch
Obudowa trzyma się tylko na zaczepach:
Układ w środku jest klasyczny - zasilacz beztransformatorowy na BP2525:
Regulator LDO AMS1117 (na wejściu 5V, na wyjściu 3.3V dla modułu WiFi):
Moduł WiFi - tutaj CB2S - i tranzystor do sterowania przekaźnikiem:
CB2S to moduł WiFi/Bluetooth opierający się o 32-bitowy mikrokontroler BK7231N.
Wyprowadzenia CB2S:
Układ, wygląda bardzo podobnie do WB2S zrealizowanego na BK7231T:
Te PWM są zgodne z pinami CB2S - spójrzmy na rozpiskę:
PWM0 to P8 - zgadza się.
Programowanie BK7321N
Problem programowania siostrzanego BK7231T udało mi się już rozwiązać. Prowadzę projekt uniwersalnego wsadu open source przeznaczonego dla tego układu, szczegóły w tych tematach:
WB2S/BK7231 Tutorial - tworzymy własny firmware - UDP/TCP/HTTP/MQTT
[BK7231T] Mój serwer HTTP, konfigurator, wsparcie MQTT z Home Assistant
Niestety BK7231T to nie BK7231N - jednak architektura w jakimś stopniu się różni. Świadczy o tym np. obecność dwóch różnych wersji SDK dla tych układów:
https://github.com/tuya/tuya-iotos-embeded-sdk-wifi-ble-bk7231n
https://github.com/tuya/tuya-iotos-embeded-sdk-wifi-ble-bk7231t
Wersję T już znam, N próbowałem uruchomić analogicznie ale szybko napotkałem na dziwny problem.
W trakcie kompilacji z poziomu Cygwina otrzymywałem:
Zorientowałem się, że to dlatego, iż Cygwin powinien korzystać z Windowsowych plików z Toolchaina.
Oto poprawka:
https://github.com/openshwprojects/OpenBK7231...mmit/61b4204aa0677a8fc886f4e6bd4e235337eb1e85
Kolejne zmiany jakie wprowadziłem to dodanie SDK na repozytorium (tak jak w wersji T było, bo tu musiałem je kopiować z wersji T).
Ostatecznie, skończyłem z wersją którą umieściłem tutaj:
https://github.com/openshwprojects/OpenBK7231N/
Tak przygotowane SDK jest kompatybilne z moją aplikacją (odpowiednikiem Tasmoty) dla wersji T, która dostępna jest tutaj:
https://github.com/openshwprojects/OpenBK7231T_App
Po samej stronie aplikacji musiałem wprowadzić kilka poprawek (np. zmieniła się nazwa i lokacja kilku plików, dodatkowo Tuya poprawiła literówki - było wczesniej "tuya_hal_storge.h" a teraz jest "tuya_hal_storage.h", ale większość zostało podobnie).
Inną różnicą między SDK wersji N i T jest obecność kodu źródłowego tuya - w wersji N jest tylko w formie lib (libtuya.a), a w wersji T mamy źródła c. Mam tu na myśli np. funkcje takie jak tuya_hal_flash_read czy tuya_hal_wifi_all_ap_scan.
Między wersjami N a T różnią się też adresy sekcji pamięci:
https://github.com/tuya/tuya-iotos-embeded-sd..._os/beken378/func/user_driver/BkDriverFlash.c
https://github.com/tuya/tuya-iotos-embeded-sd..._os/beken378/func/user_driver/BkDriverFlash.c
Innym absurdem, który musiałem naprawić był problem z konfiguracją - coś nadpisywało mi sekcje BK_PARTITION_NET_PARAM. Okazało się, że winne jest ustawienie RL_SUPPORT_FAST_CONNECT które podane ma na sztywno ten sam adres, gdzie niby ma być konfiguracja. No cóż, Tuya ma bałagan w SDK:
Ostatecznie, aplikacja się kompiluje:
Podpięcie programatora
Tu wszystko jest tak jak już we wcześniej opisywanym WB2S czy tam WB3S (BK7231T). Konwerter USB na UART i tylko podpinamy TX1 i RX1:
Dodatkowo też CEN, by móc resetować moduł (ale można bez CEN i resetować poprzez odcięcie zasilania, o ile to nie będzie nam resetowało portu USB na skutek za dużego poboru prądu po podłączeniu przekaźnika). Oczywiście też masa i zasilanie (5V, podłączane na wejście regulatora LDO 3.3V).
Próba wgrania wsadu z BKwriter 1.60
Najpierw próbowałem użyć tego samego programu którym wgrywałem wsad na BK7231T - BKwriter 1.60. Sprawdziłem tam dwa tryby, jeden oznaczony jako BK7231:
W trybie BK7231 zawsze występuje błąd z CRC w trakcie weryfikacji wsadu.
A drugi BK7231N:
W BK7231N występuje błąd z "unprotect" pamięci Flash. Czyżby zablokowany układ?
Próba wgrania wsadu przez narzędzie z Pythonem
Z BKwriter nie wyszło - ale jest jeszcze druga opcja. Narzędzie napisane w Pythonie przez Tuya, dostępne m. in. tutaj:
https://github.com/OpenBekenIOT/hid_download_py
Powyższe repo zawiera już nasze modyfikacje.
W readme tego narzędzia wspomniany jest układ w wersji N:
Cytat:
For BK7231N, set download address to 0x0, and set -u option.
Czy to zadziała? Spróbujmy. Opracowałem taki plik .bat (równie można dobrze to z poziomu cmd wpisać):
python uartprogram W:\GIT\OpenBK7231N\apps\OpenBK7231N_App\output\1.0.0\OpenBK7231N_app_QIO_1.0.0.bin --unprotect -d com10 -w --startaddr 0x0
Uruchomiłem go, mając już podłączony moduł:
Następnie (na etapie "Getting bus") zresetowałem moduł (można wykonać cykl podłączenia i odłączenia zasilania, ale ja użyłem zwarcia pinu CEN do masy na chwilę. Jak to nie działa, to można spróbować dać rezystor pull up na CEN i wtedy dopiero próbować resetować zwieraniem do masy) i programowanie ruszyło:
Gotowe:
Wgrane bez błędów. Widzę, że pojawia się konfiguracyjny AP - wsad działa!
Co oferuje mój wsad?
Mój wsad jest w zasadzie odpowiednikiem Tasmoty. Po uruchomieniu tworzy własny AP:
Strona konfiguracyjna jest na nim dostępna na IP 192.168.4.1.
Można go tam połączyć z naszym routerem:
Można konfigurować dowolnie moduł (jego piny, ich role):
Można połączyć go z Home Assistant poprzez MQTT:
Można też bezpośrednio sterować modułem:
Jest też automatyczny konfigurator dla tych urządzeń smart, które recenzowałem:
Nie zapominajmy też o generatorze konfiguracji dla Home Assistant, tutaj:
Mój wsad wspiera już trzy platformy - BK7231T, BK7231N oraz XR809. Ale szczegóły innym razem...
PS: A jeśli podłączymy nasze urządzenie z OpenBK do naszego WiFi i chcemy poznać adres IP które przydzielił mu DHCP, to najlepiej zajrzeć na stronę konfiguracyjną naszego routera i znaleźć BK po nazwie hosta:
Podsumowanie
Ostatecznie udało się jednak uruchomić mój otwarty firmware na tym przekaźniku zrealizowanym w oparciu o moduł CB2S (BK7231N). Troszkę było portowania kodu źródłowego z SDK, ale to na szczęście musiałem wykonać tylko ja. Z wgrywaniem wsadu też było troszkę zgadywania, ale już mogę stwierdzić, że ostatecznie procedura sprowadza się do:
1. lutujemy przewody do RX, TX, CEN oraz zasilanie. RX oraz TX podłączamy do konwertera UART USB
2. uruchamiamy hid_download_py z linii komend a dokładniej python uartprogram W:\GIT\OpenBK7231N\apps\OpenBK7231N_App\output\1.0.0\OpenBK7231N_app_QIO_1.0.0.bin --unprotect -d com10 -w --startaddr 0x0. Tak, wgrywamy wersję QIO
3. program będzie oczekiwać na reset modułu - zwieramy CEN do masy (najlepiej mając też tam pull up, tzn. rezystor do zasilania) by zresetować moduł
4. program sam wykryje RESET i wgra wsad
5. gotowe! Resztę konfigurujemy już przez access point WiFi (IP to 192.168.4.1, jeśli strona się nie otwiera to znaczy że DHCP nie ruszyło - po prostu możemy ustawić wtedy sami naszej maszynie np. IP 192.168.4.10 i od nowa się połączyć z siecią BK)
Zostaje kwestia jaki wsad - ostatnie wersje binarek udostępniam tutaj:
https://github.com/openshwprojects/OpenBK7231T_App/releases
Po więcej szczegółów zapraszam na moje repozytoria (README będzie aktualizowane):
https://github.com/openshwprojects/OpenBK7231T_App
PS: Od jednego z użytkowników wiem, że Qiachip Smart Switch występuje tez z WB2S - czyli w środku mogą być różne moduły. Na szczęście WB2S też jest wspierany przez mój wsad.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
