Petit4Send

Last modified on Jul 04 2020.

任天堂SWITCH用ソフトプチコン4へ、 Arduino(Pro Micro)を用いてファイルを転送するソフトです。

概要

PCからプチコン4へ、 ファイルを転送するためのソフトウェアです。 296byte/sec程度で転送できます。 また、プチコン4からPCへ画像を経由してファイルを転送したり、 接続されたPCのキーボードからプチコン4を制御する機能があります。

動作には「Pro Micro」(Arduino互換機)等のデバイスが必要です。 デバイスの作成方法もこのページで述べますが、組み立てるだけで使えるキットも頒布しています。

動作イメージ

動作イメージ
動作イメージ

動作環境

仕様

ダウンロード・頒布

プチコン4

公開キー【4BKXWKAE

PC

  1. Ver. 1.2.2
  2. Ver. 1.2.1
  3. Ver. 1.2.0
  4. Ver. 1.1.1
  5. Ver. 1.1.0
  6. Ver. 1.0.0

デバイス

はんだ付け・ファームウェア書き込み済みの、組み立てるだけのセットをBoothで頒布しています。

注意事項

ライセンス・利用料・寄付

ライセンス

このソフトは無料で利用して構いません。 今後有料化の予定もありません。 ご自由にお使いください。

2次配布、商用利用、改造、リバースエンジニアリングなどもご自由にどうぞ。

寄付

BitCoin、gumroadPayPalによる寄付を受け付けております。

サーバー維持費、証明書取得・維持費、開発環境構築・維持費等に用います。 明細を公表する予定はありません。 必要を上回った場合は公益機関に寄付し、その旨をサイト内で報告します。

BitCoin

BitCoin アドレス:16NMv1dX4hNpjvnqvRYgXS4neqHHpa6P3Y
16NMv1dX4hNpjvnqvRYgXS4neqHHpa6P3Y

gumroad

PayPal(地域によっては使えません)

説明

プチコンは4になっても相変わらず外部ファイルが読めないので、 データを読み込むためのプログラムを作りました。

プチコン4は音声入力がないため、残念ながら音声転送は使えません。 検討した結果、USBのHIDデバイスを自作して、USBキーボードをエミュレートし、 地道に転送するのが一番よさげということになりました。 なので、残念ながらハードウェアが必要になります。

なるべく安く、お手軽に、ということで、 簡単にUSBデバイスを自作できる「Pro Micro」を用いました。 2019年5月現在、amazonで互換機が最安600円程度で入手できます。 これだけでUSBデバイスが作れるのですが、Pro Microにデータを送る手段が必要です。 UARTという簡単なシリアル通信手法があるので、これを使います。 が、PCからUARTで出力するのに、UARTインターフェースが必要になります。 私はこれもPro Microで作りましたが、専用のハードでも構いません。 このページの使用方法などは2台のProMicroをそれぞれ「USBキーボード」「UARTインタフェース」として使うことを前提に書いています。

Pro MicroをSwitchにつないだ際、エミュレートされたUSBキーボードはInterrupt転送を行っており、 Switchからは8msec毎に情報の送信要請がきます。 USBキーボードは要請があるたびにその時点でのキーの押下情報やマウスの移動量をSwitchに送っています。 USBキーボードは同時に6キーの押下+8つの修飾キー(左右のSHIFT、CTRL、ALT、APP(WIN))が判定できます。 キーコードは1バイトですが、一部の値は使えず、また押下データの6つに重複した値は使えません。 プチコン4ではおおよそ180種のキーコードが使え、また修飾キーは4つまで使えます。 押下キー情報は、「180種の内から6つ選ぶ組み合わせ」だけあるので180C6=43424719800通り、おおよそ35bit。 修飾キーは4つで4bit。合計で39bitの情報があります。

SWITCHのクロックとProMicroのクロックとは正確に同期していないため、データを送る際には同期をとる必要があります。 1つのbitをON/OFFすることで同期をとります。 また、同期の「抜け」を確認するために、更に1bitを追加し、2bitのパケット番号としています。

キーボードを用いて転送するため、送る際のコードが「Ctrl+C」だったり「F5」だとプログラムが止まってしまいます。 他のサブプログラムを起動するようなキーでもダメです。 こういった制限を避けるのに、「Ctrlキー」「ファンクションキー」等を回避します。

