W tym artykule opisano, jak przywrócić do działania uszkodzone gniazdko inteligentne oparte na platformie Tuya (modele BKN7231N, CB2S, BL0937), a następnie wgrać do niego oprogramowanie OpenBeken.
Kilka lat temu kupiłem inteligentne gniazdko i używam go do automatycznego wyłączania ładowarki do mojego elektrycznego monocykla, gdy pobór mocy przez określony czas jest bardzo niski. Robię to wyłącznie ze względów bezpieczeństwa – jeśli w ciągu ostatnich 15 minut ładowarka zużywa mniej niż 7 watów, zakładam, że mój monocykl elektryczny jest już naładowany i na wszelki wypadek odłączam zasilanie. Inteligentne gniazdko współpracuje z systemem Yandex Smart Home.
Było to tanie gniazdko marki „ATMT”, bez podanego kodu modelu. Jedyne dostępne informacje to:
Pewnego dnia przestała działać i nie reagowała na naciśnięcie przycisku.
Rozmontowałem ją i odkryłem, że działa na mikrokontrolerze BKN7231N (moduł CB2S) oraz posiada układ BL0937 do pomiaru zużycia energii. Zasilanie 5 V jest realizowane przez układ kp15051sp.
Następnie sprawdziłem kondensatory oraz zasilania 5 V i 3,3 V – wszystko jest w porządku. Głównym podejrzanym jest więc mikrokontroler (MCU).
Następnie przylutowałem przewody zasilające (bezpośrednio do kondensatora 5 V) oraz przewody UART (do pinów CB2S) i podłączyłem je do adaptera USB-TTL (przełączonego za pomocą zworki na tryb poziomu 3,3 V). (Więcej szczegółów na temat połączenia CB2S i USB-TTL oraz flashowania mikrokontrolera można znaleźć w temacie https://www.elektroda.com/rtvforum/topic4087228.html )
Następnie próbowałem zrzucić zawartość pamięci flash za pomocą narzędzi BK7231GUIFlashTool i ltchiptool. Oba narzędzia zakończyły się niepowodzeniem z powodu błędów CRC. Okazało się, że błędy CRC występowały tylko w pierwszych 0x100 bajtach – oznaczało to, że bootloader był uszkodzony. Następnie podłączyłem się do pinów UART2 modułu CB2S i zobaczyłem w terminalu, że uruchamianie się rozpoczęło, ale po kilku sekundach system zawiesił się.
Pamięć flash była więc uszkodzona, ale wciąż miałem szansę na ponowne zapisanie uszkodzonej strony w nadziei, że uda się ją naprawić.
Sprawdziłem, czy moje gniazdo Smart Socket ma ten sam bootloader co OpenBeken – pierwsze 64k bajtów pliku OpenBK7231N_QIO oraz pierwsze 64k bajtów zrzutu z mojego gniazda Smart Socket były identyczne, pomijając te uszkodzone bajty na początku. Wyodrębniłem więc pierwsze 4096 bajtów z pliku OpenBK7231N_QIO_1.18.288.bin do osobnego pliku i zapisałem je w BK7231N z przesunięciem 0x0, korzystając z funkcji Custom Write.
To pomogło – moduł uruchomił się i działał poprawnie!
Chciałem jednak wypróbować sam system OpenBeken. W związku z tym zapisałem go na moim module. Następnie zastosowałem konfigurację z oryginalnego zrzutu, ustawiłem identyfikator SSID sieci Wi-Fi oraz hasło. I zapisałem konfigurację OBK.
Nie skorzystałem z poniższych informacji, ponieważ wszystko skonfigurowało się automatycznie. Ale niech tu pozostaną:
Zrestartowałem gniazdko i otworzyłem jego stronę internetową w przeglądarce, aby sprawdzić, czy pomiar mocy działa prawidłowo – wartości mocy, napięcia i natężenia prądu wyświetlane w aplikacji internetowej były prawidłowe (w porównaniu z innym urządzeniem do pomiaru mocy) – nie była więc wymagana żadna kalibracja.
Następnie utworzyłem poniższy plik autoexec.bat w celu zaimplementowania wymaganej funkcjonalności (jeśli zużycie energii w ciągu ostatnich 15 minut wynosi mniej niż 7 watów, należy wyłączyć zasilanie):
Wszystko działa tak, jak chciałem!
Szablon JSON z zakładki głównej aplikacji internetowej:
Kilka lat temu kupiłem inteligentne gniazdko i używam go do automatycznego wyłączania ładowarki do mojego elektrycznego monocykla, gdy pobór mocy przez określony czas jest bardzo niski. Robię to wyłącznie ze względów bezpieczeństwa – jeśli w ciągu ostatnich 15 minut ładowarka zużywa mniej niż 7 watów, zakładam, że mój monocykl elektryczny jest już naładowany i na wszelki wypadek odłączam zasilanie. Inteligentne gniazdko współpracuje z systemem Yandex Smart Home.
Było to tanie gniazdko marki „ATMT”, bez podanego kodu modelu. Jedyne dostępne informacje to:
Pewnego dnia przestała działać i nie reagowała na naciśnięcie przycisku.
Rozmontowałem ją i odkryłem, że działa na mikrokontrolerze BKN7231N (moduł CB2S) oraz posiada układ BL0937 do pomiaru zużycia energii. Zasilanie 5 V jest realizowane przez układ kp15051sp.
Następnie sprawdziłem kondensatory oraz zasilania 5 V i 3,3 V – wszystko jest w porządku. Głównym podejrzanym jest więc mikrokontroler (MCU).
Następnie przylutowałem przewody zasilające (bezpośrednio do kondensatora 5 V) oraz przewody UART (do pinów CB2S) i podłączyłem je do adaptera USB-TTL (przełączonego za pomocą zworki na tryb poziomu 3,3 V). (Więcej szczegółów na temat połączenia CB2S i USB-TTL oraz flashowania mikrokontrolera można znaleźć w temacie https://www.elektroda.com/rtvforum/topic4087228.html )
Następnie próbowałem zrzucić zawartość pamięci flash za pomocą narzędzi BK7231GUIFlashTool i ltchiptool. Oba narzędzia zakończyły się niepowodzeniem z powodu błędów CRC. Okazało się, że błędy CRC występowały tylko w pierwszych 0x100 bajtach – oznaczało to, że bootloader był uszkodzony. Następnie podłączyłem się do pinów UART2 modułu CB2S i zobaczyłem w terminalu, że uruchamianie się rozpoczęło, ale po kilku sekundach system zawiesił się.
Pamięć flash była więc uszkodzona, ale wciąż miałem szansę na ponowne zapisanie uszkodzonej strony w nadziei, że uda się ją naprawić.
Sprawdziłem, czy moje gniazdo Smart Socket ma ten sam bootloader co OpenBeken – pierwsze 64k bajtów pliku OpenBK7231N_QIO oraz pierwsze 64k bajtów zrzutu z mojego gniazda Smart Socket były identyczne, pomijając te uszkodzone bajty na początku. Wyodrębniłem więc pierwsze 4096 bajtów z pliku OpenBK7231N_QIO_1.18.288.bin do osobnego pliku i zapisałem je w BK7231N z przesunięciem 0x0, korzystając z funkcji Custom Write.
To pomogło – moduł uruchomił się i działał poprawnie!
Chciałem jednak wypróbować sam system OpenBeken. W związku z tym zapisałem go na moim module. Następnie zastosowałem konfigurację z oryginalnego zrzutu, ustawiłem identyfikator SSID sieci Wi-Fi oraz hasło. I zapisałem konfigurację OBK.
Nie skorzystałem z poniższych informacji, ponieważ wszystko skonfigurowało się automatycznie. Ale niech tu pozostaną:
Spoiler:
Konfiguracja urządzenia, wyodrębniona z Tuya:
- BL0937 SEL na P26
- Przycisk (kanał 1) na P24
- BL0937 VI (CF1) na P7
- Dioda LED Wi-Fi na P23
- BL0937 ELE (CF) na P6
- Przekaźnik (kanał 1) na P8
Urządzenie wydaje się korzystać z modułu CB2S, w którym zastosowano układ BK7231N.
Wewnętrzna platforma urządzenia – bk7231n, co odpowiada BK7231N.
Sekcja Tuya zaczyna się, jak zwykle, od 2023424 (0x1EE000)
Po ponownym uruchomieniu gniazdka konfiguracja zmieniła się na następującą:
- BL0937 SEL na P26
- Przycisk (kanał 1) na P24
- BL0937 VI (CF1) na P7
- Dioda LED Wi-Fi na P23
- BL0937 ELE (CF) na P6
- Przekaźnik (kanał 1) na P8
Urządzenie wydaje się korzystać z modułu CB2S, w którym zastosowano układ BK7231N.
Wewnętrzna platforma urządzenia – bk7231n, co odpowiada BK7231N.
Sekcja Tuya zaczyna się, jak zwykle, od 2023424 (0x1EE000)
Po ponownym uruchomieniu gniazdka konfiguracja zmieniła się na następującą:
Zrestartowałem gniazdko i otworzyłem jego stronę internetową w przeglądarce, aby sprawdzić, czy pomiar mocy działa prawidłowo – wartości mocy, napięcia i natężenia prądu wyświetlane w aplikacji internetowej były prawidłowe (w porównaniu z innym urządzeniem do pomiaru mocy) – nie była więc wymagana żadna kalibracja.
Następnie utworzyłem poniższy plik autoexec.bat w celu zaimplementowania wymaganej funkcjonalności (jeśli zużycie energii w ciągu ostatnich 15 minut wynosi mniej niż 7 watów, należy wyłączyć zasilanie):
Kod: Lua
Wszystko działa tak, jak chciałem!
Szablon JSON z zakładki głównej aplikacji internetowej:
Kod: JSON
Fajne? Ranking DIY