Witajcie, przedstawię tu krótkie weekendowe DIY które powstało w oparciu o moduł WiFi WB2S (BK7231T), wyświetlacz LED matrycowy MAX7219, termometr/higrometr DHT11, odbiornik IR, fotorezystor i obudowę z drukarki 3D. Opisany tu gadżet jest w pełni kompatybilny z Home Assistant, chodzi na nim firmware OpenBeken, które pozwala na bieżąco np. raportować pomiary do HA oraz też przekazywać dalej odebrane kody IR do HA. Oprócz tego firmware jest też w stanie samodzielnie te kody obsługiwać i np. przekazywać dalej polecenia poprzez żądanie HTTP GET do urządzeń OpenBeken bądź Tasmoty, co pozwala np. oskryptować pilot IR tak by sterował innymi urządzeniami smart w domu i to bez potrzeby jakiegokolwiek głównego serwera/Home Assistanta.
Wstęp
Sercem projektu jest moduł WB2S (BK7231T):
Wyprowadzenia (z dokumentacji Tuya):
| Pin No. | Symbol | I/O type | Function | 1 | VBAT | P | Power supply pin (3.3 V), which is connected to the VBAT pin on the internal IC | 2 | PWM2 | I/O | Common GPIO, which is connected to the P8 pin on the internal IC | 3 | GND | P | Power supply reference ground pin | 4 | PWM1 | I/O | Common GPIO, which is connected to the P7 pin on the internal IC | 5 | 1RX | I/O | UART1_RXD, which is used as a user-side serial interface pin and is connected to the P10 pin on the internal IC | 6 | PWM0 | I/O | Common GPIO, which is connected to the P6 pin on the internal IC | 7 | 1TX | I/O | UART1_TXD, which is used as a user-side serial interface pin and is connected to the P11 pin on the internal IC | 8 | AD | AI | ADC pin, which is connected to the P23 pin on the internal IC | 9 | PWM4 | I/O | Common GPIO, which is connected to the P24 pin on the internal IC | 10 | CEN | I | Low-level reset, high-level active (internally pulled high) Docking IC-CEN | 11 | PWM5 | I/O | Common GPIO, which is connected to the P26 pin on the internal IC |
Moduł wybrałem gdyż już takich kilka miałem (otrzymałem od użytkownika który wymienił je na ESP w urządzeniach smart) oraz dlatego, że potrzebuję platform do testowania mojego firmware:
https://github.com/openshwprojects/OpenBK7231T_App
Chciałem mieć jakąś platformę do testowania nowych peryferiów, z tego powodu zebrałem w jeden projekt to co miałem z części i tak powstał ten zegar.
Oprócz peryferiów na pokładzie jest zasadniczo tylko regulator LDO 3.3V, tutaj MIC29150 3.3WU, chociaż zwykły AMS1117-3.3V też by pasował.
Wgranie wsadu
Do wgrania OBK użyłem:
https://github.com/openshwprojects/BK7231GUIFlashTool
Wszystko wedle instrukcji z linku, ale można też spojrzeć na poradniki flashowania na Youtube Elektroda.com:
https://www.youtube.com/@elektrodacom
Prototyp
Prototyp wykonałem jeszcze na WB3S wlutowanym w podstawę NodeMCU:
Wszystko jest podłączone poprzez sterowniki OBK, które są konfigurowalne i można je skryptować językiem skryptowym OBK bez rekompilacji wsadu.
Obudowa, płytka
Obudowę postanowiłem wydrukować na drukarce 3D, mojej Ender 3 Pro, z filamentu PLA. Płytkę zrobiłem partyzancko, z prototypowej/wierconej. Zacznijmy od płytki. Oto WB2S jeszcze z kabelkami od płytki stykowej:
Potem te kabelki odlutowałem i przylutowałem mu nóżki:
Wszystko fajnie weszło w płytkę:
Te płytki wygodnie się lutuje, tylko trzeba dbać o to by temperatura była niska, inaczej odpadają pola lutownicze:
Mój regulator LDO, dość mało znany, MIC29150 3.3WU, i to w obudowie SMD, ale dałem radę:
Ciąg dalszy, jak to niektórzy nazywają, "rzeźby". Wyprowadzenia GPIO:
W trakcie prac powstała też mapa GPIO - inaczej łatwo będzie można się zgubić przy serwisowaniu konstrukcji w przyszłości:
Dodatkowe pady, znajdujące się na "plecach" WB2S, też pozwoliłem sobie wyprowadzić. Port UART2 może się przydać, chociażby w roli zwykłego GPIO:
Potem ruszyły prace nad obudową. Zacząłem od zwymiarowania wyświetlacza:
Projekt powstawał w Blenderze, obudowa będzie dwuczęściowa...
Testowa przymiarka do obudowy, część obudowy z wyświetlaczem nie jest tutaj pełna:
W idealnym świecie nie trzeba by doklejać plastikowych dystansów na obudowę, tylko je się uwzględnia w projekcie 3D, ale to tylko prototyp. Może w następnej wersji zrobię pod to dedykowane PCB.
Znowu przymiarka:
Pierwsze testy:
Prawie kompletny zestaw obudowy, jedynie bez tylnej ścianki. Jedna część wsuwa się w drugą. Wyświetlacz trzyma się bazy a góra się na niego nasuwa.
Konfiguracja OpenBeken
Mój firmware zaprojektowany jest tak, by można było zrobić dużo bez programowania, więc konfiguracja urządzenia sprowadza się do wyboru ról pinów:
Na P6 jest DHT11, jego powiązane kanały to 1 (na temperaturę) i 2 (na wilgotność).
Na P23 jest ADC (fotorezystor, a właściwie fotorezystor i zwykły rezystor tworzący dzielnik napięcia), powiązany kanał to kanał 0. Ten fotorezystor posłuży do regulacji jasności wyświetlacza w zależności od zewnętrznego oświetlenia.
Na P24 jest odbiornik IR.
Wyniki pomiarów widać na głównym panelu WWW urządzenia:
Dodatkowo urządzenie jest oskryptowane w autoexec.bat. Skrypt włącza sterownik MAX72XX, startuje NTP, uruchamia też sterownik zegara, oraz pozwala na kontrolę innych urządzeń poprzez pilot IR - pośredniczą w tym żądania GET (komenda SendGet):
startDriver MAX72XX
MAX72XX_Setup 0 1 26
startDriver NTP
startDriver MAX72XX_Clock
ntp_timeZoneOfs 2
Poniższy fragment tworzy aliasy dla komend sterujących innymi urządzeniami:
alias my_ledStrip_off SendGet http://192.168.0.200/cm?cmnd=POWER%20OFF
alias my_ledStrip_plus SendGet http://192.168.0.200/cm?cmnd=backlog%20POWER%20ON;add_dimmer%2010
alias my_ledStrip_minus SendGet http://192.168.0.200/cm?cmnd=backlog%20POWER%20ON;add_dimmer%20-10
alias main_switch_off SendGet http://192.168.0.159/cm?cmnd=POWER%20OFF
alias main_switch_on SendGet http://192.168.0.159/cm?cmnd=POWER%20ON
alias my_send_style_cold SendGet http://192.168.0.210/cm?cmnd=backlog%20CT%20153;%20POWER%20ON
alias my_send_style_warm SendGet http://192.168.0.210/cm?cmnd=backlog%20CT%20500%20POWER%20ON
alias my_send_style_red SendGet http://192.168.0.210/cm?cmnd=backlog%20color%20FF0000%20POWER%20ON
alias my_send_style_green SendGet http://192.168.0.210/cm?cmnd=backlog%20color%2000FF00%20POWER%20ON
alias my_send_style_blue SendGet http://192.168.0.210/cm?cmnd=backlog%20color%200000FF%20POWER%20ON
alias my_send_style_plus SendGet http://192.168.0.210/cm?cmnd=backlog%20POWER%20ON;add_dimmer%2010
alias my_send_style_minus SendGet http://192.168.0.210/cm?cmnd=backlog%20POWER%20ON;add_dimmer%20-10
Poniższy fragment mapuje zdarzenia IR na utworzone aliasy/komendy:
// 1
addEventHandler2 IR_Samsung 0x707 0x4 my_ledStrip_off
// 2
addEventHandler2 IR_Samsung 0x707 0x5 my_ledStrip_plus
// 3
addEventHandler2 IR_Samsung 0x707 0x6 my_ledStrip_minus
// 4
addEventHandler2 IR_Samsung 0x707 0x8 main_switch_off
// 5
addEventHandler2 IR_Samsung 0x707 0x9 main_switch_on
// 6
addEventHandler2 IR_Samsung 0x707 0xA startScript autoexec.bat next_light_style
// 7
addEventHandler2 IR_Samsung 0x707 0xC my_send_style_plus
// 8
addEventHandler2 IR_Samsung 0x707 0xD my_send_style_minus
// stop autoexec execution here
return
Poniższy fragment to przełącznik stylów oświetlenia:
// this is function for scrolling light styles
next_light_style:
// add to ch 10, wrap within range [0,5]
addChannel 10 1 0 5 1
// start main switch
//main_switch_on
if $CH10==0 then my_send_style_cold
if $CH10==1 then my_send_style_warm
if $CH10==2 then my_send_style_red
if $CH10==3 then my_send_style_green
if $CH10==4 then my_send_style_blue
Home Assistant Discovery poprawnie paruje to urządzenia z HA, bez potrzeby pisania ani jednej linijki kodu Yaml:
Galeria
Kilka fotek z końcowego działania urządzenia:
Przemiennie pokazywany jest bieżący czas z Internetu oraz pomiary z DHT11.
Teraz widzę małą literówkę, ale może nikt się nie zorientuje... nie wpływa ona na działanie.
Podsumowanie
To tylko prototyp, ale myślę, że jest w pełni funkcjonalny i dobrze spełnia swoją rolę. Płytki pod niego nie robiłem, ale rozpiska pinologii mojej "rzeźby" w pełni starczy do serwisowania, jak również obudowa w bieżącej formie zdaje egzamin. W wolnej chwili można by zrobić też już "wersję oficjalną", już z zaprojektowaną pod nią płytką oraz z mocowaniami PCB uwzględnionymi już na wydruku 3D. Będę się musiał nad tym zastanowić, może coś zaprojektuję w Eagle i zamówię w Chinach z 5/10 sztuk w najtańszych widełkach cenowych (10cm na 10cm), albo sam coś wytrawię, ale o to już innym razem. Grunt, że front raczej prezentuje się dobrze i daje niezły efekt zarówno w dzień, jak i w nocy.
Warto tu też podkreślić, że cały gadżet pozwala mi użyć pilota do sterowania dowolną ilością urządzeń w pokoju bez Home Assistant. Projekt odbiera sygnał IR a potem wykonuje zapytanie GET do danego urządzenia OBK lub Tasmoty. HA tutaj nie jest potrzebny, chociaż jeśli zechcę go użyć, to mogę po prostu w momencie odebrania zdarzenia IR przekazywać je dalej na MQTT... możliwości są bardzo duże.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
