Banana Pi i ekran LCD podłączony po i2c

Dawno temu NAS został wyłączony, ale zmierzam do jego reaktywacji. Po głowie chodziło mi zamknięcie wszystkiego (zasilacz, dysk, Banana Pi) w zgrabnej, tym razem dedykowanej do elektroniki, obudowie.

Trochę z myślą o programie do przełączania łącza internetowego, a trochę o pomiarze temperatury przy pomocy komputera, przyszedł mi pomysł, by sygnalizować stan różnych rzeczy w sposób nie wymagający łączności sieciowej, czyli najdoskonalszy, analogowy: migając diodą. Oczywiście szybko doszedłem do wniosku, że jedna dioda nie wystarczy, wbudowane diody to trochę mało, ale przecież w Raspbery Pi i analogach mamy GPIO, możemy tych LEDów podłączyć kilka…

Nie wiem jak dokładnie doszło do tego, ale podczas poszukiwań szybko wpadłem na ekrany LCD z serii 1602, które również można podłączyć przez GPIO. Skoro tak, to pomyślałem, że nie ma się co ograniczać. Zamiast prostej sygnalizacji stanu i konieczności pamiętania która kombinacja co oznacza można po prostu wyświetlać dowolny tekst. Niezbyt długi, ale nadal jest to znacznie większa ilość informacji, niż z kilku czy nawet kilkunastu LEDów. W dodatku cena takiego jest bardzo przystępna, czego o różnych ekranach dotykowych czy e-ink powiedzieć nie można.

Pierwotnie chciałem podłączyć LCD do Orange Pi zero, ale niestety, nie ma on pinów GPIO – są wyprowadzenia, ale trzeba by lutować, co pewnie docelowo zrobię, ale bardziej chodziło mi o sprawdzenie sterowania, a mam pod ręką Banana Pi. Gdy szukałem schematu jak podłączyć ekran do Banana Pi, natknąłem się na coś znacznie ciekawszego – wersję ekranu LCD ze sterownikiem podłączanym przez interfejs i2c. Dzięki podłączenie temu jest bardzo proste – raptem cztery przewody, nawet nie trzeba lutować, o ile używa się gotowych przewodów z końcówkami. Dodatkowo – i to najlepsza część –  całością daje się w elegancki sposób sterować za pomocą Pythona.

Efekt końcowy wygląda tak:

LCD 1602
LCD 1602 Źródło: fot. własna

Zdjęcie zrobione telefonem, po ciemku. Z tyłu płytki jest potencjometr pozwalający na regulację kontrastu. Poziom podświetlenia jest stały, można tylko włączyć i wyłączyć LED, zarówno hardware’owo (zworka), jak i programowo. Ekran LCD bierze bardzo mało prądu – przy pomocy watomierza nie udało mi się zarejestrować różnicy, czyli całość zużywa poniżej 0,1 W.

Jak to zrobić? Powtórzę instrukcje, z których korzystałem. Instalujemy dodatkowe pakiety:

apt-get install i2c-tool python-smbus

Następnie podłączamy ekran i sprawdzamy adres przy pomocy polecenia:

i2cdetect -y 1

Otrzymaną wartość należy wpisać w skrypcie (stała ADDRESS, linia 29 w przytoczonym przykładzie).

Następnie możemy sterować ekranem z poziomu języka Python. Na przykład wywołanie efektu widocznego na ekranie można zrobić przy pomocy polecenia:

python test_lcd.py "Pomiedzy bitami" "https://zakr.es/"

Gdzie test_lcd.py ma zawartość:

import sys

from i2c_lcd import *

display = lcd()
display.lcd_display_string(sys.argv[1], 1)
display.lcd_display_string(sys.argv[2], 2)

Biblioteka pozwala na dużo więcej, między innymi na własne znaki, ale tym się póki co nie bawiłem. Wyświetlony tekst pozostaje na ekranie po zakończeniu programu do momentu wpisania nowego lub skasowania poprzedniego. Jeśli do ekranu będzie dostarczone napięcie, to wyłączenie Banana Pi nie wpływa na wyświetlany tekst. Dlatego jeśli chcemy monitorować, czy nasz komputer się nie zawiesił, musimy zmieniać okresowo tekst – w innym wypadku zawartość LCD nie świadczy o niezawieszeniu się komputera.

Sterowanie włączaniem i wyłączaniem podświetlania to:

display.backlight_on(False)
display.backlight_on(True)

Wyświetlać można cokolwiek – temperaturę, zajętość dysku, opóźnienia/straty na sieci, kurs BTC (pozdro dla L.!), adres IP (po starcie!), informacje o nowych mailach…

Pozostało mi wymyślenie, w jaki sposób zrobić sensowne sterowanie. Po głowie chodzi mi demon, który będzie pobierał informacje do wyświetlenia z jakiejś kolejki, w zależności od ich priorytetu, czasu ostatniego wyświetlenia i pory dnia sterował oświetleniem i wyświetlał informacje. A może już jest coś takiego?

I garść linków pomocnych przy tworzeniu ww. rozwiązania AKA źródła:

  1. pinout Banana Pi
  2. LCD i2c dla Raspberry Pi
  3. Banana Pi i urządzenia i2c
  4. Skrypt w Pythonie
  5. Biblioteka Python do obsługi ekranów LCD po i2c

UPDATE Dla zainteresowanych kupnem – ekran z modułem do komunikacji i2c kosztuje ok. 12 zł na Allegro. Na zdjęciu jest wersja zielona, ale istnieją też wersje niebieskie, gdzie tło jest ciemne, a napisy jasne.

