/

USB Key Sender2 - M5 AtomS3UでROM領域に書き込んだ文字列(書き換え可能)をキー入力としてPCに送る

M5
M5 AtomS3U

USB Key Sender(バージョン1)の後継のUSB Key Sender2です。

前バージョンはArduio/PlatformIO環境で作りましたが、今回はesp-idf環境で作りました。ROM領域の書き換え部分が不安定だったのですが、新バージョンでは少し改善されました。

タイトルに書いてありますが、メイン機能は下記の二つです。

  • A. ROM領域に文字列(書き換え可能)を保存可能
  • B. 文字列をキー入力としてPCに送る

機能 / 仕様

  • 設定したキー入力をホストPCに送信する
  • 設定はROM領域にJSONファイルとして保存
  • キー入力は最大で10個のパターンを設定可能
  • ボタンを押して離すと、設定された配列内の1番目(0番目)の文字列を送信
  • ボタン長押しすると、配列のindexをスキップできる
  • Windows10(11)、 Linux、Mac

バージョン1からの変更点

ボタン長押しをすると配列のindexをスキップできますが、勝手にindex:0に戻る機能をなくしました。

また、ボタンを押した際のLEDの色の調整は無くしました。

ソースコードは下記になります。 https://github.com/syagawa/usb-key-sender2/tree/v2.1.1

buildに必要なもの

  • M5 AtomS3U
  • PC(Windows11、Linux、Mac)
  • Docker (Windowsの場合はDocker Desktop)
  • VS Code
  • (100均のクッションゴム ※ノートPCで使用するならあった方がいい)

M5
M5 AtomS3Uとクッションゴム

クッションゴムについてはバージョン1を見てください。

コンパイル方法


  1. ソースコードはhttps://github.com/syagawa/usb-key-sender2/tree/v2.1.1に置いてあります。git cloneしてください。

  2. VS Codeでcloneしたレポジトリを開きます。

  3. VS CodeにDev ConainersExtensionをインストールします。

  4. F1キーを押してDev Containers - Reopen in Containerを選ぶと初回はesp-idfのイメージのダウンロードが行われ、devcontainerで再度VS Codeが開きます。

  5. AtomS3UをPCに接続します。

  6. AtomS3Uのリセットボタンを長押しします。

  7. VS Codeでターミナルを開き、idf.py -p /dev/ttyACM0 erase-flashを実行します。AtomS3Uが見つからないというエラーが出たらVS Codeを閉じ、再度開きDev Containers - Reopen in Containerを実行して下さい。

  8. AtomS3Uのリセットボタンを長押しします。

  9. VS Codeのesp-idfエクステンションのBuild Project (スパナのアイコン) ボタンを押します。

  10. VS Codeのesp-idfエクステンションのFlash デバイス (雷のアイコン) ボタンを押します。

  11. AtomS3UをPCから外します

  12. AtomS3Uのボタンを押しながらPCに接続します。初回はこの操作をしないとSETTINGS.TXTが空になってしまいます。

  13. おそらくPCがUSBメモリとして認識してフォルダーが開きます。SETTINGS.TXTを編集します。

  14. AtomS3Uを安全に取り外します。Windowsの場合ハードウェアを安全に取り外してメディアを取り出すからEspressif Deviceを選べばOKです。Linuxの場合は5秒ほど待ってから実際にUSBを抜いてください。

使い方

  1. M5AtomS3Uの中央のボタンを押したままPCに接続

  2. しばらく待つとUSBストレージ(ATOMS3U_MSC)として認識され、SETTINGS.TXTファイルが表示されます

  3. SETTINGS.TXTをメモ帳で開くとJSONファイルとなっています

  4. jsonを編集する

#例1 IDとパスワードを入力してログイン ※<id>と<password>の部分に実際の値を入力する
{"keys": ["<id>", {"key": "TAB"}, "<password>", {"key": "ENTER"}]}

  1. 保存する。

  2. 取り出しでPCから外してください。これをやらずにPCから取り外すと変更がうまく保存されません。取り出して数秒経つとWindowsの場合LEDが光ります。Linuxの場合は5秒くらい待ってから外してください。

  3. 再度PCに接続、中央ボタンを押す(押して離す)と4.で設定したkeysの1番目が入力されLEDライトが点灯して消えます。

  4. keysの長さが2以上の場合、LEDライトが点灯し続けます。その状態でボタンを押す(押して離す)とkeysの2番目が入力されます。keysの次の値が存在する限りこれが繰り返され、keysの長さまで達すると、LEDライトは消灯します。

ボタン長押しでの入力スキップ

通常はボタンを押して離すとkeysのindex番目が入力されますが、1秒ほど長押しするとkeysのindexが一つ進みます。

例えばkeys: ["A", "B", "C"]となっていた場合、indexの初期状態は0となっています。

ボタンを押して離すと0番目である"A"が入力されindexは1となります。次に押して離すとindexが1の"B"が入力されることになります。

ボタンを長押しするとindexが進み、LEDの色も変わります。

keys: ["A", "B", "C"]の場合に長押し(1秒程度)するとindexが0から1となり、その状態でボタンを離すとindexが1の状態で待ち状態になります。

その状態で再度ボタンを押して離すとindexが1の"B"が入力されます。

なお、長押しを続けるとindexはさらに進み2となり、LEDの色も変わります。

これによりkeysに複数の値を設定しておき、場面に合わせて任意のindex番目の値を入力できることになります。

Ctrl + Vなどのキーを組み合わせた入力

Ctrlを組み合わせた入力は下記となります。AltやShiftも同様になります。 全選択してコピーする例です。

{"keys": [{"mod": "CTRL", "key": "a"}, {"mod": "CTRL", "key": "c"}]}

JIS/US配列について

現状でJIS配列にのみ対応しています、もちろん今後US配列に対応する予定です。

認識がうまく行かないとき

Windowsのデバイスマネージャーを開き当該デバイスを削除してください。

対応OSについて

前バージョンはWindowsじゃないとROM領域の書き換え(SETTINGS.TXTの編集)ができませんでしたが、USB Key Sender2はLinuxでもROM領域の書き換え(SETTINGS.TXTの編集)が可能です。 なお、Macは手元になかったのでテストを行ってません。

主な用途

主な用途ですが下記でしょうか、キーボード入力をエミュレートできるので結構いろいろなことができる思います。

  • パスワードの入力
  • ショートカットキー(Chromeの起動など)
  • 複雑なコマンドの実行(複雑なgrepとか)
  • 面倒な操作の自動化(Excelの操作とか)

https://github.com/syagawa/usb-key-sender2/?tab=readme-ov-file#json-examplesにexamplesを載せているので参考にしてください。

今後の予定

US配列への対応や、以前作ったランダムな値を送る機能を実装する予定です。