planetary days,

不惑とか嘘だよ。惑う惑う。ふらふらと。

フリスクPC(その4) 遊べるように設定しよう

2018年12月30日 | ..._〆(゜▽゜ )
4回連載の最終回、いよいよ遊べる状態まで。

〇 Waveshare HAT用の設定
 使い方の想定として、ブート後にLCDに単体で使うアプリが表示され、ボタン入力で操作できればいいが、HDMIに繋げてキーボードなどをつないで使うこともできる事を考えた。
 フレームバッファをサブディスプレイに複製する(解像度も調整する)、fbcpというツールがあるので、それを使ってみる。

1. まず、Waveshare 1.3" IPS LCDに画面を出せるようにする。
 参考:公式ブログ
    sudomodの1.44" 128x128 pi zero hatのスレッド
 ① /etc/modules に SPIドライバと、フレームバッファドライバを追加。おまけでJOYPAD部分のドライバも書いておく。
$sudo nano /etc/modules
spi-bcm2835

flexfb
fbtft_device


 ② /etc/modprobe.d/fbtft.conf の作成
$sudo nano /etc/modprobe.d/fbtft.conf

#/etc/modprobe.d/fbtft.conf

# waveshare 1.3 LCD ST7789v
options fbtft_device name=flexfb gpios=reset:27,dc:25,cs:8,led:24 custom=1 height=240 width=240 rotate=180 speed=40000000 fps=60 bgr=1
options flexfb setaddrwin=0 width=240 height=240 init=-1,0x11,-2,120,-1,0x36,0x70,-1,0x3A,0x05,-1,0xB2,0x0C,0x0C,0x00,0x33,0x33,-1,0xB7,0x35,-1,0xBB,0x1A,-1,0xC0,0x2C,-1,0xC2,0x01,-1,0xC3,0x0B,-1,0xC4,0x20,-1,0xC6,0x0F,-1,0xD0,0xA4,0xA1,-1,0x21,-1,0xE0,0x00,0x19,0x1E,0x0A,0x09,0x15,0x3D,0x44,0x51,0x12,0x03,0x00,0x3F,0x3F,-1,0xE1,0x00,0x18,0x1E,0x0A,0x09,0x25,0x3F,0x43,0x52,0x33,0x03,0x00,0x3F,0x3F,-1,0x29,-3
Ctrl+O、Ctrl+Xで出力して終了。このinitの後の16進数コマンドが重要なので、間違えないこと。
リブートして、/dev/fb1が生えているか確認する。

 ③ 動作確認 (やらなくても良い)
 とりあえずちゃんと動いているか確認したいので、何かデータを書き込み。
$ sudo cat /dev/fb1 > test.fb
$ vi -b test.fb
:%!xxd
→ 16進編集モードに入るのだが、しばらく待たされる
→ 適当にフォーマットが崩れないように16進数を入れる。連続してそこそこ変えないと画面上で目立たない。
:%!xxd -r
→ 16進編集から抜ける。戻るのはそんなに待たない
:wq
→ 書いた結果を保存して終了
$ sudo cat test.fb > /dev/fb1
画面上にゴミが表示されたら動作OK。

2. デスクトップをLCDへ同期表示
① fbコピーをインストール
$ sudo apt-get install cmake git
$ cd ~
$ git clone https://github.com/tasanakorn/rpi-fbcp
$ cd rpi-fbcp
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo install fbcp /usr/local/bin/fbcp


② 設定ファイルの変更
$ sudo nano /etc/rc.local
→ 最後の"exit 0" の前の行に "fbcp &" を追記

fbcp &
exit 0
Ctrl+O、Ctrl+X で終了。

LCD表示が(比較的)綺麗になるよう以下の設定にする。
# HDMI接続が主な場合は、以下のconfig.txt変更をしないでもいい。が、それならLCD Hat付ける意味ないよなあ・・・
$ sudo nano /boot/config.txt
→ 以下の行を修正・追記
hdmi_force_hotplug=1
hdmi_cvt 720 720 60 1 0 0 0
hdmi_group=2
hdmi_mode=87
hdmi_cvtのパラメータで720x720にしているのは、アスペクト比を1:1にするため。こうしないと、ただでさえ狭い240x240の画面に横圧縮な画面が表示されてとても見にくくなる。
ちなみに、縦240とか300だと、うちのディスプレイでは表示できなかった。

書いてる時に見つけたこちらのサイトでは、WaveshareのHATに合わせているらしいfbcp-ili9341というのを使っているので、こちらを使った方がいいかも知れない。

3.ボタン入力の設定
 GPIOボタン入力をRetroPieで利用するため、AdafruitのPiGRRR用ドライバを使う。これは、GPIO入力を適当なキーボード入力に変換してくれる。
$ cd ~
$ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/retrogame.sh
→ うまくRPiから拾えない時は、母艦で保存して渡すなど。
$ sudo bash ./retrogame.sh
→ 3 のPiGRRL Zeroを選択。GPIO番号は後で修正するので大丈夫。
→ 適宜ダウンロードしてインストールしてくれる。流石Adafruit。
→ 最後にrebootするかと聞かれるのでYでリブート。

再起動後、キー定義ファイルを修正。追加キー(GPIO12)をつけてないならESCの行は不要。
$ sudo mv /boot/retrogame.cfg /boot/retrogame.cfg.PiGRRRZero
$ sudo nano /boot/retrogame.cfg
# Uses Broadcom pin numbers for GPIO.

LEFT 5 # Joypad left
RIGHT 26 # Joypad right
DOWN 19 # Joypad down
UP 6 # Joypad up
Z 16 # 'A' button; key 3
X 20 # 'B' button; key 2
ESC 12 # Exit ROM; additional button
LEFTCTRL 13 # 'Select' button; Joypad Press
ENTER 21 # 'Start' button; Key 1
Ctrl+O、Ctrl+Xで書いて終了。
この定義は変更してもリブート不要らしい。使いやすいように修正するといい。
ただ、困ったことにGPIO#12の追加キーが変な動作になっている。具体的には、一度押すとしばらく入力がリピートされる。加工の問題か、ソフト設定の問題か、切り分けが付かない。別のキーを押すと解消するので、実害は少ないが、課題表には載せておこう。

Emulation Stationのキーバインドも変更しておく。EmulationStationは一旦killしておくといいかも。
$ sudo mv ~/.emulationstation/es_input.cfg ~/.emulationstation/es_input.cfg.orig
$ sudo nano ~/.emulationstation/es_input.cfg

<inputList>
<inputAction type="onfinish">
<command>/opt/retropie/supplementary/emulationstation/scripts/inputconfiguration.sh</command>
</inputAction>
<inputConfig type="keyboard" deviceName="Keyboard" deviceGUID="-1">
<input name="start" type="key" id="13" value="1"/>
<input name="down" type="key" id="1073741905" value="1"/>
<input name="right" type="key" id="1073741903" value="1"/>
<input name="select" type="key" id="1073742048" value="1"/>
<input name="left" type="key" id="1073741904" value="1"/>
<input name="up" type="key" id="1073741906" value="1"/>
<input name="a" type="key" id="122" value="1"/>
<input name="b" type="key" id="120" value="1"/>
<input name="x" type="key" id="1073742054" value="1"/>
<input name="y" type="key" id="49" value="1"/>
</inputConfig>
</inputList>
Ctrl+O、Ctrl+Xで書いて終了。

4.Bluetooth Audioの設定
 音声はHDMI出力で出せるのだが、単体で音を出したいのでBluetoothで出力。
 参考:雑木林ブログ
 ① pulse audioのインストール
$ apt-get install pulseaudio pulseaudio-module-bluetooth
$ sudo nano /etc/systemd/system/pulseaudio.service
[Unit]
Description=Pulse Audio

[Service]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm

[Install]
WantedBy=multi-user.target
Ctrl+O、Ctrl+Xで書いて終了。
 ② Bluetoothのプロファイル作成
$ sudo vi /etc/dbus-1/system.d/pulseaudio-bluetooth.conf
<busconfig>

<policy user="pulse">
<allow send_destination="org.bluez"/>
</policy>

</busconfig>
:wq で出力して終了。
 ③ モジュール読み込み設定
$ sudo vi /etc/pulse/system.pa
### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif
:wq で出力して終了。
 ④ Pulse Audioのサービスを起動
 一度リブートしてから、サービスを登録する。
$sudo systemctl start pulseaudio.service

$sudo systemctl status pulseaudio.service
$sudo systemctl enable pulseaudio.service
enableしとかないと自動起動しないっぽい。
 ⑤ デバイスの接続登録
$ sudo blootoothctl
[bluetooth]# agent on
[bluetooth]# default_agent
[bluetooth]# scan on
 → つなげたいBTデバイスのID(MACアドレス風の6バイトデータ)を確認
[bluetooth]# pair **:**:**:**:**:**
[bluetooth]# trust **:**:**:**:**:**
[bluetooth]# connect **:**:**:**:**:**
[bluetooth]# quit

 ⑥ アカウント設定
$ sudo usermod -a -G pulse-access,audio root
$ sudo usermod -a -G pulse-access,audio pi
ユーザ名piだけじゃなく、rootもaudioグループ等に入れておく。
グループに入れていないと、permission deniedになってしまう。

--
これで、大体の設定はおしまい。

キーが圧倒的に少ないので、NES,Gameboy/Color,PCEngine(2ボタン仕様),GameGearあたりが妥当。
ただし、NESは横256を240に縮小することもあって、ドラクエを表示すると微妙に文字が読めない(よく目を凝らすと読める)。GBCは160x144なので、ときメモポケットは十分読める。
そんな微妙なサイズ。

とりあえず、普通に画面に表示すれば勝手にLCDにも表示されるし、retrogameモジュールでボタン+方向入力が普通の文字入力にマップされるので、RetroPieじゃなく普通のアプリケーションを作ってポケット端末化することも問題ない感じ。

しかし、バッテリー内蔵じゃないので、モバイルバッテリーなど外付け電源が必要なのは、少し不便か。
色々と改善ポイントを残しつつ、今年はここまで。
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« フリスクPC(その3) OSをイン... | トップ | フラットな信号機 »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。