この迷惑な誤解をできるだけ安く、コンパクトに修正することが決定されました。 Raspberry PiとArduinoのステレオタイプから始めましょう。次の記事は別のハードウェアで続けられます。
必要なもの:
1.ビデオキャプチャカードは、このようなUVCドライバーをサポートするために必須です。
アリエクスプレスや他の中国の店舗でいっぱい。

UVCは、ほとんどのLinuxディストリビューションにデフォルトで含まれている標準化されたオープンソースドライバーであり、他のドライバーに問題がある可能性があります。
2. VGA to AVコンバーター:


注意してください! 必要なのは、VGAからAVへの変換であり、その逆ではありません。
3. Arduino UNO、つまりUNOはAtmega16u2チップを搭載しているため、何よりもまず興味を持っています。 ここでは、USBポートの隣にあり、両方に適合するAtmega8u2チップを備えたarduinsもあります。

4.そしてもちろん、Raspberry Piにはバージョン2 bがあったので、この記事に書かれていることはすべて彼に関係がありますが、一般的に他のラズベリーモデルに特別な問題はないはずです。
分布を埋める
配布パッケージ2015-05-05-raspbian-wheezyを使用しましたが、おそらく問題ではなく、Debianベースのディストリビューションに適した操作が必要です。
ビデオキャプチャカードをバーバリーに接続します。USB延長ケーブル、特にボードに付属しているケーブルを使用せずに直接USBに接続すると、ビデオブレーキ、フリーズバリなどが発生する可能性があります。
コンソールに移動して、パッケージを更新します。
sudo apt-get update && sudo apt-get upgrade –y
ビデオ転送
ボードが決定したかどうかを確認します。
ls /dev/video*
/ dev / video0のようなものが生成されるはずです。
モーションを設定し、キャプチャした画像をそれを通して送信します。
sudo apt-get install motion -y
自動実行構成を編集します。
sudo nano /etc/default/motion
行
start_motion_daemon
「yes」を設定します。 変更を保存しますCtrl + x、y、Enter。
モーション自体の構成を編集します(a):
sudo nano /etc/motion/motion.conf
パラメーター値を次のように変更します。
このパラメーターは、アプリケーションをサービスとして起動することを定義します。
daemon on
これらのパラメーターは、送信される画像の解像度を決定します。より高い解像度を設定しても意味がありません。 ビデオキャプチャはPALまたはSECAM標準に制限され、その解像度は720x576です。 これは偶然に迷惑な欠陥ですが、それについては後で詳しく説明します。
width 800 height 600
フレームレート:
framerate 25
スクリーンショットの保存を無効にします。
output_normal off
画像伝送品質:
webcam_quality 100
フレームレート:
webcam_maxrate 25
他のIPからの接続に関する制限の削除
webcam_localhost off
変更を保存しますCtrl + x、y、Enter。
クラックを再起動します。
sudo reboot
すべてが正しく行われ、ビデオキャプチャボードのLEDが点灯する場合、数分間待機しています。
ブラウザをポート8081 raspberryに接続すると、下から実行されている灰色または青色の長方形が表示されます。

プロセスが開始され、VGAポートからの信号をキャプチャする被害者を探しています。コンバータの「VGA IN」ポートに接続し、ビデオキャプチャカードを「VIDEO OUT」に接続します。 このようなものである必要があります。ケーブルが悪いことを恐れないでください。そのため、画像は「ダブル」です。別の画像を試してみましたが、解像度は変更できません。 720x576はコンバーターとビデオキャプチャカードの制限であり、すべての要望を克服することはできません。

画像を送信することを十分に学んだ、それは小さな場合の場合-制御を転送するために残っています。
コントロール転送
このために、あなたはそれを推測した、私たちはarduinoを使用します。 理由はArduino UNOにあり、Atmega16u2と呼ばれる私たちの目的のために非常に必要なチップがあります。それのおかげで、コンピュータのBIOSを取得してarduinoをUSBキーボードとして識別できました。 デフォルトでは、arduinoボードの一部として、このチップは、arduinoボード上の大きな長方形のチップであるAtmega328pマイクロコントローラーにファームウェアをアップロードするためのUSBシリアルコンバーターとして機能します。 実際、Atmega16u2は同じマイクロコントローラーですが、重要な違いはありますが、USBバスで直接動作することができます。 必要なファームウェアを備えたAtmega16u2は、ほぼすべてのUSBデバイスをエミュレートできます。 私が何をしているのか理解できますか? この工学の奇跡を縫い、社会のために働くことを強制します。
Atmega16u2ファームウェア
インターネットで、Atmega16u2をシリアルポートを介して特定のタイプのコマンドを受け入れるUSBキーボードに変えるファームウェアが見つかりました。
この記事の手順はWindows向けに書かれています。Linuxsoidはこれを利用できます。
では、先に進みましょう。ファームウェアには、 Flipというメーカーのユーティリティが必要です。 ダウンロード、インストール、実行すると、プログラムウィンドウが表示されます。

