2015年9月2日水曜日

RaspberryPi2のファミコン化(編集中:Ver.003)

どうも,西村良太です.
こんにちは.

以前,RaspberryPi2modelBを研究室で購入し,
大変気に入ったので,自宅にも1台購入したんですが,
全く何にも使われずにホコリをかぶっていました.

RaspberryPi:ラズベリーパイ(通称:ラズパイ)は,
超小型,低消費電力でありながら,計算パワーのあるコンピュータです.

先日ネットサーフィンをしていると,RaspberryPi用のゲームOS
RetroPieというのを発見しました.

The RetroPie Project | petRockBlog

linux(Debian)ベースのOSで,RaspberryPiに導入することで,
Atari 800,ファミコン,スーファミなどのレトロゲームが遊べます.
(含まれるのは本体エミュレータのみで,ソフトは含まれません)
レトロゲームと呼ぶには新しすぎる,プレステなども遊べます.

これは素晴らしい!と思い,情報を収集して,自宅のRaspberryPi2に
導入してみました.
すると,思いの外サクサク動きとても快適だったので
今後はこの環境をメインで使っていこうと思いました.

しかし,そのままではつまらないなーと思っていたところで,
ファミコン本体の中にRaspberryPiを内蔵してしまう文化があることを知りました.


Takachan Dialy:とりあえず動いている私のRaspberry Pi
http://takachan3.blog67.fc2.com/blog-entry-253.html

人生はたぶん暇つぶし:Raspberry pi2 をファミコンボディーに入れてみた。
http://xxxsnkxxx.tumblr.com/


これは,ぜひとも真似をしよう!
と思いたち,すぐに部品を集めて,作成に取り掛かったわけです.


※このブログの記事は,開発が進むごとに更新・追記されます.

-1.完成品のイメージ

  • 外からの見た目は初代ファミコン実機

  • microUSBで給電
  • HDMI接続
  • RaspberryPi2 model B を入れる
  • 電源ボタンで電源を入れる
  • リセットボタンでリセットをかける(シャットダウン)
  • 7インチのモニタを使う(本体ごと持ち運んで運用できるように)
  • 7インチモニタもUSB給電(DC INでできる)

  • 最終的な野望は,彼女にファミコンコスプレをしてもらって,そこにこの本体とモニタをマウントして,コミケ会場を練り歩いてもらうことです.(プレイアブルコスプレ)
  • それに合わせて,自作ファミコンカセット(実機用ROM)作成&販売ができたらいいなー

  • 現状
  1. 1コン,2コンのGPIO接続成功
  2. ドライバインストール(RetroPie-Setup.sh からできる)成功
  3. NESコントローラのマッピング(sudo modprobe gamecon_gpio_rpi map=0,0,2,2)成功
  4. 7インチモニタのDotByDot設定(/boot/config.txt)成功
  5. HDMI強制起動&サウンドデバイスの選択(/boot/config.txt)成功
