logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zegar/kalendarz/termometr/higrometr/odbiornik IR BK7231T MAX7219 DHT11

p.kaczmarek2 30 Sie 2024 10:25 2055 3
  • Prototyp zegara LED matrycowego z wyświetlaczem w czerwonej obudowie.
    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):
    Schemat wymiarów i wyprowadzeń modułu WB2S.
    Wyprowadzenia (z dokumentacji Tuya):
    Pin No.SymbolI/O typeFunction
    1VBATPPower supply pin (3.3 V), which is connected to the VBAT pin on the internal IC
    2PWM2I/OCommon GPIO, which is connected to the P8 pin on the internal IC
    3GNDPPower supply reference ground pin
    4PWM1I/OCommon GPIO, which is connected to the P7 pin on the internal IC
    51RXI/OUART1_RXD, which is used as a user-side serial interface pin and is connected to the P10 pin on the internal IC
    6PWM0I/OCommon GPIO, which is connected to the P6 pin on the internal IC
    71TXI/OUART1_TXD, which is used as a user-side serial interface pin and is connected to the P11 pin on the internal IC
    8ADAIADC pin, which is connected to the P23 pin on the internal IC
    9PWM4I/OCommon GPIO, which is connected to the P24 pin on the internal IC
    10CENILow-level reset, high-level active (internally pulled high) Docking IC-CEN
    11PWM5I/OCommon 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:
    Prototyp urządzenia z modułem WiFi, wyświetlaczem LED i czujnikami na płytce stykowej
    Wszystko jest podłączone poprzez sterowniki OBK, które są konfigurowalne i można je skryptować językiem skryptowym OBK bez rekompilacji wsadu.
    Prototypowy moduł z wyświetlaczem LED podłączony do płytki stykowej

    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:
    Moduł WiFi z przylutowanymi kablami na stanowisku do lutowania.
    Potem te kabelki odlutowałem i przylutowałem mu nóżki:
    Widok płytki drukowanej z przylutowanym modułem elektronicznym i przewodami. Moduł WB2S z przylutowanymi przewodami na drewnianym stole.
    Wszystko fajnie weszło w płytkę:
    Moduł WB2S na płytce prototypowej z przylutowanymi nóżkami.
    Te płytki wygodnie się lutuje, tylko trzeba dbać o to by temperatura była niska, inaczej odpadają pola lutownicze:
    Prototyp płytki z przytrzymaniem w dwóch uchwytach
    Mój regulator LDO, dość mało znany, MIC29150 3.3WU, i to w obudowie SMD, ale dałem radę:
    Moduł MIC29150 3.3WU na drewnianej powierzchni Moduł WiFi WB2S na prototypowej płytce drukowanej z przylutowanymi elementami Płytka prototypowa z przylutowanymi elementami elektronicznymi
    Ciąg dalszy, jak to niektórzy nazywają, "rzeźby". Wyprowadzenia GPIO:
    Płytka drukowana w trakcie lutowania z przewodami i adapterem pomocniczym. Płytka prototypowa z modułem WB2S i elementami elektronicznymi na biurku warsztatowym
    W trakcie prac powstała też mapa GPIO - inaczej łatwo będzie można się zgubić przy serwisowaniu konstrukcji w przyszłości:
    Samodzielnie wykonana płytka prototypowa z elementami elektronicznymi.
    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:
    Zbliżenie na moduł WB2S z przylutowanymi przewodami na płytce prototypowej Płytka prototypowa z komponentami elektronicznymi przymocowana do uchwytu warsztatowego.
    Potem ruszyły prace nad obudową. Zacząłem od zwymiarowania wyświetlacza:
    Płytka z modułami LED na drukarce 3D
    Kadr przedstawia części obudowy wydrukowanej na drukarce 3D Ender 3 Pro.
    Projekt powstawał w Blenderze, obudowa będzie dwuczęściowa...

    Testowa przymiarka do obudowy, część obudowy z wyświetlaczem nie jest tutaj pełna:
    Przylutowana płytka prototypowa z modułem WB2S i podłączeniami kablowymi
    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:
    Prototyp urządzenia DIY z modułem WB2S na płytce prototypowej Prototyp urządzenia IoT z komponentami elektronicznymi i obudową 3D Prototyp projektu DIY z modułem WB2S i wyświetlaczem LED
    Pierwsze testy:
    Wyświetlacz LED z pomiarem temperatury w obudowie z drukarki 3D. Matrycowy wyświetlacz LED z godziną 19:40 w białej obudowie.
    Prototyp wyświetlacza LED matrycowego z widocznymi literami
    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.
    Biała obudowa wydrukowana na drukarce 3D, składająca się z dwóch części, leży na drewnianym blacie.

    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:
    Interfejs konfiguracji urządzenia WB2S_MAX_DHT_IR_Clock z przypisanymi rolami pinów. Interfejs konfiguracji urządzenia z wyprowadzeniami GPIO, pokazujący ustawienia i funkcje.
    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:
    Interfejs użytkownika zegara WB2S_MAX_DHT_IR_Clock z danymi sensorów
    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:
    Zrzut ekranu panelu Home Assistant z różnymi urządzeniami i stanem pogody.


    Galeria
    Kilka fotek z końcowego działania urządzenia:
    Prototyp zegara LED matrycowego z wyświetlaczem w czerwonej obudowie. LED matrycowy zegar z czerwoną obudową Prostokątne urządzenie z białą obudową i czerwonym wyświetlaczem LED pokazującym
    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ę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
  • #3 21209205
    p.kaczmarek2
    Moderator Smart Home
    Dzięki, to jeszcze dodam garść luźnych informacji.
    Projekt kompiluje się na następujących platformach:
    Fragment listy kompatybilności układów w projekcie OpenBK7231T_App z odnośnikami do zasobów.
    Ale IR może tam brakować, bo trzeba by podpiąć przerwanie 50us do naszego portu IRLibrary.

    Build OpenBeken z Githuba jednakże projektu z miejsca nie ogarnie, bo trzeba włączyć do kompilacji sterowniki wyświetlacza MAX, szczegóły tutaj:
    System online builds OpenBeken - kompilacja firmware dla wszystkich platform na Github
    Nieco podobny projekt uruchamiałem tutaj, też na WB2S, ale innym wyświetlaczu:
    Zegar z wyświetlaczem temperatury/wilgotności i czasem z internetu na WB2S - część 1
    Oraz tutaj na LN882H:
    DIY "płytka" testowa LN882H z 7-segmentowym wyświetlaczem z elektrośmieci

    Można by powiedzieć, że specjalnie sobie utrudniam używając "egzotycznych" modułów WiFi.
    Pomogłem? Kup mi kawę.
  • #4 21209947
    TechEkspert
    Redaktor
    Ładny efekt końcowy, zastanawiam się czy schowanie wyświetlacza za mleczną plexą dało by efekt wygładzenia wyświetlanych znaków.
REKLAMA