ボタン
オプション:
- Arduino nano -1400 r(元)、300 r(元ではない)。 (長所:1つのUSBポートに多くのボタンを掛けることができます;短所:はんだ付け+それがどのように機能するかを理解する必要があり、ボタンが押されるのを待つプログラムをコンピューターに保持する必要があります)
- USBbutton -780 r(長所:すべてが美しく設計され、 完成しています;短所:高価格で勝ちのみです)
- U-HID Nano -1150 r(プラス:ソフトウェアあり、マイナス:高価格+はんだ付けが必要)
- USBデバイス(ほぼすべて)-0-100 r(プラス:ほぼ0コスト、プログラミングなし、マイナス:Linux、はんだ付け可能、USBケーブルの損傷)
ボード上のdebian(より正確には、raspbmcファームウェア)を使用して、Raspberry PIですべての実験を行いました。
実装には、 udevを使用してシステムデバイスを追跡するディストリビューションが適しています。
ボタンが作成されるデバイスは何でも構いません。古い半分壊れたusbキーボード、マウス、カメラ、そして実際USBにしがみついてシステムが認識できるすべてのものです。
私は70ルーブルのマウスを市場で見つけました。これはボタンとして機能し、他のオプションとかなり競争力があります。
作成ボタン
ボタン操作スキームは、恥ずかしがりやすい
配線図に関する重要な注意:記事の最後にあるPS101を参照してください
ボタンが押されている間、回路全体が閉じられ、デバイスに電力が供給され、システムは新しいデバイスが接続されたことを確認します。
ボタンを押すと、回路が切断され、デバイスがシステムから消えます。
このロジックは、ボタンを作成するプロセス全体のキーです。
古いキーボードを分解して取り出した
超小型回路
このボタンのバージョンの1つでは、キーボードの特定の連絡先を閉じました
キーの押下をエミュレートし、このキーが押されるのを待っているプログラムがバックグラウンドで起動されました。
このボタンのバージョンの1つでは、キーボードの特定の連絡先を閉じました
キーの押下をエミュレートし、このキーが押されるのを待っているプログラムがバックグラウンドで起動されました。
ボタンの機能の確認:
最短のudev理論
udevdプロセスは、デバイスの接続/切断を監視し、 / dev /ディレクトリにデバイスファイルを作成します(非常に比fig的な説明です。詳細については、記事の最後にあるリンクを参照してください)。
デバイスを接続するとき、 udevdは/etc/udev/rules.d/ディレクトリ内のルールのリストをチェックします
ルールは、1つのファイルまたは複数のファイルに存在できます。
ファイルを作成してルールを追加します。
pi@raspbmc:~$ cat /etc/udev/rules.d/20-usb_button.rules ATTRS{name}=="LITEON Technology USB Multimedia Keyboard", ATTRS{phys}=="usb-bcm2708_usb-1.2/input0", ACTION=="add", RUN+="/bin/sh /home/pi/usb.sh"
debianでは、ルールを変更した後にudevを再起動する必要はありません。すべてが自動的に行われます。
このルールは、すべての条件が満たされた場合にのみ満たされます。
ATTRS {name} == "LITEON Technology USB Multimedia Keyboard" (接続されたデバイスの名前は同じです)
ATTRS {phys} == "usb-bcm2708_usb-1.2 / input0" (デバイスは特定のUSBポートに接続されています。これは、同じキーボードで作られた2つのボタンを使用しているためです)
ACTION ==“ add” (デバイスが追加されたもののみである場合にのみルールが機能します。「 remove 」パラメーターもあります。Actionを指定しない場合、デバイスが接続されている間、スクリプトは常に実行されます)
RUN + = "/ bin / sh /home/pi/usb.sh" (実際、ボタンをクリックするだけで起動するスクリプトは/ bin / shなしでは起動しませんでした。以下のPS01も参照してください)
属性のリストは次のとおりです。
pi@raspbmc:~$ udevadm info -a -p $(udevadm info -q path -n /dev/input/by-path/platform-bcm2708_usb-usb-0\:1.2\:1.0-event-kbd) looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/input/input107/event0': KERNEL=="event0" SUBSYSTEM=="input" DRIVER=="" looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/input/input107': KERNELS=="input107" SUBSYSTEMS=="input" DRIVERS=="" ATTRS{name}=="LITEON Technology USB Multimedia Keyboard" ATTRS{phys}=="usb-bcm2708_usb-1.2/input0" ATTRS{uniq}=="" ATTRS{properties}=="0" ....
/dev/input/by-path/platform-bcm2708_usb-usb-0\:1.2\:1.0-event-kbdはデバイスアドレスです
システム内のデバイスアドレスは、デバイスの接続時に見つけることができます。
pi@raspbmc:~$ udevadm monitor --env |grep DEVLINKS DEVLINKS=/dev/input/by-id/usb-LITEON_Technology_USB_Multimedia_Keyboard-event-kbd /dev/input/by-path/platform-bcm2708_usb-usb-0:1.2:1.0-event-kbd
デバッグにはルールを使用しました:
SUBSYSTEM=="usb", ATTRS{ID_MODEL_ID}=="c312", SYMLINK+="ABC"
デバイスのシンボリックリンク/ dev / ABCが作成されたかどうかを確認しました
まとめ
以上です。 システムでスクリプトを起動するボタンをクリックしてボタンを取得しました。
費用:
古いキーボード-0p
ボタン-10r
ケース-0 r
そして最も重要なことは、そのようなボタンはマイクロコントローラの知識とはんだ付けする特別な能力を必要とせず、誰でも簡単にアクセスできることです:)
PS00は私のボタンケースについてです。
猿は春にあり、頭を押すと、猿は尻尾でボタンを押し、チェーンが閉じます
猿は春にあり、頭を押すと、猿は尻尾でボタンを押し、チェーンが閉じます
PS01興味深いバグに遭遇し、それを拾うことができませんでした。ルールで指定されたスクリプトが2回実行されます。 誰か教えてもらえますか?
PS10デバイスでシステムが初期化されるのを待つ必要があるため、ボタンは約2秒間保持する必要があります。
PS11変更を加えてプロジェクトを繰り返す場合は、少なくとも参照リストをスクロールすることを強くお勧めします
udev github.com/bockro/misc usb_checker.pyで動作するPS100 Pythonスクリプト
PS101 Blangelからの重要なお知らせ
USBで+5 Vワイヤの短絡を行いましたが、データも短絡/開放する方が良いでしょう。
話を思い出しましょう-なぜUSBコネクタの+5 VおよびGND接点は延長されますか?
まず、USBデバイスがソフトウェアリセットを実行し、データを送受信する準備ができるようにします。
しかし、第二に、古いコンピューター(特にICH5のPentium 4の面白いマザーボード)はUSBバスの実装が不十分であるという罪を犯し、最終的にはコンピューターがフリーズまたは再起動します。
また、非常に安価でバグの多い中国製デバイスもあり、同様の効果があり、USBコネクタのみで接続することが期待されています。
したがって、+ 5 Vとデータ±(さらに、データへの電力を閉じる)の3つの接点を開閉するのが最適です。 これは、たとえば、フロアランプに配置された2つのソビエトスイッチを使用して行うことができます。ボタンを3〜5 mm開ける必要があるのは1つだけです。
あなたの場合、あなたはする必要はありませんが、少なくともこれを記事で言及する必要があります。そうでなければ、コメントの中でこのようなことに気づきませんでした。
参照資料
- [RU] udevの使用に関するopennetへの優れた翻訳
- [ENG] udevルールを記述するためのメインマニュアル
- [ENG] udevに関するプレゼンテーション。 多くの例と説明。
- [RU] Habr:デバイスの自動インストールにudevを使用
- 男udev
最後まで読んでくれてありがとう。