目的
PIMORONIから出ているPirate Audioという1.3インチ240x240のカラーディスプレイとPCM5100が乗ったHATをRaspberry Piで使えるようにする。Raspberry Pi用に作ったX上で動くシンセサイザーアプリを動かすことが目標。
用意するもの
- Raspberry Pi 3 (4でもZero 2でも良いと思う)
- PIMORONI Pirate Audio (何種類かあるがどれでも)
- SD Card (8GB以上)
- USB-MIDIキーボードなどなんらかのMIDI入力装置
- 電源とUSBケーブル
準備
- Pirate AudioをRaspberry Pi 3に乗せる。
- SD CardにRaspbianを焼いておく。
- Raspberry Pi ImagerでOperating SystemにRASPBERRY PI OS (32BIT)を選択、SD Cardを選択してWRITE。
- 焼き上がったらSDカードを差し直してsshという名の空ファイルを/bootに置いておく。
- SDカードをRaspberry Pi 3に挿して電源を繋いで起動、SSHでログインする。
$ ssh pi@XXX.XXX.XXX.XXX
設定作業
ここの説明が神でした。さらにそのオリジナルはこことのこと。ここでの説明はほぼほぼ復唱のような内容です。
pidi.dtboの作成
device tree overlay to use pidi with fbtft driver for rpi 2 B · GitHubの右上にあるDownload Zipをクリックしてファイルをダウンロードして解凍する。pidi-overlay.dtsというファイルができるので、それをテキストエディタで開き、
reg = <0>;
となっている行を
reg = <1>;
に変更、
led-gpios = <&gpio 13 0>;
となっている行を
led-gpios = <&gpio 13 1>;
に変更、保存する。理由はここで説明されています(ボクはよくわかりません)。変更したファイルをRaspberry Pi 3に転送する。
バックライトのLEDに関しては、OSのバージョンによって0で動く場合と1で動く場合がある模様。最近のOSだと1っぽい。
$ scp [ローカルのファイルの保存場所]/pidi-overlay.dts pi@XXX.XXX.XXX.XXX:~/
その後、Raspberry Pi 3にSSHで接続し、下記を行う。
$ sudo dtc -@ -I dts -O dtb -o /boot/overlays/pidi.dtbo pidi-overlay.dts
/boot/overlays に pidi.dtboができていれば成功。
LocaleとTimezoneの設定
$ sudo raspi-config
- Localization Options→Localeでen-GBを解除、en-US.UTF-8 UTF-8をチェック、ja-JP.UTF-8 UTF-8をチェックしてOK。en_US.UTF-8を選択してOK。
- 再びLocalization Options→Timezone→Asia→TokyoでOK。
- 三度Localization Options→WiFi Country→JP JapanでOK。
- Finish
- Would you like to reboot now?でYes
/boot/config.txtを編集
$ sudo nano /boot/config.txt
下記の3行の頭の#を取って有効にする。
dtparam=i2c_arm=on
dtparam=i2s=on
dtparam=spi=on
内蔵オーディオを無効にする(on→off)。
# Enable audio (loads snd_bcm2835)
dtparam=audio=off
ディスプレイの解像度を変更するために下記を[all]の下に追記する。
hdmi_force_hotplug=1
hdmi_cvt=240 240 60 1 0 0 0
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
ディスプレイとオーディオのドライバを有効にするために下記を追記する。
dtoverlay=pidi
dtoverlay=hifiberry-dac
gpio=25=op,dh
Ctrl+X、Y、リターンで保存する。
/boot/cmdline.txtを編集
$ sudo nano /boot/cmdline.txt
下記をrootwaitの後に下記を挿入。コンソールの出力をHDMIでなくLCDにする。
fbcon=map:10 fbcon=font:VGA8x16
保存する。
コンソールの文字サイズの設定
$ sudo dpkg-reconfigure console-setup
起動したら色々聞かれるが、“UTF8”を選択、“Guess optimal…”を選択、“Let the system select…”を選択、 “8x16”を選択、“Ok”で終了。
ここで一旦リブート。
$ sudo reboot
再起動して画面左上にカーソルらしきものが表示されていれば成功。
Xがディスプレイ上で動く様にする (fbcpを使わない版)
$ sudo mkdir /etc/X11/xorg.conf.d
$ sudo nano /etc/X11/xorg.conf.d/99-fbdev.conf
下記を記述。
Section "Device"
Identifier "myfb"
Driver "fbdev"
Option "fbdev" "/dev/fb1"
EndSection
Raspberry Pi 4の場合はfb0だと動いた。
Section "Device"
Identifier "myfb"
Driver "fbdev"
Option "fbdev" "/dev/fb0"
EndSection
fbcpのインストールとXの設定 (上記ができなかった場合)
これは64bit版では動かなかった。あと、Raspberry Pi Zero 2でも動かなかった。理由はPrimaryのDisplayが見つからないというエラーっぽい。
諸々インストールが必要なのでapt-getの準備。
$ sudo apt-get update
gitが必要なのでインストール。使用したOSのイメージによってはすでに入っているかも。
$ sudo apt-get install git -y
cmakeも必要なのでインストール。
$ sudo apt-get install cmake -y
もしエラーが出たら下記をしてから。
$ sudo apt update --allow-releaseinfo-change
fbcpをgithubから入手、ビルド。
$ git clone https://github.com/tasanakorn/rpi-fbcp.git
$ cd rpi-fbcp
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo cp fbcp /usr/bin
$ sudo chmod +x /usr/bin/fbcp
$ sudo nano /etc/rc.local
/etc/rc.localの"exit 0"の前に下記を追記。
/usr/bin/fbcp &
ここでreboot。
$ sudo reboot
再起動後に一瞬のフラッシュスクリーンの後デスクトップが画面に表示されればここまで成功。画面が小さくて初期設定は終了できない.
Tight VNC Serverをインストール
$ sudo apt-get install tightvncserver
$ tightvncserver
VNC接続のパスワードを聞かれるので入力。"Would you like to enter a view-only password (y/n)?"はNで。
VNCでRaspberry Piに接続。Macの場合、FinderのGoメニューからConnect to server...でvnc://raspberrypi.local:5901と入力しConnect。さっきのパスワードを入れて接続。初期設定は
- Country=Japan、Language=Japanese、Timezone=Tokyoで、Use English languageにチェックを入れる。
- Change PasswordはそのままNextでもOK。
- Setup ScreenはそのままNext。
- WiFiは繋ぎたかったら設定。
- Update SoftwareはSkip。
- Done。
tightvncserverを自動起動するには下記の方法でできた。が、.xsessionを使ってアプリの全画面起動を行う場合はやってはだめ。
https://www.handsonplus.com/electronic-works/how-to-use-tightvnc-with-raspi/
スリープを無効にする
$ sudo nano /etc/xdg/lxsession/LXDE/autostart
末尾に下記を追記。
@xset s off
@xset s noblank
@xset -dpms
$ sudo nano /etc/lightdm/lightdm.conf
末尾に下記を追記。
[SeatDefaults]
xserver-command=X -s 0 -dpms
オーディオスレッドのプライオリティ設定
$ sudo nano /etc/security/limits.conf
下記を # End of fileの前に追加。
@audio - rtprio 99
@audio - memlock unlimited
@audio - nice -10
@realtime - rtprio 99
@realtime - memlock unlimited
@realtime - nice -10
リブート。
$ sudo reboot
以上。