Raspberry Pi Zero wewnątrz brajlowskiego wyświetlacza Handy Tech Active Star 40

Raspberry Pi Zero wewnątrz brajlowskiego wyświetlacza Handy Tech Active Star 40

Autor umieścił Raspberry Pi Zero, moduł Bluetooth i kabel wewnątrz swojego nowego brajlowskiego wyświetlacza Handy Tech Active Star 40. Wbudowany port USB zapewnia zasilanie. Powstał samodzielny komputer bezmonitorny na ARM z systemem operacyjnym Linux, wyposażony w klawiaturę i wyświetlacz brajlowski. Można go ładować/zasilac poprzez USB, w tym z powerbanku lub słonecznej ładowarki. Dlatego może działać bez dostępu do sieci elektrycznej przez kilka godzin, a nawet kilka dni.

Raspberry Pi Zero wewnątrz brajlowskiego wyświetlacza Handy Tech Active Star 40

Wymiary wyświetlaczy brajlowskich

Przede wszystkim różnią się długością linii. Urządzenia z 60 i więcej znakami są dobre do pracy z komputerem stacjonarnym, a te z 40 znakami – wygodne do zabrania razem z laptopem. Obecnie istnieją także brajlowskie wyświetlacze, które można podłączyć do smartfonów i tabletów, z długością linii wynoszącą 14 lub 18 znaków.

Dawniej wyświetlacze brajlowskie były dość masywne. Na przykład wyświetlacz z 40 znakami miał rozmiary i wagę porównywalną z 13-calowym laptopem. Teraz przy tej samej liczbie znaków są na tyle kompaktowe, że można postawić wyświetlacz przed laptopem, zamiast laptopa na wyświetlaczu.

To z pewnością lepsze, ale nadal niezbyt wygodne jest trzymanie na kolanach dwóch oddzielnych urządzeń. Kiedy pracujesz przy biurku, nie ma zastrzeżeń, ale warto przypomnieć, że laptop nazywa się laptom, i spróbować uzasadnić tę nazwę, a okazuje się, że miniaturowy wyświetlacz 40-znakowy jest jeszcze mniej wygodny.

Autor więc czekał na premierę od dawna obiecywanej nowej wersji serii Handy Tech Star. Już w 2002 roku wydano poprzedni model Handy Tech Braille Star 40, gdzie powierzchnia obudowy była wystarczająca, aby położyć na niej laptop. A jeśli nie pasuje – przewidziano wysuwaną podstawkę. Teraz ten model został zastąpiony przez Active Star 40, to praktycznie to samo, ale z zmodernizowaną elektroniką.

Raspberry Pi Zero wewnątrz brajlowskiego wyświetlacza Handy Tech Active Star 40

I wysuwana podstawka pozostała:

Raspberry Pi Zero wewnątrz brajlowskiego wyświetlacza Handy Tech Active Star 40

Ale najwygodniejsze w nowości jest zagłębienie o wymiarach zbliżonych do smartfona (zob. KDPW). Otwiera się ono poprzez przesunięcie platformy do tyłu. Trzymanie tam smartfona okazało się niewygodne, ale trzeba jakoś wykorzystać pustą przestrzeń, w której nawet przewidziano wyjście zasilania.

Pierwszą myślą autora było umieścić tam Raspberry Pi, ale gdy wyświetlacz został zakupiony, okazało się, że podstawka zasłaniała dostęp do komory. Gdyby tylko płyta była o 3 mm cieńsza...

Jednak kolega opowiedział o wydaniu Raspberry Pi Zero, które okazało się na tyle miniaturowe, że do komory można by zmieścić je w dwie… a może nawet trzy sztuki. Natychmiast został zamówiony, razem z kartą pamięci 64 GB, Bluetooth, „donglem” i kablem Micro USB. Kilka dni później wszystko to dotarło, a wzrokowi przyjaciele pomogli autorowi przygotować kartę. Wszystko od razu działało jak należy.

Co zostało zrobione

Na tylnej ścianie Handy Tech Active Star 40 znajdują się dwa porty USB do urządzeń takich jak klawiatury. Dołączona jest niewielka klawiatura z magnetycznym mocowaniem. Gdy klawiatura jest podłączona, a sam wyświetlacz działa przez Bluetooth, komputer dodatkowo rozpoznaje ją również jako klawiaturę Bluetooth.

W ten sposób, jeśli do Raspberry Pi Zero, umieszczonego w komorze smartfona, podłączyć Bluetooth-„dongla”, będzie on mógł wymieniać dane z wyświetlaczem brajlowskim przez Bluetooth za pomocą BRLTTY, a jeśli dodatkowo podłączyć klawiaturę do wyświetlacza — „malinka” będzie działać również z nią.

