Termostat W1209 – wgrywanie nowego firmware’u

Znany i nieprzyzwoicie tani termostat W1209 opisywałem w 2016 roku. Nagrałem nawet film prezentujący funkcję grzania i funkcję chłodzenia. Jakiś czas temu na githubie znalazłem projekt nowego oprogramowania z funkcją logowania temperatury i komunikacją RS232.

Funkcje nowego firmware’u do termostatu W1209

Nowy firmware, w odróżnieniu od oryginalnego, posiada nieco mniej funkcji, dodano za to logowanie temperatury, cyklów przekaźnika i czasu włączenia. Zapisane dane można odczytać w konsoli łącząc się po RS232.

Po wgraniu nowego softu mamy do dyspozycji:

  • termostat z funkcją grzania w zakresie 10-80°C;
  • logowanie danych (144 rekordy) z odstępem ustawianym od co 0,1 godziny do co 10 godzin;
  • kalibracja termometru +/- 2,0°C;
  • opóźnienie włączenia przekaźnika 0,0-60,0 sekund;
  • histereza 0,1-2,0°C.

Wgrywanie firmware’u do termostatu W1209

Na początek warto zaznaczyć, że wgrywając nowy firmware, bezpowrotnie tracimy oryginalny soft. Oficjalnie nie jest on dostępny, a sam mikrokontroler jest zabezpieczony przed odczytem zawartości.

Zabawę z mikrokontrolerami STM8 zaczynamy od zaopatrzenia się w niezbędny sprzęt. Prócz płytki termostatu na układzie STM8S103F3P6, potrzebujemy jeszcze programator, np. mega tani klon ST-Link V2. Można go kupić na aliexpress za ok 2-2,5$ z wysyłką, np. tutaj.

Do płytki termostatu warto dolutować 4 goldpiny do wygodnego programowania. Zlokalizowane są z lewej strony wyświetlacza.

Przed przystąpieniem do wygrywania, ST-Link V2 trzeba połączyć z płytką, za pomocą 4 przewodów. Piny programatora są opisane na jego obudowie, a na płytce W1209 wygląda to tak:

I po podłączeniu:

Mamy przygotowany hardware do flashowania, teraz czas na soft. W środowisku Windows można się posłużyć gotowym narzędziem STVP-STM32 dostępnym tutaj -> https://www.st.com/en/development-tools/stvp-stm32.html. W linuksie użyjemy konsolowe narzędzie stm8flash. Trzeba je pobrać w postaci źródeł, skompilować i zainstalować – 3 minuty roboty. Zaczynamy od pobrania:

git clone https://github.com/vdudouyt/stm8flash.git

Potrzebujemy pakiet libusb-1.0-0-dev, kto nie ma, to instaluje:

sudo apt update && sudo apt install libusb-1.0-0-dev

Przechodzimy do folderu stm8flash:

cd stm8flash

I kompilujemy

make

A teraz “instalacja”, czyli

sudo make install

Teraz dodajemy regułę dla ST-Linka:

sudo nano /etc/udev/rules.d/99-stlinkv2.rules

I wpisujemy:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="0666"

I przeładowanie udev:

sudo service udev reload

Jeśli ST-Link V2 był wpięty do portu USB komputera, to trzeba go wyjąc i wsadzić ponownie. Sprawdźmy, czy działa odczytywanie zawartości mikrokontrolera:

stm8flash -c stlinkv2 -p stm8s103f3 -r test.ihx

U mnie działa ;). Ponieważ mogą wystąpić problemy z zapisywaniem do stm8, warto przywrócić go do ustawień fabrycznych. W tym celu klonujemy sobie z Githuba środowisko stm8ef, przechodzimy do folderu stm8ef i robimy make defaults:

W1209 jako platforma programistyczna STM8 eForth

Opisany wyżej soft opiera się na środowisku STM8 eForth. Według opisu, jest to mały system operacyjny z wbudowanym kompilatorem – interpreterem, komunikującym się z użytkownikiem za pośrednictwem konsoli i połączenia szeregowego. Po zainstalowaniu środowiska eForth (czyli wgraniu do STM8) można wrzucać kod źródłowy bezpośrednio do mikrokontrolera na płytce termostatu W1209. Mikro system operacyjny zajmie się kompilacją i uruchomieniem. Brzmi niewiarygodnie, ale tak to działa.

Cały projekt jest dokładnie opisany na githubie – https://github.com/TG9541/stm8ef.

Działa to tak, że do STM wgrywamy mikro środowisko eForth, a później za pomocą terminala i połączenia szeregowego wrzucamy kod źródłowy z programem, np. termostatem. Po wgraniu eForth w mikrokontroler termostatu, na wyświetlaczu pojawi się napis 4th.

