LIRCなしでRaspberryPiでIRRemoteを使用する
RaspberryPiへのIRリモート入力を取得したかったのです。私はLIRCをインストールしてテストするように管理しました。最後のステップを除いて、すべてが大丈夫でした。 IRリモートキー値をPythonプログラムに渡したい場合、正しく渡されません。 anykeyにnull値を渡します。何が悪いのか理解できませんでした。私はあきらめて、LIRCを使用せずにIRリモートをキャプチャするPythonコードを書こうとしました。
IRリモート通信の方法について読んだ後、UARTシリアル通信を使用していることが明らかになりました。 IRリモートDIYキットHX1838を使用しました。 IRセンサーはIR波をデコードし、データをシリアルに渡します。私がやったことは、IRセンサーから出てくるデータ値を連続して読み取ることでした。これは、RaspberryPiで使用できる単純なアプリケーションのIRリモートを読み取るための大雑把ですが簡単な方法です。
UARTシリアル通信用のRaspberryPiの準備。
1。 cmdline.txtのttyAMA0エントリを削除する必要があります 。
- 最初に、カーネルパラメータcmdline.txtをcmdline_bp.txtとして含むファイルのバックアップを作成します
sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt
- 「ttyAMA0」を含むパラメータを削除して、ファイルcmdline.txtを編集します。すなわち。 「console =ttyAMA0,115200」および「kgdboc =ttyAMA0,115200」。
sudo nano /boot/cmdline.txt
残りのファイルは次のようになります
dwc_otg.lpm_enable =0 console =tty1 root =/ dev / mmcblk0p6 rootfstype =ext4elevator =deadline rootwait
次に、エディターを保存して閉じます。ファイルを保存します。Ctrl+ O。エディタを閉じます。Ctrl+ X
2。 inittab を更新します ttyAMA0をマスクするファイル
sudo nano / etc / inittab
行をコメントアウトします
‘X:23:respawn:/ sbin / getty -L ttyAMA0 115200 vt100’
#X:23:respawn:/ sbin / getty -L ttyAMA0 115200 vt100
次に、エディターを保存して閉じます。ファイルを保存します。Ctrl+ O。エディタを閉じます。Ctrl+ X
ステップ1:はじめに
pySerialのインストール
- シリアル(UART)通信を機能させるには、シリアルモジュールをインストールする必要があります。
sudo apt-get install python-serial
これがインストールされると、Pythonコードはシリアルのインポートを実行することでそれを使用できます 。
- 次に、GPIO 14(TX)とGPIO 15(RX)を配線する必要があります。私の目的はIR信号を受信することなので、GPIO 15(RX)のみを配線しました。
- IRセンサーには5VとGND接続が必要です。次に、GPIO15に接続されたIRセンサーの信号を出力します。
IR信号を読み取るPythonコードは、非常に単純であることがわかりました。次のように。
import serialser =serial.Serial( "/ dev / ttyAMA0")ser.baudrate =2400for i in range(0,15):#通常、キーのIR信号は約12〜16バイトですdata =ser.read( 1)#一度に1バイトを読み取るprint ord(data)#文字で読み取られたデータ、ordはASCII値に変換されます
これで、このコードは一度に1バイトずつIR信号を読み取り、値を出力します。
試行錯誤しながらボーレートを試し、2400BPSに落ち着きました。シリアル通信は最大115KBPSをサポートしますが、IRが低速を使用する理由は興味深いものです。私の推測では、IR信号が空中で1ビットまたは2ビット失われる可能性が少ないため、低速を使用する方が信頼性が高いと思います。
IRリモートキーをデコードする
次のステップは、キー値をデコードすることです。この取り組みには、標準のSamsung TVIRリモコンを使用しました。
最初の重要なポイントは、各キーのデータのバイト数を把握することです。 12〜16バイト異なる場合があります。 (私が試したもの)。通常、バイト長はすべてのキーで同じです。これらのバイトには、ヘッダーバイト、データバイト(キーを識別するため)、およびテールバイトがあります。ヘッダーバイトには、IRリモートのモデルの署名があります。 AntzyCarmasaicページに続く主要なデータ値を収集するためにExcelシートを使用しました
http://www.instructables.com/id/How-To-Useemulate-…
キャプチャされたキー値を詳しく調べると、バイト0〜5がヘッダーで構成されており、すべてのキーに対して繰り返されていることがわかります。バイト6から11のデータ値は、キー値を表します。いくつかのテール値がある可能性があります。バイト12は、サムスンのリモコンのテールです。
マッピングキー
このリモートの正確な方法は、バイト6〜11を配列に格納し、それを新しい着信キーと比較することです。代わりに、次のような簡単なアルゴリズムを実行しました。
keyidentity =byte [6] + 2 * byte [7] + 3 * byte [8] + 4 * byte [9] + 5 * byte [10] + 6 * byte [11]
すべてのキーにほぼ一意の値を与えます。これよりも優れたアルゴリズムを見つけることができます。
Pythonコードを拡張して、Samsungのリモートキー情報をキャプチャしました。マップされたキー値を計算したら、それをPythonプログラム自体に保存しました。
ファイルが添付されています。名前–ir_serial3samsung.py。 Samsungリモートは2セットのデータを送信します。そこで、RaspberryPiシリアルデータキャプチャバッファをフラッシュするために24バイトをキャプチャします。ただし、デコードには最初のセットのみを使用します。
このコードを実行すると、押されたキーが正しく識別されます。プログラムが出力する値「keyidentity」を確認することにより、リモートの残りのキーをデコードできます。次に、プログラムを追加してそれらを含めます。
結論
これは、PythonでRaspberryPiを使用してリモートコントロールを使用するための非常にシンプルで効果的な方法です。キーの合計バイト数、ヘッダーバイト、データバイト、テールバイトの長さを把握する必要があります。このプロセスのAからZまでを知っているので、アプリケーションに合わせて簡単に変更できます。これらは小さなPythonコードであるため、問題が発生した場合のデバッグは非常に簡単です。
詳細:LIRCを使用せずにRaspberryPiでIRRemoteを使用する
製造プロセス