Raspberry Pi Zero усередині брайлівського дисплею Handy Tech Active Star 40

Raspberry Pi Zero усередині брайлівського дисплею Handy Tech Active Star 40

Автор помістив Raspberry Pi Zero, Bluetooth-«свисток» та кабель усередину свого нового брайлівського дисплея Handy Tech Active Star 40. Вбудований USB-порт забезпечує живлення. Вийшов самодостатній безмоніторний комп'ютер на ARM із операційною системою Linux, обладнаний клавіатурою та брайлівським дисплеєм. Можна заряджати/живити його через USB, зокрема. від пауербанку чи сонячного зарядного пристрою. Тому він може обходитися без електромережі кілька годин, а кілька днів.

Raspberry Pi Zero усередині брайлівського дисплею Handy Tech Active Star 40

Габаритна диференціація брайлівських дисплеїв

Насамперед, вони різняться довжиною рядка. Пристрої на 60 і більше знайомі хороші при роботі з настільним комп'ютером, на 40 - зручні для перенесення разом з ноутбуком. Зараз існують і брайлівські дисплеї, що підключаються до смартфонів та планшетів, з довжиною рядка 14 або 18 знайомест.

У минулому брайлівські екрани були досить потужними. 40-знайомий, наприклад, мав розміри та вагу як у 13-дюймового ноутбука. Тепер вони при тій же кількості знайомі досить мініатюрні, щоб можна було поставити дисплей перед ноутбуком, а не ноутбук на дисплей.

Це, звичайно, краще, але все одно не дуже зручно тримати на колінах два окремі пристрої. Коли працюєш за столом, претензій немає, але варто згадати, що ноутбук по-іншому називається лептопом, і спробувати виправдати його назву, як виявляється, що мініатюрний 40-знайомий дисплей навіть менш зручний.

Тож автор дочекався виходу давно обіцяної нової моделі в серії Handy Tech Star. Ще в 2002 році було випущено попередню модель Handy Tech Braille Star 40, де площі корпусу достатньо, щоб поставити зверху ноутбук. А якщо він не міститься — передбачено висувну підставку. Зараз ця модель замінена на Active Star 40, це практично те саме, але з модернізованою електронікою.

Raspberry Pi Zero усередині брайлівського дисплею Handy Tech Active Star 40

І висувна підставка залишилася:

Raspberry Pi Zero усередині брайлівського дисплею Handy Tech Active Star 40

Але найзручніше у новинці – це поглиблення розмірами приблизно зі смартфоном (див. КДПВ). Відкривається воно під час зсуву майданчика назад. Тримати там смартфон виявилося незручно, але ж треба якось задіяти порожній відсік, усередині якого навіть вихід харчування передбачений.

Перше, що вигадав автор — помістити туди Raspberry Pi, але коли дисплей був придбаний, виявилося, що з «малинкою» не засувається підставка, що закриває відсік. Ось якби плата була лише на 3 мм тонша…

Але колега розповів про вихід Raspberry Pi Zero, який виявився настільки мініатюрним, що у відсік їх помістилося б два або, мабуть, навіть три. Він був відразу замовлений разом з картою пам'яті на 64 ГБ, Bluetooth, «свистком» і кабелем Micro USB. За кілька днів усе це приїхало, а зрячі друзі допомогли автору підготувати картку. Все одразу запрацювало як треба.

Що для цього було зроблено

На задній стінці Handy Tech Active Star 40 розташовано два USB-порти для таких пристроїв, як клавіатури. Малогабаритна клавіатура з магнітним кріпленням додається. Коли клавіатуру підключено, а сам дисплей працює через Bluetooth, комп'ютер додатково впізнає його ще й як Bluetooth-клавіатуру.

Таким чином, якщо до Raspberry Pi Zero, поміщеному у відсік для смартфона, підключити Bluetooth-свисток, він зможе обмінюватися даними з брайлівським дисплеєм по Bluetooth за допомогою BRLTTY, а якщо ще й підключити до дисплея клавіатуру - "малинка" працюватиме і з нею.