Ale to jeszcze nie wszystko. Sama „malinka” może uzyskiwać dostęp do Internetu przez Bluetooth PAN z każdego wspierającego to urządzenia. Autor odpowiednio skonfigurował swój smartphone i komputery w domu i w pracy, ale w przyszłości planuje dostosować jeszcze jedną „malinkę” — klasyczną, nie Zero, podłączoną do Ethernetu i innego Bluetooth-„dongla”.

BlueZ 5 i PAN

Sposób konfiguracji PAN za pomocą BlueZ okazał się nieoczywisty. Autor znalazł skrypt Pythona bt-pan (patrz poniżej), który umożliwia skonfigurowanie PAN bez GUI.

Za jego pomocą można skonfigurować zarówno serwer, jak i klienta. Otrzymując odpowiednią komendę przez D-Bus w trybie klienta, tworzy nowe urządzenie sieciowe bnep0 natychmiast po nawiązaniu połączenia z serwerem. Zwykle do przypisania adresu IP temu interfejsowi używa się DHCP. W trybie serwera BlueZ wymaga podania nazwy urządzenia mostu, do którego można dodać urządzenia do każdego klienta. Skonfigurowanie adresu dla urządzenia mostu oraz uruchomienie serwera DHCP plus maskowanie IP na moście — to zazwyczaj wszystko, co jest potrzebne.

Punkt dostępu Bluetooth PAN z Systemd

Do skonfigurowania mostu autor użył systemd-networkd:

Plik /etc/systemd/network/pan.netdev

[NetDev]
Name=pan
Kind=bridge
ForwardDelaySec=0

Plik /etc/systemd/network/pan.network

[Match]
Name=pan

[Network]
Address=0.0.0.0/24
DHCPServer=yes
IPMasquerade=yes

Teraz trzeba skłonić BlueZ do skonfigurowania profilu NAP. Okazało się, że domyślnymi narzędziami BlueZ 5.36 nie da się tego zrobić. Jeśli autor się myli, proszę go poprawić: mlang (potrafi ruszać uszami) blind (czasem ma dostęp i kwantowy) guru

Ale znalazł wiadomość w blogu i skrypt w Pythonie do wykonania niezbędnych wywołań na D-Bus.

Dla wygody autor użył usługi Systemd do uruchomienia skryptu i sprawdzenia zależności.

Plik /etc/systemd/system/pan.service

[Unit]
Description=Bluetooth Personal Area Network
After=bluetooth.service systemd-networkd.service
Requires=systemd-networkd.service
PartOf=bluetooth.service

[Service]
Type=notify
ExecStart=/usr/local/sbin/pan

[Install]
WantedBy=bluetooth.target

Plik /usr/local/sbin/pan

#!/bin/sh
# Ugly hack to work around #787480
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

exec /usr/local/sbin/bt-pan --systemd --debug server pan

