LoginSignup
0
0

More than 1 year has passed since last update.

PIMORONI Pirate AudioをRaspberry Pi 3で使う

Last updated at Posted at 2021-11-03

目的

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で接続.
$ 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行の頭の#を取って有効にする。

/boot/config.txt
dtparam=i2c_arm=on
dtparam=i2s=on
dtparam=spi=on

内蔵オーディオを無効にする(on→off)。

/boot/config.txt
# Enable audio (loads snd_bcm2835)
dtparam=audio=off

ディスプレイの解像度を変更するために下記を[all]の下に追記する。

/boot/config.txt
hdmi_force_hotplug=1
hdmi_cvt=240 240 60 1 0 0 0
hdmi_group=2
hdmi_mode=1
hdmi_mode=87

ディスプレイとオーディオのドライバを有効にするために下記を追記する。

/boot/config.txt
dtoverlay=pidi
dtoverlay=hifiberry-dac
gpio=25=op,dh

Ctrl+X、Y、リターンで保存する。

/boot/cmdline.txtを編集

リモートで行う.
$ sudo nano /boot/cmdline.txt

下記をrootwaitの後に下記を挿入。コンソールの出力をHDMIでなくLCDにする。

/boot/cmdline.txt
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

下記を記述。

/etc/X11/xorg.conf.d/99-fbdev.conf
Section "Device"  
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb1"
EndSection

Raspberry Pi 4の場合はfb0だと動いた。

/etc/X11/xorg.conf.d/99-fbdev.conf
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"の前に下記を追記。

/etc/rc.local
/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

末尾に下記を追記。

/etc/xdg/lxsession/LXDE/autostart.
@xset s off
@xset s noblank
@xset -dpms
リモートで行う.
$ sudo nano /etc/lightdm/lightdm.conf

末尾に下記を追記。

/etc/lightdm/lightdm.conf
[SeatDefaults]
xserver-command=X -s 0 -dpms

オーディオスレッドのプライオリティ設定

リモートで行う.
$ sudo nano /etc/security/limits.conf

下記を # End of fileの前に追加。

/etc/security/limits.conf
@audio           -       rtprio          99
@audio           -       memlock         unlimited
@audio           -       nice            -10

@realtime        -       rtprio          99
@realtime        -       memlock         unlimited
@realtime        -       nice            -10

リブート。

リモートで行う.
$ sudo reboot

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0