Witajcie moi drodzy.
Dzisiaj zaglądamy do środka kolejnego przekaźnika sterowanego przez WiFi kompatybilnego z aplikacją Tuya, łudząco podobnego do dość dobrze znanego Sonoff, dostępnego do kupienia za około 20 zł. Sprawdzimy na jakim układzie jest on zrealizowany i czy da mu się wgrać własny wsad. Na koniec również narysuję jego pełny (mam nadzieję) schemat. Temat będzie o tyle ciekawy, że sercem tego produktu okaże się być układ firmy Realtek, którą raczej większość osób kojarzy z tematyki komputerowej a nie IoT.
Zakup smart przekaźnika On/Off 10A
Produkt znalazłem pod hasłem "NEW Tuya Smart Switch 10A 2200W Wifi Basic Diy Switch Module App Control Support Off-line Operation Compatible Alexa Smart Life", choć występuje też pod nazwą NF101-A. Oto jedna z ofert jego sprzedaży:
Warto zwrócić uwagę na duży wybór kraju z którego zostanie nadana przesyłka, na liście też jest Polska. Pewnie jest to skutek ostatnich zmian dotyczących cła przesyłek zza granicy.
Cena produktu to 23 zł z darmową przesyłką, czyli jeden z najtańszych przekaźników sterowanych przez WiFi jakie znam.
Uwagę przykuwa charakterystyczne żółte/pomarańczowe pudełeczko.
Po odebraniu przesyłki:
Instrukcja:
Pierwsze podłączenie:
Zauważyłem też, że chyba dostałem jakąś nowszą wersję. Inny odcień pudełka i napis "Tuya Smart Switch" zamiast "Wi-Fi Smart Switch".
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
Parowanie z aplikacją Tuya
Parowanie opisywałem szczegółowo w poprzednich tematach z tej serii. Tutaj też przebiegło bez zarzutu, wystarczyło wprowadzić urządzenie w stan reset (przycisnąć przycisk dłużej niż 5 sekund) a potem przez aplikację Tuya (po założeniu konta i potwierdzeniu emaila) wybrać jego typ, wpisać informacje o naszej sieci WiFi i potwierdzić parowanie.
W aplikacji wszystko standardowo, można robić scenariusze, automatyzacje, itp.
Wnętrze
Do środka można się dostać przez proste podważenie obudowy:
Obudowa jest tak dopasowana do płytki że nie potrzeba śrubek:
Płytka:
Warystor chroniący układ przed przepięciami (07D471K):
Filtr z dwóch kondensatorów 4.7uF 400V i dławika (filtr typu pi), w tle rezystor bezpiecznikowy:
Spód płytki, cały układ zasilany jest beztransformatorowo przez OB2222MCP (OB2222) produkcji On-Bright który na wyjściu daje około 5V, dla modułu WiFi 3.3V zapewnia AMS1117 3.3:
Tranzystor J6 włączający przekaźnik oraz niezbędna dioda równolegle do cewki przekaźnika (tzw. freewheeling diode):
Sam przekaźnik, Yuanze Electronic, Y3F-SS-105DM:
No i najważniejsze - moduł WiFi (był już ze zdjętą pokrywą, czasem się z czymś takim spotykam, np. w przypadku dwóch czujników otwarcia drzwi XR809 jakie miałem jeden był bez ekranu a drugi z):
Niestety nie ma tu ESP8266. Jest układ scalony produkcji Realtek, RTL8710BN:
Cytat:
RTL8710BN
AMEBA Z SERIES, IOT LOW-ENERGY SOC
The Realtek RTL8710BN is a highly integrated single chip with a low-power-consumption mechanism ideal for IoT (Internet of Things) applications. It combines an ARM®Cortex™-M4 MCU, Wireless MAC/Baseband/RF, and configurable GPIOs that can function as digital peripherals for various product applications and control usage.
The RTL8710BN’s embedded memory configuration enables simpler and faster application development.
CPU
- ARM®Cortex™-M4 (up to 125MHz)
Memory
- 512KB embedded ROM
- 256KB embedded SRAM
- XIP (eXecut In Place)
- Provides external Flash interface
Wi-Fi
- 2.4GHz 1T1R 802.11b/g/n up to 150Mbps; 20MHz and 40MHz
Security
- Wi-Fi WEP, WPA, WPA2, WPS
- Security engine: MD5, SHA-1, SHA2-256, DES, 3DES, AES
Peripheral Interface
- SDIO Slave
- UART x 2
- SPI interface (Master/Slave)
- I2C interface x 2
- ADC for voltage management
- PWM x 5
- Maximum 17 GPIOs
Package
- Type: QFN-32
- Size: 5 x 5 mm
RTL8710BN jest wraz z pamięcią Flash na SPI (podobnie jak ESP), przyjrzyjmy się bliżej jaką:
Boya Micro, 25Q16BSTIG o ile dobrze widzę, podobny do 25Q16BVSIG (rodzina BY25Q16BS).
Pamięć NOR Flash z interfejsem SPI, 16M BIT czyli 2MB.
Moduł T102_V1.1 (taki inny WR2?) ze środka
Moduł WiFi ze środka wylutowałem by móc odczytać nazwy pinów.
Wyprowadzenia są podpisane. w sieci jest również jego nota katalogowa pod hasłem T102_V1.1:
Jego parametry:
Wyprowadzenia i role pinów:
Są też piny UART:
Dodatkowo zwróciłem uwagę na to, że bardzo podobny do niego jest moduł Tuyi, WR2 (też zrealizowany na RTL8710BN):
Pin 29 na zdjęciu to EN na schemacie, a 30 to ADC.
Informacja o rezonatorze 40MHz też się zgadza, moduł z tematu ma go widocznego na płytce:
Pinout WR2:
Dodatkowo, pinout zgodny jest z TYWE2S (który już opiera się na ESP):
a TYWE3S można już czasem kupić (i są różne ceny, ta na zrzucie ekranu nie jest zbyt atrakcyjna, właściwie to jest większa od kosztu całego przekaźnika):
Trochę tych modułów jest, tyle dobrego, że w miarę wyprowadzenia się zgadzają.
Możliwość programowania RTL8710BN?
Moduł już miałem wylutowany, więc podjąłem pierwsze kroki w kierunku ewentualnej możliwości jego programowania.
Z tego co widzę, to pewnie TUYA_IOT_SDK go wspiera:
https://github.com/TuyaInc/TUYA_IOT_SDK
Bez Tuyi można użyć IAR Embedded Workbench:
https://www.amebaiot.com/en/ameba-sdk-getting-started-8710bn/
Są też inne możliwości, np. poprzez Arduino IDE:
https://github.com/Ameba8195/Arduino/
Jest trochę dokumentacji od Realteka:
https://github.com/jialexd/sdk-ameba-v4.0c_180328/tree/master/doc
Długi temat na esp8266.ru:
https://esp8266.ru/forum/threads/arduino-dlja-rtl8710.1787/
Co do samej metody wgrywania wsadu mam obawy, że nie obejdzie się bez normalnego programatora (chyba J-Link? J-Trace?), bo dokumentacji ewentualnego bootloadera RTL nie znalazłem:
https://www.programmersought.com/article/2943525450/
W RTLDuino jest podobno jakiś sposób na OTA (aktualizacja firmware przez WiFi), ale i tak wymaga on jednokrotnego wgrania bootloadera (ota_non_block.ino lub ota_block.ino).
Moduł uruchomiłem na płytce stykowej. Nie wymaga nic poza podpięciem zasilania do uruchomienia się:
W takiej konfiguracji aplikacja mobilna Tuya dalej działa i dalej pozwala kontrolować moduł. Podłączyłem na próbę diodę LED do pinu sterującego wcześniej przekaźnikiem i sterowanie też działa.
Sprawdziłem też porty UART modułu:
Na zwykłych pinach RX/TX nic się nie dzieje. Natomiast wyjście debug UART wysyła pewne informacje z baud = 115200.
<RTL8195A>
ROM:[V0.1]
FLASHRATE:4
BOOT TYPE:0 XTAL:40000000
IMG1 DATA[1168:10002000]
IMG1 ENTRY[8000541:100021ef]
IMG1 ENTER
CHIPID[000000ff]
read_mode idx:3, flash_speed idx:0
calibration_result:[1:5:11][9:d]
calibration_result:[2:13:7][1:d]
calibration_result:[3:7:5][1:7]
calibration_ok:[2:13:7]
FLASH CALIB[NEW OK]
OTA2 ADDR[80d0000]
OTAx SELE[fffffffc]
OTA1 USE
IMG2 DATA[0x809a7e0:6660:0x10005000]
IMG2 SIGN[RTKWin(10005008)]
IMG2 ENTRY[0x10005000:0x800b1a5]
===== Enter Image 2 ====
System_Init1
OSC8M: 8386568
boot reason: 0
System_Init2
11111111111111111111111111
interface 0 is initialized
interfa[01-01 ce 1 is ini18:12:15 TUYtialized
A Debug][tu
Initializiya_device.c:ng WIFI ...517] < TUYA
LDO IOT SDK V:2.Mode, BD_In0.0 BS:30.04fo: 0
_PT:2.2_LAN:3.3_CAD:1.0.2_CD:1.0.0 >
LDO M
< tuya_ioode, BD_Inft_lib BUILD o: 0
AT:2019_06_21_14_56_08 BY tuya_iot_team AT 8710_2M >
IOT DEFS < WIFI_GW:1 DEBUG:1 KV_FILE:0 SHUTDOWN_MODE:0 LITTLE_END:1 TLS_MODE:3 ENABLE_LOCAL_LINKAGE:0 ENABLE_CLOUD_OPERATION:0 ENABLE_SUBDEVICE:0 ENABLE_ENGINEER_TO_NORMAL:0 OPERATING_SYSTEM:2 ENABLE_SYS_RPC:0 TY_SECURITY_CHIP:0 RELIABLE_TRANSFER:RELIABLE_TRANSFER ENABLE_LAN_ENCRYPTION:1 ENABLE_SIGMESH:0 >
[01-01 18:12:15 TUYA Debug][tuya_device.c:518] oem_rtlbn_fty_on_off_2M:1.0.3
[01-01 18:12:15 TUYA Notice][simple_flash.c:428] key_addr: 0x1eb000 block_sz 4096
[01-01 18:12:15 TUYA Notice][simple_flash.c:496] get key:
0x4a 0xf4 0xce 0x1c 0xeb 0xec 0x8 0xb0 0xfd 0x88 0xed 0x59 0xcc 0x43 0xed 0xfd
WIFI initialized
init_thread(55), Available heap 0x9ea0[01-01 18:12:15 TUYA Notice][tuya_uart.c:125] 1 9600
[01-01 18:12:15 TUYA Notice][tuya_main.c:368] mf_init succ
[01-01 18:12:15 TUYA Notice][tuya_device.c:219] rst_cnt:1
[01-01 18:12:15 TUYA Notice][gw_intf.c:2600] serial_no:68572da1e013
[01-01 18:12:15 TUYA Notice][gw_intf.c:2631] gw_cntl.gw_wsm.stat:2
[01-01 18:12:15 TUYA Notice][gw_intf.c:2634] gw_cntl.gw_wsm.nc_tp:3
[01-01 18:12:15 TUYA Notice][gw_intf.c:2635] gw_cntl.gw_wsm.md:0
[01-01 18:12:15 TUYA Notice][gw_intf.c:2667] gw_cntl.gw_if.abi:0 input:0
[01-01 18:12:15 TUYA Notice][gw_intf.c:2668] gw_cntl.gw_if.product_key:key8k3dvn7qq4g5x, input:key8k3dvn7qq4g5x
[01-01 18:12:15 TUYA Notice][gw_intf.c:2669] gw_cntl.gw_if.tp:0, input:0
[01-01 18:12:15 TUYA Notice][gw_intf.c:2671] gw_cntl.gw_if.firmware_key:key8k3dvn7qq4g5x, input:key8k3dvn7qq4g5x
[01-01 18:12:15 TUYA Notice][tuya_gpio.c:225] id 5 {0x10018164}
[01-01 18:12:15 TUYA Notice][tuya_device.c:583] cd_timer ID:21
LwIP_DHCP: dhcp stop.Deinitializing WIFI ...WIFI deinitializedInitializing WIFI ...
LDO Mode, BD_Info: 0
LDO Mode, BD_Info: 0
WIFI initialized
[01-01 18:12:16 TUYA Notice][wifi_hwl.c:759] ssid: MY_WIFI_SSID,passwd:MY_WIFI_PASSWORD_IN_PLAINTEXT,sec_type: 4194308,chan:3
RTL8195A[Driver]: set ssid [MY_WIFI_SSID]
RTL8195A[Driver]: start auth to 30:b5:c2:5d:70:72
[01-01 18:12:17 TUYARTL81 Notice][hw95A[Driver]:_table.c:38 auth succes5] wifi stas, start asstus is :5
oc
RTL8195A[Driver]: association success(res=7)wlan1: 1 DL RSVD page success! DLBcnCount:01, poll:00000001
RTL8195A[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4)
RTL8195A[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:
[01-01 18:12:18 TUYA Notice][hw_table.c:385] wifi status is :6
[01-01 18:12:18 TUYA Err][smart_frame.c:2060] mqtt async send fail -916
[01-01 18:12:18 TUYA Err][tuya_iot_com_api.c:676] dp report async fail.ret:-916
[01-01 18:12:18 TUYA Err][tuya_device.c:395] upload_all_dp_stat op_ret:-916
Interface 0 IP address : 192.168.0.106[01-01 01:00:03 TUYA Notice][mqtt_client.c:1075] mqtt get serve ip success
[01-01 01:00:03 TUYA Notice][mqtt_client.c:1100] mqtt socket create success. begin to connect
[01-01 01:00:03 TUYA Notice][mqtt_client.c:1115] mqtt socket connect success. begin to subscribe
[01-01 01:00:03 TUYA Notice][mqtt_client.c:878] mqtt subscribe success
[01-01 01:00:04 TUYA Notice][hw_table.c:385] wifi status is :7
[01-01 01:00:04 TUYA Notice][wifi_hwl.c:747] ssid MY_WIFI_SSID,passwd:MY_WIFI_PASSWORD_IN_PLAINTEXT,sec_type:4194308,chan:3
[01-01 01:00:04 TUYA Notice][gw_intf.c:761] get ap info: ssid:MY_WIFI_SSID,passwd:MY_WIFI_PASSWORD_IN_PLAINTEXT,chan:3,sec_tp:400004
[01-01 01:00:04 TUYA Notice][gw_intf.c:762] local ap info: ssid:MY_WIFI_SSID,passwd:MY_WIFI_PASSWORD_IN_PLAINTEXT,chan:3,sec_tp:400004
Log oczywiście zawierał informacje o moim WiFi (wraz z hasłem), które powyżej ocenzurowałem. Jest również Tuya Device Key, który może się przydać do Local Tuya w Home Assistant (do opisania wkrótce).
Nazwy plików wskazują na to SDK, co jest dość oczywiste, Tuya produkuje te wszystkie moduły:
https://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/SDK_directory.html
Kod:
https://github.com/TuyaInc/TUYA_IOT_SDK
Schemat
W oparciu o zdjęcia i noty katalogowe elementów przygotowałem pełny schemat tego przekaźnika.
UWAGA: Schemat korzysta z oznaczeń takich jak na płytce, dodatkowo wartości rezystorów są w kodzie SMD (np. 152 oznacza 1.5 kΩ).
W dużym skrócie: mamy kilka prostych zabezpieczeń (przynajmniej jest bezpiecznik itp), potem zasilacz beztransformatorowy (buck) na OB2222 dający 5V, przekaźnik na 5V sterowany tranzystorem i LDO 3.3V zasilający moduł WiFi, przycisk, dioda i tyle.
Widać tu pewne różnice względem schematu proponowanego w nocie katalogowej OB2222. Producent przekaźnika zrezygnował z mostka prostowniczego na rzecz jednej diody, ale dodał dodatkowy filtr (dwa kondensatory elektrolityczne i dławik tworzące filtr PI).
Reszta jest zgodna z notą (R1 i R2 to zasilanie dla OB2222, wraz z kondensatorem elektrolitycznym C2), RS1 (S w nazwie jest od Current Sense) to rezystor o małej rezystancji, bocznik, do kontroli prądu przetwornicy, dalej znajdujące się elementy D3 i L2 są charakterystyczne już dla każdej przetwornicy buck.
Schemat ogólny przetwornicy buck:
(źródło: wikipedia, https://en.wikipedia.org/wiki/Buck_converter )
OB2222 oczywiście ma tranzystor zintegrowany wraz z resztą kontrolera w swojej obudowie.
Ta dodatkowa dioda D2 podłączona do pinu FB (Feedback) to sprzężęnie zwrotne do kontroli prądu przez OB2222.
OB2222 zapewnia 5V które służy do włączania przekaźnika oraz zasila stabilizator LDO AMS1117 3.3V.
Dopiero te 3.3V zasila moduł T102_V1.1 z RTL8710.
Pin IO14 podłączony jest do tranzystora o kodzie J6 (podejrzewam, że to S9014) poprzez rezystor R6 ograniczający prąd bazy oraz rezystor R7 pełniący rolę pull down.
Pin IO0 jest po prostu dla diody LED (informuje o stanie przekaźnika i o stanie parowania).
Pin IO5 to przycisk, wraz z rezystorem pull up R5 i o dziwo z kondensatorem C8 który pewnie redukuje problem drgania styków.
Podsumowanie
Produkt jest dość tani, ale z tego co widzę to nie przebija ceną klasycznego Sonoff (widzę go nawet po 20 zł) i zasadniczo nie ma żadnych powodów by to konkretnie jego wybrać.
Użyty w środku moduł nie opiera się na ESP i zdaje się być dość trudny do zaprogramowania a zasadniczo nie oferuje nam niczego więcej niż ESP.
Teoretycznie można by moduł w środku podmienić na inny ale to się kompletnie nie opłaca.
Więc kupując go nie pobawimy się dużo, nie wgramy Tasmoty, itp. Lepiej kupić raczej Sonoffa.
Oczywiście to nie znaczy, że ten zakup był na marne - jak dla mnie to wręcz przeciwnie - niedługo zamierzam zainteresować się obecnym RTL8710/T102_V1.1 i mimo wszystko podjąć próby programowania go/kompilacji wsadu pod niego, a jak coś z tego wyjdzie to rezultaty też opiszę na forum.
Zawsze można się z takich modułów dowiedzieć czegoś ciekawego, ja na przykład nie spodziewałem się, że taki moduł ledwo co podpięciu zasilania będzie na UART wypisywać SSID i hasło mojej sieci WiFi... przecież wystarczy, że taki moduł wyrzucimy, sąsiad go wyciągnie z kosza na śmieci, podłączy i już ma dostęp do naszego WiFi.
Dla zainteresowanych: załączam materiały powiązane z przekaźnikiem z tematu.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
