Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu

p.kaczmarek2 22 Jul 2021 21:56 3597 1
IGE-XAO
  • Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Witajcie moi drodzy.
    Zapraszam na krótki test i teardown zegara/termometru/higrometru Tuya TH06 LCD zasilanego z USB. Przedstawię tu krótko jego parowanie z telefonem, funkcjonalność aplikacji mobilnej, jego wnętrze oraz części z których jest złożony, a na koniec opiszę proces inżynierii wstecznej jego protokołu komunikacji UART. Protokół UART okaże się nie być czytelny na pierwszy rzut oka dla człowieka, ale i tak uda się z niego wyciągnąć informacje o dacie i czasie.

    Zakup kalendarzyka/termometru/higrometru smart TH06
    Produkt ten dostępny jest w wielu sklepach, m. in. na Alie~, ale sam go kupiłem na nieco innej stronie za około 80 zł:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Znalazłem go pod hasłem:
    Tuya WIFI Temperature Humidity Smart Sensor Clock Digital Display Remote Control Thermometer Support Alexa Google Assistant - Type A
    Można go tez łatwo znaleźć pod hasłem "TH06":
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Parametry wedle sprzedawcy:
    Quote:

    Material ABS
    Power Supply
    DC 5V/1A
    Wi-Fi Support
    2.4G IEEE 802.11 b/g/n
    Temperature Measure Range
    0℃-60℃
    Temperature Accuracy
    ±1 Humidity
    Measure Range
    0% RH~99% RH
    Humidity Accuracy
    ±1% RH
    Weight 45.8g
    Size 65*65*17mm/2.5*2.5*0.6in

    Grafiki promocyjne ilustrują jego działanie (oraz informacje które udostępnia on w aplikacji na telefon):
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Sprzedawcy podkreślają, że produkt występuje w dwóch wersjach. Wersja druga, czarna, wspiera dodatkowo kontrolę IR i nazywa się S09:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu


    Powiązane tematy
    Na temat produktów z WiFi opartych na ESP (bądź podobnych układach) napisałem już kilka tematów. Głównie pokazuję tam wnętrza.
    Opisuję też tam proces programowania takiego włącznika oraz użycie go z aplikacją producenta (Blitzwolf, SmartLife, Tuya, eWeLink) lub Tasmotą.
    Polecam zapoznać się z tymi tematami, nie będę powtarzać wszystkich informacji kilka razy a z reguły dotyczą one wszystkich tego typu produktów.
    Lista poniżej:
    - BW-LT30 czyli adapter WiFi na żarówkę - test, teardown i wgrywanie firmware ESP
    - Gniazdo elektryczne sterowane przez WiFi - BW-SHP8 - uruchomienie i testy
    - Test i wnętrze BW-SS3, czyli włącznika światła na WiFi od Blitzwolfa
    - Gniazdo/wtyk z WiFi PS-16-M i aplikacja eWeLink/Coolkit - test i teardown
    - SmartLife switch - test, wnętrze i programowanie włącznika światła na WiFi (podobny włącznik, ale bez RF i opis programowania go w Arduino poprzez kabelki)
    - Włącznik SC3-01 SmartLife i wgrywanie firmware ESP przez WIFI (tuya-convert/OTA) (tym razem programowanie przez WiFi, bez potrzeby otwierania obudowy, bez lutowania kabelków)
    - Włącznik WiFi QTouch wpinany tylko w przewód L - test, wnętrze, schemat (ciekawy włącznik, który zrealizowany jest na tyrystorze a nie na przekaźniku, ale też ma w środku ESP8285)
    - WiFi SmartLife ściemniacz jednokolorowego paska LED - test, wnętrze, schemat (ciekawy sterownik paska LED na tranzystorze MOSFET i WB3S)
    - SmartSwitch Tuya WL-SW01_16 16A WiFi - test, wnętrze (WB2S)
    - Czujnik otwarcia drzwi/okna WiFi - test, wnętrze, integracja z resztą urządzeń Search in topic (czujnik oparty o moduł XR809/XR2)
    - Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant (szczegółowy opis jak stworzyć własny wsad dla czujnika drzwi na XR809)
    Dodatkowo, temat o Tasmocie i wersji DIY przekaźnika WiFi:
    - ESP8266 i Tasmota - sterowanie przekaźnikiem WiFi krok po kroku
    Dodatkowo polecam temat o Home Assistant (który może kontrolować zbiór tego typu urządzeń):
    Tutorial Home Assistant - konfiguracja, WiFi, MQTT, Zigbee, Tasmota

    Zawartość zestawu, pierwsze wrażenie
    Zestaw był w płaskim pudełeczku:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Kod produktu: SKUH77374
    Model produktu (TH06) też jest podany na opakowaniu.
    Zawartość (w zestawie jest kabelek USB):
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Z tyłu produktu jest miejsce na zasilanie, złącze micro USB, musi być ono ciągle podłączone. Ta klapka to tylko nóżka:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Jest też przycisk RESET:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Produkt po wyłączeniu nie pamięta daty/godziny. Bieżący czas pobierany jest z sieci WiFi. Musi zostać w tym celu wcześniej sparowany, więc trzeba użyć telefonu i aplikacji SmartLife.
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Parowanie przebiega bardzo prosto, opisywałem już to wiele razy w tematach z tej serii. Wedle instrukcji, przyciskamy dłużej RESET, podajemy informacje o naszym WiFi w apce...:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Dodane (temperaturę pokazuje wysoką, gdyż specjalnie nagrzałem go lampką by sprawdzić czas reakcji - jest dość szybki):
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu

    Aplikacja na Androida i jej możliwości
    Opisywałem to już kilkukrotnie, więc tu tylko podkreślę, że aplikacja standardowo oferuje naprawdę szeroką gamę możliwości tworzenia automatyzacji i scenariuszów pracy. Możemy wyzwalać zdarzenia temperaturą, wilgotnością, a nawet (nie wiem po co) zmianą formatu wyświetlanej temperatury (F lub C). Warunkować zdarzenia możemy bieżącą porą dnia, stanami innych urządzeń, itp.
    Mamy dostępne operacje logiczne AND i OR, mamy delaye (opóźnienia).
    Poniżej zbiór zrzutów z aplikacji:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Też oczywiście jest historia i wykresy:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu

    Pobór prądu z USB
    Pobór prądu wyświetlacza nie jest duży. USB Doctor nie był w stanie w ogóle go zanotować:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Z tego powodu zmierzyłem go multimetrem. W trakcie pracy (już po pobraniu z internetu daty) oscyluje on między 20mA a 30mA:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wychodzi średnio 0.15W (+ straty na zasilaczu).

    Podobny produkt ale zasilany bateryjnie
    Warto zaznaczyć, ze jeśli nie chcemy wyświetlać bieżącej daty to mamy wiele różnych możliwości do wyboru, można je łatwo znaleźć pod hasłem "tuya lcd thermometer" i podobnymi:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Ten okrągły, TS0201 RSH-Z-Bee-HS01, jest na Zigbee, już go opisywałem:
    https://www.elektroda.pl/rtvforum/topic3806108.html

    Wnętrze TH06
    Obudowa trzyma się na zatrzask. Trzeba ją podważyć:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    W środku jest dość dużo elektroniki:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Sercem urządzenia jest moduł WiFi Tuya WB3S:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Niestety nie bazuje on na ESP. Nie będziemy mogli wgrać Tasmoty (choć można go zamienić na ESP12F, wylutować i wlutować ESP....)
    WB3S zbudowany jest w oparciu o 32-bitowy BK7231T. WB3S oferuje 1T1R moduł WLAN, 256-KB SRAM, 2 MB pamięci flash i bogate peryferia.
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Jednakże nie sam WB3S obsługuje to urządzenie. Obok jest układ w SOIC który wygląda na mikrokontroler, lecz niestety nie jest podpisany.
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Oprócz tego mamy sterownik LCD, TM1621B:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Układ produkcji Titan Micro Electronics. Zasilany napięciem 2.4-5.2V. Tutaj w obudowie SSOP48. Obsługuje wyświetlacz do 32 na 4 segmenty.
    Schemat wewnętrzny:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Role wyprowadzeń:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Na płytce jest też oczywiście czujnik temperatury/wilgotności. Jest to bardzo popularny AHT10:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Komunikacja z AHT10 odbywa się poprzez I2C:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wyprowadzenia AHT:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    AHT10 można też kupić jako osobny moduł. Łatwo można go wykorzystać np. z Arduino.
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Obok AHT10 widać tranzystor podpisany A19T.
    Może to AO3401? Widzę, że jest bardzo popularny:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Ten tranzystor to chyba jakaś część układu od AHT10, widzę podobny element na modułach z nim.
    Jest jeszcze oczywiście sekcja zasilania. Charakterystyczny duży element podpisany 4R7 to dławik (nie rezystor), świadczy on o tym, że jest tam przetwornica step down która zamienia 5V na 3.3V dla WB3S. Nie ma w okolicy też żadnego regulatora LDO, co również potwierdza obecność przetwornicy. Przetwornica step down jest wydajniejsza niż regulator.
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Kontroler przetwornicy podpisany jest A121.
    To chyba SY8008A/SY8008B/SY8008C. Widzę, że ktoś z forum radiokot tez już go szukał.
    Jest to wysoce wydajna, synchroniczna, przetwornica step down:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Jej wyprowadzenia:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Przykładowa aplikacja oraz wykresy ukazujące sprawność:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Warto też zwrócić uwagę, że producent umieścił tam duży kondensator elektrolityczny low esr (ciekawe jakiej jakości?).
    Zostaje tylko przycisk (nie wiem na co są te pola pod Q2, Q3):
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Teraz jeszcze rzut oka z przodu.
    Ten wystający fragment modułu WB3S to nie jest przypadek. To jest fragment z antenką. On specjalnie nie powinien być zasłonięty:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Tuya wyraźnie poleca, by nie zasłaniać antenki płytką. Zmniejszyłoby to zasięg/jakość sygnału WiFi:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Widać tu też miejsce na tajemniczy element o trzech nóżkach, który moim zdaniem niewątpliwie byłby odbiornikiem IR:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Czyli pewnie ta druga wersja tego produktu z IR korzysta z tej samej płytki, tylko ma dodatkowo wlutowany tu odbiornik.



    Inżynieria wsteczna protokołu UART z TH06
    W środku mamy zapewne mikrokontroler który komunikuje się z WB3S poprzez UART. To dość częste rozwiązanie w tego typu produktach.
    Spróbujmy poznać ich protokół komunikacji.
    Zacząłem od zlokalizowania pinów UART. To akurat żaden problem, mamy dokumentację WB3S:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Obrazek z wyprowadzeniami to rzut z dołu, więc patrząc z góry musimy sobie zamienić go stronami w myślach.
    Prześledziłem też piny na płytce:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Zarówno RX jak i TX idą do nieznanego układy mikrokontrolera, czyli wszystko zgodnie z oczekiwaniami.
    Przylutowałem kabelek do TX, by zobaczyć co takiego WB3S wysyła. Jeśli byśmy chcieli zamienić WB3S na inny moduł, np. ESP12F, to też byśmy musieli to wysyłać:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Z drugiej strony sygnał poprowadziłem do RX przejściówki UART.
    Oczywiście też musi być wspólna masa, wiec GND od przejściówki UART też podprowadziłem.
    Na komputerze, w RealTerm sprawdziłem z grubsza popularniejsze baud rates, licząc na to, że protokół komunikacji jest tekstowy.
    Niestety bez sukcesu.
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Wygląda na to, że komunikacja odbywa się binarnie. Chociaż jeszcze rozważałem, że jest to tekst, ale potratkowany np. XORem przed wysłaniem.
    W celu ostatecznego sprawdzenia jaki jest baud posłużyłem się oscyloskopem. Wystarczy pojedyncze wyzwalanie i trigger odpowiednio ustawiony tak, by oscyloskop złapał początek sygnału i otrzymujemy:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Jeden bit trwa 104µs... to nam wystarczy.
    (swoją drogą ten Rigol ma niby w pewnej wersji do odblokowania możliwość badania RS232 ale nie testowałem jeszcze tego, a jak ktoś się uprze to i ze zdjęcia tego odczyta wartość bitów)
    Baud to inaczej ilość bitów na sekundę.
    1s/104µs = około 9600 baud.
    Dla ułatwienia zamieszczam tabelkę:
    CzasBaud
    833µs1200
    416µs2400
    208µs4800
    104µs9600
    69µs14400
    52µs19200
    34µs28800
    26µs38400
    17µs57600
    8µs115200

    Wyniki tutaj są nieco zaokrąglone, jeśli wyjdzie wam 108µs to nie znaczy, że trzeba liczyć dokładnie i oczekiwać baudu typu 9615.
    Wyposażony w informację, że baud to rzeczywiście 9600 sprawdziłem ponownie komunikacje, tym razem zapisując odebrane dane do pliku:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    W Realterm zapis danych do pliku odbywa się poprzez zakładkę Capture.
    Plik otworzyłem moim ulubionym edytorem hex, xvi32, dostępnym całkiem za darmo:
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    XVI32 posiada wygodny 'data inspector' pozwalający podejrzeć wartość danych zinterpretowaną jako typu word, dword czy tam float.
    W danych widać powtarzający się wzorzec. Czyżby pakiety?
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Pakiety jednak mają różne długości. W celu ułatwienia sobie dalszej analizy napisałem program w C mający na celu wczytać dane i zweryfikować, czy powtarza się tam jakiś wzorzec.
    Zacząłem od wczytania pliku:
    Code: c
    Log in, to see the code

    Następnie zrobiłem pętle iterującą go bajt po bajcie i wykrywającą nagłówek sekcji:
    Code: c
    Log in, to see the code

    Potem dodałem pomijanie danych sekcji. Jak się okazało, po nagłówku sekcji (dwa bajty, U i wartość 170) są kolejne dwa bajty które chyba określają rodzaj sekcji. W zależności od rodzaju sekcji różne dane w pakiecie.
    Code: c
    Log in, to see the code

    Powyższy kod poprawnie przechodzi przez cały plik (za wyjątkiem jednego zakłócenia nieco dalej w jego treści, ale to chyba na skutek poruszania przewodami od UART).
    Zdecydowałem się wtedy wypisać poszczególne dane pakietów do osobnych plików w jakiejś dość łatwej do zrozumienia formie. Każdy pakiet od nowej linii.
    Code: c
    Log in, to see the code

    Poniżej rezultat z pliku .txt, już z moim komentarzem (nazwy kolumn):
    Wnętrze zegara/termometru/higrometru TH06 i inżynieria wsteczna jego protokołu
    Bardzo wyraźnie widać który bajt za co odpowiada. Informacje o bieżącym roku, miesiącu, dniu oraz dane czasowe są przesyłane w postaci osobnych bajtów. Godzina dziesiąta to binarne 10 (nie '1' '0' w ASCII, tylko 0x0A bajt). Pozostałe wartości analogicznie.
    Te powtarzające się 0x01 to być może znacznik AM.
    Jedna z wartości tutaj to pewnie też wskaźnik parowania oraz wskaźnik siły sygnału WiFi.
    No i dzień tygodnia.
    Nie wiem czym jest ostatnia zmieniająca się wartość, może to jakaś checksum, CRC, by walidować pakiet?
    Podstawa protokołu jest już znana. Nie sprawdziłem komunikacji w drugą stronę, ale można zrobić to analogicznie. Jak zajdzie potrzeba to się tym zajmę, a na razie na tym etapie przerywam. Całą metodykę poznawania protokołu macie opisaną.
    I oczywiście wiem, że można by od razu patrzeć w XVI32 i nie bawić się w przetwarzanie w C, ale mi tak wygodniej i pozwoliło mi to znacznie łatwiej całość zbadać.

    Programowanie WB3S
    Warto wspomnieć, że proces kompilacji SDK pod WB3S został już przeze mnie krótko opisany w temacie o XR809:
    https://www.elektroda.pl/rtvforum/topic3806769.html
    pewnie więc jest możliwość zrobienia dla niego własnej wersji firmware, ale o tym później.

    Podsumowanie
    Niestety nie ma tu dużych rewelacji. Bieżąca data wraz z temperaturą i wilgotnością na TH06 wygląda dość estetycznie, ale produkt ma też sporo wad:
    - produkt wymaga zasilania z USB (a sprzedawany jest często na tej samej stronie/ofercie co produkty bardzo do niego podobne, lecz zasilane bateryjnie)
    - produkt nie pamięta daty po utracie zasilania (więc jak braknie prądu w domu a nie będzie też internetu, to nie pojawi się na nim data)
    - produkt nie pozwala na zamianę na system 24h (lecz sprzedawca przed tym ostrzega)
    - produkt opiera się na WB3S, w środku nie ma ESP, więc nie wgramy własnego firmware
    Jeśli chodzi o plusy, to mogę produkt pochwalić za użycie przetwornicy step down zamiast LDO, zawsze to troszkę wydajniej. I przynajmniej kabelek USB sprzedawca dał w zestawie.
    Załączam noty katalogowe elementów ze środka oraz powiązane z produktem materiały, w tym jego instrukcję w formacie PDF oraz zebrane przeze mnie pakiety z UART (ale ostrzegam, że pod koniec pliku jest jakieś zakłócenie).
    Czy korzystacie z tego typu produktów smart, a jeśli tak to z jakiego konkretnego modelu i w jakim środowisku? Zigbee, WiFi, Home Assistant czy aplikacja producenta?

    Cool! Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    p.kaczmarek2
    Level 25  
    Offline 
  • IGE-XAO
  • #2
    rekinisko
    Level 22  
    Kawał dobrego obracania kota ogonem, szacun.