Flashowanie GoSund SP111 przez UART

Każdy zainteresowany posiadaniem „Inteligentnego Domu” na pewno natknął się na bardzo popularną wtyczkę GoSund SP111. Jej popularność wzięła się z łatwości wgrania na nią custom firmware, m.in. Tasmota. Większość poradników jest jak zrobić to przez Tuya-Convert, ale ja pokażę jak to zrobić przez UART.

Czemu UART a nie Tuya-Convert

Parę lat temu zamówiłem wtyczki z wgranym oprogramowaniem HAA. HAA pozwalało na dodawanie wtyczek do HomeKit, co było dla mnie istotne, dopóki nie poznałem Home Assistant 😄
Firmware HAA niestety nie pozwala nadpisywania dowolnie innym oprogramowaniem (źródło). Do tego, moja wtyczka miała tak stare oprogramowanie, że nie działała nawet opcja aktualizacji. Jedyna więc opcja jaka mi została, to zmiana softu przez UART.

Co potrzebujemy

  • komputer (na który wgramy esptool)
  • śrubokręt krzyżak (najlepiej długa końcówka, gdyż śrubka we wtyczce jest głęboko)
  • UART (koszt 10-20zł)
  • Parę kabelków Jumper Wire (by połączyć UART z GoSundem)

Przygotowanie

Zaczniemy od rozkręcenia wtyczki. Żeby to uczynić, musimy wykręcić śrubkę Philips znajdującą się w tym miejscu:

Po rozkręceniu, musimy sprawdzić jaką mamy wersje gniazdka. W moim przypadku było to REV 1.1. Jeśli też taką macie, to schemat styków wygląda następująco:

Kolejnym krokiem będzie zainstalowanie oprogramowania. W moim przypadku starczyło wykonać na Ubuntu 23.10 komendę:
apt install esptool

Podpinanie

Wtyczkę podpinamy z UART w następujący sposób:
1) GND do GND
2) TX do RX
3) RX do TX
4) 3V3 do 3V3 (3.3V) – pamiętaj by sprawdzić czy na pewno nie podpinasz do 5V!

Do tych dziurek w pinach wtyczki da się wcisnąć jump wire tak, że całe połączenie będzie stabilne. W moim przypadku wymagało to ciut więcej siły, jednak równie dobrze można podpiłować końcówki kabli.

Całość w moim przypadku wyglądała tak (początkowo zamiast do GPIO0 podpinałem się omyłkowo do GPIO2):

Wejście wtyczki w tryb flashowania

Żeby wtyczka weszła w tryb flashowania, należy połączyć GPIO0 z GND. Z takim połączeniem należy zasilić wtyczkę, czyli w naszym przypadku podłączyć UART do USB. Gdy wtyczka wejdzie w tryb flashowania, po rozłączeniu GPIO0, powinna się lekko świecić czerwona dioda.

Flashowanie

Jeśli wszystko się udało, to możemy zabrać się za flashowanie. Najpierw warto zrobić kopię zapasową obecnej zawartości flasha:
esptool --port /dev/ttyUSB0 read_flash 0x00000 0x100000 backup.bin

Zanim wyczyścimy pamięć, przygotujmy sobie nowy firmware. W moim przypadku jest to Tasmota, więc pobieram najnowszą wersję stąd, plik o nazwie tasmota-PL.bin.

Teraz czyścimy flash w naszej wtyczce:
esptool --port /dev/ttyUSB0 erase_flash

A następnie wgrywamy Tasmotę 😄
esptool --port /dev/ttyUSB0 write_flash -fs 1MB -fm dout 0x0 ./tasmota-PL.bin

Gdy flashowanie się skończy, możemy odpiąć wszystkie kable. Nowy firmware jest już wgrany, więc składamy wtyczkę w całość, podpinamy do prądu i łączymy się do jej WiFi w celu konfiguracji. Żeby wtyczka działała, musimy ustawić następujący template w Configuration -> Configure Other -> Template:

{"NAME":"Gosund SP111 v1.1","GPIO":[56,0,158,0,132,134,0,0,131,17,0,21,0],"FLAG":0,"BASE":45}

Podsumowanie

Cała procedura jest już skończona, więc jedyne co zostało to konfiguracja Tasmoty, czyli na przykład połączenie się z MQTT lub kalibracja zużycia prądu.

Wspomnę jeszcze, że miałem dość nietypowy problem z moim UART. Gdy podpinałem UART z wpiętą wtyczką pod USB, to UART znikał z /dev/ttyUSB0. Problemem było zbyt duże zapotrzebowanie na prąd (a raczej zbyt słaby UART). Musiałem to rozwiązać podając 3.3V z innego źródła, czyli w moim przypadku z Arduino (które swoją drogą również może pełnić rolę UART). Plątanina kabli była przez to u mnie ciut większa:

Źródła, którymi się posiłkowałem:
1) https://www.malachisoord.com/2019/11/24/flashing-custom-firmware-on-a-gosund-sp111/
2) https://templates.blakadder.com/gosund_SP111_v1_1

Related Posts