Але це ще не все. Сама «малинка», у свою чергу, може отримувати доступ в інтернет по Bluetooth PAN з будь-якого пристрою, що підтримує його. Автор налаштував відповідним чином свій смартфон та комп'ютери вдома і на роботі, але надалі планує пристосувати для цього ще одну «малинку» — класичну, не Zero, підключену до Ethernet та іншого Bluetooth-свистку.

BlueZ 5 та PAN

Спосіб конфігурації PAN за допомогою BlueZ виявився неочевидним. Автор знайшов Pyhton-скрипт bt-pan (див. нижче), що дозволяє конфігурувати PAN без GUI.

З його допомогою можна налаштувати як сервер, і клієнт. Отримавши відповідну команду D-Bus під час роботи в клієнтському режимі, він створює новий мережевий пристрій bnep0 відразу після встановлення з'єднання з сервером. Зазвичай для призначення IP-адреси цей інтерфейс використовується DHCP. У серверному режимі BlueZ вимагає вказівки назви пристрою-моста, до якого він може додати по веденому пристрою для підключення кожного клієнта. Налаштувати адресу для пристрою-моста і запустити DHCP-сервер плюс IP-маскарадинг на мосту - зазвичай все, що потрібно.

Точка доступу Bluetooth PAN з Systemd

Для конфігурації мосту автор застосував systemd-networkd:

Файл /etc/systemd/network/pan.netdev

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

Файл /etc/systemd/network/pan.network

[Match]
Name=pan

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

Тепер потрібно змусити BlueZ налаштувати профіль NAP. Виявилося, що штатними утилітами BlueZ 5.36 це зробити не можна. Якщо автор помиляється, виправте його: mlang (уміє рухати вухами) blind (буває доступу і квантової) guru

Але він знайшов повідомлення в блозі и скрипт на Python для здійснення необхідних дзвінків на D-Bus.

Для зручності автор застосував службу Systemd для запуску скрипту та перевірки дозволеності залежностей.

Файл /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

Файл /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

