🍓

Beepy買ったので動くようにしてみた

2023/08/24に公開

Beepyとは

https://beepy.sqfmi.com/
BeepyはSQFMIが発売している、BlackBerryのキーボードとSHARPの高解像度低消費電力の白黒液晶を搭載したボードである。Raspberry Pi Zero HWを接続して物理キーボード付きポケットコンピューターとして使うことができる。ボードだけでも購入できるし、Raspberry Pi Zero WH[1]付きも選択できる。
日本語の情報は限定的だがX[2]でちらほら買ったという人が見受けられた。詳細な経緯は不明だが発表当初はBeepberryという名前だったようでそれで検索したらネットニュースの記事がいくつか出てきた。
https://gigazine.net/news/20230518-beepberry-portable-computer-pebble/
https://tabi-labo.com/306819/wt-beepberry-retro-super-phone
デジタルデトックスツールというふうに書いてある記事もあり、斬新な発想だと思った。[3]

発注から受領まで

2023年5月19日にたまたまTwitterで下記投稿が回ってきたのを見かけて衝動的に脊髄反射で購入した。本体が約14k円で送料が約1.2円で合計が約15.5k円とけっして安いわけではなかった。[4]
https://twitter.com/ericmigi/status/1658854905220587522

決済したがしばらく届く気配がない。思い切ってDiscordのサーバで聞いてみることにした。

ここで、もうしばらくすると発送されるということと、Raspberry Pi Zero→Zero 2にアップグレレードされたことが明らかになる。追ってSQFMIからもメールで連絡がある。

結局8月4日に発送され19日に受領した。

開封の儀



エンジョイする前に

色々と参考になる情報も多い上にしっかり確認しておかないと困ることもあるためにDiscordのサーバには参加しておこう。
https://discord.com/invite/QERrSferdF

セットアップ

基本的にここに書いてあるとおりにするとできる。
https://beepy.sqfmi.com/docs/getting-started

ケースの製作

DiscordのHardware-hackersのスレッドをチェックしてお好みのものを3Dプリンタでどうぞ。

バッテリーの接続


こんな感じで接続した。硬いのと向きがわかりにくいので注意を。

Micro SDカードの作成.Rasberry Pi OSのセットアップ

https://www.raspberrypi.com/documentation/computers/getting-started.html

公式では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が映るようになる。

キーボードの有効化

とりあえずキーボードを使えるようにする

このままではキーボードが使えない。ファームウエアをアップデートすると使えるようになる。

https://github.com/sqfmi/i2c_puppet/releases/latest/download/i2c_puppet.uf2
こちらからファームウェアをダウンロードする。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

これで一通り使えるようになった。あとは好きなようにどうぞ。

脚注
  1. 後日Raspberry Pi Zero 2 WHに変更される ↩︎

  2. というかTwitter ↩︎

  3. あくまでも個人の意見だが、こんなものでデジタルデトックスができるわけがない。むしろ中毒症状を増悪させる可能性もあると考えられると警告しておく。実際のところこれのせいで睡眠時間が大幅に失われたのみならず設定や色々するためにパソコンに向かう時間は伸びたし手軽に沢れる端末を手に入れてしまったわけだし。 ↩︎

  4. 円安にも関わらず外貨預金から直接決済できるカードを持っていたため金銭感覚が完全にイカれていた。 ↩︎

Discussion