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.
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:
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:
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.
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.
Ź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.
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.
Mamy w domu dość wiekowy (2012) Boombox Philips, model AZ385/12 używany przez dzieci głównie jako…
Mega tanie, bezprzewodowe moduły Internet of Things na dobre zadomowiły się w naszych sieciach. Od…
Pewnie nie każdy posiadacz tytułowej stacji lutowniczej wie, że posiada ona możliwość aktualizacji firmware'u. Producent…
Jakiś czas temu, przeglądając Aliexpress natknąłem się na ciekawy shield do Arduino Nano. Według opisu…
W mailach i komentarzach kilka razy przewijała się prośba o ten wpis. Chodzi o aktualizację…
Dziś tematyka audio, a nawet audiofilska. Uznany wzmacniacz słuchawkowy Lehmann Black Cube Linear o dość…