2023年1月9日月曜日

SDカードサイズ液晶のゲーム機を作る

Raspberry Pi W と同じサイズの液晶&ジョイスティックの基板を使って、1.4インチ液晶のコントローラー一体型ファミコンを作ってみました。
こんな感じ。



ボードを買ったら取説も何もないし取説通りやってもゲーム画面出てこないし、、、とまぁまぁ試行錯誤したので上手くいく方法をメモします。

大まかな流れは次の通り。
  1. SDカードにゲームエミュレータ(Retropie)同梱の OS(Raspbian)をインストール
  2. WiFi & SSH を設定してRaspberry Pi Zero W に接続
  3. 液晶のドライバをインストール
  4. 液晶基板に付いているジョイスティックを有効化
  5. 遊ぶ

材料

Pi Zero でも良いのですが WiFi 付いていた方が作業が楽です。
Amazon は無茶苦茶ぼったくりの値段になっていることがあるので要注意。

今回のメインのパーツです。
Amazon の説明には取説付きと書いてありますが一切ついておらず、チップの種類も不明。
何も情報なしでぶつかると手も足も出なくて詰みます。

そのほか、SDカードとかモバイルバッテリー、USBケーブルは適当に。

Raspberry Pi に Retropie をインストールする

Raspberry Pi の公式サイトからOS Imagerをダウンロードして PCにインストールします。
Imager の使い方は非常にわかりやすいので説明を省略します。

ここでインストールするOSは普通の Raspbian ではなくてこれです。
Emulation and game OS → Retropie → Retropie 4.8 (RP 1/Zero)

WiFi & SSH を有効化する

SDカードにOSを書き込んだら自動でアンマウントされるので、SDカードを抜き差しして再度PCにマウントします。
  1. 「boot」フォルダがマウントされるので、フォルダ直下にwpa_supplicant.confという名前のファイルを作成し、以下の内容をコピペ。
    country=JP
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network={
            ssid="{SSID}"
            psk="{平文のWiFiパスワード}"
    }
  2. 「boot」フォルダ直下に「ssh」という名前の空のテキストファイルを作成。
    これでRaspberry Pi の初回起動時に SSH が有効化されます。

Raspberry Pi Zero W に SSH 接続する

SDカードを Raspberry Pi Zero W に挿入してモバイルバッテリーを接続。
液晶の表示は真っ白ですがこの時点では気にしなくてOKです。

WiFi の設定が上手くいっていれば、しばらくして PCから「retropie.local」というホスト名に ping を打つと応答が返ってきます。
ping retropie.local
さらにその後、SSH が起動すれば「pi@retropie.local」にSSH接続するとログインできます。
デフォルトパスワードは「raspberry」ですね。

液晶モニタのドライバをインストール

Waveshare のマニュアルに沿ってドライバを入れていきます。
https://www.waveshare.com/wiki/1.44inch_LCD_HAT
  1. raspi-config でSPI Interfaceを有効化
    sudo raspi-config
    「Interfacing Options > SPI > Yes」を選択
    sudo reboot
    
  2. BCM2835ライブラリをインストール
    wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
    tar zxvf bcm2835-1.71.tar.gz
    cd bcm2835-1.71/
    sudo ./configure && sudo make && sudo make check && sudo make install
    
  3. wiringPiライブラリをインストール
    sudo apt-get install wiringpi
    wget https://project-downloads.drogon.net/wiringpi-latest.deb
    sudo dpkg -i wiringpi-latest.deb
    gpio -v
    # v2.5.xのバージョンが表示されればOK
    
    git clone https://github.com/WiringPi/WiringPi
    cd WiringPi
    ./build
    gpio -v
    # v2.6かv2.7が表示されればOK
マニュアルではこの後で Python のライブラリをインストールしていますが、今回は不要です。


FBCPドライバをインストール

フレームバッファーの制御をするドライバらしいですがよく分かりません。
この手順を実行するとようやく画面にコンソールが表示されます、、、が、あまりに文字が小さすぎて全く読めません。
  1. ドライバをビルド
    cd ~
    sudo apt-get install cmake -y
    sudo apt-get install p7zip-full -y
    wget https://www.waveshare.com/w/upload/f/f9/Waveshare_fbcp.7z
    7z x Waveshare_fbcp.7z -o./waveshare_fbcp
    cd waveshare_fbcp
    mkdir build
    cd build
    cmake -DSPI_BUS_CLOCK_DIVISOR=20 -DWAVESHARE_1INCH44_LCD_HAT=ON -DBACKLIGHT_CONTROL=ON -DSTATISTICS=0 ..
    make -j
    sudo ./fbcp
  2. 起動時に読み込まれるように設定
    sudo cp ~/waveshare_fbcp/build/fbcp /usr/local/bin/fbcp
    sudo nano /etc/rc.local
    # rc.local 末尾の「exit 0」の手前に「fbcp &」を追記
  3. 画面解像度を設定
    /boot/config.txt の末尾に設定を追記。
    Raspberry Pi 4 の場合は追加の設定が必要なので適宜 Waveshare のマニュアルに従ってください。
    hdmi_force_hotplug=1
    hdmi_cvt=300 300 60 1 0 0 0
    hdmi_group=2
    hdmi_mode=87
    display_rotate=0
  4. 再起動
    sudo reboot


Retropie の画面を液晶に表示する

ここまでの手順で液晶にコンソールは表示されるのですが、Retropie (emulation station)の画面は表示されません。
そこで、raspi-config で「Advanced > GL Driver」から「Fake KMS」を有効化します。
うまくいかない場合は「Full KMS」でもいいらしいです。
設定後に再起動するとemulation stationの起動画面が出るようになるはず。

ところが、コントローラーの設定画面になってしまい、ジョイスティックが認識されていないために何もできません。
もしUSB接続のコントローラーが手元にあるようなら、Raspberry Pi Zero W の Micro USB に接続すると操作できます。


ジョイスティックを有効化する

emulation station にジョイスティックを認識させるのに地味に手間取ったのですが、このページが参考になりました。
てきとうにブログ 〜 ラズパイZEROのたとえ(例)

curl -O https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/retrogame.sh
sudo bash retrogame.sh
# よくわからないけど「3」を選択
再起動後に「/boot/retrogame.cfg」に次のように記載します。
LEFT 5 # Joypad left
RIGHT 26 # Joypad right
UP 6 # Joypad up
DOWN 19 # Joypad down
LEFTCTRL 13 # 'A' button JOY PRESS
LEFTALT 16 # 'B' button BTN3
Z 20 # 'X' button BTN2
X 21 # 'Y' button BTN1
ESC 13 16 # Exit ROM JOY + BTN3
この記載内容はここからパクりました。
MELTWATER's RASPBERRY PI HARDWARE
実際には再起動後にジョイスティックとボタンが動作するようになり、改めてキーアサインを設定する画面が表示されるので後から変更可能です。


遊ぶ

retropie.local をファイル共有で参照し「roms」フォルダに ROM ファイルをコピーします。
サンプルの ROM は retropie のイメージなどに入っていることがあるのでそれを使うのが手っ取り早いです。
手持ちのファミコンカセットから抜く方法は他のサイトをご参照。

出来上がるとこんな感じに。




0 件のコメント:

コメントを投稿