スーパーファミコンのコントローラーの中にRaspberry Zero W + Retropie を入れたコントローラー兼レトロゲーム機

Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトのプライバシーポリシーをご覧ください。
この記事は最終更新日から2年経過しています。適切な内容ではない可能性があります。

海外でスーパーファミコン(SNES)のコントローラー内にRaspberry Pi Zero またはWを入れ、コントローラーの制御をGPIOに直接繋げておこなうプロジェクトがありました。

話題のミニスーパーファミコンよりも小さく面白い&簡単だったので同じように作ってみた!

海外の紹介では、電源をコンセントから取るのではなく、バッテリーにしています。その際、バッテリとRaspberry Pi とは直接繋げられず、もう1枚小さな基板をかませます。

バッテリー自体はそれほど高価ではありませんが、屋内で使うゲーム機に電源を取れないとは考えにくいのでここでは省きました。

USB端子のあるテレビなら、そこから電源が取れます。

同じように作ってみてください!

この記事の主な流れ

今回の材料

  • Raspberry Pi Zero W
  • マイクロSDカード
  • microUSB変換ケーブル
  • ミニHDMI変換ケーブル
  • スーパーファミコンのコントローラー ジャンク

microUSBとミニHDMIの変換ケーブルは太さや長さの問題はありますが、もっと低価格で入手可能です。

変換ケーブルは、100円ショップ品は長さが無いので、少し長いケーブル状の物を選びます。幅が大きいためケーブル式の方が作りやすかったです。

また、スーパーファミコンのコントローラーは概ね216円で手に入りますが、今回はほぼ新品に近いため324円のジャンク品を選びました。

いずれにしてもミニスーパーファミコンより安価です。

仕様

  • コントローラーの配線5本の箇所にGPIOの対応ピンへはんだ付けする。
  • 電源は内蔵バッテリーの方がより良いが、製作を簡単にするためモバイルバッテリーかコンセントにする。

(テレビ側のUSB口に繋いでやればコンセントも要らない?? 給電だけはできないのかな??)

コントローラーの加工

2つのケーブルをコントローラー上部から出すためにコントローラーケース(以下ケース)を削り加工する。

スーファミコントローラーケース下側
スーファミコントローラーケース下側
ケースの切断箇所はこの2点
ケースの切断箇所はこの2点

ケーブルが通る位置を削る。下側も上側も同じくらいに削ると良さそう。

マークしてからニッパーで大まかに切り取り、棒ヤスリで削った。

こんな仕上がり
こんな仕上がり

ケースの反対側(裏側)は補強のための成形が邪魔なので削り取る。他のサイトのように全て取る必要は無かった。バッテリーを入れる場合は全て取らないと干渉しますね。

ケース裏側の加工

アップ
加工済みアップ

ケースの加工はプラスティックなので簡単です。ただ、細かな作業をするには固いので割れます。工具があればなんですが、売り物ではないので使えればOKというラフさでもケーブルを通せばそれほど目立たなくなります。

ヤスリ後
ヤスリ後

ヤスリ後通すケーブルによって大きさは変わります。特にHDMIの変換ケーブルは短いと横幅が大きくなるのでLRボタンに干渉します。

長めのケーブルでも写真のようにギリギリです。写真ではまだ5ミリ程度は余裕がありますが、中のLRボタン端がギリギリなのでこれが限界ですね。

仮にバッテリーを入れることを考えれば、ケーブルは1本だけでいので、中心も含め大幅に切り取れると思います。

ちなみに、MicroUSB変換コードは、100円ショップでも運がいいとあります。

■技適認可されたPi 5と安価になったPi 4

はんだ付け

ケースの加工の次ははんだ付けです。
スーパーファミコンのコントローラー基板とRaspberry Pi のGPIOを繋ぎます。

コントローラー基板は元々5本のリード線が1つの端子にまとまって1本のケーブルで外に出ています。この5本をそれぞれGPIOの対応したピンに直接接続することで制御します。

まず、元々付いている端子を溶かして外し、穴だけの状態にします。

はんだ付け後
はんだ付け後

真ん中の5つを溶かします

裏側には端子を接続するアタッチメントがはんだ付けされているのが分かります。

白いアダプタを外す
白いアダプタを外す

白いアダプタを外すこの辺りは慣れでしょう。仮に壊れても216円でまた買えば済むと思います(^0^;)

結構、乱雑に扱いましたが壊れることもなかったので安心してください。

はんだ付け後は、こんな感じです。

はんだ付け後
はんだ付け後

では、GPIOのどのピンに接続するのか次にご紹介します!

GPIOのどの場所へ取り付けるか

ここが一番キモですね。この番号を間違えれば動きません。というより壊れますね。

探してみるとこれという情報はありませんでした。いくつかのサイトを参考にスーパーファミコンの場合と置き換えて調べました。

実は、1番から5番とコントローラー基板に記載があったのですが、完全に間反対に間違えてしまって、電源入れたらコントローラー基板のコアがめちゃくちゃ熱くなって焦りました・・・(^0^;)

何度も確認した方がいいですね。間違えずに取り付けてください。

GPIO取り付け位置
GPIO取り付け位置

GPIO取り付け位置(これが一番分かりやすい画像でした!)

線は元々スーパーファミコンコントローラー基板に使っていたのを流用しましたが、細い線であったので取り付けに苦労しました。また、上の写真と色が同じで分かりやすいのが、そもそも順番を間違えて線の色をはんだ付けしてしまったので、余計にこんがらがって・・・。
線は太い方がやりやすいです。ただ、長いと取り回しに苦労するとは思います。

Raspberry Pi のGPIO図

GPIO
GPIO番号図

文字で記載すると・・・。

コントローラー基盤とGPIOピンの対照表

SFC側コントローラー基板Raspberry Pi のGPIOピン番号
19(GND)
25(GPIO)
325(GND)
421(GPIO)
51(3.3V)

コントローラー基板には1と5と番号が印刷されています。どちらが1か5か確認してください。真反対にしてしまうと発熱やショート発火など危険です!(体験者は語る)

OSのインストールと設定

ハードウェアの製作が終わったら、ここからはソフトウェアの準備です。

OSにはRetropieを使用します。そしてコントローラーのドライバをセットアップすれば出来上がります。

今回はHDMIでPCモニターに繋いでセットアップしました。テレビでも良いのですが、画面が粗くて見えづらいと思います。

尚、キーボードを余っているもう一つのUSBに繋げて操作するか、SSHで他のマシンからでも可能です。

まずはRetropieをSDカードに焼き付け、設定を行います。
今回はRaspberry Pi Zero Wを使用したので、Wi-Fiの設定を行い、外部から操作できるようにしておきます。

以下の手順で紹介していますので参考にしてください。ここでは省きます。

root権限のパスワード設定

念のためrootのパスワードを設定しておきます。自宅以外でも利用することを考えてのことです。
必要無いなと思われたら飛ばしてください。

sudo passwd

※初めはrootにはパスワードが設定されていません。

ドライバーの適用

retropieを初めて起動すると以下の画像のように、コントローラーの設定画面になります。ただ、この段階ではGPIOに繋いだコントローラーは認識していませんのでAボタンを押しても何も起こりません。

この状態では手も足も出ないため、ファンクションキーF4でこの画面を抜けられ、CUIの画面になります。

コマンドにて操作

sudo ~/RetroPie-Setup/retropie_setup.sh

Raspberry Pi Zero Wは速度が遅いため、表示されるまで多少時間がかかります。何も起きていないように思えますが、5秒ほど待ってください。

次にセットアップメニューから操作

Manage Packages → Manage Driver Packages → gamecondriver

Gamecon & db9 driversをインストールしてください。

環境設定

sudo modprobe gamecon_gpio_rpi map=0,0,1,1,0,0

Controller Type Legend

0 = No connection
1 = SNES gamepad
2 = NES gamepad
3 = Gamecube gamepad
6 = N64 gamepad
7 = PSX/PS2 gamepad
8 = PSX DDR gamepad
9 = SNES mouse

コマンドを叩けば環境設定は終了です。

ジョイスティックのテストが以下のコマンドでできます。

jstest /dev/input/js1

本来、js0がデフォルトなはずで、他のサイトでもjs0の記載があります。他にコントローラーを繋いでいるわけでもないので、js0で良いはずです。何か他のオプションをチェックしてしまったのか、js1で反応しました。この辺りは試行錯誤してみてください。

コマンドで以下のように表示されます。

pi@retropie:~ $ jstest /dev/input/js1
 Driver version is 2.1.0.
 Joystick (SNES pad) has 2 axes (X, Y)
 and 8 buttons (BtnX, BtnY, BtnTL, BtnTR, BtnTR2, BtnSelect, BtnThumbL, BtnThumbR).
 Testing … (interrupt to exit)
 Axes:  0:     0  1:     0 Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off

最後の行(赤マーカー部分)の数字:offの部分がボタンを押すとonに変わる。

ここで動かない場合は、恐らく配線が通電していないと思われます(配線間違いかはんだ付けミス)

もしもjs1がないというエラーの場合は、sudo apt-get install joystick でインストールかけると現れる(ハズです)(アプリケーションは既に最新が入っていると思うのでインストール自体は行われない)

完成!

sns_controller pi
スーパーファミコン内蔵SFCコントローラー本体

ケースの製作にはそれなりに時間を掛けました。それでも意外と簡単にできる物です。

設定やコマンドなどキャプチャ画像を取り忘れるくらいにあっという間に終わります。

今回、他の情報が多く、理解せずに迷って試行錯誤した部分があるので、遠回りしてセットアップしました。しかし、終わってみれば簡単なこと。ドライバー入れて終わりくらいの勢いですね。

こうやってRaspberry Pi に触れてみると、よく出来た基板だなーと痛感します。物づくりの楽しさが味わえます。

エミュレータに関しては、グレーな部分も多く、ROMの入手方法などは各自が合法の範囲で入手してください。パブリックドメインのROMも多数あります。それらで楽しむのも一興です。

これでRaspberry Pi はこれまで2B×1、3B×3、Zero W×2と製作しました。安いので負担になりませんね。ただ、Zero系がなかなか手に入らないことがネックです。

このSFCコントローラーにラズパイを入れるという日本語環境の記事が1件しか見つかりませんでしたので改めて記事にしました。

参考:

この記事の主な流れ