Drugi plik nie byłby potrzebny, gdyby w Debiana była obsługa IPMasquerade= (patrz. #787480).

Po wykonaniu poleceń systemctl daemon-reload i systemctl restart systemd-networkd można uruchomić Bluetooth PAN poleceniem systemctl start pan

Klient Bluetooth PAN z użyciem Systemd

Część kliencka również nie jest trudna do skonfigurowania za pomocą Systemd.

Plik /etc/systemd/network/pan-client.network

[Match]
Name=bnep*

[Network]
DHCP=yes

Plik /etc/systemd/system/pan@.service

[Unit]
Description=Bluetooth Personal Area Network client

[Service]
Type=notify
ExecStart=/usr/local/sbin/bt-pan --debug --systemd client %I --wait

Teraz po ponownym załadowaniu konfiguracji można połączyć się z określonym punktem dostępu Bluetooth w ten sposób:

systemctl start pan@00:11:22:33:44:55

Sparowanie za pomocą wiersza poleceń

Oczywiście konfigurację serwera i klientów należy przeprowadzić po sparowaniu ich przez Bluetooth. Na serwerze trzeba uruchomić bluetoothctl i dać mu polecenia:

power on
agent on
default-agent
scan on
scan off
pair XX:XX:XX:XX:XX:XX
trust XX:XX:XX:XX:XX:XX

Uruchamiając skanowanie, poczekaj kilka sekund, aż w liście pojawi się potrzebne urządzenie. Zapisz jego adres i użyj go, podając polecenie pair, a w razie potrzeby — także polecenie trust.

Po stronie klienta należy wykonać to samo, ale polecenie trust nie będzie potrzebne. Serwer potrzebuje go, aby zaakceptować połączenie przez profil NAP bez ręcznego potwierdzenia przez użytkownika.

Autor nie jest pewien, czy to optymalna sekwencja poleceń. Może to wszystko, co trzeba — to sparowanie klienta z serwerem i wykonanie polecenia trust na serwerze, ale jeszcze tego nie próbował.

Zezwolenie na użycie profilu Bluetooth HID

Wymagana jest, aby „malina” rozpoznała klawiaturę podłączoną do wyświetlacza Braille’a kablem i przesyłaną już przez sam wyświetlacz przez Bluetooth. Robi się to w ten sam sposób, tylko zamiast agent on trzeba wydać polecenie agent KeyboardOnly a bluetoothctl znajdzie urządzenie z profilem HID.

Jednak konfigurowanie Bluetooth za pomocą wiersza poleceń jest dość skomplikowane

Chociaż autorowi udało się wszystko skonfigurować, rozumie, że konfigurowanie BlueZ przez wiersz poleceń jest niewygodne. Początkowo myślał, że agenci potrzebni są tylko do wprowadzania kodów PIN, ale okazało się, że na przykład do włączenia profilu HID trzeba wpisać „agent KeyboardOnly”. Dziwne, że do uruchomienia Bluetooth PAN trzeba przeszukiwać repozytoria w poszukiwaniu odpowiedniego skryptu. Pamięta, że w poprzedniej wersji BlueZ był gotowy do użycia tool pand – gdzie on się podział w BlueZ 5? Może pojawiło się nowe rozwiązanie, nieznane autorowi, ale leżące na powierzchni?

Wydajność

Prędkość transmisji danych wyniosła około 120 kbit/s, co jest całkiem wystarczające. Procesor ARM o częstotliwości 1 GHz jest bardzo szybki dla interfejsu wiersza poleceń. Autor i tak planuje używać na urządzeniu głównie ssh i emacs.

Czcionki konsolowe i rozdzielczość ekranu

Rozdzielczość ekranu używana przez framebuffer na Raspberry Pi Zero domyślnie jest dość dziwna: fbset zgłasza, że wynosi 656×416 pikseli (monitor oczywiście nie jest podłączony). Przy czcionce konsolowej 8×16 uzyskano 82 znaki w linii i 26 linii.

Praca z wyświetlaczem Braille’a na 40 znakom w takim trybie jest niewygodna. Autor chciałby również, aby znaki Unicode były wyświetlane na wyświetlaczu w postaci Braille’a. Na szczęście Linux obsługuje 512 znaków, a w większości czcionek konsolowych jest ich 256. Dzięki console-setup można używać jednocześnie dwóch czcionek 256-znakowych. Autor dodał do pliku /etc/default/console-setup następujące linie:

SCREEN_WIDTH=80
SCREEN_HEIGHT=25
FONT="Lat15-Terminus16.psf.gz brl-16x8.psf"

Uwaga: aby czcionka brl-16×8.psf była dostępna, trzeba zainstalować console-braille.

Co dalej?

Na wyświetlaczu brajlowskim znajduje się złącze 3,5 mm, ale autor nie zna przejściówek do przesyłania sygnału audio z Mini-HDMI. Nie udało się również wykorzystać wbudowanej karty dźwiękowej w „malince” (dziwne, tłumacz był pewien, że w Zero jej nie ma, ale istnieją sposoby wyprowadzania dźwięku PWM na GPIO). Planuje użyć huba USB-OTG i podłączyć zewnętrzną kartę dźwiękową, aby przesłać dźwięk do wbudowanego głośnika w wyświetlaczu brajlowskim. Dwie zewnętrzne karty z jakiegoś powodu nie zadziałały, obecnie szuka podobnego urządzenia na innym chipsecie.

Niezbyt wygodnie jest ręcznie wyłączać „malinkę”, czekać kilka sekund i odłączać wyświetlacz brajlowski. A to dlatego, że przy wyłączeniu dostarcza zasilanie z gniazda w obudowie. Autor planuje umieścić w obudowie mały akumulator buforowy i przez GPIO informować „malinkę” o wyłączeniu wyświetlacza, aby ta rozpoczęła proces zamykania. Taki oto UPS w miniaturze.

Obraz systemu

Jeśli masz taki sam wyświetlacz brajlowski i chcesz zrobić z nim to samo, autor jest gotów dostarczyć gotowy obraz systemu (na podstawie Raspbian Stretch). Napisz do niego na adres podany powyżej. Jeśli zbierze się wystarczająco dużo chętnych, możliwa jest nawet produkcja zestawów zawierających wszystko, co niezbędne do takiej modyfikacji.

Podziękowania

Dziękuję Dave'owi Mielke za korektę tekstu.

Dziękuję Simonowi Kainzowi za ilustracje fotograficzne.

Dziękuję kolegom z Technicznego Uniwersytetu w Grazu za szybkie wprowadzenie autora w świat Raspberry Pi.

P.S. Pierwszy tweet autora na ten temat (nie otwiera się — tłumacz) został opublikowany zaledwie pięć dni przed publikacją oryginału tego artykułu, i można uznać, że z wyjątkiem problemów z dźwiękiem, postawione zadanie praktycznie zostało rozwiązane. A propos, końcowa wersja tekstu została zredagowana na podstawie stworzonego przez niego „samodzielnego wyświetlacza brajlowskiego”, podłączonego przez SSH do domowego komputera.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster