
Witajcie moi drodzy
Przedstawię tutaj szczegółowo proces wgrywania nowego firmware poprzez WiFi (za pomocą tuya-convert) do inteligentnego włącznika światła Smart Life opartego o moduł z ESP8266 (TYWE3S). Jest to bardzo wygodny sposób na wgranie np. Tasmoty do różnego rodzaju urządzeń smart, bez potrzeby ich otwierania i lutowania. Oczywiście pokazane tutaj urządzenie i tak otworzę - by pokazać jego wnętrze. Do uruchomienia tuya-convert użyję wirtualnej maszyny z Ubuntu postawionej na VMware oraz karty sieciowej WiFi na USB TL-WN722N.
Powiązane tematy
Na temat produktów z WiFi opartych na ESP napisałem już kilka tematów. Głównie pokazuję tam wnętrza, 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)
Dodatkowo, drugi temat o Tasmocie:
- ESP8266 i Tasmota - sterowanie przekaźnikiem WiFi krok po kroku
Zakup włącznika światła WiFi SC3-01
Włącznik ten znalazłem w internecie pod hasłem 1/2/3 Gang WiFi Touch Switch Home Wall Light Control+ RF Touch Remote Smart Life:

Kosztuje on około 15$, czyli niecałe 60zł.
Różni się on nieco od wcześniej testowanych przeze mnie włączników - oprócz WiFi oferuje też komunikację RF433:

Produkt był zwyczajowo zapakowany w tekturowym pudełeczku:


Na pudełeczku jest widoczny model włącznika (nie ma nigdzie indziej tej informacji), SC3-01 (EU1ch):

W środku był włącznik, instrukcja, dwie śrubki do mocowania:

Obudowa włącznika wykonana jest pod wersję potrójną, ale w wersji pojedynczej dostępny jest tylko środkowy przekaźnik:

Wnętrze włącznika światła WiFi SC3-01
Tym razem uznałem, że zacznę od pokazania środka (choć zaglądanie tam nie jest wcale potrzebne gdy zamierzamy wgrać firmware przez WiFi).
Przednia pokrywa łatwo się zdejmuje, wystarczy ją podważyć śrubokrętem:

Po jej zdjęciu widać, że płytka włącznika przemyślana jest pod wersję z trzema dotykami, ale tylko jeden jest przylutowany. Dodatkowo na płytce zaznaczone jest jak powinien być on zorientowany w ścianie (gdzie jest góra):

Płytkę z dotykami można łatwo zdjąć, ale trzeba podważyć ją od dolnej strony, bo z drugiej strony ma zaczepy:

Jest ona zamocowana sześciopinowym (2x3) złączem, druga płytka jest przykryta czarną tekturką by nie było zwarć:

Druga płytka trzema się na trzech śrubkach, wkręcona jest w obudowę gniazda:


By ją wyjąć trzeba też odkręcić śrubki od przewodów:

Potem można ją już wyjąć ze środka. Cały zestaw w częściach:

Teraz przyjrzyjmy się płytkom.
Zacznijmy od płytki przedniej, tej z dotykiem i modułem WiFi:


Widać na niej wyprowadzone piny GND, RX, TX, VCC oraz IO0, czyli to co jest potrzebne do programowania TYWE3S. To miła odmiana, bo w przypadku wielu produktów musimy samodzielnie dostawać się do tych sygnałów, a tu wystarczy przylutować 5 goldpinów i gotowe.
Widać też oczywiście serce płytki, moduł TYWE3S:

czyli moduł WiFi od Tuya oparty na ESP8266:

TYWE3S ma na pokładzie antenę, ale tuż obok na płytce jest też druga antena.
To jest antena od modułu komunikacji RF433 którą ten włącznik również oferuje. Nie jest to druga antena dla WiFi.
Widzimy też niepodpisany układ scalony o ośmiu nóżkach oraz generator zegara 13.5217MHz (podpisany 13.52127C20):

Skoro to moduł komunikacji 433MHz, a zegar jest 13.52127MHz, to wygląda to, że częstotliwość jest mnożona 32 razy przez PLL (433.9coś/13.5217=32).
Obok niego jest kolejna niespodzianka, coś czego w poprzednio testowanych produktach nie było - buzzer:

Obok niego jest układ scalony 8BOA1947.
Nie znalazłem jego noty katalogowej, być może to kontroler przycisków dotykowych. TYWE3S sam przycisku dotykowego nie obsłuży, w poprzednich dwóch podobnych rozbieranych przeze mnie produktach był układ scalony odpowiedzialny za dotyk.
Przy pinach 2x3 łączących obie płytki widać jeden tranzystor o kodzie JY3 oraz dwa wolne miejsca:

To są tranzystory sterujące przekaźnikami. Jest tu tylko jeden, bo to pojedyncza wersja włącznika.
Tranzystor J3Y to S8050:

Widać też w dziwny sposób przylutowany rezystor 0ohm, czyli zworkę. Znajduje się on na padzie pod tranzystor:

Nic więcej ciekawego na tej płytce nie ma, teraz jeszcze warto rozpisać piny ze złącza 2x3:
Quote:
Pin 1 - 3.3V
Pin 2 - GND
Pin 3 - GND
Pin 4 - (?drugi/trzeci przekaźnik?)
Pin 5 - środkowy przekaznik
Pin 6 - (?drugi/trzeci przekaźnik?)
Pin pierwszy jest oznaczony na PCB. Wszystko zgodnie z oczekiwaniami. Poprzez "przekaźnik" mam na myśli nie sam sygnał z TYWE3S, tylko już za tranzystorem bo tranzystory od przekaźników też są na frontowej PCB. Na tylnej PCB są przekaźniki wraz z diodami chroniącymi przed przepięciami, bez tranzystorów.
Teraz można przyjrzeć się drugiej płytce:


Te diody D1, D2 (przylutowana), D3 to diody od przekaźników, łączone równolegle do ich uzwojeń:

Na tej płytce znajduje się mały zasilacz impulsowy w topologii flyback. Opiera się on na układzie PN8366:

Przykładowa aplikacja PN8366 (zasilacz tutaj pewnie wygląda mniej więcej tak):

Tuż przy podłączeniu przewodów sieciowych jest mostek prostowniczy ABS8 (800V, 0.8A):


Na wyjściu zasilaczyka jest dioda Schottkiego SS34 (prostuje ona wyjście z wtórnego uzwojenia transformatora; specjalnie użyto tu diodę Schottky bo ma ona niski spadek napięcia):

Za nią jest regulator napięcia AMS1117 3.3V:


Z wierzchu płytki rzuca się w oczy przede wszystkim przekaźnik (W11-1A2STLE-H DC5V 10A 250VAC/30VDC CHINA CQC) i mały transformator impulsowy od zasilacza:


Widać też warystor 07D471K i rezystor bezpiecznikowy:

Tuya Convert - wstęp
Tuya Convert jest to skrypt (napisany w Pythonie) pozwalający wgrać firmware przez sieć WiFi dla wielu urządzeń produkcji Tuya, w większości bazujących na ESP8266.
Czyli dzięki Tuya Convert nie musimy nawet otwierać obudowy urządzenia, ani tym bardziej nie trzeba nic lutować. Wystarczy tylko wiedzieć, że urządzenie opiera się o moduł Tuya (inaczej nie zadziała).
Repozytorium projektu:
https://github.com/ct-Open-Source/tuya-convert
Kopia zapasowa repozytorium:
Warto tu zaznaczyć, że Tuya-convert jest niezależna od preferowanego przez nas firmware inteligentnego domu dla ESP. Nie jest w żaden sposób powiązana z Tasmotą czy tam z Domoticz.
Jedynie trzeba pamiętać, że po wgraniu wsadu przez Tuya-convert poprzedni wsad jest przez niego nadpisywany, więc jak wgramy sobie coś bez możliwości aktualizacji przez WiFi to już potem nie zaktualizujemy tego wsadu drugi raz (nie będzie się jak połączyć) i trzeba będzie jednak lutować.
UWAGA: Nie polecam jakiegokolwiek uruchamiania i parowania z WiFi urządzenia IoT przed użyciem tuya-convert. Istnieje ryzyko, że wtedy urządzenie pobierze od producenta aktualizację, której tuya-convert nie wspiera i będziemy wtedy skazani jednak na lutowanie i kabelki.
Tuya Convert - Co będzie nam potrzebne?
Naprawdę nie trzeba dużo by zacząć. Potrzebne będzie tylko kilka rzeczy:
- router domowej sieci WiFi (raczej większość z nas ma) do którego znamy hasło
- urządzenie smart home oparte o wspierany moduł z ESP od TUYA (przed zakupem urządzenia smart warto poszukać w sieci co w nim siedzi, Tuya produkuje moduły TYWE3S, TYWE2S, itp)
- karta sieciowa WiFi na USB która jest w stanie pracować w trybie Access Pointa (udająca router WiFi) - ja użyłem TL-WN722N (koszt około 40 zł)
- telefon lub jakieś urządzenie zdolne podłączyć się do sieci WiFi
- komputer z systemem Ubuntu lub pokrewnym, ew. komputer z systemem Windows i na nim VMware by móc postawić wirtualną maszynę z Ubuntu (autorzy tuya-convert polecają też użyć Raspberry Pi, ale uważam, że nie każdy go posiada, więc lepsza opcją jest Ubuntu)
Tuya Convert - instalacja niezbędnych rzeczy
Opiszę tutaj krok po kroku co jest potrzebne by uruchomić skrypt tuya-convert.
Kroki przedstawione tutaj wykonuję na maszynie wirtualnej VMware, ale równie dobrze można to zrobić na normalnym komputerze.
Przede wszystkim - system. Wybrałem Ubuntu 20.04, a dokładniej:
ubuntu-20.04.1-desktop-amd64.iso
Pobrałem go przez sieć Torrent/P2P (Ubuntu jest darmowym systemem, można go pobrać legalnie). Magnet link:
Spoiler:
magnet:?xt=urn:btih:2EIBUK45EAUBDIC6RRL4KV5CBP4XJXEK&dn=ubuntu-20.04.1-desktop-amd64.iso&tr=https%3A%2F%2Ftorrent.ubuntu.com%2Fannounce&tr=https%3A%2F%2Fipv6.torrent.ubuntu.com%2Fannounce&net=Public&net=I2P&net=Tor
magnet:?xt=urn:btih:2EIBUK45EAUBDIC6RRL4KV5CBP4XJXEK&dn=ubuntu-20.04.1-desktop-amd64.iso&tr=https%3A%2F%2Ftorrent.ubuntu.com%2Fannounce&tr=https%3A%2F%2Fipv6.torrent.ubuntu.com%2Fannounce&net=Public&net=I2P&net=Tor
(do ściągnięcia Ubuntu poprzez magnet link potrzebny jest klient Torrent, choć można je też pobrać normalnie przez WWW)
Wszystkie niżej opisane operacje wykonywałem na czystym, dopiero co zainstalowanym systemie.
Na początek - formalność, wejście w tryb roota (początkujący o tym zapominają), sudo su:

Potem sprawdzenie wersji (komenda lsb_release -a):

To zwłaszcza dla Was - jeśli macie starszą wersję, to może coś pójść nie tak. Nie byłem w stanie uruchomić tuya-convert na Ubuntu 16, były kłopoty z Pythonem.
Potem można wykonać aktualizację (apt-get update):

Teraz zainstalujemy git, system kontroli wersji, by móc wykonać git clone czyli pobrać repozytorium tuya-convert. Komenda apt-get install git.

Po zainstalowaniu możemy sprawdzić czy git działa, po prostu zapytamy go o jego wersję, komenda git --version:

U mnie była wersja 2.25.1, ale Wy możecie mieć inną wersje, to żaden problem.
Tuya Convert - instalacja Tuya Convert
Mamy wszystko co potrzebne, możemy pobrać repozytorium Tuya-convert poprzez gita. Wpisujemy git clone https://github.com/ct-Open-Source/tuya-convert

Git pobierze repozytorium i utworzy dla niego folder.
Przechodzimy do utworzonego folderu, możemy wylistować jego zawartość: cd tuya-convert a potem ls:

Uruchamiamy skrypt ./install_prereq.sh:

Ubuntu ściąga wymagane paczki, to zajmie kilka minut. Instalacja powinna przebiec pomyślnie:

Tuya Convert - podłączamy kartę sieci bezprzewodowej USB
Możemy już podłączyć nasze WiFi dongle (w moim przypadku to TL-WN722N):

Jeśli korzystamy z VMware, to musimy też upewnić się że jest ono podłączone do maszyny wirtualnej a nie do głównego naszego komputera. Zaglądamy do VM->Removable Devices.

Na zrzucie ekranu powyżej karta sieciowa Atheros USB2.0 WLAN nie jest podłączona do maszyny wirtualnej. Trzeba kliknąć 'Connect (Disconnect from Host)' by ją podłączyć. Dopiero wtedy Ubuntu ją zobaczy.
Widoczność urządzenia USB przez Ubuntu można też sprawdzić komendą lsusb:

Karta sieciowa USB powinna być tam widoczna. U mnie pokazuje się jako Bus 001 Device 002: ID 0cf3:9271 Qualcomm Atheros Communications AR9271 802.11n.
Tuya Convert - konfiguracja Tuya Convert
Skrypt wymaga wskazania przez interfejsu sieciowego który zostanie użyty w celu zrobienia AP dla konwertowanego urządzenia. Określony jest on w pliku config.txt.
Listę dostępnych interfejsów sieciowych na Linuxie możemy poznać komendą ifconfig:

Na tej liście powinna być widoczna podłączona przez nas karta sieci bezprzewodowej na USB.
I teraz mamy zasadniczo dwie możliwości:
- albo wpisać nazwę naszego interfejsu do konfiguracji skryptu
- albo zmienić nazwę naszego interfejsu na taką, jakiej oczekuje skrypt
Wpisać ją do konfiguracji można bardzo prosto, poprzez edytor tekstu gedit. Uruchomić można go normalnie przez eksplorator plików, albo poprzez konsolę:

Oczywiście są jeszcze takie edytory tekstu jak nano bądź vi, ale ich nie polecam by nie straszyć początkujących.
Zawartość config.txt:

Po WLAN= powinna być nazwa naszego interfejsu sieciowego.
Natomiast zmiana nazwy interfejsu sprowadza się do komend:
- ip link set wlx60e3271cf88c down - by wyłączyć tymczasowo interfejs
- ip link set wlx60e3271cf88c name wlan0 - by zmienić jego nazwe
- ip link set wlan0 up - by go ponownie włączyć
To 'wlx60e3271cf88c' to oczywiście nazwa przepisana przez nas z rezultatu ifconfig, u Was może być inna.
Teraz mamy już wszystko co potrzeba i możemy uruchomić skrypt.
Tuya Convert - wgrywanie firmware TYWE3S przez WiFi
Skrypt uruchamiamy wpisując ./start_flash.sh (musimy być w jego folderze):

Skrypt może pytać nas o pozwolenie na wymuszenie zakończenia procesów zajmujących niezbędne dla niego porty. Udzielamy go mu klawiszem Y.
Następnie skrypt powinien utworzyć sieć WiFi o nazwie vtrust-flash i poprosić nas o akcje:

Najpierw weryfikujemy, czy sieć rzeczywiście powstała:

Potem podłączamy się dowolnym naszym urządzeniem (np. telefonem) do tej sieci:

Następnie resetujemy nasze urządzenie smart metodą opisaną w jego instrukcji (z reguły jest to dłuższe przyciśnięcie toucha):
W tym momencie możemy już kliknąć ENTER i przejść do etapu łączenia. Najpierw tuya-convert wykona kopię zapasową firmware z urządzenia:

Potem da nam wybór jaki firmware wgrać:

Wsady z listy wczytywane są z folderu "firmware", możemy tam umieścić też własny firmware, ale musimy pamiętać, że jeśli on nie wspiera możliwości update przez sieć to potem już go nie zmienimy (no chyba, że otworzymy obudowę włącznika i podłączymy się do niego kabelkami, programatorem).
Musimy też pamiętać o limicie rozmiaru firmware, tutaj 512KB. W trakcie aktualizacji wsadu pamięć FLASH od ESP musi przechowywać jednocześnie nowy (pobierany) wsad, jak i ten aktualny, bieżący.
Zdecydowałem się na Tasmota v8.1.0.2 (wifiman):

Wsad został poprawnie wgrany przez sieć. ESP8266 uruchomił się ponownie i utworzył teraz własnego Access Pointa o nazwie tasmota-xxxx (zamiast xxxx losowy numer).
Tasmota - konfiguracja SSID i hasła naszej sieci WiFi dla Tasmoty
Na tym etapie urządzenie Tasmoty jeszcze nie wie jak podłączyć się do naszego WiFi. Musimy mu samodzielnie podać SSID i hasło naszej sieci.
W tym celu podłączamy się do sieci WiFi utworzonej przez nasze urządzenie o nazwie tasmota-xxxx:

Sieć ta nie wymaga żadnego hasła:

Po podłączeniu przechodzimy w przeglądarce do strony o adresie IP 192.168.4.1. Jest to domyślny adres IP służący tylko do pierwszego etapu konfiguracji urządzenia:

Na tej stronie podajemy dla Tasmoty nazwę naszej sieci WiFi oraz jej hasło. Możemy też podać opcjonalnie informacje o drugiej, zapasowej sieci. Na stronie jest też przycisk "Scan for wifi networks" który pokazuje nam jakie sieci WiFi widzi ESP wraz z mocą ich sygnału:

Po wpisaniu danych klikamy Save a potem Restart by uruchomić ponownie urządzenie:

Utracimy wtedy połączenie z siecią WiFi tasmota-xxxx, ale to nie jest problem. Nie będzie ona nam potrzebna. Od tego momentu urządzenie Tasmoty podłączy się już normalnie do naszego routera (już jako klient). Teraz też możemy podłączyć się z powrotem do naszej sieci WiFi.
Tasmota - określenie adresu IP urządzenia Tasmoty
Teraz trzeba jeszcze określić jaki adres IP nadał nasz router poprzez DHCP dla naszego nowego urządzenia Tasmoty.
Jest na to kilka sposobów.
Możemy zalogować się do panelu administracyjnego naszego routera i przejrzeć tam ostatnie logi, popatrzeć jakie adresy IP się do niego podłączały w ciągu ostatnich kilku minut:

To już zawęża nasz zakres poszukiwań do kilku IP.
Ale można też użyć skanera IP (np. Angry IP Scanner):

Urządzenie Tasmoty powinno też mieć określoną nazwę hosta (a nie n/a, jak u mnie na zrzucie ekranu), lecz w moim przypadku to nie działało.
Swój włącznik znalazłem pod IP 192.168.0.107:

Mamy już namiary na włącznik, możemy przejść do jego konfiguracji.
Tasmota - wstępne zapoznanie z panelem WWW
Każde urządzenie Tasmoty posiada panel WWW jak na obrazku poniżej:

Teraz wstępnie omówię dostępne w nim opcje.
Przycisk Information pokazuje nam informacje o tym urządzeniu:

Są tutaj m. in:
- informacje o sieci do której urządzenie jest podłączone
- informacje o samym urządzeniu (adres IP, MAC)
- informacje o ESP (rozmiar pamięci, ID układu Flash)
- informacje o MQTT (na tym etapie go nie używałem)
- informacje o wersji Tasmoty (można ją zaktualizować też przez WiFi, już bez tuya-convert oczywiście)
- informacje o tym jak długo urządzeni pracuje od ostatniego włączenia (tzw. uptime), ilość jego uruchomień (boot count), a nawet powód ostatniego restartu
Przycisk Firmware Upgrade pozwala nam na aktualizację wsadu ESP przez sieć:

Nowe firmware można normalnie wysłać jako plik z komputera, można też po prostu podać link do firmware dostępnego w internecie i wtedy ESP sam go sobie ściągnie i wgra.
(ale tak jak wspominałem wcześniej; tak jak z tuya-convert; nowe firmware też musi wspierać możliwość aktualizacji przez WiFi, bo inaczej trzeba będzie lutować
Przycisk Console daje nam dostęp do konsoli tego urządzenia:

Jest tutaj dostępny log zdarzeń oraz linia komend Tasmoty. Na szczęście nie będziemy musieli jej używać, wszystko skonfigurujemy poprzez interfejs WWW, ale to później.
Przycisk Configuration pozwala nam skonfigurować Tasmotę pod nasze konkretne urządzenie. Tutaj określamy dokładnie ile mamy przekaźników, przycisków, itp, oraz na jakich pinach ESP się one znajdują:

Możemy to określić samodzielnie lub użyć gotowego szablonu. Szablony Tasmoty dostępne są m. in. tutaj:
https://templates.blakadder.com/
Szablon wkleja się w Configure Template:

Ale samodzielne opracowanie szablonu też nie jest problemem. Możemy dowolnie konfigurować role pinów w zakładce Configure module:

Jest do wyboru wiele różnych opcji, niektóre bardziej ogólne a inne bardziej wyspecjalizowane:

Na przykład Relay1 tutaj to pierwszy przekaźnik, a Relay2 to drugi przekaźnik. Przekaźników jedno urządzenie może mieć aż 8. Dodatkowo są tutaj tez opcje takie jak Relay1i czy Relay2i, które po prostą są odwróconymi wyjściami dla tych samych przekaźników. Sami możemy określić, czy stan wysoki ma oznaczać włączony przekaźnik czy wyłączony.
Tasmota - obsługa przekaźnika i diody LED
W przypadku znanego urządzenia można po prostu skorzystać z gotowego template (szablonu) Tasmoty. Tutaj jednak nie miałem takiej możliwości. SC3-01 z tematu nie posiada jeszcze template, więc musimy samodzielnie go skonfigurować.
Najpierw trzeba określić na jakich pinach ESP podłączony jest przekaźnik (lub przekaźniki). Udało mi się tego dokonać eksperymentalnie - po prostu kolejno ustawiałem piny w trybie Relay i sprawdzałem który działa. Ustawienie:

Testowanie:

Ostatecznie odkryłem, że w przypadku SC3-01 w roli wyjścia mamy dostępne dwa piny - GPIO15 oraz GPIO16. Jeden z nich to przekaźnik, a drugi to dioda LED (można ją sterować niezależnie od przekaźnika, choć przekaźnik ma jeszcze osobną, własną diodę LED):


Rezultat pokazuję na filmiku:
Wszystko działa, możemy już sterować przekaźnikiem i diodą LED, została obsługa przycisku dotykowego.
Tasmota - obsługa przycisku dotykowego
Do określenia pinu na którym podłączony jest przycisk użyłem tej samej metody co w przypadku przekaźnika. Po prostu kolejno ustawiałem kolejne piny przez panel WWW i sprawdzałem, czy przycisk reaguje:

Określiłem, że przycisk dotykowy znajduje się na pinie GPIO5:

Jednak urządzenie działało nie tak jak powinno:
Lampa świeciła się tylko wtedy kiedy przycisk był wciśnięty. A powinno być inaczej - wciśnięcie przycisku powinno przełączać stan lampy. To dlatego, że użyłem Switch1 zamiast Button1, a właściwie Button1i (Button1 skutkowałoby zmianą stanu żarówki po zdjęciu palca z przycisku, natomiast Button1i skutkuje zmianą stanu żarówki w momencie naciśnięcia przycisku)
Po zamianie tego ustawienia Switch na Button włącznik zaczął działać w pełni poprawnie i zgodnie z oczekiwaniami.
Wgrywanie wsadu przez konwerter USB<->UART
Cały temat poświęcony jest wgrywaniu wsadu przez WiFi, ale warto jeszcze wiedzieć o alternatywnej opcji.
Może być ona potrzebna w trzech przypadkach:
- jeśli sami coś popsujemy (wgramy przez WiFi np. nieodpowiedni wsad, albo taki który nie pozwala na aktualizację)
- jeśli po zakupie skonfigurujemy urządzenie do pracy z aplikacją i chmurą producenta (zdarza się, że producent wtedy sam zrobi aktualizację firmware która psuje tuya-convert)
- jeśli zakupione urządzenie po prostu nie jest wspierane przez tuya-convert
Metoda tu opisana opiera się o prosty konwerter USB na UART, regulator LDO 3.3V, płytkę stykową i kilka kabelków oraz jedno złącze.
Na początek dolutujemy złącze goldpin do wyprowadzonych już pinów na frontowej płytce:

Są to piny, kolejno:
- GND (masa)
- VCC (3.3V)
- RX (on w przypadku tego włącznika jest podpięty do TX od TYWE3S, więc do niego podłączamy RX od przejściówki)
- TX (on w przypadku tego włącznika jest podpięty do RX od TYWE3S, więc do niego podłączamy TX od przejściówki)
- IO0 (pin do włączenia trybu programowania)
Nie ma tu wyprowadzonego pinu RST, ale nie jest on potrzebny. Zwieranie RESET zastąpimy po prostu odcinaniem zasilania, ale o tym później.
Trzeba się jakoś do tego złącza wygodnie podłączyć.
Nie możemy dolutować tu po prostu goldpinów, bo nie bylibyśmy tak w stanie założyć przedniej pokrywy. Musimy to rozwiązać inaczej. Można dolutować złącze po skosie:

Tak przylutowane złącze mieści się pod pokrywą:

Już z kabelkami od płytek stykowych:

Następnie trzeba podłączyć zasilanie 3.3V oraz konwerter USB<->UART. Użyłem tutaj najtańszego USB TO TTL HW-597:

3.3V uzyskałem z 5V poprzez regulator LDO 3.3V TC1264 (ale możecie użyć dowolnego; tylko nie podłączajcie TYWE3S bezpośrednio na 5V z USB, to go uszkodzi):

Wszystko połączyłem na płytce stykowej. Dodatkowo zwarłem na konwerterze UART piny 3.3V i VDD (to oznacza, że wybieramy poziom logiki na 3.3V). Pin 5V z konwertera USB UART podłączyłem do LDO 3.3V (bo 3.3V bezpośrednio z konwertera nie ma wystarczającej wydajności prądowej). Dla regulatora LDO podłączyłem też kondensatory 100nF na wejście i wyjście:


W ten sposób przygotowałem sobie zestaw do wgrania wsadu na TYWE3S:

Schemat połączeń:

Po stronie komputera użyłem skryptu esptool.py który zainstalowałem wraz z paczką wsparcia ESP8266 dla Arduino IDE.
https://github.com/esp8266/Arduino
Wsparcie ESP8266 zainstalowałem w Arduino IDE poprzez Boards Manager.
Po instalacji esptool.py pojawiło się u mnie w tej lokalizacji (ale Wy pewnie macie inną nazwę użytkownika):
C:\Users\Tst\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\tools\esptool

esptool.py używa się z poziomu linii komend. Otwieramy CMD, przechodzimy do jego lokalizacji (komenda cd C:\Users\Tst\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\tools\esptool) i potem możemy z niego korzystać:

Teraz przyszła pora sprawdzić, czy nasz programator jest w stanie skomunikować się z TYWE3S.
Komenda esptool.py read_id odczytuje informacje o podpiętym układzie.
Procedura wykonywania komendy jest prosta:
- odłączamy nasz DIY programator od USB (i od zasilania)
- najpierw zwieramy GPIO0 do masy (jest na wyjściu do programowania)
- potem podłączamy programator do USB (dopiero wtedy też dostaje on zasilanie)
- odłączamy GPIO0 od masy (możliwe jest, że też trzeba będzie je podpiąć do 3.3V przez rezystor pull-up)
- dopiero wtedy wpisujemy komendę na komputerze
Rezultat poniżej:

Komunikacja z TYWE3S działa. Układ został poprawnie rozpoznany jako ESP8266. Jego MAC 2c:f4:32:4c:3e:bc też się zgadza.
Teraz jeszcze zademonstruję jak wgrać mu przez to firmware Tasmoty (nie muszę tego robić, ale Wam się przyda to na wszelki wypadek).
Ściągamy ostatnią wersję z:
http://ota.tasmota.com/tasmota/release/

Wrzucamy ją luzem dla wygody obok esptool.py:

I wykonujemy programowanie ESP8266, procedura tak jak opisywałem dla chip_id, ale komenda esptool.py write_flash 0x0 tasmota.bin
Rezultat:

Odpinamy zasilanie, podłączamy ponownie i w ten sposób mamy znów wgrany czysty firmware tasmoty:

I wracamy do punktu wyjścia, możemy podłączyć się teraz do sieci tasmota-xxxx, ustawić jej informacje o naszym WiFi, itd. itp...
Co można zrobić dalej?
Urządzenie smart z własnym wsadem to oczywiście dopiero punkt startowy. Teraz można zrobić znacznie więcej, m. in:
- ustawić mu nazwę hosta (np. poprzez przypisanie nazwy hosta do jego adresu mac na routerze) lub stały IP
- dodać go do aplikacji Tasmota-Control na Androida
- zorganizować lepszy sposób sterowania nim poprzez MQTT (temat do opisania), np. postawić Home Assistant i tam je podpiąć
Konfiguracja większej ilości urządzeń IoT wraz z Home Assistant zostanie wkrótce opisana na forum.
Moduł komunikacji RF433
Niestety nie miałem możliwości przetestować sterowania pilotem RF433 z tym włącznikiem. Nie mam w tym momencie żadnego takiego pilota, ale nadrobię to wkrótce.
Zauważyłem jednak pewne ciekawe zjawisko które występuje nawet po całkowitym usunięciu wsadu z TYWE3S (ESP), a mianowicie długotrwałe przyciśnięcie dotyku skutkuje najpierw pojedynczym, a potem podwójnym sygnałem z buzzera:
Jest to część procesu parowania pilota 433MHz z włącznikiem. Gdy ma się pilota, to po sygnale dźwiękowym wciska się na nim przycisk i pilot paruje się z układem.
Sparować z danym urządzeniem można kilka pilotów.
Ciekawe jest to, że jest to zupełnie niezależne od firmware z TYWE3S.
Naszkicowałem też połączenia od układu 433:

(na zielono zaznaczona ścieżka do GPIO5)
Na ten moment moim zdaniem to działa tak: układ od 433 ma tylko jeden pin do komunikacji, ten pin podłączony jest też do kontrolera przycisku dotykowego i do pinu GPIO5 TYWE3S. Normalnie ten pin ma pull-up i jest w stanie wysokim. Krótkotrwałe przyciśnięcie przycisku po prostu ignorowane jest przez układ od 433. Długotrwałe przyciśnięcie przycisku (długie zwarcie do masy) odbierane jest przez 433 jako sygnał parowania z pilotem 433MHz. Dodatkowo, gdy pilot da sygnał dla układu od 433 to sam 433 zwiera do masy ten pin symulując wciśnięcie przycisku. Czyli ESP "nie wie" nawet o tym, że jest tam układ od 433. Proste i pomysłowe rozwiązanie.
Diagnoza problemów
Proces wgrywania wsadu przez tuya-convert jest bardzo prosty, ale może czasem sprawić problemy początkującym. Tutaj dam listę wskazówek-pytań, co warto sprawdzić, gdy coś jest nie tak.
- czy używamy aktualnej wersji Ubuntu (na starszej wersji miałem problem z Python)?
- czy WiFi dongle podłączone jest do naszej wirtualnej maszyny (w ustawieniach VMware, jeśli z tego korzystamy) a nie do głównego komputera?
- czy komenda lsusb widzi nasze WiFi dongle?
- czy komenda ifconfig widzi interfejs sieciowy od WiFi dongle?
- czy kupione przez nas WiFi dongle wspiera tryb AP (czy jest w stanie stworzyć własną sieć WiFi)?
- czy uruchamiamy komendy w trybie administratora? (sudo)
- czy urządzenie jest dostatecznie blisko WiFi dongle?
- czy nazwa interfejsu WiFi jest taka sama jak w konfiguracji tuya-convert (warto też spróbować ustawić tą nazwę na wlan0)
- czy nasze urządzenie Smart Home rzeczywiście ma w sobie moduł z ESP od Tuya?
Szczegóły użycia wymienionych powyżej komend są w treści tematu.
Materiały z sieci
Zamieszczam tutaj odnośniki do nich w ramach uzupełnienia artykułu. Są one oczywiście po angielsku.
Repozytorium tuya-convert:
https://github.com/ct-Open-Source/tuya-convert
Strona domowa Tasmoty:
https://tasmota.github.io/docs/
Strona z szablonami Tasmoty:
https://templates.blakadder.com/
Informacje o programowaniu TYWE3S:
https://tasmota.github.io/docs/devices/TYWE3S/
"Pomocnik" programowania TYWE3S drukowany w 3D:
https://www.thingiverse.com/thing:3231225
Wgrywanie Tasmoty przez Esptool (ale ja to trochę inaczej robiłem, metody z linku nie testowałem!):
https://tasmota.github.io/docs/Esptool/
Warto jeszcze wiedzieć, że jest też coś takiego jak tuyapi, czyli API pozwalające używać urządzeń Tuya bez zmiany ich firmware:
https://github.com/codetheweb/tuyapi
Zapowiedź kolejnej części
Urządzenia IoT powiązane z ESP omówiłem już w co najmniej kilku tematach. Dla odmiany wkrótce zamierzam zająć się tematem Zigbee, a dokładniej serią Aqara:

Spróbuję jej użyć z Home Assistant.
Podsumowanie
Włącznik SC3-01 SmartLife oparty jest o moduł Tuya TYWE3S z ESP8266. Można go łatwo programować poprzez podłączenie się z przewodami (poprzez UART) do wyprowadzonego portu na PCB, ale jeszcze łatwiej można dostać się do niego poprzez tuya-convert. Nie wymaga to wcale lutowania, lecz trzeba mieć tą karte WiFi na USB wspierającą tryb pracy Access Pointa. Obie metody mają swoje plusy i minusy, ale końcowo dają ten sam rezultat.
Poprzez tuya-convert można wgrać dowolny wsad do urządzenia smart, trzeba jedynie pamiętać, że wgrany wsad nadpisuje to co jest tam w środku, więc po wgraniu już nie użyjemy ponownie tuya-convert i możemy się odciąć od urządzenia (wtedy już trzeba otwierać obudowę i programować przez UART). Chyba, że wgrany wsad wspiera aktualizację przez WiFi (OTA, Over The Air), wtedy nie ma problemu.
Dodatkowo włącznik SC3-01 SmartLife wspiera też pilota 433MHz, którego można z nim wygodnie sparować i działa to o dziwo niezależnie od wsadu z ESP. Czyli dodatkowy plus. Niezależnie od tego, czy wgracie tam Tasmotę, czy Domoticz, czy własny wsad, to pilot 433MHz i tak będzie działać.
Cool! Ranking DIY