HubScreen – podsumowanie projektu

Wstęp

Projekt HubScreen, pozwalający na szybkie poranne sprawdzenie prognozy pogody oraz drogi do pracy, zakończony 🙂

Po tygodniach prac i zmian udało się uzyskać efekt widoczny na poniższych zdjęciach:

Ekran podczas normalnej pracy
Czego normalnie nie widać 😉

Zmiany względem pierwotnego planu

Ekran miał wisieć w przedpokoju – niestety ilość elementów przyklejona na gorąco nie pozwala na powieszenie w dedykowanym miejscu. Konieczne będzie wykonanie obudowy na drukarce 3D jak już się którejś dorobię 😉

Oszczędzanie energii miało działać w oparciu o czujkę PIR – niestety z racji umieszczenia ekranu w salonie niemożliwym było wykorzystanie czujki PIR, bo byłaby aktywowana przez każdą przebywającą tam osobę. Z tego powodu postanowiłem zamienić czujkę na przycisk, który umieściłem w kartoniku. Dzięki temu ekran uruchamia się po wciśnięciu przycisku (kiedyś popracuję nad estetyką tego rozwiązania) i wyłącza się po minucie bezczynności (możliwe to było poprzez włączanie i wyłączanie wyjścia HDMI za pomocą narzędzia vcgencmd i manipulacji parametru display_power – szczegóły w kodzie źródłowym aplikacji PIRScreenControl).

Miała zostać wykorzystana przeglądarka Chromium – okazało się, że wydajność RPi Zero WH jest daleka od oczekiwań i w przypadku przeglądarki Chromium cała strona ulegała zawieszeniu po pewnym czasie działania. Dodatkowo opracowałem aplikację, która na podstawie stanu wyjścia HDMI minimalizowała lub maksymalizowała okno przeglądarki Chromium (w opraciu o xdotool), a skrypty JS strony WWW zatrzymywały lub wznawiały odświeżanie iframe’ów w zależności od stanu okna, ale niestety taka operacja była bardziej wymagająca dla RPi niż nicnierobienie. Ostatecznie po uruchomieniu systemu otwieram stronę WWW w trybie pełnoekranowym przeglądarki surf i pomimo opóźnienia (bazując na wyświetlanym zegarze w JS) kilku sekund całość działa w sposób akceptowalny. Gdybym mógł dograć do przeglądarki uBlock’a to zapewne działałoby to lepiej, ale nie widziałem takiej możliwości, więc muszę poczekać aż wgram sobie Pi-hole’a na domowy router.

Typowe zużycie zasobów podczas pracy ekranu

Dodatkową energooszczędność (i zabezpieczenie przed awaryjną elektroniką z Chin 😉 ) uzyskuję dzięki inteligentnemu gniazdku, które o północy się wyłącza i włącza z rana, gdy przychodzi pora do wstawania.

A więc jak to ostatecznie działa?

RPi po uruchomieniu systemu wyłącza wyjście HDMI (a więc przy okazji ekran LCD) oraz otwiera przeglądarkę internetową ze stroną internetową znajdującą się na lokalnym serwerze Apache. W ramach tej strony wyświetlane są 3 elementy:

  • Prognoza pogody Google – iframe z wyszukiwarką Google dla hasła „pogoda Gdańsk”. Po wszystkim iframe jest odpowiednio manipulowany, aby wyświetlać na ekranie tylko prognozę pogody.
  • Trasę dojazdu Google Mapy – iframe z Mapą Google wytyczającą najszybszą trasę pomiędzy dwoma punktami. Darmowy iframe można uzyskać poprzez wyznaczenie trasy w zwykłych Mapach Google, wyświetlenie szczegółów jednej z dostępnych tras, a następnie wybranie opcji umieszczania mapy w postaci iframe’a.
  • Godziny odjazdów z wybranego przystanku autobusowego – tabela generowana dzięki projektowi ztmGdanskDepartureBoardParser.

Do włączenia ekranu wykorzystywany jest zwykły przycisk monostabilny NO, którego stan jest odczytywany dzięki przerwaniom pochodzących z biblioteki wiringPi.

Podczas bardzo prostych pomiarów okazało się, że dziennie ekran zużywa ok. 60-70 MB transferu internetowego i 0.01-0.02 kW energii (chociaż wartość jest tak niska, że nie wiem czy nie jest to błąd pomiaru).

Wykorzystany sprzęt i poniesione koszty

  • Ekran LCD Samsung LTN156AT01-U01 – bezpłatnie (z elektrośmieci po starym laptopie)
  • Kontroler ekranu LCD – ~75 zł (Aliexpress)
  • Raspberry Pi Zero WH – 59,90 zł (Botland)
  • Przewód miniHDMI <-> HDMI – 19,90 zł (Komputronik)
  • Zasilacz 12 V 5 A 60 W – 19,50 zł (Allegro)
  • Przetwornica step-down LM2596 3,2-35V 3A Arduino – 3,79 zł (Allegro)
  • Radiatory – ~1,83 zł (Aliexpress)

RAZEM: ~179,92 zł

Kody źródłowe i opracowane pliki

Kody źródłowe i opracowane pliki

PIRScreenControl

Wnioski

  • Raspberry Pi Zero ZH nie nadaje się do pracy z GUI i stronami WWW bazującymi na skryptach JavaScript – do mojego zastosowania RPi działało „na styk”, ale z rozbudową projektu mogą w przyszłości być problemy. Zapewne wystarczyłoby opracowanie aplikacji przetwarzających i/lub prezentujących w prostszy sposób potrzebne informacje, ale wtedy potrzebowałbym chmury Google, a to już nie byłoby darmowe jak w obecnej postaci 😉
  • Układ SMD LM317 w obudowie TO-252, który podebrałem z dawnego robota Minisumo nie nadaje się do zasilania RPi (zamiana 12 V DC na 5 V DC) ze względu na problemy z oddawaniem ciepła (nawet z radiatorem) – niby problemów z działaniem nie było, ale temperatura pracy na zbyt długo nie pozwoliłaby mi się nacieszyć projektem, więc LM317 zamieniłem na LM2596.

Projekt chciałbym w przyszłości rozbudować o obsługę czujników temperatury i otwartych okien na WiFi/BT, ale pewnie trzeba będzie wszystko zacząć od wymiany RPi na mocniejszą wersję.