USB Key Sender2 - M5 AtomS3UでROM領域に書き込んだ文字列(書き換え可能)をキー入力としてPCに送る
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で使用するならあった方がいい)
クッションゴムについてはバージョン1を見てください。
コンパイル方法
-
ソースコードはhttps://github.com/syagawa/usb-key-sender2/tree/v2.1.1に置いてあります。git cloneしてください。
-
VS Codeでcloneしたレポジトリを開きます。
-
VS Codeに
Dev ConainersExtensionをインストールします。 -
F1キーを押して
Dev Containers - Reopen in Containerを選ぶと初回はesp-idfのイメージのダウンロードが行われ、devcontainerで再度VS Codeが開きます。 -
AtomS3UをPCに接続します。
-
AtomS3Uのリセットボタンを長押しします。
-
VS Codeでターミナルを開き、
idf.py -p /dev/ttyACM0 erase-flashを実行します。AtomS3Uが見つからないというエラーが出たらVS Codeを閉じ、再度開きDev Containers - Reopen in Containerを実行して下さい。 -
AtomS3Uのリセットボタンを長押しします。
-
VS Codeのesp-idfエクステンションのBuild Project (スパナのアイコン) ボタンを押します。
-
VS Codeのesp-idfエクステンションのFlash デバイス (雷のアイコン) ボタンを押します。
-
AtomS3UをPCから外します
-
AtomS3Uのボタンを押しながらPCに接続します。初回はこの操作をしないとSETTINGS.TXTが空になってしまいます。
-
おそらくPCがUSBメモリとして認識してフォルダーが開きます。SETTINGS.TXTを編集します。
-
AtomS3Uを安全に取り外します。Windowsの場合
ハードウェアを安全に取り外してメディアを取り出すからEspressif Deviceを選べばOKです。Linuxの場合は5秒ほど待ってから実際にUSBを抜いてください。
使い方
-
M5AtomS3Uの中央のボタンを押したままPCに接続
-
しばらく待つとUSBストレージ(ATOMS3U_MSC)として認識され、SETTINGS.TXTファイルが表示されます
-
SETTINGS.TXTをメモ帳で開くとJSONファイルとなっています
-
jsonを編集する
#例1 IDとパスワードを入力してログイン ※<id>と<password>の部分に実際の値を入力する
{"keys": ["<id>", {"key": "TAB"}, "<password>", {"key": "ENTER"}]}
-
保存する。
-
取り出しでPCから外してください。これをやらずにPCから取り外すと変更がうまく保存されません。取り出して数秒経つとWindowsの場合LEDが光ります。Linuxの場合は5秒くらい待ってから外してください。 -
再度PCに接続、中央ボタンを押す(押して離す)と4.で設定したkeysの1番目が入力されLEDライトが点灯して消えます。
-
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配列への対応や、以前作ったランダムな値を送る機能を実装する予定です。