Ver.1.2.0からはマウスのボタンの情報を追加しました。 チャタリング防止の為か、高速でオンオフすると正常に取得できないので、VSync2回に5bit分の情報を送っています。

プチコン4側では、伝統通り、入力の情報はVSYNC≒16.7msec単位でしか更新されません。 またSwitchとの通信は8msec間隔なので、24msec単位で転送するか、タイミングを制御して転送する必要があります。

以上のようなことから、Ver.1.2.0現在は、 1転送にかかる時間は16.7msec(高速モード)もしくは24msec(低速モード)で、 1転送あたり39.5bit転送しています。

エラー検出はCRC16を用いました。 私の測定では、適切な条件を選べばパケット抜けは1/10000以下で、 3連続抜ける確率はほぼ考慮する必要がなく、 更にCRC16でのエラー見逃し率は1/60000以下です。 ですので、正常に転送された場合はほぼ間違いなくデータは破損していません。

また、転送レートが遅いのでLZSSによる圧縮を適用できるようにしています。

画像転送

PetitModemと同様に、画像によるファイル転送を実装しました。 十分な解像度があるので、2bit/pixel、白黒のみとしています。 いろいろな制限を考慮して1画像あたり181kByte程度転送できるようにしています。

キーボードリレー・自動タイプ

PCと同時にプチコン4をいじるとキーボードがいくつもあって混乱するので、 PCのキーボード入力をそのままプチコン4用に送る、リレー機能を搭載しています。

また、コピペや短いテキストの転送がしやすいよう、自動タイピング機能があります。

作り方

Pro Micro2台を用いて、UARTインタフェースも自作する手順を記します。

  1. 部品の購入。

    下記の部品を購入。値段は全て購入時点のもの。

    • Pro Micro 5V/16MHz 2つ

      互換機でOK。1つ590円。一つはUARTインタフェース用。一つはUSBキーボードのエミュレート用。

      5V/16MHzを選ぶこと。

      ProMicroの写真
    • ブレッドボード一つ、ジャンパーピン 3本

      600円程度?

      ブレッドボードの写真
    • 「USB typeA オス←→ USB microB オス」変換ケーブル2つ

      600円

    • 「USB typeC オス←→ USB typeA メス」変換ケーブル

      659円。OTG対応のもの。

      OTGケーブル
  2. 組み立て
    • ProMicroのピンヘッダーがはんだ付けされていない場合ははんだ付けする。2枚とも。
    • ブレッドボードに2枚(Switch側、PC側と呼ぶ)とも挿す。
    • 下の表のように、3本のジャンパーピンを使って2枚のPro MicroのTXO、RXI、GNDを接続する。TXOとRXIは互い違いになるように。
      Pro Micro(Switch側)Pro Micro(PC側)
      TXORXI
      RXITXO
      GNDGND
      ProMicroのピンアサイン
  3. ProMicroのドライバをPCにインストール
    • Windows10の場合
      1. USBケーブルでどちらか一方のProMicroをさす
    • Windows7の場合
      1. SparkFunのサイトにあるドライバをダウンロード
      2. 展開して、「sparkfun\avr\signed_driver」にあるドライバをインストール。
      3. どちらか一方のProMicroを挿す。
      4. ちょっと待つ。ダメなら上記ドライバを指定してインストール。
  4. Petit4SendのファームウェアをPro Microに書き込む
    • Pro Micro(Switch側)をUSBでPCに接続。
    • Petit4Sendを起動。
    • [File]→[Write Firmware]を押して[Write Firmware for Pro Micro]ダイアログを出す。
    • Pro Microのつながったポートを指定し、「Petit4Send.ino.promicro.hex」を選ぶ。
    • [Write]を押す。
    • 「Success」と出たら成功。出ない場合は一度抜いてもう一回。
    • 書き込み終わったらPCから外すこと。
    Firm書き込みの写真
  5. UARTのファームウェアをPro Microに書き込む
    • Pro Micro(PC側)をUSBでPCに接続。
    • Petit4Sendを起動。
    • [File]→[Write Firmware]を押して[Write Firmware for Pro Micro]ダイアログを出す。
    • Pro Microのつながったポートを指定し、「USBUART.ino.promicro.hex」を選ぶ。
    • [Write]を押す。
    • 「Success」と出たら成功。出ない場合は一度抜いてもう一回。
  6. 完成
    ProMicroの写真