ゲームを二人で遊ぶことができる状態になっている



  • FutureWork
  1. ファミコン本体の電源で,RaspberryPiの電源を入れる
  2. ファミコン本体のリセットボタンで,RaspberryPiのリセットを行う(参考ページ
  3. ファミコン本体の中に,RaspberryPi2を入れる

0.必要なもの


  • RaspberryPi2 model B
  • 接続ケーブル(HDMI,microUSBケーブル:電源用)
  • LAN環境(今回は無線LAN:WLI-UC-GNM2)
  • キーボード
  • microSD 4GB以上のもの
  • ファミコン本体
    • 外側(RaspberryPi格納用)
    • ファミコンのコントローラ:1コン 2コン
  • 延長ケーブル(ファミコン本体内部格納用)
    • HDMI
    • USB
    • microUSB
  • ジャンパ線
  • ハンダごて,ハンダ
  • HDMI接続ができるモニタ


注意:以下の説明では,RetroPie version 3.0を用いています.バージョンの違いによって,各種ファイルの場所や設定画面も変わりますので(全く違う場所になったりする),注意してください.

1.RetroPieのインストール

1.1.ダウンロード

公式ブログから,最新版RetroPieをダウンロード
The RetroPie Project | petRockBlog
の中の

RetroPieProject → Downloads → RetroPie SD-Card Imagesの
RetroPie SD-card Image for Raspberry Pi 2 Version 3.0 をクリック



1.2.microSDへインストール

1.2.1 フォーマット

microSDへダウンロードしたファイルを書き込みます.以下の順で作業してください.
microSDは,事前にフォーマットしておくと良いです.また,最終的にexFAT形式でフォーマットすると,下の方で行う領域拡張のところでコケにくくなります.

フォーマットは,
まず,SDカードフォーマッターでmicroSDをフォーマットします.
(論理サイズ調整ON,クイックフォーマット)


フォーマット後,エクスプローラで右クリック→フォーマット(exFAT)としました.



1.2.2 書き込み

次に,RetroPieの書き込みを行います.
  1. ダウンロードしたファイルの解凍 .gz→img
  2. Win32 Disk Imager などのソフトを使い,.imgをmicroSDに書き込む 


 microSDは4GB以上の容量が必要です.


1.3.RetroPieの起動&設定

1.3.1 起動

microSDをRaspberryPiに挿し,USBキーボード,HDMIケーブル,無線LANドングルを挿し,最後にmicroUSB電源を挿します.(電源をさしたらすぐ電源ONになる)

起動画面が進んでいくと,
プロンプト(背景黒)画面→「Retro Pie」のロゴ画面→EmulationStationのロゴ画面




と進み,最後に,以下のES用のパッド設定画面になります.


ここで,キーボードのF4キーを押して,その後5秒以内にエンターキー(等)を押して,プロンプト画面にします.
コマンドラインへの移行:F4キー ←重要!



1.3.2 容量拡張

ラズベリーパイ設定コマンドを起動します.
sudo raspi-config

Expand Filesystem を選択・実行します.



<Finish>を選択し,再起動させます.(カーソルキー右で選択できます)


容量拡張に成功したかどうかは,dfコマンドで見ましょう.
df -h

赤線で示した部分が,microSD全体の容量と一致していたら(4Gでなければ)
成功です.



ちなみに,RetroPieのデフォルトのユーザ名とパスワードは以下のとおりです.パスワードは, raspi-configで変更しておいたほうが良いかもしれません.
ユーザ名:pi
パスワード:raspberry

1.3.3 インターネット接続

RetroPie設定コマンドを起動します.
sudo ./RetroPie-Setup/retropie_setup.sh



メニューを以下のように選択していく
3: Setup
329: Configure Wifi
1: Connect to WiFi Network

後は,接続するSSIDを選択,パスワードの入力をして,接続してください.

メニューに戻ったら,また上の階層に戻ってください.
ESCキーで戻れます.



1.3.4 必要なアップデートや設定などをしていく
あとは,メニュー(3:Setup内)の項目で,必要な部分を順番に実行していけば良いようになっています.
各項目を行った後に,こまめに再起動をしましょう.


実行するもの
300: Update APT packages
322: Samba ROM Shares  同じネットワーク内のマシンから簡単にアクセスできる

その他,必要なものを設定してください.


2.コントローラの作成&接続

  • 日本のファミコンの実機のコントローラを用いる.
  • 1コン,2コンをつなぐ.
  • GPIOにつなぐ.

2.1.GPIOとの接続

ファミコンのコントローラのケーブルを見ると,中に細い線が入っています.
1コンは5本,2コンは6本あります.



ハマリポイント:1コンと2コンのケーブル配色が違うので注意.



ケーブルは,上記の表のような対応があり,これに応じて,RaspberryPiのGPIOポートにつないでいきます.
注意:RaspberryPi2には,PAD3~PAD6しか存在しません.(PAD1,PAD2は欠番)
理由は,図の下に書きます.

【接続先】


OUT以外は,全コントローラ共通なので,
同じ端子に接続(分岐)すればOKです.

転載元:https://github.com/RetroPie/RetroPie-Setup/wiki/gamecon_gpio_rpi



転載元:http://raspi.tv/2014/rpi-gpio-quick-reference-updated-for-raspberry-pi-b

2.2.なぜPAD3~PAD6に設定するのか

上図の左のRevision1のGPIOと,2012年9月以降に発売されたRevision2(図中の真ん中,右)は,GPIOの並びが異なっています.
Revision1は,GPIO0,GPIO1があります.GPIO2,GPIO3がありません
Revision2は,その逆です.

パッドを複数繋ぐ場合には,この点に注意して,実際にコントローラのOUTをGPIOのどこにつないだかを確認して,ソフトの設定をする必要があります.

公式にある注意書き
NOTE: pad1 & pad2 are only used with rev.1 board, and pad5 and pad6 with rev.2. So if you have rev.2 board, pad1 and pad2 must be set as 0.

(訳)
注意:PAD1&PAD2は,Revision1の基板でしか使いません.Revision2の基板では,PAD5&PAD6を使います.Revision2の基板を使う場合には,PAD1とPAD2は,0に設定してください.




2.3.RaspberryPi上の設定

2.3.1 ドライバインストール

RetroPie設定コマンドを起動します.
sudo ./RetroPie-Setup/retropie_setup.sh
325: SNESDev (Driver for the RetroPie GPIO-Adapter)  まずこれを停止させる
1: Disable SNESDev on boot and SNESDev keyboard mapping.



310: Gamecon & db9 drivers を実行します.

質問に答えていきます.
GPIO gamepad drivers require that most recent kernel (firmware) is installed and active. Continue with installation?
→ <Yes>

Gamecon GPIO driver successfully installed. Would you like to see README?
→ <NO>
もう一個,dp9についてのREADME表示
→ <NO>

Gamecon driver supports RetroPie GPIO adapter board for 2 SNES controllers. Do you want to configure gamecon for 2 SNES controllers?
→ <NO>


この後,念のため再起動しておきましょう.

2.3.2 接続テストと登録

・参考URL:GPIOマッピング
https://github.com/RetroPie/RetroPie-Setup/wiki/gamecon_gpio_rpi

コマンドラインで以下のコマンドを入力してください.
sudo modprobe gamecon_gpio_rpi map=0,0,2,2,0,0
jstest /dev/input/js0

js0とjs1でテストしてください.1コン,2コンがきちんと接続できていれば,
ボタンを押したり離したりすると,表示が変わるはずです.


接続に成功したら,この設定を設定ファイルに書いておき,自動で接続されるようにします.

sudo nano /etc/modules
uinput をコメントアウト →  # uinput
gamecon_gpio_rpi map=0,0,2,2,0,0 を追記


再起動させましょう.
sudo reboot



設定コマンドの意味
mapの数字は,左からPAD1,PAD2,PAD3,PAD4,PAD5,PAD6を表しており,数字は,接続したコントローラの種類を表します.

 # modprobe gamecon_gpio_rpi map=<pad1/GPIO0>,<pad2/GPIO1>,<pad3/GPIO4>,<pad4/GPIO7>,<pad5/GPIO2>,<pad6/GPIO3>
     where <pad...> is a number defining the pad type:  
     0 = no connection  
     1 = SNES pad  
     2 = NES pad  
     6 = N64 pad  
     9 = SNES mouse  

1コンと2コンは,同じICを使っているので,ボタンの数は違いますが,どちらも 2:NES padで動きます.






3.RetroPieでの設定(コントローラ,ゲームソフトインストール)

3.1.RetroPieメニュー画面操作用のコントローラ設定

OSが起動すると,以下の画面になります.

この画面で,ファミコンコントローラー1Pのボタン(どれでもいい)を 長押しします.
すると,画面にNESPADと表示された後,設定画面になります.


D-PADは,十字キーのことです.順番に押していって設定していきます.
↑ ↓ ← → START SELECT A B と設定していって,
その後X,Y・・ と続きますが,ボタンがないので,
既に設定したボタン(Aボタンでいい)を長押しすると,設定を飛ばします.

たくさん飛ばさないといけないですが,頑張って,Aボタンを押していきます.


設定が終わるとメニュー画面が動かせるようになります.


3.2.ゲーム用のコントローラ設定

今回は,GUIメニューからRetroPie-Setupに入ってみましょう.
十字キーでメニューを左右に動かすと,「RetroPie」という項目があります.



その中の,「CONFIGURE RETROARCH KEYBOARD/JOYSTICK」を選びます.


次に,
1: Configure joystick/controller for use with RetroArch
を選択します.


この画面になるので,・・・


そのままコントローラを持って,OKを選択します.
この次の画面では,すさまじい速さで最初のBボタンを押す必要があります

以下にボタンを押す順番を書いておきます.
その順番に押していきましょう.

B Y(スルー) Select Start ↑ ↓ ← → A  あとは全部スルー

関係ないボタンは,何も押さずにスルーして下さい.



これで,ゲーム用のパッド設定が終わり,
2コンにも設定が自動で反映されて,両方のパッドが使えるようになります.


3.2.ゲーム中の特殊キーの設定


設定ファイルの在り処は,
/opt/retropie/configs/all/retroarch-joypads/NESpad.cfg

設定をいじって,ゲーム中にセーブしたり,メニューを開いたりできるようにします.
sudo nano /opt/retropie/configs/all/retroarch-joypads/NESpad.cfg

もともと,以下のように設定されています
input_device = "NES pad"
input_driver = "udev"
input_b_btn = "1"
input_select_btn = "2"
input_start_btn = "3"
input_up_axis = "-1"
input_down_axis = "+1"
input_left_axis = "-0"
input_right_axis = "+0"
input_a_btn = "0"
input_enable_hotkey_btn = "2"
input_exit_emulator_btn = "3"
input_reset_btn = "1"
input_state_slot_increase_axis = "+0"
input_state_slot_decrease_axis = "-0"

2:Select を押しながら,各キーを押すと指定した機能が発動します.
3:Start エミュレータを終了(exit)
1:B   リセット(reset)
+0:→  ステートのスロット番号を1つ増やす
-0:←  ステートのスロット番号を1つ減らす


これにさらに,以下のものを追記します.
input_save_state_axis = "-1"
input_load_state_axis = "+1"
input_menu_toggle_btn = "0"

-1:↑   セーブ
+1:↓   ロード
0:A    メニューを出したり閉じたり



これで,セーブをしたり,メニューを出したりすることができるようになります.

4.オンダッシュモニタ(7インチ)用設定

・HDMI接続が検出できなくても,無理やりHDMIに出力する
・サウンド出力先をHDMIにする
・解像度を合わせる 800x480



HDMI iPhone5充電可USB 内蔵 シガー 電源 スピーカー 付 7インチ オンダッシュモニター

(仮)釣りと電子工作:aitendoの7インチHDMIをraspberry piに接続


5.ほげほげ

編集中












0 件のコメント:

コメントを投稿