Другий файл не знадобився б, якби в Debian була підтримка IPMasquerade = (див. # 787480).

Після виконання команд systemctl daemon-перезавантаження и systemctl перезапустити systemd-networkd можна запустити Bluetooth PAN командою systemctl start pan

Клієнт Bluetooth PAN із застосуванням Systemd

Клієнтську частину також легко налаштувати за допомогою Systemd.

Файл /etc/systemd/network/pan-client.network

[Match]
Name=bnep*

[Network]
DHCP=yes

Файл /etc/systemd/system/[захищено електронною поштою]

[Unit]
Description=Bluetooth Personal Area Network client

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

Тепер після перезавантаження конфігурації можна підключитися до заданої точки доступу Bluetooth так:

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

Сполучення за допомогою командного рядка

Зрозуміло, конфігурацію сервера та клієнтів необхідно виконувати після сполучення їх через Bluetooth. На сервері потрібно запустити bluetoothctl і дати йому команди:

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

Запустивши сканування, зачекайте кілька секунд, поки в списку не з'явиться потрібний пристрій. Запишіть його адресу та використовуйте його, подаючи команду pair, а за необхідності – і команду trust.

З боку клієнта треба зробити те саме, але команда trust не знадобиться точно. Серверу вона потрібна, щоб прийняти з'єднання за профілем NAP без ручного підтвердження користувачем.

Автор не впевнений, що це оптимальна послідовність команд. Можливо, все, що потрібно - це поєднання клієнта з сервером та виконання команди trust на сервері, але так він робити ще не пробував.

Дозвіл використання Bluetooth-профілю HID

Потрібно, щоб «малинка» розпізнала клавіатуру, підключену до брайлівського дисплея дротом, і прокинуту вже самим дисплеєм Bluetooth. Робиться так само, тільки замість агент на треба дати команду agent KeyboardOnly і bluetoothctl знайде пристрій із профілем HID.

Але налаштовувати Bluetooth через командний рядок складно

Хоча автору вдалося все налаштувати, він розуміє, що налаштовувати BlueZ через командний рядок незручно. Спочатку він думав, що агенти потрібні лише для введення PIN-кодів, але виявилося, наприклад, що для включення профілю HID потрібно набирати agent Keyboard Only. Дивно, що для запуску Bluetooth PAN необхідно лазити репозиторіями в пошуках потрібного скрипта. Він пам'ятає, що у попередній версії BlueZ для цього був готовий інструмент панда - Куди ж він роблячи в BlueZ 5? Раптом з'явилося нове рішення, невідоме автору, але яке лежить на поверхні?

Продуктивність

Швидкість передачі становить приблизно 120 кбіт/с, чого цілком достатньо. 1-гігагерцовий ARM-процесор дуже швидкий для інтерфейсу командного рядка. Автор все одно планує використовувати на пристрої в основному ssh та emacs.

Консольні шрифти та роздільна здатність екрану

Роздільна здатність екрана, використовувана фреймбуфером на Raspberry Pi Zero за замовчуванням, досить дивна: fbset повідомляє, що воно становить 656×416 пікселів (монітор, звичайно, не підключений). При консольному шрифті 8×16 вийшло 82 символи в рядку та 26 рядків.

Працювати з брайлівським дисплеєм на 40 знайомств у такому режимі незручно. Також автору хотілося б, щоб на дисплеї виводились у брайлівському вигляді символи Unicode. На щастя, Linux підтримує 512 символів, а в більшості консольних шрифтів їх 256. За допомогою console-setup можна використовувати два 256-символьні шрифти спільно. Автор додав до файлу /etc/default/console-setup такі рядки:

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

Примітка: щоб встановити шрифт brl-16×8.psf, потрібно встановити console-braille.

Що далі?

На брайлівському дисплеї є 3,5-міліметровий джек, але автору невідомі перехідники для зняття аудіосигналу з Mini-HDMI. Автору не вдалося задіяти вбудовану в «малинку» звукову карту (дивно, перекладач був упевнений, що у Zero такої немає, але є способи виведення звуку ШІМом на GPIO). Він планує застосувати USB-OTG-хаб та підключити зовнішню карту та вивести звук на вбудовану в брайлівський дисплей колонку. Дві зовнішні карти чомусь не заробили, зараз він шукає аналогічний пристрій на іншому чіпсеті.

Ще незручно вручну відключати "малинку", чекати кілька секунд і відключати брайлівський дисплей. А все тому, що він при відключенні знімає живлення з роз'єму у відсіку. Автор планує помістити у відсік невеликий буферний акумулятор і через GPIO повідомляти "малинку" про відключення дисплея, щоб та приступила до завершення роботи. Такий ось ДБЖ у мініатюрі.

Образ системи

Якщо у вас є такий же брайлівський дисплей, і ви хочете зробити з ним те саме, автор готовий надати готовий образ системи (на основі Raspbian Stretch). Напишіть йому про це за адресою, вказаною вище. Якщо бажаючих набереться досить багато, можливий навіть випуск наборів, що включають все необхідне для такої переробки.

Подяки

Дякую Dave Mielke за вичитування тексту.

Дякую Simon Kainz за фотоілюстрації.

Дякую колегам по Грацькому технічному університету за швидке залучення автора до світу Raspberry Pi.

PS Перший твіт автора на цю тему (не відкривається перекладач) було зроблено всього за п'ять днів до публікації оригіналу цієї статті, і можна вважати, що за винятком проблем зі звуком, поставлене завдання практично вирішене. До речі, фінальний варіант тексту автор відредагував із виготовленого ним «самодостатнього брайлівського дисплея», підключивши його SSH до домашнього комп'ютера.

Джерело: habr.com

Додати коментар або відгук