きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Arduino (Pro Micro)を使ってSNES Controller to XInput Converter を作成した

Arduino (Pro Micro互換ボード)を使用して、スーパーファミコン(SFC/SNES)のコントローラをXInput対応のUSBコントローラーとしてPCで使用できるコンバータを作成しました。

動機

  • 右手を痛めたのでSFC用の片手コントローラー*1をPCで使いたい
  • どうせならXInput対応のコンバーターが欲しい*2
  • XInput対応の既製品の入手性が微妙*3だが、少し調べたところ安価なPro Microで作れそう

モチベーションはざっくりこんな感じです。

仕組みとか

ざっくりした仕組みとしては以下になります:

  • ArduinoのGPIOとSFCコントローラーのコネクタピンを接続
  • SFCコントローラーの入力状態をArduinoで解析
  • 読み取った入力状態に従ってXInputのボタンのON/OFFを切り替える

割とシンプル。

『SFCコントローラーの入力状態をArduinoで解析』については既に実行されている方が何人もいらっしゃいました。私が直接参考にさせていただいたのは以下の記事です。

zenn.dev

こちらの記事中で、Pro MicroをSFCのパッドを読み込みArduinoJoystickLibraryというライブラリ(https://github.com/MHeironimus/ArduinoJoystickLibrary)を使って標準HIDゲームパッド(≒DirectInput対応)として動作させるスケッチも公開されいたのでそれを流用させていただくことにしました。

github.com

また Pro MicroのXInputデバイス化は以下のライブラリを使用することで実現できました。

github.com

先人の成果物に完全におんぶにだっこ状態です(とてもありがたい)。

部材

以下の部材を使用しました。もともと手元にあったものやジャンクからはぎ取ったりしたもの等なので価格記載しません。

  • SFCコントローラー用コネクタ(ジャンクのSFC本体から取得)
  • Pro Micro互換ボード
  • USB MicroBケーブル(100均モノ)
  • ケース(100均モノ)
  • 配線材料(適量)
  • 固定用のネジ等

プログラム(ソースコード)

スケッチはこちらで公開しています。手元のPro Microで試しています。 github.com

参考というよりべースにさせていただいた snes_gamepad_arduino/snes_gamepad_arduino.ino at main · ka-zuu/snes_gamepad_arduino · GitHub から私が書き方ところを中心に説明すると、以下のような感じです

  • AdruinoJoystickLibrary使用箇所をArduinoXInputに変更
    • ほどんと機械的に置き換えるだけのレベルの変更
  • 使用するGPIOピンを5,6,7 → 7,8,9に変更
    • ボードの端から使う方が配線しやすいという程度の理由
  • SERIALを読み取るポートで内部プルアップ抵抗を有効にするようにした
    • pinMode (DATA_SERIAL, INPUT_PULLUP); のところ
    • コネクタにSFCパッドを接続していないときに状態を安定させるため

ArduinoXInput利用時の注意点

ArduinoXInputを利用する場合、Arduino IDEでボードに書き込む際に以下の注意が必要です。

  • XInput USB Core for Arduino AVR が必要
    • ボード選択に「x/XInput」のものを選択
  • 2度目以降の書き込みではリセット操作が必要
    • Pro MiroのGNDとRSTピンを2回、ショートさせる

接続と検証

まずは一旦ブレッドボードを使って配線して動作確認しました。

ゲームパッドとしての動作確認には Gamepad Tester のサイトが便利です。 hardwaretester.com

XInputの場合はXBOX 360 コントローラーとして表示されます。

ケースへの組み込みと配線

最終的に100均のカードケースに組み込みました。 配線は5本だけなので特に基板などは介さず直結しています。またUSBケーブルはあまり抜き差しするとArduinoを痛めるので(実際この実験中にも一つ壊した)、100均のケーブルを指したままにする形で組み込みました。

動画

今回、実験的に作業を動画にしてYoutubeにアップしてみました。

youtu.be

youtu.be

youtu.be

youtu.be

*1:アスキーグリップの状態が良いものをちょうど入手した

*2:Steamで配信されているゲームをプレイすることが多いし

*3:XInput対応か不明なものが多い/対応しているものはそこそこの価格

Synology RT2600acとMR2200acで構成されたメッシュWi-FiにRT6600axを追加した

Synology RT2600acとMR2200ac×2の計3台で構成されているメッシュWi-Fiに対して、

  • メッシュの親(プライマリポイント)を RT2600ac から新規に購入した RT6600ax に入替え
  • 取り外したRT2600acをWi-Fiポイント(子)として追加

という作業を行ったのでメモ。

背景

  • 現状の構成ではWi-Fiの入りが良くない部屋でPC作業をする必要が出てきたため、メッシュにポイントを追加することを検討
  • 現行の構成のまま追加ポイントとして足せるのはMR2200acだが、Wi-Fi 6にも対応していない数世代前レベルの機能であるMR2200acを新たに購入するのは2023年10月現在において魅力が乏しい
  • 少し調査したところ以下が判明
    • 現時点で最新のSRM 1.3.1ベースでは、RT6600axおよびWRX560をプライマリポイントとすることでRT2600acを子のWi-Fiポイントとして利用可能
    • 既存メッシュのRT2600acの、RT6600axおよびWRX560への入替えは公式にサポートされている(一から再構築する必要はない)

以上より、多少コストはかかるもののRT6600axを一台新規購入することで当初の目的を達成しつつネットワーク全体としての性能の向上や将来性の面でもデメリットの無い対応ができそうと判断した。

作業概要

公式のナレッジセンターの以下のドキュメントがピンポイントで適合する。

要約すると:

  • プライマリWi-Fiポイントの入れ替え
    • 既存構成のRT2600acとMR2200acのSRMを最新にアップデート
    • 既存構成をファイルにバックアップ
    • RT6600axを仮セットアップ
    • RT6600axにバックアップを適用
    • RT2600acの取り外しとRT6600axの接続
  • 子Wi-FiポイントとしてRT2600acを追加
    • RT2600acをハードリセット
    • Wi-Fiポイント追加の設定

となる。

以下、いくつかポイントのメモ書き。

プライマリWi-Fiポイントの入れ替え

  • 要はプライマリポイントの機器交換後に交換前のバックアップを適用することで構成を維持することが可能ということ
  • ただしSRMのバージョンについて以下を満たす必要がある
    • SRM のバージョンは 1.3以降(最新が望ましい)
    • SRM のバージョンが入替前後でパッチレベルまで一致している必要がある
  • SRM 1.2系かから1.3以上へのアップデートは自動では行えない模様
  • RT6600ax の初期設定は、とりあえずSRMにログインできれば良い
    • RT6600axがインターネットに接続されている必要はない
    • SRMにログインしてSRMのバージョンアップとバックアップの復元ができればそれでよい
      • ネットワークのSSIDなども適当で良い
      • ただし管理ユーザーのIDとパスワードはバックアップ後も引き継がれる模様なので既存設定の合わせておく方が良さそう
  • RT6600ax のSRMの更新
    • SRMのバージョンアップが必要なケースあり(出荷タイミングによっては不要なケースもありそう)
    • RT6600ax を直接インターネットに接続せず、ダウンロードセンターから取得してアップデートしても良い
  • バックアップから復元
    • RT2600acの取り外しやRT6600ax の接続前にバックアップを戻してしまって問題なかった
  • 機器の入れ替え
    • 物理的に RT2600acを外して同じようにRT6600ax を接続し、RT6600ax を起動すれば交換完了

メッシュの子Wi-FiポイントとしてRT2600acを追加

  • RT2600acのハードリセットが必要な点に注意
  • RT2600acのSRMを1.3.1にしておく必要がある
    • 今回の場合前段で既存構成から取り外す前に行われているので気にしなくて良い
  • Wi-Fiポイントの追加作業そのものは従来と全く変わらない

まとめと今後の展望

  • メッシュWi-Fiのプライマリポイントの入れ替えは公式でサポートされている行為でありドキュメントもそろっているので良かった
  • 作業自体も特にトラブルを起こすこともなくすんなり終わった
  • 今後のWi-Fiポイントの追加や入れ替えも必要応じてスムーズ対応できそう

Sony Float Run WI-OE610 を買った

『ながら作業用ワイヤレスヘッドホン』としてLinkBudsからSony Float Run WI-OE610 に買い替えてみました。

LinkBudsは自分の耳の形のせいもあるのかうまく装着が決まるまで何回かモソモソやり直すことがあったり、動きながら作業してると外れることもあったりで微妙なストレスになることがちょいちょいあった、というのが最大の理由です。

個人的なLinkBudsと比較して買い替えてよかったと思えた点は以下:

  • 装着がしやすい、装着に手間取ることがない
  • 落ちる心配がない
  • 連続使用時間が長い(カタログスペック上は倍近い)

ガッツリ音を楽しむときは別のヘッドホンを使用するのでこれに音質はあまり期待していませんでしたが、ながら作業用用途としては十分及第点という印象です*1。 音漏れも思ったよりないし、かなりいい感じに思えてます。

*1:そもそもLinkBudsもそれなりでしかなかった

REALFORCE R3SC13 を買った

REALFORCE R3Sシリーズのテンキーレス、ALL 30g荷重のR3SC13 を購入しました。

先月から手首~肘にかけての筋を痛めていて、そのあたりの負担を少しでも軽くするのが最大の目的。

元々は初代シリーズのテンキーレス・変荷重のNG01B0 91UBKを10以上使っていたのですが、触って実感した違い等は以下な感じです。

  • 45gだったキーが30gになるとタッチ感がかなり違う
  • すごく静か
  • 全体的にソフトに打ててすごく打ち心地が良い
  • 筐体がカッチリシャープで成型の精度等も良いと思える*1

総じてすごく良い印象で、もっと早く買っておけば良かった……というのが正直な感想です。

難点としては、ホームポジションに軽く手をのせてるだけでも入力を検知される感がある点。 でしばらく慣れと矯正が必要かなと思ってます。

*1:正直初代シリーズは値段の割に筐体の成型は割と雑で歪みとか普通にあった感じある

CSP2の拡張コネクタ用のハウジングとコンタクトピンとアサイン

CSP2のキックボタンが出てる拡張コネクタ関連のメモ

ハウジングとコンタクトピンの型番

  • ハウジング
    • ヒロセ電機 : DF1B-34DS-2.5RC
  • コンタクト
    • ヒロセ電機 : DF1B-2428SC

ピンアサイン

https://junkerhq.net/xrgb/index.php?title=CPS-II から

CPS-II - Classic Console Upscaler wiki

後で自分で検索するとき用のワード

CPS-2, CPS2, キックハーネス, 拡張コネクタ, ハウジング, コンタクト, ピンアサイン, キック, ボリューム