工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

LIRCなしでRaspberry PiにIRリモコンを接続 - Python UARTアプローチ

IRリモコンをRaspberry Piに統合する際、LIRCを使わずUARTシリアルインターフェースに直接アクセスすれば簡単かつ軽量です。ハードウェアセットアップからPythonデコードまで、最小限のコードでリモコン信号を確実に取得する全プロセスを解説します。

なぜLIRCをスキップするのか?

LIRCはIRデバイスの汎用フレームワークを提供しますが、シンプルなプロジェクトにはオーバースペックで、レイテンシや互換性問題を招くことも。内蔵UARTピン(TX/RX)と低速シリアルプロトコルを使えば、デバッグしやすい軽量で決定論的なソリューションが実現できます。

ハードウェア概要

ステップ1 - Raspberry PiをUART用に準備

1. カーネルコマンドラインをバックアップ:

sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt

2. ttyAMA0パラメータを削除(例:console=ttyAMA0,115200、kgdboc=ttyAMA0,115200)/boot/cmdline.txtから:

sudo nano /boot/cmdline.txt

結果は以下のように:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

3. ttyAMA0ログインプロンプトをマスク /etc/inittabで:

sudo nano /etc/inittab

以下をコメントアウト:

#X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

ステップ2 - pySerialインストール

UART通信用のPythonシリアルライブラリserialモジュールを提供するpySerialをインストール:

sudo apt-get install python-serial

インストール後、スクリプトでインポート可能:

import serial

ステップ3 - IRセンサー配線

ステップ4 - IRバイトを読み取る基本Pythonスクリプト

HX1838は2400bpsでシリアルストリームを送信。以下のスニペットはキー1回押下あたり12〜16バイトを読み取り、ASCIIコードを表示します。

import serial
ser = serial.Serial('/dev/ttyAMA0')
ser.baudrate = 2400
for _ in range(15):  # 最大15バイト取得
    byte = ser.read(1)
    print(ord(byte))

試行錯誤の結果、2400bpsが最も確実でした。低速ほど空中伝送でのビットエラー確率が下がるためと考えられます。

ステップ5 - Samsungリモコンキーのデコード

Samsung TVリモコンで検証したところ、キー1回押下で12〜16バイトが得られました:

キーをマッピングするため、バイト6-11の重み付け和を計算:

keyidentity = (byte[6] + 2*byte[7] + 3*byte[8] + 4*byte[9] + 5*byte[10] + 6*byte[11])

最も堅牢な手法ではありませんが、各ボタンで一意の値が得られ比較が容易です。必要ならハッシュやXORに置き換えて衝突耐性を高められます。

完全例: ir_serial3samsung.py

以下は効率化されたスクリプトで:

import serial
ser = serial.Serial('/dev/ttyAMA0', 2400)
while True:
    # 24バイト読み取りでバッファクリア
    raw = ser.read(24)
    # 最初の12バイトが1キー分に対応
    key_bytes = raw[:12]
    key_id = sum((i+1)*b for i, b in enumerate(key_bytes[6:12]))
    print(f'Key ID: {key_id}')

スクリプト実行後、Samsungリモコンのボタンを押すと一意のKey IDが表示されます。これらのIDをルックアップテーブルに格納し、アプリケーションのアクションにマッピングしてください。

結論

UARTとシンプルなPythonスクリプトでIRリモコン信号を取得すれば、LIRC不要でレイテンシ削減、デコードロジックの完全制御が可能。コードが最小限かつ透明なためデバッグも容易です。シリアルデータを出力するあらゆるIRリモコンにこのパターンを応用でき、Raspberry Piプロジェクトの汎用的なソリューションになります。

詳細な手順は元記事を参照:How to Use and Emulate…

製造プロセス

  1. Python、SQLite、LabVIEWによるRaspberry Pi高精度温度プロファイリング
  2. Raspberry Pi 2でDS18B20温度センサー読み取りガイド
  3. Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
  4. Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
  5. Raspberry Piでサーバークローゼットの温度を正確に監視
  6. Raspberry Pi 3とPubNubでリモート気象監視
  7. TI SensorTagをNode-RED経由でBlynkと統合 – Raspberry Pi Zero編
  8. Raspberry PiとAS3935で落雷検知: 実践ガイド
  9. ネイティブADCなしでRaspberry Pi上のアナログセンサーを測定
  10. LIRCでプロフェッショナルなRaspberry Piユニバーサルリモコンを構築
  11. Raspberry PiでPIRモーションセンサーとLEDを制御