Beepy買ったので動くようにしてみた
Beepyとは
[1]付きも選択できる。
日本語の情報は限定的だがX[2]でちらほら買ったという人が見受けられた。詳細な経緯は不明だが発表当初はBeepberryという名前だったようでそれで検索したらネットニュースの記事がいくつか出てきた。
デジタルデトックスツールというふうに書いてある記事もあり、斬新な発想だと思った。[3]
発注から受領まで
2023年5月19日にたまたまTwitterで下記投稿が回ってきたのを見かけて衝動的に脊髄反射で購入した。本体が約14k円で送料が約1.2円で合計が約15.5k円とけっして安いわけではなかった。[4]
決済したがしばらく届く気配がない。思い切ってDiscordのサーバで聞いてみることにした。
ここで、もうしばらくすると発送されるということと、Raspberry Pi Zero→Zero 2にアップグレレードされたことが明らかになる。追ってSQFMIからもメールで連絡がある。
結局8月4日に発送され19日に受領した。
開封の儀
エンジョイする前に
色々と参考になる情報も多い上にしっかり確認しておかないと困ることもあるためにDiscordのサーバには参加しておこう。
セットアップ
基本的にここに書いてあるとおりにするとできる。
ケースの製作
DiscordのHardware-hackersのスレッドをチェックしてお好みのものを3Dプリンタでどうぞ。
バッテリーの接続
こんな感じで接続した。硬いのと向きがわかりにくいので注意を。
Micro SDカードの作成.Rasberry Pi OSのセットアップ
公式ではRaspberry Pi OS Lite 32bitを使うように指示しているがRaspberry Pi Zero 2は64bitであるため、Raspberry Pi OS Lite 64bitのイメージを焼く。このときに右下の⚙ボタンを押してユーザーとパスワードの設定とWifiのSSIDとパスワードの設定を間違いなく行い、SSHを有効にしておくこと。完了したらMicro SDをRaspberry Pi Zero 2に差し込んで電源を入れる。あとはカードを差して電源を入れる(下方のUSBポートの隣のスイッチを入れる)と起動してくれる。ディスプレイとキーボードが使えるようになるまではSSH接続するか本体に画面とキーボードを繋いで作業することになる。私はSSH接続で行った。IPアドレスはWifiルーターの設定画面からでも確認すると良い。最近はコマンドプロンプトやPowerShellでSSHできるみたいで便利だ。
C:\Users\user>ssh user@192.168.xxx.xxx
The authenticity of host '192.168.xxx.xxx (192.168.xxx.xxx)' can't be established.
ED25519 key fingerprint is SHA256:*******************************************.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.xxx.xxx' (ED25519) to the list of known hosts.
user@192.168.xxx.xxx's password:
Linux bb 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
$
アップデート・ディスプレイ有効化
電源を入れた直後はディスプレイには砂嵐みたいなのが表示されるのみでそのままでは使えない。公式のセットアップガイドに従いアップデートしディスプレイドライバを入れる。
# apt-get update && sudo apt-get install raspberrypi-kernel
# sudo shutdown -r now
Connection to 192.168.xxx.xxx closed by remote host.
Connection to 192.168.xxx.xxx closed.
再度SSHで接続する。
C:\Users\user> ssh user@192.168.xxx.xxx
user@192.168.xxx.xxx's password:
Linux bb 6.1.21-v7+ #1642 SMP Mon Apr 3 17:20:52 BST 2023 armv7l
$ curl -s https://raw.githubusercontent.com/beeper/beepy/main/raspberrypi/setup.sh | bash
Enabling I2C, SPI, and Console Auto login...
Updating and installing dependencies...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
git-man liberror-perl
Suggested packages:
git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn
The following NEW packages will be installed:
git git-man liberror-perl raspberrypi-kernel-headers
0 upgraded, 4 newly installed, 0 to remove and 28 not upgraded.
Need to get 17.5 MB of archives.
After this operation, 102 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main arm64 liberror-perl all 0.17029-1 [31.0 kB]
Get:2 http://deb.debian.org/debian bullseye/main arm64 git-man all 1:2.30.2-1+deb11u2 [1,828 kB]
Get:3 http://archive.raspberrypi.org/debian bullseye/main arm64 raspberrypi-kernel-headers arm64 1:1.20230405-1 [10.2 MB]
Get:4 http://deb.debian.org/debian bullseye/main arm64 git arm64 1:2.30.2-1+deb11u2 [5,423 kB]
Fetched 17.5 MB in 9s (2,001 kB/s)
Selecting previously unselected package liberror-perl.
(Reading database ... 37710 files and directories currently installed.)
Preparing to unpack .../liberror-perl_0.17029-1_all.deb ...
Unpacking liberror-perl (0.17029-1) ...
Selecting previously unselected package git-man.
Preparing to unpack .../git-man_1%3a2.30.2-1+deb11u2_all.deb ...
Unpacking git-man (1:2.30.2-1+deb11u2) ...
Selecting previously unselected package git.
Preparing to unpack .../git_1%3a2.30.2-1+deb11u2_arm64.deb ...
Unpacking git (1:2.30.2-1+deb11u2) ...
Selecting previously unselected package raspberrypi-kernel-headers.
Preparing to unpack .../raspberrypi-kernel-headers_1%3a1.20230405-1_arm64.deb ...
Unpacking raspberrypi-kernel-headers (1:1.20230405-1) ...
Setting up liberror-perl (0.17029-1) ...
Setting up raspberrypi-kernel-headers (1:1.20230405-1) ...
Setting up git-man (1:2.30.2-1+deb11u2) ...
Setting up git (1:2.30.2-1+deb11u2) ...
Processing triggers for man-db (2.9.4-2) ...
Compiling and installing display driver...
Cloning into 'Sharp-Memory-LCD-Kernel-Driver'...
remote: Enumerating objects: 158, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 158 (delta 24), reused 21 (delta 20), pack-reused 112
Receiving objects: 100% (158/158), 47.23 KiB | 930.00 KiB/s, done.
Resolving deltas: 100% (86/86), done.
make -C '/lib/modules/6.1.21-v8+/build' M='/home/user/Sharp-Memory-LCD-Kernel-Driver' modules
make[1]: Entering directory '/usr/src/linux-headers-6.1.21-v8+'
CC [M] /home/user/Sharp-Memory-LCD-Kernel-Driver/src/main.o
CC [M] /home/user/Sharp-Memory-LCD-Kernel-Driver/src/drm_iface.o
CC [M] /home/user/Sharp-Memory-LCD-Kernel-Driver/src/params_iface.o
CC [M] /home/user/Sharp-Memory-LCD-Kernel-Driver/src/ioctl_iface.o
LD [M] /home/user/Sharp-Memory-LCD-Kernel-Driver/sharp.o
MODPOST /home/user/Sharp-Memory-LCD-Kernel-Driver/Module.symvers
CC [M] /home/user/Sharp-Memory-LCD-Kernel-Driver/sharp.mod.o
LD [M] /home/user/Sharp-Memory-LCD-Kernel-Driver/sharp.ko
make[1]: Leaving directory '/usr/src/linux-headers-6.1.21-v8+'
dtc -@ -I dts -O dtb -W no-unit_address_vs_reg -o sharp.dtbo sharp.dts
# Install kernel module
make -C '/lib/modules/6.1.21-v8+/build' M='/home/user/Sharp-Memory-LCD-Kernel-Driver' modules_install
make[1]: Entering directory '/usr/src/linux-headers-6.1.21-v8+'
INSTALL /lib/modules/6.1.21-v8+/extra/sharp.ko
XZ /lib/modules/6.1.21-v8+/extra/sharp.ko.xz
DEPMOD /lib/modules/6.1.21-v8+
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-headers-6.1.21-v8+'
# Install device tree overlay
install -D -m 0644 sharp.dtbo /boot/overlays/
# Add configuration line if it wasn't already there
grep -qxF 'dtoverlay=sharp' /boot/config.txt \
|| echo '[all]\ndtoverlay=sharp' >> /boot/config.txt
# Add auto-load module line if it wasn't already there
grep -qxF 'sharp' /etc/modules \
|| echo 'sharp' >> /etc/modules
# Rebuild dependencies
depmod -A
framebuffer_width=400
framebuffer_height=240
Compiling and installing keyboard device driver...
Cloning into 'bbqX0kbd_driver'...
remote: Enumerating objects: 409, done.
remote: Counting objects: 100% (131/131), done.
remote: Compressing objects: 100% (84/84), done.
remote: Total 409 (delta 73), reused 90 (delta 44), pack-reused 278
Receiving objects: 100% (409/409), 138.69 KiB | 1.28 MiB/s, done.
Resolving deltas: 100% (231/231), done.
make -C '/lib/modules/6.1.21-v8+/build' M='/home/user/bbqX0kbd_driver'
make[1]: Entering directory '/usr/src/linux-headers-6.1.21-v8+'
CC [M] /home/user/bbqX0kbd_driver/src/main.o
CC [M] /home/user/bbqX0kbd_driver/src/input_iface.o
CC [M] /home/user/bbqX0kbd_driver/src/params_iface.o
CC [M] /home/user/bbqX0kbd_driver/src/sysfs_iface.o
CC [M] /home/user/bbqX0kbd_driver/src/ioctl_iface.o
LD [M] /home/user/bbqX0kbd_driver/beepy-kbd.o
DTC /home/user/bbqX0kbd_driver/beepy-kbd.dtbo
MODPOST /home/user/bbqX0kbd_driver/Module.symvers
CC [M] /home/user/bbqX0kbd_driver/beepy-kbd.mod.o
LD [M] /home/user/bbqX0kbd_driver/beepy-kbd.ko
make[1]: Leaving directory '/usr/src/linux-headers-6.1.21-v8+'
make -C '/lib/modules/6.1.21-v8+/build' M='/home/user/bbqX0kbd_driver' modules_install
make[1]: Entering directory '/usr/src/linux-headers-6.1.21-v8+'
INSTALL /lib/modules/6.1.21-v8+/extra/beepy-kbd.ko
XZ /lib/modules/6.1.21-v8+/extra/beepy-kbd.ko.xz
DEPMOD /lib/modules/6.1.21-v8+
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-headers-6.1.21-v8+'
# Rebuild dependencies
depmod -A
# Install keymap
mkdir -p /usr/local/share/kbd/keymaps/
install -D -m 0644 ./beepy-kbd.map /usr/local/share/kbd/keymaps/
# Install device tree overlay
install -D -m 0644 ./beepy-kbd.dtbo /boot/overlays/
# Add configuration line if it wasn't already there
grep -qxF 'dtoverlay=beepy-kbd,irq_pin=4' /boot/config.txt \
|| echo '[all]\ndtparam=i2c_arm=on\ndtoverlay=beepy-kbd,irq_pin=4' >> /boot/config.txt
# Add auto-load module line if it wasn't already there
grep -qxF 'beepy-kbd' /etc/modules \
|| echo 'beepy-kbd' >> /etc/modules
Rebooting...
Connection to 192.168.xxx.xxx closed by remote host.
Connection to 192.168.xxx.xxx closed.
ここまで進めるとLCDが映るようになる。
キーボードの有効化
とりあえずキーボードを使えるようにする
このままではキーボードが使えない。ファームウエアをアップデートすると使えるようになる。
こちらからファームウェアをダウンロードする。Beepyの電源をオフにして電源スイッチを切る。PCにUSB接続し電話を切るボタンを押しながら電源スイッチを入れる。PCにリムーバブルディスクとしてマウントされてくる。マウントされたディスクのルートフォルダにi2c_puppet.uf2を入れると自動的に再起動してアップデート完了になる。
ちなみに余談だが……Debian 12でクロスコンパイルできなかった話
私が試みたときはなぜか上記URLからファイルがダウンロードできなかった。自力でコンパイルを試みるもAMD64 Debian 12上でクロスコンパイルすることはできなかった。Debian 11ではできた。多分glibcのバージョンが違うからと考えているがどうだろう。
数字や特殊記号なども出せるようにする
上記を行うとアルファベットは入力できるようになるが、数字や特殊記号は入力できない。Linuxなので/とか.などが入らないとかなり困る。Discordをみてみると同じような問題を抱える人を発見した。
これによるとキーマップを読み込ませるといいらしい。
$ loadkeys /usr/local/share/kbd/keymaps/beepy-kbd.map
しかしながらどうやらこのファイルが無いらしい。というわけでbeepy-kbd.mapを探してきてsftpで送り込んでコマンドを実行することにした。
$ sftp user@192.168.xxx.xxx
user@192.168.xxx.xxx's password:
Connected to 192.168.xxx.xxx.
sftp> ls
Sharp-Memory-LCD-Kernel-Driver bbqX0kbd_driver
raspinfo.txt
sftp> put beepy-kbd.map
Uploading beepy-kbd.map to /home/user/beepy-kbd.map
beepy-kbd.map 100% 1892 65.7KB/s 00:00
sftp>
# loadkeys beepy-kbd.map
これで一通り使えるようになった。あとは好きなようにどうぞ。
Discussion