最初は、ボタン(DAW)はアクティブではありません。これは正常です。arduinoをコンピューターに接続して閉じます。USBポートから2つの極端な接点、RESETとGNDを開きます。

奇妙なことに、新しいデバイスがシステムに表示され、ATmega16u2ドライバーを(プログラムフォルダーに)インストールし、フリッププログラムで[設定]→[通信]→[USB]→[開く]タブを選択すると、ボタンがアクティブになります。 念のため、すべてを元の場所に戻すことができるように、ファームウェアをバックアップできます。 「File」メニューで「Load HEX File」をクリックします。プログラムはパスを要求します。ファームウェアファイルをC:ドライブのルートに配置し、ファームウェアで目的のhexファイルを選択し、「Erase」、「Program」、「Verify」チェックボックスが[実行]をクリックします。 切断-arduinoと出来上がりを接続します...これで、内蔵USBを介してarduinoにファームウェアをダウンロードできなくなりましたが、ボタンのない優れたキーボードが得られました。
arduinoファームウェアについて心配する必要はありません。ファームウェアは別のUSB-TTLアダプターを介してArduino IDEからダウンロードできますが、今ではあまり便利ではありません。
USB To TTLアダプターを接続します。たとえば、次のとおりです。

白、緑、黒の接点が必要です。これらはそれぞれRX、TX、GNDであり、それらをArduinoの同じ名称のピンに接続します。RXからTX、TXからRXです。 赤いコンタクトは使用しないでください!
USB to TTLをコンピューターに接続し、ドライバーをインストールすると、デバイスマネージャーに新しいCOMポートが表示されます。 arduino IDEを開いて公開します:ボード-Arduino / Genuino Uno、ポート-新しいシリアルポート。
Arduinoファームウェアの使用開始
必要なライブラリをarduino IDEに追加します。リンクgithub.com/SFE-Chris/UNO-HIDKeyboard-Libraryをたどり、 「クローンまたはダウンロード」→「ZIPをダウンロード」をクリックします。 次に、arduino IDEで[スケッチ]タブ→[ライブラリを接続]→[.ZIPライブラリを追加]を選択し、ダウンロードしたばかりのzipアーカイブを選択します。
準備が完了したら、ファームウェアに直接アクセスしてください。 落書きをコピー:
Arduino-スケッチ
#include <HIDKeyboard.h> HIDKeyboard keyboard; int sbor; void setup() { keyboard.begin(); } void loop() { while (Serial.available()) {// sbor += Serial.read();// , if (sbor == 27){// for (int i=0; i<=4; i++ ){// if (sbor == 165) {// F1-F12 sbor += sbor; } sbor += Serial.read(); delay(1); } } } if (sbor > 0) { // switch (sbor){ case 505: keyboard.pressSpecialKey(F1); break; case 506: keyboard.pressSpecialKey(F2); break; case 507: keyboard.pressSpecialKey(F3); break; case 508: keyboard.pressSpecialKey(F4); break; case 509: keyboard.pressSpecialKey(F5); break; case 511: keyboard.pressSpecialKey(F6); break; case 512: keyboard.pressSpecialKey(F7); break; case 513: keyboard.pressSpecialKey(F8); break; case 340: keyboard.pressSpecialKey(F9); break; case 341: keyboard.pressSpecialKey(F10); break; case 343: keyboard.pressSpecialKey(F11); break; case 344: keyboard.pressSpecialKey(F12); break; case 13: keyboard.pressSpecialKey(ENTER); break; case 22: keyboard.pressSpecialKey(ESCAPE); break; case 127: keyboard.pressSpecialKey(BACKSPACE); break; case 9: keyboard.pressSpecialKey(TAB); break; case 32: keyboard.pressSpecialKey(SPACEBAR); break; case 26: keyboard.pressSpecialKey(PAUSE); break; case 292: keyboard.pressSpecialKey(INSERT); break; case 456: keyboard.pressSpecialKey(HOME); break; case 295: keyboard.pressSpecialKey(PAGEUP); break; case 294: keyboard.pressSpecialKey(END); break; case 296: keyboard.pressSpecialKey(PAGEDOWN); break; case 182: keyboard.pressSpecialKey(RIGHTARROW); break; case 183: keyboard.pressSpecialKey(LEFTARROW); break; case 181: keyboard.pressSpecialKey(DOWNARROW); break; case 180: keyboard.pressSpecialKey(UPARROW); break; case 293: keyboard.pressSpecialKey(DELETE); break; case 320: keyboard.pressSpecialKey((CTRL | ALT), DELETE); break; // ctl+alt+del alt + del case 346: keyboard.pressSpecialKey(ALT, F4); break; // alt+f4 shift + F4 default: keyboard.pressKey(sbor); break; } //Serial.println(sbor);// usb keyboard.releaseKey(); sbor = NULL; } }
arduino IDEに挿入し、チェックボタンを押します。 今、最も重要な段階が始まります。ここで最も重要なことは、瞬間をつかむことです。 arduino IDEのダウンロードボタンを押します。最初にコンパイルログの白い線が実行され、オレンジが続きます。これはシリアルポートへの接続です。これは、arduinoボードのRESETボタンをキャッチして管理する必要がある瞬間です。 ファームウェアのダウンロードが行われるはずです。すべてが成功すると、このような碑文が表示されます。
avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.34s avrdude: verifying ... avrdude: 2934 bytes of flash verified avrdude done. Thank you.
数回試行してもファームウェアのダウンロードが行われない場合は、RXとTXの接点を交換し、GNDピンがしっかりと接続されているかどうかを確認してください。
フィニッシュライン
raspberryでコンソールを開き、次のように記述します。
sudo raspi-config
ラズベリーの設定メニューが開き、「詳細オプション」→「シリアル」を選択し、「いいえ」を選択します。
おそらくこれらの操作は必要ないので、再保険する必要があります。 このパラメーターは、ラズベリーのOSがシリアルポートと対話するかどうかを決定します。この対話は主にデバッグに必要であるため、安全に無効にすることができます。 このポートを介してarduinoと通信し、システムがエーテルを詰まらせます。
minicomプログラムをインストールします。
Minicomは、シリアルポートを操作するためのシンプルなプログラムです。
sudo apt-get install minicom -y
デバイスへのアクセス権を設定します。/dev / ttyAMA0は同じシリアルポートです。
sudo chown pi /dev/ttyAMA0 sudo chmod 744 /dev/ttyAMA0
minicomを開始します。
sudo minicom -s
プログラムメニューが開き、「シリアルポート設定」項目を選択し、別のメニューを開き、Aキーを押して「シリアルデバイス」を選択し、/ dev / ttyAMA0を書き込み、Enterを押し、Eの下のBps / Par / Bits項目を選択すると、次の項目が表示されますメニューバーのCとQを押します。現在:「9600 8N1」のようになります。Enterを押します。 行F-ハードウェアフロー制御:およびG-ソフトウェアフロー制御:が[いいえ]であることを確認します。一般的に、すべてが下のスクリーンショットのようになっているはずで、Enterを押します。

