Handy Tech Active Star 40 盲文显示器内的 Raspberry Pi Zero

Handy Tech Active Star 40 盲文显示器内的 Raspberry Pi Zero

作者在他的新款 Handy Tech Active Star 40 盲文显示器中放置了 Raspberry Pi Zero、蓝牙口哨和电缆,内置 USB 端口提供电源。 结果是一台采用 ARM、Linux 操作系统、配备键盘和盲文显示器的自给自足的无显示器计算机。 您可以通过 USB 为其充电/供电,包括。 来自移动电源或太阳能充电器。 因此,他可以在没有电源的情况下坚持几个小时,但也可以坚持几天。

Handy Tech Active Star 40 盲文显示器内的 Raspberry Pi Zero

盲文显示器的尺寸差异

首先,它们的行长不同。 60或更多容量的设备适合与台式电脑一起使用,而40容量的设备则方便与笔记本电脑一起携带。 现在有连接到智能手机和平板电脑的盲文显示器,行长为 14 或 18 个字符。

过去,盲文显示器非常庞大。 例如,40 座笔记本电脑的尺寸和重量与 13 英寸笔记本电脑相当。 现在,在熟人数量相同的情况下,它们足够微型,因此您可以将显示器放在笔记本电脑前面,而不是将笔记本电脑放在显示器上。

当然,这样更好,但是将两个单独的设备放在腿上仍然不太方便。 当您在办公桌前工作时,没有任何抱怨,但值得记住的是,笔记本电脑被称为笔记本电脑的另一个名称,并试图证明其名称的合理性,因为事实证明,微型 40 字符显示屏更不方便。

于是笔者就等待着期待已久的Handy Tech Star系列新机型的发布。 早在2002年,上一代Handy Tech Braille Star 40就发布了,机身面积足以放置一台笔记本电脑。 如果不合适,还有一个可伸缩支架。 现在,该型号已被 Active Star 40 所取代,该型号几乎相同,但电子设备已升级。

Handy Tech Active Star 40 盲文显示器内的 Raspberry Pi Zero

伸缩支架仍然存在:

Handy Tech Active Star 40 盲文显示器内的 Raspberry Pi Zero

但新产品最方便的地方是一个大约智能手机大小的凹槽(参见 KDPV)。 当平台移回时它会打开。 事实证明,在那里放置智能手机并不方便,但你需要以某种方式使用空的隔间,里面甚至还有一个电源插座。

作者首先想到的就是将树莓派放在那里,但当购买显示器时,发现覆盖隔间的支架并没有与“树莓派”一起滑入。 现在,如果电路板仅薄 3 毫米……

但一位同事告诉我有关 Raspberry Pi Zero 的发布,结果证明它非常微型,以至于可以在隔间中容纳两个……甚至三个。 人们立即订购了它以及 64 GB 存储卡、蓝牙、“口哨”和 Micro USB 数据线。 几天后,这一切都到了,视力正常的朋友帮作者准备了一张地图。 一切立即按预期进行。

为此做了什么

Handy Tech Active Star 40 的背面有两个 USB 端口,用于连接键盘等设备。 随附带有磁性安装座的小型键盘。 连接键盘并且显示器本身通过蓝牙工作时,计算机还会将其识别为蓝牙键盘。

因此,如果您将蓝牙“口哨”连接到放置在智能手机隔间中的 Raspberry Pi Zero,它将能够通过蓝牙与盲文显示器进行通信 BRLTTY,如果您还将键盘连接到显示器,“树莓派”也可以使用它。

但这还不是全部。 反过来,“树莓派”本身可以从任何支持它的设备通过蓝牙 PAN 访问互联网。 作者已经在家里和工作中相应地配置了他的智能手机和电脑,但将来他计划为此改编另一个“树莓派” - 一个经典的,而不是零,连接到以太网和另一个蓝牙“口哨”。

BlueZ 5 和 PAN

使用 PAN 配置方法 的BlueZ 事实证明并不明显。 作者找到了 bt-pan Python 脚本(见下文),它允许您在没有 GUI 的情况下配置 PAN。

