Zapraszam na pierwszą część konstrukcji DIY wykonanej z elektrośmieci. Będzie to prosty zegar/kalendarz/miernik temperatury/wilgotności oparty o wyświetlacz ze starego radia samochodowego, bazujący na module WB2S od czytelnika i zasilany z zasilacza ze starego odtwarzacza DVD. Na WB2S postawię i skonfiguruję OpenBeken, które wzbogacę też o sterownik dla wspomnianego wyświetlacza oraz funkcjonalność przesuwania tekstu. Wszystko będzie mogło współpracować z Home Assistant po MQTT.
Pomiar temperatury i wilgotności odbędzie się na DHT11, który miałem po poprzednim projekcie.
Pochodzenie wyświetlacza, pierwsze jego uruchomienie
Historię tego wyświetlacza opisałem w temacie:
Wnętrze radia samochodowego, uruchomienie LCD z PT6523 na Arduino
Moduł gotów do akcji:
Zasilanie konstrukcji
Chyba część forumowiczów zwróciła uwagę na to, że czasem umieszczam krótkie tematy o złomowaniu sprzętów w dziale "Wnętrza urządzeń". Nie będzie zatem raczej zaskoczeniem fakt, że użyłem zasilacza ze starego odtwarzacza DVD bądź podobnego sprzętu:
Na samym początku chciałem użyć 5V z USB, ale nie miałem akurat pod ręką przetwornicy step up, a podświetlenie wyświetlacza wymaga nieco wyższego napięcia, około 11V przy prądzie 14mA:
Użyty moduł WiFI
Czasami ludzie wysyłają mi moduły BK7231 które zastąpili klasycznymi modułami opartymi o ESP8266. Najwięcej mam popularnych CB2S i WB2S, nieco też CB3S i WB3S (ale te trudniej wylutować, więc dostaję ich mniej), więc wybór padł na WB2S:
Miałem już na niego wgrany OpenBeken.
Kontrola podświetlenia
Do tego starczył tylko tranzystor i dwa rezystory. BK7231 kontroluje jego bazę, którą podłączyłem do jednego z pinów PWM:
Po stronie OBK skonfigurowałem pin PWM, dla OBK jest to taka sama konfiguracja jak jednokolorowej lampki LED lub paska:
Sterownik PT6523
Sterownik PT6523 dla OpenBeken napisałem od 0, natomiast czcionkę bazowałem na gotowym przykładzie z Githuba, by nie musieć samodzielnie testować który bit odpowiada za który fragment.
Zupełnie osobno napisałem też sterownik TextScroller, który służy do przewijania tekstu. Całość działa w ten sposób, że TS przewija tekst i wysyła go potem do aktywnego sterownika wyświetlacza, więc ta metoda wspiera wiele różnych wyświetlaczy.
Szczegóły są na moim repo:
https://github.com/openshwprojects/OpenBK7231T_App
Skrypt autoexec.bat OpenBeken
Teraz najciekawsze - czyli to, co widzi użytkownik. Uruchomienie sterownika nie wymaga rekompilacji firmware. Wszystko jest skryptowalne. Oto, jak to u mnie wygląda:
startDriver PT6523
startDriver TextScroller
startDriver NTP
led_enableall 1
again:
TS_Clear
TS_Print 0 2 $hour 1
TS_Print 2 1 "-"
TS_Print 3 2 $minute 1
TS_Print 5 2 " "
TS_Print 7 4 $year 1
TS_Print 11 1 "-"
TS_Print 12 2 $month 1
TS_Print 14 1 "-"
TS_Print 15 2 $mday 1
delay_s 10
goto again
Powyższy skrypt najpierw uruchamia sterowniki, osobno ten konkretny wyświetlacz co mam oraz osobno uniwersalny TextScroller, oraz dodatkowo sterownik NTP do pobrania czasu z internetu.
Następnie załącza podświetlenie, które dla OBK jest sterowane tak jak pasek LED.
Potem, już w pętli, odświeżany jest wyświetlacz poprzez komendę TS_Print i użycie odpowiednich specjalnych słów kluczowych pozwalających na dostęp do parametrów czasu i daty.
Te wszystkie słowa kluczowe były już gotowe w OpenBeken, więc po prostu składałem całość z gotowych elementów.
Nieco później skrypt ulepszyłem. Teraz uwzględnia on też odczyty z DHT11. DHT11 jest podłączony na jednym z wolnych pinów WB2S oraz skonfigurowany tak, by zapisywać odczyty do kanałów 2 i 3:
startDriver PT6523
startDriver TextScroller
startDriver NTP
led_enableall 1
again:
TS_Clear
TS_Print 0 2 $hour 1
TS_Print 2 1 "-"
TS_Print 3 2 $minute 1
TS_Print 5 2 " "
TS_Print 7 4 $year 1
TS_Print 11 1 "-"
TS_Print 12 2 $month 1
TS_Print 14 1 "-"
TS_Print 15 2 $mday 1
TS_Print 17 3 " "
TS_Print 20 2 $CH3 1
TS_Print 22 1 "H"
setChannel 10 $CH2/10
TS_Print 23 1 " "
TS_Print 24 2 $CH10 1
TS_Print 26 1 "C"
// Ch 2 - temperature, Ch 3 - humidity
delay_s 10
goto again
Powyższy skrypt można zmodyfikować wedle uznania.
Efekty:
Poziom podświetlenia możemy samodzielnie zmodyfikować dla najlepszego kontrastu. W razie potrzeby można by też spróbować oskryptować go tak, by reagował na poziom oświetlenia w pokoju.
Podsumowanie
To była pierwsza, "elektroniczna" część konstrukcji. W drugiej części zajmę się obudową.
Utworzony układ działa zadowalająco, pomiary z DHT11 są również przesyłane do Home Assistant (dzięki automatycznemu HASS Discovery w OBK), a również w razie potrzeby mogę przesyłać z HA wiadomości na wyświetlacz poprzez MQTT.
Home Assistant widzi automatycznie również kontrolę podświetlenia (ON/OFF oraz dobór jasności), jest to z poziomu MQTT tożsame z kontrolą np. paska LED.
Układ można by ulepszyć, chociażby tak by zasilany był z 5V z USB i być może taką modyfikacją też wprowadzę. Został chyba jeden wolny pin PWM WB2S, można by go do tego wykorzystać... ale o tym w kolejnej części.
Oczywiście, w zależności tylko od tego ile mamy wolnego GPIO, do takiego modułu z OBK można podłączyć dużo urządzeń sterowalnych z Home Assistant, przykładowo przekaźników lub czujników (np. oświetlenia), a nawet odbiornik IR, ale tym razem nie miałem takiej potrzeby.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
