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. Zatem użyłem będącego 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. Wystarczą 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ć przy pomocy Banana Pi na ekran LCD 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. Raspberry Pi i ekran LCD na i2c
  3. Banana Pi i urządzenia i2c
  4. Skrypt w Pythonie (dead link)
  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.

Solaar – parowanie urządzeń bezprzewodowych Logitech

Urządzenie bezprzewodowe podłączane do komputera składa się z właściwego urządzenia, oraz odbiornika, podłączanego do komputera. Ten ostatni jest niewielki, przez co łatwo go zgubić. Bywa też, że w środowisku, gdzie podobnych urządzeń jest wiele, urządzenia zostaną zamienione. Z racji częstego przenoszenia, niewielkich rozmiarów urządzeń i braku elementów charakterystycznych, opisywany problem dotyczy raczej myszy bezprzewodowych.

Mysz bezprzewodowa Logitech

Źródło: https://www.mwave.com.au/

Zatem tam, gdzie jest sporo bezprzewodowych urządzeń podobnego typu, na przykład w biurach, często zdarza się, że stopniowo pojawiają się zdekompletowane lub przemieszane zestawy bezprzewodowe. Teoretycznie niesprawne, ponieważ szybki test polegający na włożeniu nowej baterii i podłączeniu urządzenia nie da żadnych efektów. Urządzenie nie zadziała ze względu na nieprawidłowe parowanie urządzenia z odbiornikiem.

Jak dowiedziałem się niedawno podczas rozmowy o przydasiach, użytkownicy systemu Linux mają rozwiązanie na tego typu problemy. Przynajmniej dla wielu urządzeń firmy Logitech. Istnieje bowiem program Solaar, czyli narzędzie pozwalające na zarządzanie parowaniem urządzeń bezprzewodowych tej firmy.

W przypadku Ubuntu i Debiana wystarczy zainstalować pakiet solaar, a następnie uruchomić program. Użycie jest bardzo proste, wystarczy włączyć urządzenie, które ma być sparowane.

Poza umożliwieniem parowania z dowolnym odbiornikiem tego samego typu, daje ono – na niektórych urządzeniach – dostęp funkcji, do których standardowo nie ma dostępu. Praktycznie dla wszystkich urządzeń pozwala na odczyt stanu baterii (akumulatora!). Dzięki temu można zawczasu przygotować się do wymiany i uniknąć przykrej niespodzianki w postaci niespodziewanego rozładowania.

Dodatkowo program można teoretycznie wykorzystać do zmniejszenia ilości podłączonych urządzeń USB. Do jednego odbiornika można bowiem przypisać kilka urządzeń, np. mysz i klawiaturę, o ile korzystają z odbiornika tego samego typu. Nie testowałem jednak konfiguracji z podłączonymi jednocześnie kilkoma urządzeniami.

Tak czy inaczej, posiadając „niesprawne” lub zdekompletowane urządzenie firmy Logitech, niekoniecznie trzeba od razu je wyrzucać. Może się ono jeszcze komuś przydać. Jeśli istnieją podobne rozwiązania dla innych systemów, dajcie znać w komentarzach.

Głośniki do laptopa Modecom MC-2009

W pracy, na poprzednim stanowisku, mieliśmy w pokoju głośniki do puszczania muzy. Były to jakieś głośniki marki Logitech, kubaturowo spore, bo każdy miał objętość zbliżoną do dwóch standardowych kubków na kawę. To co było w nich dobre, to całkiem przyjemne brzmienie, szczególnie w porównaniu do głośników wbudowanych w laptopa. Te ostatnie do puszczania muzy na całe pomieszczenie nie nadają się zupełnie. Nawet jakieś doły było słychać, chociaż oczywiście mówimy o odpowiedniku słuchania radia w pracy, nie audiofilii.

Przy przeprowadzce zauważyłem, że owe głośniki nie posiadają dedykowanego zasilacza. Miały tylko jeden kabel USB podłączany do laptopa, który – jak się okazało – zapewniał i zasilanie, i transmisję dźwięku. Znaczy danych. Rozwiązanie mi się spodobało. Stwierdziłem, że coś podobnego przydało by mi się w domu. Bo jednak sensownego rozwiązania audio w domu nie dorobiłem się, a jakość dźwięku z tych głośników z pracy w porównaniu do laptopowych to niebo a ziemia.

Dokładnie tego modelu nie znalazłem (OK, może mieć ładnych kilka lat), całkiem sporo było podobnych, ale dość drogich. Krótkie poszukiwania w sklepach internetowych pokazały jednak, że jest sporo małych (mniejszych od wyżej opisanych Logitechów) głośników do laptopa w zupełnie śmiesznych cenach. Technika poszła do przodu, głośniki przenośne różnej maści potrafią robić robotę zaskakująco dobrze. Przynajmniej w porównaniu z laptopowymi. Stwierdziłem, więc, że zaryzykuję.

Większość małych ma jednak pewną wadę – zajmują dwa porty. Do laptopa podłączany jest kabel USB jako źródło zasilania oraz jack audio jako źródło dźwięku. Jeśli czasem przekładamy laptopa, to trzeba odłączać dwie wtyczki, zamiast jednej. Szukałem więc czegoś, co ma tylko jedną wtyczkę i… tak znalazłem głośniki Modecom MC-2009.

Głośniki Modecom MC-2009
Głośniki Modecom MC-2009. Źródło: https://www.manualsearcher.com/

Kosztowały grosze (chyba jakoś dwukrotność najtańszych; 20 zł ), więc natychmiast kupiłem. Przyszły dość szybko, pierwsze co mnie zaskoczyło, to waga. Zdecydowanie cięższe, niż przypuszczałem. Zaliczam to na plus. I wskazuje na solidne bebechy, i nie będą latać po biurku, szczególnie, że koty potrafią to i owo trącić, a po biurku chodzą. Z niefajnych rzeczy – kable wyglądają na umiarkowanie trwałe./

W porównaniu do wbudowanych laptopowych znacznie lepszy dźwięk, ot sama średnica głośnika robi robotę. Oczywiście nie ma to porównania do normalnych głośników. Natomiast jeśli ktoś używa wbudowanych i niespecjalnie ma miejsce lub potrzebuje przenośnych (ale na kablu, bo oczywiście są też rozwiązania na bluetooth, ale trzeba je jakoś zasilać) – polecam.

Ciekawostka linuksowo-DIY. Po włożeniu identyfikują się następująco:

hid-generic 0003:18C3:6255.0013: input,hidraw0: USB HID v1.00 Device [Elite Silicon USB Audio Device] on usb-0000:00:1d.0-1.3/input2

Sama karta (bo de facto jest to karta dźwiękowa na USB) jest dość popularna. Można ją znaleźć w znacznie lepszych głośnikach, więc gdyby siadły, to można wykorzystać do budowy czegoś ciekawszego.