使い方

PCからプチコンへの転送

  1. ProMicro(PC側)とPCをつなぐ。
  2. ProMicro(Switch側)とSwitchをつなぐ。
  3. プチコン4でPetit4Sendを起動。
  4. PCでPetit4Sendを起動。
    • 高速モードの場合
      1. プチコン4で[DETECT SYNC KEY]を選ぶ。
      2. PCで[Send]タブにある[DETECT]ボタンを押す。
      3. 10秒くらい待つ。
      4. プチコン4に[SYNC KEY]が表示されるので、それをPC側の[Sync Key]に入力する。表示されない場合は接続を確認して再度[DETECT]を押す。
    • 低速モードの場合
      1. PC側の[Sync Key]に「-1」と入力する。
  5. プチコン側で[USB RECEIVE]を選ぶ。
  6. PC側で送りたいファイル、ファイルの種類を選んで「Send」を押す。
  7. 5秒ほどすると送受信が始まる。Switch側でファイル名やサイズ、ファイルタイプを確認して待つ。
  8. 転送が終わるとコントローラー入力待ちになるのでコントローラーの「A」を押す。
  9. 保存して終了。

プチコンからの画像転送

  1. プチコン4でPetit4Sendを起動。
  2. [SCREENSHOT SEND]を選ぶ。
  3. ファイルを選ぶ。(プロジェクト内にないと読めません
  4. 画像が表示されるので保存する。複数枚ある場合はすべて保存する。
  5. PCに送る。
  6. PCでPetit4Sendを起動。
  7. [Decode Image]タブに画像をドロップする。
  8. 保存先フォルダを選ぶ。
  9. [Convert]を押す

キーボードリレー

  1. [Keyboard]タブを開く。
  2. [Start]を押す。
  3. Petit4Sendがフォーカスを持っている間、キーボード入力がそのままプチコン4に送られ、キーボード入力になる。

自動タイプ

  1. [Typing Send]タブを開く。
  2. テキストボックスに送りたい内容を書く
  3. [Start]を押す。
  4. テキストボックスの内容がそのままプチコン4に送られ、キーボード入力になる。

注意点

添付のコンパイル済みファームウェアは「Pro Micro 5V 16MHz」用です。「3V 8MHz」や「Arduino Leonardo」には使えません。 速度的には足りるはずなので、「Pro Micro 3V 8MHz」を買ってしまった人は添付のソースファイルからコンパイルして利用してください。

[Sync Key]が間違っていると正常に転送できません。 [Sync Key]として-1を入力すると低速モードになります。 安定して通信できますが、206Bytes/secまでの速度しか出ません。 [Sync Key]はUSBを挿しなおしたり、SwitchがSleepするまで有効です。

Switchのドックに接続して充電していたり、他のUSB機器がつながっていると転送に失敗する場合があります。 その場合は直接挿すか、低速モード(SyncKey=-1)で転送してください。

Ver.1.2.0からマウスのボタンも転送に使っています。 転送中に押すとファイルが壊れます。

USB MicroBのコネクタは非常に壊れやすいので、USBケーブルは挿しっぱなしの方が良さげです。

PCが遅いと転送レートが下がることがあります。

既知の問題と今後の改良予定

PC側で、転送を強制終了するとプログラムが落ちることがある。
.Netのバグです。 めんどうなので放置。
速度の向上
マウス・ジョイスティックなど他のデバイスの同時利用、 ビットストリームの最大効率化、 圧縮の順で改良していきたい。 あと1割は高速化のめどが立ってるけど、それ以上はきつい。 そろそろ限界です。
マウス・ジョイスティック等を使いたい
マウスはボタンを利用して5bit転送は出来ているのですが、 遅延に対応するためキーボードの半分の更新レートしかでないこと、 マウスを入れると多少キーボードの更新レートが遅くなること、 ライブラリに改造が必要でソースを配布しづらいこと等から見送っています。 Ver.1.2.0からマウスも利用するようにしました。
圧縮
画像やデータ類が多いので、あるとだいぶ違いそう。ほしい。 実装した。
PCをキーボードとして使いたい。
USBケーブルを挿しなおすのが面倒で、HUBを使うと速度がおちるので、 そのままPCのキーボードをプチコン用に使いたい。 簡単にできるはず。 実装した。
逆向きの転送が欲しい

ほしい。リアルタイムの奴。 そしたらネットにもつなげられるのに。 また音声ってのはつらいなぁ…

キーボード側へ流れてくる情報は 「Caps Lock」や「Scroll Lock」のランプ用のものがある。 合計で5bit程度の情報があるんだが…プチコンからそれを制御する方法がない。

とりあえず画像転送を実装した。

クレードルやUSBハブ経由だと低速モードでないと転送できない。
クレードルやハブで充電しながら転送するとINパケがたまに落ちる問題がある。 なんとかしたい。

よくある質問とよくある回答

なにこれ?

PCからプチコン4へファイルを転送したりするソフトです。

なんでUSBを使うの?

プチコン4にはそれしかないので。

遅いんだけど…

我慢で。

転送できない

クレードルなどUSBハブの類が繋がっているとタイミングがずれるため転送ができません。 SyncKeyに-1を入れると転送できる場合がありますが、転送レートが40%ほど下がります。

Arduinoって何?Pro Microって何?

自分で命令を組んで、送って、動作させられる小型のマイコンボードです。 USB機能がついてるものは特に便利です。 自作キーボードなどにも使われています。

Pro MicroはSparkFunという会社が出しているArduino互換のマイコンボードです。 USB機能がついていて、小型で便利です。

他のAVRマイコン/Arduinoでやりたい

ファームウェアのソースは添付してあるのでそちらをコンパイルしたらできるかもしれません。 HID-Projectというライブラリを修正して使っているので、 ソースの中にかかれている注意書きを読んで修正してください。

デバイスを作るのがめんどくさい

ジャンパワイヤーを挿すだけの組み立てキットをBoothで販売しています。 が、自分で部品を一つずつ注文して作るほうが安くて早くて楽しいのでそちらをオススメします。

更新履歴

2019/8/19 Ver. 1.2.2
  • プチコンVer.4.1.0に対応
2019/7/14 Ver. 1.2.1
  • 圧縮の自動選択機能を追加
  • 画像転送の出力をファイル種別に応じてPNG/TXT/DATに保存する機能を追加
  • 画像転送がうまく動かない場合があった問題を修正
  • その他細かい点の修正
2019/6/25 Ver. 1.2.0
  • マウスを使うことと細かい修正により296Bytes/secまで速度向上
  • 圧縮の有無を選択する機能を追加
  • その他細かい点の修正
2019/6/23 Ver. 1.1.1
  • 240Bytes/secの安定性向上
  • SyncKey取得のバグ修正
  • その他細かい点の修正
2019/6/17 Ver. 1.1.0
  • 240Bytes/sec転送の機能追加
  • タイピング機能追加
  • キーボードリレー機能追加
  • 画像デコード・エンコード機能追加
2019/6/9 Ver. 1.0.0
  • 公開。

参考資料

Petit4Send

KOYAMA Yoshiaki のブログ Nintendo Switch 版ダウンロードソフト 'プチコン4' で遊べるマインスイーパ YOS_MINE4 と PC からプチコン4へファイルを転送するためのソフトウェア Petit4Send の簡易説明書を公開。

プチコン4用のマインスイーパとPetit4Sendの使い方。

Petit4Sendを用いたプチコン4号用PC8801エミュへのROMデータ転送方法

風に吹かれて氏によるプチコン4用のPC8801エミュレーターで使うために Petit4Sendでデータを送る方法の説明。

プチコン4

プチコン4 ホーム

プチコン4のサイト

USB

HID Usage Tables 1.12

HID Usage Tables 1.12

Device Class Definition for HID 1.11

Device Class Definition for HID 1.11

Arduino

Arduino - Home

Arduino公式。

GitHub NicoHood/HID

Hid-Project。BootKeyboardなど、標準では対応していないHIDをサポートする際に使います。

SparkFun Pro Micro

Pro Microのページ。

Universal Asynchronous Receiver/Transmitter(UART)のWikipedia

シリアル通信の仕組みの一つ。

プチコン4用の他の転送ソフト

PCからプチコン4

今のところ見つけられていません(2019/6/17)

プチコン4からPC

ギターやんよ氏によるSRC2PIC

未評価。公開キーは【44A45D3Q3】

そのほか

BOOTH

個人創作物がメインの販売サイト