これらの設定をデフォルト設定「dflとして設定を保存」として保存し、「Minicomから終了」を閉じます。
接続
さらに進んで、ほとんどすべての準備が整いました。arduinoをラズベリーシリアルポートに接続するだけで、次のようになります。

ここには1つのポイントがあります。arduinoとraspberryには異なる電圧レベルがあり、理論的には調整する必要があるため、この記事を読むことをお勧めします。
すべてが調整なしで私のために直接働いたが、私は悪い例を模倣してロジックレベルコンバーターを購入するべきではありません。最も単純なものは次のようになります。

または、少なくとも抵抗器全体に分圧器を組み立てます。

打ち上げ
すべての準備が整ったら、始めましょう。
すべての接続を確認し、raspberry piをオンにし、raspberryコンソールに移動して、minicomを実行します。 すぐに予約し、sshでラズベリーに接続し、クライアントとしてKiTTY(PuTTYの修正版)を使用しました。これは重要です。 他の端末では、送信されたキーの値が異なる場合があるため、風の補正を行う必要があります-スイッチケースのスイッチ番号を変更します。
一般に、彼らが「現状のまま」と言うので、私はあなたの手に渡します。 おそらく、これで終わります。自家製のIP KVMの準備ができました。
PS
最後に、乾燥残渣で何が起こったのかを説明します。
長所:
-価格
-デバイスは比較的安価であることが判明しました
-Raspberry Pi:約2700rub。
-Arduino UNO:約400ルーブル。
-VGA-AVコンバーター:約700rub。
-ビデオキャプチャ料金:500ルーブル。
-合計:4300rub。
-微調整
ほぼすべての組み合わせをインターセプトし、KEYBOARDPOWERおよびVOLUMEUPまでほぼすべてのキーをそれらに割り当てることができます。ちなみに、HIDKeyboard.hヘッダーファイルで可能な値を確認するか、独自のキーを追加できます。
短所:
-ビデオプレスとトランスミッションプレスの両方にブレーキをかける
-2番目に大きいのは画質です 。悲しい顔文字が必要なだけです。ターゲットコンピュータの解像度を最小に下げてもひどいです。できることは、BIOSを構成してブートローダーの項目を選択することです。 しかし、これにはKVMは本当に必要ではありませんか?..そして、他のすべてのためにradminなどがあります。
続行するには...