4 Replies to “Banana Pi i ekran LCD podłączony po i2c”

  1. Hej, a widziałeś nową odsłonę Low-Tech Magazine?
    https://solar.lowtechmagazine.com/about/

    Zastanawiam się czy czegoś podobnego sobie nie zrobić :).

    Problem jedynie jak wpiąć się do internetu, przez router wpięty do gniazdka to trochę przeczy idei. Z kolei mesh network w mojej mieścinie (40 tys.) to pewnie byłbym jedynym nodem 🙂

    Zostaje GSM ale to trzeba jakoś udostępnić na zewnątrz bo nie ma publicznego IP. Jakieś pomysły? (reverse proxy na VPS’ie?)

  2. Widziałem (ale dzięki!). Gadżetowo i jako DIY – fajne. Z drugiej strony mam wrażenie, że totalnie gubi sens i korzyści ze skali i nowych technologii. Coś jak ogrzewanie domu drewnem paląc w kozie zamiast elektrowni. Niby DIY i nie ma strat na przesyle, ale sumarycznie znacznie bardziej szkodliwe dla środowiska.

    Widziałem ciekawy wpis (niestety nie mam linka) nt. panelu solarnego, sterownika, akumulatora samochodowego i konwertera DC/AC samochodowego. Bodajże w Chicago człowiek tak żyje, bez podłączonego prądu w kawalerce. Wystarcza mu na ładowanie laptopa, telefonu, oświetlenie i IIRC podgrzanie mieszkania rano. Pewnie lodówki nie ma, a pranie na mieście, a w domu głównie śpi. Czemu wspominam o tym? Z dwóch powodów: po pierwsze, ten jego zestaw powinien pociągnąć taki serwer bezprzerwowo, ze sporym zapasem. Po drugie, sam wyliczył, że z punktu widzenia ekonomii i footprintu ekologicznego nie ma to prawdopodobnie sensu. Natomiast daje niezależność.

    Wygląd i funkcjonalność: mam dynamiczną, łatwą w obsłudze stronę, na WordPressie, z komentarzami i kolorową grafiką, bez specjalnego spinania się z optymalizacją. Główna to aktualnie 364 KB wg GTmetrix. Główna Low-Tech Magazine to 322 KB. Mniej, ale czy warto? No nie wiem. BTW idąc w statyczne strony – główna https://zakr.es/wattmeter to 24 KB. Faktem jest, że bez grafiki. Ale tak całkiem uczciwie, to Low-Tech Magazine ma komentarze. Mailem. Chyba zapomnieli uwzględnić serwer poczty w wyliczeniu. 😉
    BTW może w końcu popełnię wpis o optymalizacji WP…

    Serwowanie z domu vs serwowanie z serwerowni czy proxy na VPS – toż to odpowiednik kozy. Jak już jest VPS to lepiej umieścić stronę tamże, niż robić tunel. Albo wręcz – jeśli jest statyczna – nie cały VPS, tylko hosting typu Github pages. Nawet shared hosting na typowych serwerach, w Polsce, bez specjalnych optymalizacji ma lepszą wydajność niż 1W/website. Mówimy o różnicy o rzędy wielkości.

    Patrząc sieciowo – hosting w domu oznacza, że pakiety przechodzą przez wszystkie urządzenia ISP czytelnika strony, trafiają w „centralne punkty” sieci (czy to IXy, czy globalni ISP), potem do ISP hostującego serwer w domu, znowu wszystkie urządzenia. Tymczasem serwerownie zwykle są wpięte blisko centralnych punktów.

    Mesh także nie działa za darmo. Ma zalety typu decentralizacja czy rozproszenie, ale wymaga wielu node’ów, więc elektrycznie jest mało wydajny. Szczególnie po uwzględnieniu ilości node’ów… Podobnie jak każda łączność bezprzewodowa (także GSM) w stosunku do przewodowej, zwł. światłowodów…

  3. W sumie masz rację, u siebie pisałem jak hostuję mnmlistę (https://mnmlista.pl/offline/web/) więc Low-Tech Website serwowany przez Słońce to taka sztuka dla sztuki.

    Podobnie jest z innymi inicjatywami typu zero-waste czy weganizm, jedna osoba w 100% podążająca daną ścieżką globalnie nic nie znaczy, ale to Gandhi powiedział „Bądź zmianą, którą pragniesz ujrzeć w świecie.” więc osobiście nie mam nic przeciwko takim inicjatywom.

    Są one tym bardziej cenne, że prowokują do myślenia i kwestionują status quo, a to zawsze jest wartościowe moim zdaniem. Nawet jeśli suma summarum zostaniemy przy obecnych rozwiązaniach.

  4. Przeczytałem Twój ostatni wpis i zaliczyłem facepalma, bo Low-Tech Magazine ma dwie strony. Jedną tradycyjną, ciężką (oj, ciężką, 2,83 MB!), i dodatkowo tę „solarną”. Tu nie ma oszczędności, tylko dodatkowy, „równoległy” koszt. Ogólnie, jeśli to nie prototyp, to totalnie nie rozumiem.

    Jeśli chodzi o okresowe problemy z energią, dostępnością i ogólnie rozproszenie sieci, to polecam zerknięcie na projekt IPFS https://ipfs.io/ Prawdopodobnie można w ten sposób rozproszyć „hosting” na skalę globlalną – wystarczy, że kilka-kilkanaście osób dogada się, że serwują nawzajem swoje dane. Wtedy przerwy w działaniu pojedynczego węzła przestają mieć znaczenie, pozostaje kwestia transferu.

    BTW odnośnie Twojego ostatniego wpisu – produkty AlphaSmart nie są już produkowane. Podejrzewam, że po części wynika to ze spadku zapotrzebowania na energię zwykłych rozwiązań i poprawy ogniw. Po co męczyć się z tego typu rozwiązaniem, skoro można naładować smartfona solarem i skorzystać ze zwykłej klawiatury bluetooth?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *