Arduino unoを使用してHIDデバイス(キーボードなど)を構築することは可能ですか?
当時つまり、Arduinoにボタン入力があり、シリアルラインに出力を提供しています。では、現在のファームウェアをHIDキーボードのように動作できるものに変換するにはどうすればよいですか?
- 新しいウィンドウデバイスドライバーを作成しますか?
- ソフトウェアを作成しますか?シリアルデータを取得し、WindowsにHID入力として読み取らせることができるレイヤー?
- 可能であれば、これを実現するためのより良い方法はありますか?
コメント
- 私は間違っているかもしれませんが、これは実際にはArduinoに関するものではありません。 Window 'のサイドデバイスドライバーの開発についてです。
- Googleでの最初の回答: mitchtech.net/arduino -usb-hid-keyboard …しかし、どのArduinoを指定していません。 Leonardoには'が組み込まれており、適切なドライバーが既に存在します( arduino.cc/en/Reference/MouseKeyboardを参照)。
- Unoを使用している'ですが、'投稿内容を確認します。前回DFUの更新を検討しましたが、コンポーネントが'すぐに利用できず、安価であるため、'ブリックが怖いです。ほとんどの場所と同じように私のエリア。
- @AsheeshRこの問題は現在メタにあります: meta.arduino.stackexchange.com/q/102/46
- そうですね、'は間違いなく可能です。ArduinoUnoはUSBドライバーチップとしてAtmega16u2を備えているため、ユーザーはDFUまたはICSPのいずれかのフラッシュを使用できます。 Leonardo 'に近いファームウェアをデバイスにプッシュすると、ArduinoがHIDキーボードとして動作します。 ' Windowsの開発は含まれず、USB / HIDデバイスとしてビルドされるドライバーはデフォルトで認識されません。つまり、その質問を再度開く必要があります。
回答
Arduino unoを使用してHIDデバイス(キーボードなど)を構築することは可能ですか?
そうです!そして、「ここ
でそれを行う方法に関するすばらしいチュートリアルがあります。とりあえず、Arduinoにボタン入力があり、シリアルラインに出力を提供しています。では、現在のファームウェアをHIDキーボードのように動作できるものに変換するにはどうすればよいですか?
チュートリアルに示されているように、ファームウェアコードを変換して、イベントを出力する代わりに、実際にイベントをトリガーする必要があります。必要なのは、コードに追加することです。
void triggerKey(uint8_t mod, uint8_t chr) { uint8_t buf[8] = {mod, chr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // press key Serial.write(buf, 8); // emulate key press delay delay(10); buf[1] = 0x00; // release key Serial.write(buf, 8); }
ここで行っていることは、メインのArduinoマイクロコントローラーイベントからシリアルラインを介して、USB通信を処理する小さなマイクロコンピューターに送信されます。そのマイクロプロセッサは、これらのキー「バッファ」を取得し、USBHIDキーボードキーがUSB経由で押すと転送します。
ここのコードのキー文字(chr
)に注意してください。 )は、実際にはUSB経由で送信されるキーコードであり、USB HIDドライバーによって解釈され、キーボード用に設定した現在のレイアウトを使用して実際の文字に変換されます。
mod
文字は、キーボードにあるモディファイアキーの1つ(shift、control、alt …)であり、0x00
はモディファイアではありません。
- 新しいウィンドウデバイスドライバーを作成しますか?
いいえ、必要ありません! DFUのアップグレードにより、arduinoはWindowsからはUSBキーボードとして認識されます。
- シリアルを使用できるソフトウェアレイヤーを作成しますかデータを取得し、WindowsにHID入力として読み取らせますか?
どちらも行う必要はありません。実際、これは非常に悪い考えです。多くの理由:
- ソリューションは移植性がないため、使用する可能性のあるすべてのプラットフォームで何かをハックする必要があります。
- ソリューションは多くのことを意味します。新しいコード;コードを1つ書くほど、システムにバグが増える可能性があります。
- ソリューションはデバイスドライバー(つまり、カーネルランド)として動作するため、非常にハッキングされます。 )ユーザープログラム(つまり、ユーザーランド)から入力を取得し、機能しない可能性が高く、デバッグが困難で、セキュリティの問題が発生しやすい…それが可能であれば!
Unoを使用していますが、前回DFUの更新を検討したので、投稿内容を確認します。ちょっとブリックするのが怖い
最後に、コメントで、あなたのarduinoをブリックすることについて懸念があります。私と記事の作成者ができないと信じてください。 div>ファームウェアフラッシュを実行してarduinoをブリックします:
注:この方法を使用してデバイスを「ブリック」する可能性はありません。 ArduinoブートローダーファームウェアはいつでもDFUプロトコルを使用して更新できます!
何かが本当にひどく間違っていて、小さなAVR(atmega8u2)でブートローダーが破損した場合でも、再フラッシュできます別のarduinoを使用するか、 atmelプログラマーをUSBプラグの横にある6つのピンを使用します。
最後に、のみでAVRをブリックする方法、つまりArduinoも、ヒューズで遊んで、プログラミングヒューズをリセットすることです。それでも、 HVSP を使用してデバイスを保存できますが、多くの場合、新しいチップを購入するだけで問題は少なくなります。
コメント
- すべての有用な情報のおかげで、私たちはこれを達成することになりました。
- まあ、AVRをブリックする適切な方法は過電流/過電圧。それからトーストされます…
- しかし、それは'ブリックとは呼ばれませんが、揚げる、またはあなたが言うようにトーストします。 15アンペアをMCUに通すと、'部屋を飛び越えるのがわかると思います;-)
- 特定のキーを解放する方法は?エミュレートしたいキーを押したまま放します。また、リンクでは、文字は配列[2]に移動し、ここでは[1]に移動します。なぜですか?
- 私の例に示すように、2つで実行します。手順では、最初にキーを押してから、'遅延が発生し、次にそれを解放します。それでは、'ハードウェアキーボードの実装方法について自分自身を講義するntationは機能し、'は自然ではなく、配列の各値には意味があります。 ATMを共有するためのリンクがないことをお詫びしますが、ウェブを検索しているものを見つけたら、新しいコメントを投稿してください☺
回答
Arduinoブートローダーを完全に置き換えるプロジェクトを作成しました。スケッチをアップロードしてHIDとして使用できます。 GithubのプロジェクトHIDを参照してください: https://github.com/NicoHood/HID
コメント
- Arduino SEへようこそ!ライブラリの使用方法について少し追加していただけますか?ありがとうございます!
- readmeを読んで、例を試してみませんか?そのすべてがそこにあり、ここですべてを複製する必要はありません。 Githubのすべてが最新です:)
- 申し訳ありませんが、それはクールなライブラリのように見えますが、ドキュメントが不足しています。 '私が知る限り、実際のインストール手順はありません。ウィキのトピック全体で" TODO "(具体的には、ゲームパッドのトピックはこのように完全に空です)。 :-/
- 実際には、ここで基本的な説明を提示する必要があります。外部リンクがなくても、答えは意味のあるものである必要があり、死ぬ可能性があります。そして、これはそうではありません。