Do połączenia szeregowego będzie nam potrzebny konwerter RS232C->RS232 TTL – o ile ktoś ma jeszcze port szeregowy w komputerze. Częsciej stosowanym rozwiązaniem będzie konwerter USB->RS232 TTL, np. taki (uwaga na podróbki Prolific PL2303 i problem w Windowsach)

Pin Rx konwertera łączymy z pinem klawisza ‘‘ (Tx) i analogicznie Tx konwertera z klawiszem ‘+‘ (Rx). Masy też trzeba ze sobą połączyć.

Dokładny opis programowania w środowisku eForth można znaleźć na stronie wiki projektu na Github -> https://github.com/TG9541/stm8ef/wiki/STM8-eForth-Programming

Wersje binarne eForth dla płytki W1209 są dostępne tutaj -> https://github.com/TG9541/stm8ef/releases.

Wgrywamy alternatywny, nowy soft do płytki W1209

Można bawić się w kompilację środowiska eForth lub wgrywanie samego eForth a później kodu termostatu, ale najwygodniej będzie od razu wgrać całość za jednym razem. W tym celu pobieramy sobie gotowy wsad stąd -> https://github.com/TG9541/W1209/releases. Ja ściągnąłem z wersji 0.3.2 plik stm8ef-bin.tgz. Po rozpakowaniu interesuje nas folder out i plik W1209-FD-forth.ihx. Jest to kompletny obrazu flasha z zaimplementowaną funkcją termostatu. Wsad jest przeznaczony dla płytki w wersji z wyświetlaczami typu wspólna katoda. Można spotkać nowsze odmiany z wyświetlaczami wspólna anoda. No to flashujemy:

stm8flash -c stlinkv2 -p stm8s103f3 -s flash -w out/W1209-FD/W1209-FD-forth.ihx

I termostat gotowy:

Na zdjęciu powyżej mam podłączony konwerter USB-RS232-TTL. Parametry połączenia z konsolą i komendy umożliwiające komunikację (odczyt logowanych danych) można znaleźć wprost na stronie projektu -> https://github.com/TG9541/W1209.

Jeśli po zabawie tą wersją softu, stwierdzisz, że nie podoba Ci się i chcesz poprzednią, “fabryczną” wersję, to nie ma tragedii. Jest dostępny soft (a nawet źródła) o funkcjonalności oryginalnego firmware’u.

Wgrywamy soft z funkcjami W1209 jak w oryginale

Źródła znajdują się tradycyjnie na Github, a dokładniej tutaj -> https://github.com/mister-grumbler/w1209-firmware. Kod został napisany w SDCC (Small Device C Compiler – używałem go kiedyś do programowania AT89C2051). Autor udostępnia źródła, ale nie opublikował wersji skompilowanej, gotowej do wgrania. Można to łatwo zrobić samemu, szczególnie w linuksie. Na początek instalujemy SDCC:

sudo apt update && sudo apt install sdcc

Krok drugi to sklonowanie kodu na swój dysk:

git clone https://github.com/mister-grumbler/w1209-firmware

Przechodzimy do folderu W1209-firmware i kompilujemy:

Dla ułatwienia publikuję skompilowaną wersję, gotową do wgrania -> Firmware do W1209 z oryginalnymi funkcjami.

Wgrywanie:

stm8flash -c stlinkv2 -p stm8s103f3 -s flash -w thermostat_w1209.ihx

Po zaprogramowaniu, odłączamy W1209 od ST-Linka, wciskamy klawisze + i – i podłączamy zasilanie. Spowoduje to reset ustawień. W innym przypadku będą się po prostu pokazywały bzdury i będą problemy ze zmianą konfiguracji. Dokładny opis funkcji opublikowałem tutaj: Tani chiński cyfrowy termostat W1209.

Podsumowanie

Tani, chiński termostat znowu zaskakuje nową odsłoną. Płytka z mikrokontrolerem, wyświetlaczem i przekaźnikiem za 1,50$ może stać się mikro środowiskiem programistycznym z kompilatorem. Chociaż sama funkcjonalność jest bardzo ciekawa, to jednak nauka eForth jakoś do mnie nie przemawia. Może to lenistwo, a może brak czasu, ale wolę mikrokontrolery AVR i język C. Niemniej jednak, jeśli ktoś bardziej zainteresuje się tematem, może wykorzystać płytkę do programowania mikrokontrolerów STM8 w C, choćby z użyciem środowiska SDCC. Hardware i bezpłatny software zapewniają bardzo tani start w świecie popularnych i niedrogich układów z rodziny ST.

Możesz również polubić…

Leave a Reply

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.