它可用于配置服务器和客户端。 在客户端模式下工作时,通过 D-Bus 接收到适当的命令后,它在与服务器建立连接后立即创建一个新的网络设备 bnep0。 通常,DHCP 用于为该接口分配 IP 地址。 在服务器模式下,BlueZ 需要桥接设备的名称,它可以向该桥接设备添加从属设备以连接每个客户端。 通常只需要为桥接设备配置地址并在桥接器上运行 DHCP 服务器和 IP 伪装即可。

带有 Systemd 的蓝牙 PAN 接入点

为了配置网桥,作者使用了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守护进程重新加载 и systemctl restart systemd-networkd 您可以使用以下命令启动蓝牙 PAN systemctl 启动盘

使用 Systemd 的蓝牙 PAN 客户端

使用 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

现在,重新加载配置后,您可以像这样连接到指定的蓝牙接入点:

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

使用命令行配对

当然,服务器和客户端的配置必须在通过蓝牙配对后进行。 在服务器上,您需要运行 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 配置文件的连接,而无需用户手动确认。

作者不确定这是否是最佳的命令序列。 也许所需要的只是将客户端与服务器配对并在服务器上运行信任命令,但他还没有尝试过这一点。

启用 HID 蓝牙配置文件

要求Raspberry能够识别通过有线方式连接到盲文显示器的键盘,并由显示器本身通过蓝牙传输。 这是以同样的方式完成的,只是相反 代理人 需要下达命令 代理仅键盘 bluetoothctl 将找到具有 HID 配置文件的设备。

但通过命令行设置蓝牙有点复杂

尽管作者设法配置了所有内容,但他明白通过命令行配置 BlueZ 很不方便。 起初,他认为代理只需要输入 PIN 码,但事实证明,例如,要启用 HID 配置文件,您需要键入“agent KeyboardOnly”。 令人惊讶的是,要启动蓝牙 PAN,您需要浏览存储库来搜索所需的脚本。 他记得在BlueZ之前的版本中有一个现成的工具可以做到这一点 - 他在 BlueZ 5 中做什么? 突然出现了一个新的解决方案,作者不知道,但就在表面上?

Производительность

数据传输速度约为120 kbit/s,已经足够了。 1GHz ARM 处理器对于命令行界面来说速度非常快。 作者仍然计划在设备上主要使用ssh和emacs。

控制台字体和屏幕分辨率

Raspberry Pi Zero 上的帧缓冲区使用的默认屏幕分辨率非常奇怪:fbset 将其报告为 656x416 像素(当然,没有连接显示器)。 控制台字体为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 音频信号的适配器。 作者无法使用Raspberry内置的声卡(奇怪的是,翻译者确定Zero没有声卡,但有办法使用PWM到GPIO输出声音)。 他计划使用 USB-OTG 集线器并连接外部卡并将声音输出到盲文显示器内置的扬声器。 由于某种原因,两个外部卡无法工作;现在他正在寻找不同芯片组上的类似设备。

手动关闭“树莓派”也很不方便,等几秒再关闭盲文显示器。 这一切都是因为当它关闭时,它会切断隔间中连接器的电源。 作者计划在隔间中放置一个小型缓冲电池,并通过 GPIO 通知 Raspberry 显示屏关闭,以便它可以开始关闭其工作。 这是一个微型 UPS。

系统镜像

如果您有相同的盲文显示器并且想用它做同样的事情,作者准备提供系统的现成图像(基于 Raspbian Stretch)。 请按照上述地址写信告知他此事。 如果有足够多的人感兴趣,甚至可以发布包含此类修改所需的一切的套件。

致谢

感谢 Dave Mielke 的校对。

感谢 Simon Kainz 提供的照片插图。

感谢格拉茨技术大学的同事们快速向作者介绍了 Raspberry Pi 的世界。

PS 第一条推文 作者在这个主题上(不公开 - 译者)是在本文原文发表前五天提出的,可以认为,除了声音问题之外,任务实际上已经解决了。 顺便说一句,作者从他制作的“自给自足的盲文显示器”中编辑了文本的最终版本,并通过 SSH 将其连接到他的家用计算机。

来源: habr.com

添加评论