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.
Nokia 6310i jest świetna po prostu. Najszybciej mi się wybiera nr nawet z mokrą reką czy w rękawiczce. Wygodny, świetnie…
super artykuł. można powiedzieć że będzie wiecznie aktualny dla każdego poczatkującego ( i nie tylko ) elektronika. Dziękuję!
Witam stary konwerter rs232 na USB ponownie ożył....... Dzięki za pomoc!!!
Już rozgromiłem problem... jak zwykle sam :( dobrze ,że przyświeciliście mi lampką :). wystarczy podać akceptowane bez portu samo IP…
Mam taki problem, że dane są niby wysyłane ale domoticz ich nie odbiera. Link bezpośrednio w przeglądarce odbiera ale po…