Pythonと赤外線送受信ソフト「cgir」を使ってRaspberry Piで赤外線の送受信を行う方法について解説しています。「cgir」を使うことで簡単に受信、登録、送信動作をさせることができるほか、データ解析も可能です。赤外線を使ってエアコン、照明、テレビなどの家電を制御することが可能になります。
更新日 : 2026年2月6日Raspberry Pi 5 / 最新版Raspberry Pi OS Trixie対応
cgirバージョン1.4までは赤外線制御にpigpioを使用していました。しかし、Raspberry Pi5ではpigpioが動作しないほか、 2025年10月リリースのRaspberry Pi OS Trixieではpigpio自体がOSに同梱されなくなっていました。
そこで、cgirバージョン2.0でLIRCを使った赤外線制御に刷新しました。 これにより、Raspberry Pi OSが動作するRaspberry Piシリーズ(Raspberry Pi5を含む)において動作可能となりました。

赤外線制御プログラムの準備
赤外線制御ソフトウェア「cgir」をインストールします。ターミナルを開き、以下の$に続くコマンドを実行して下さい。ソースコードはGitHubに公開しています。
$ sudo python3 -m pip install -U cgir --break-system-packagesエラーが出る場合は最後のオプションを指定せずにお試しください。
$ sudo python3 -m pip install -U cgirconfig.txtの編集
設定ファイルの/boot/firmware/config.txtをスーパーユーザーで開き、以下の2行を最後に追記します。1行目で指定している4が受信用のGPIO番号、2行目の13が送信用のGPIO番号です。
dtoverlay=gpio-ir,gpio_pin=4
dtoverlay=gpio-ir-tx,gpio_pin=13編集したらRaspberry Piを再起動します。
設定ファイルの編集方法が分からない場合は、以下の記事を参考にして下さい。
拡張基板の準備
赤外線送受信機能が搭載されている拡張基板「RPZ-PIRS」、「RPZ-IR-Sensor」もしくは「RPi TPH Monitor」を装着します。GPIO番号を合わせることで、他の基板や自作の回路の場合でも動作させることができます。
赤外線を受信してコードを記録する
いよいよ赤外線を受信してみます。お使いの家電などのリモコンを準備して、以下のコマンドを実行します。「rec」は赤外線を受信して登録する動作を指示しています。「tv_power」の部分は登録する名前で、自由に付けることができます。ここでは、例としてテレビの電源ボタンを「tv_power」としました。
$ cgir rec tv_powerデフォルトでは拡張基板「RPZ-PIRS」、「RPZ-IR-Sensor」、「RPi TPH Monitor」に対応したGPIO4を使用します。変更する場合は「-g」オプションにつづけてGPIO番号を指定します。詳細は「cgir -h」で表示されるヘルプを参照して下さい。
以下のように受信中のメッセージが表示されるので、リモコンのボタンを押して受信機に向けて送信して下さい。
------------------------------------
赤外線コード"tv_power"を受信中... 受信機に向けて赤外線を送信して下さい.以下のように受信コードが表示されれば成功です。受信コードは赤外線のパルス波形の時間と、空白時間をus(マイクロ秒)で記録したものです。デフォルトでは「codes.json」というファイルに、先ほど指定した名前「tv_power」で保存されます。
対応フォーマットであれば、続けてデータの内容も表示されますが、ここでは気にしなくて構いません。
以上で受信と登録は完了です。
------------------------------------
赤外線コード"tv_power"を受信中... 受信機に向けて赤外線を送信して下さい.
受信コード
[9000, 4400, 640, 500, 640, 500, 640, 500, 630, 500, 630, 1600, 640, 500, 640, 1600, 640, 500, 640, 1600, 640, 1600, 640, 1600, 640, 1600, 640, 500, 630, 1600, 640, 500, 640, 1600, 640, 1600, 640, 1600, 640, 1600, 650, 500, 640, 1600, 640, 510, 630, 500, 640, 510, 630, 500, 640, 500, 650, 500, 640, 1600, 640, 500, 640, 1600, 640, 1600, 640, 1600, 640]
Format NEC
Frame#1 0x50, 0xAF, 0x17, 0xE8
赤外線コード "tv_power" を登録しました.以下のように複数の名前をスペースで区切って指定すると、連続で受信&登録することができます。複数のボタンを登録する際に便利です。
$ cgir rec tv_power tv_volp tv_volm赤外線を送信する
次に、先ほど受信して登録した「tv_power」を送信してみます。以下のコマンドを実行します。「send」は赤外線を送信する動作を指示しています。「tv_power」の部分は登録済みのコードから送信したいものを選びます。
$ cgir send tv_powerデフォルトでは拡張基板「RPZ-PIRS」、「RPZ-IR-Sensor」と「RPi TPH Monitor」に対応したGPIO13を使用します。変更する場合は「-g」オプションにつづけてGPIO番号を指定します。詳細は「cgir -h」で表示されるヘルプを参照して下さい。
赤外線LEDを実際の家電などに向けて送信し、機器が反応すれば成功です!
以下のように複数の名前をスペースで区切って指定すると、連続で送信することもできます。「-w」オプションで送信の間隔を秒数で指定します。
$ cgir send -w 3 tv_power tv_volp tv_volp うまく動作しない場合
電源とUSBケーブルの見直し
電源の供給能力が低い場合や、USBケーブルが長すぎて電圧が下がっている場合にうまく動作しない場合があります。他の電源とUSBケーブルをお試しください。コンセントに挿す電流供給能力の大きい電源、および短いUSBケーブルが適しています。
登録された赤外線コードを管理する
登録済みの赤外線コードを確認するには、以下のように「list」サブコマンドを使用します。
$ cgir list
登録済赤外線コード
tv_power不要になったものを削除するには「del」サブコマンドを使用します。
$ cgir del tv_power
赤外線コード "tv_power" を削除しました.登録された赤外線コードは、デフォルトでは現在のディレクトリの「codes.json」ファイルに保存されます。違う場所で実行するとこのファイルが見つからず、登録済みのコードが使えません。そういった場合は「-c」オプションでパスとファイル名を指定して下さい。「-c」オプションは受信や送信動作でも使用可能です。
$ cgir rec -c /file_path tv_power
$ cgir list -c /file_path赤外線データ解析
パルスと空白時間を記録した赤外線コードを見ただけだと、実際にどんなデータを送っているのか分かりにくいと思います。本ツールには対応フォーマットである、AEHA(家製協)、NEC、SONYフォーマットであれば、コードを解析してデータに変換する機能があります。
例えば、エアコンでは「冷房」のボタンを押した場合でも、実際には温度や風量などのデータも送られていることが多いです。データ解析機能を使うと、どこのバイトが温度のデータか推測したり、逆に自分の好きな温度のコードを生成するようなことが可能です。
なお、手持ちのリモコンの赤外線コードを記録して、それを再利用(送信)するだけであればデータ解析をする必要はありません。
赤外線コードをデータに変換(デコード)
登録済みコードをフォーマットとデータに変換するには以下のコマンドを実行します。結果は画面に表示される他、「-f」オプションで指定したファイルにjson形式で保存されます。なお、このjsonファイルは、コードを保存している「codes.json」とは別のものです。「codes.json」を上書きしないように注意して下さい。
$ cgir dec -f tv_power.json tv_power
赤外線コード "tv_power" をデコード
コード
[9000, 4400, 630, 510, 630, 500, 640, 500, 640, 500, 640, 1600, 630, 510, 630, 1600, 640, 500, 640, 1600, 640, 1600, 640, 1600, 630, 1600, 620, 520, 610, 1650, 610, 530, 610, 1650, 630, 1600, 610, 1650, 620, 1650, 640, 510, 610, 1650, 630, 500, 640, 510, 640, 500, 640, 500, 640, 510, 630, 510, 630, 1600, 640, 500, 620, 1650, 610, 1650, 630, 1600, 640]
Format NEC
Frame#1 0x50, 0xAF, 0x17, 0xE8
ファイル "tv_power.json" へ保存しました.データから赤外線コードを生成(エンコード)
今度は逆に、送信したいフォーマットとデータを含むjsonファイルから、赤外線コードを生成して登録してみます。jsonファイルの書式は、デコードで作成されたファイルを編集するか、参考にして下さい。
今回は例として、先ほどデコードしたファイルをそのまま利用します。以下のコマンドを実行します。
$ cgir enc -f tv_power.json tv_power2これで、生成したコードが「tv_power2」として登録されます。今回は特にデータを変更していないので、「tv_power」と同じ機能になります。
まとめ
Pythonとcgirを使ってRaspberry Piで赤外線の送受信を行う方法とサンプルプログラムの使い方についての解説は以上です。
赤外線通信を使うと、Raspberry Piで自在にテレビ、エアコン、照明などの家電をコントロールしたり、スマートフォンなどから遠隔で操作することが可能です。また、汎用リモコンでRasbperry Piに指示を出すようなことも考えられます。エアコンの自動ON、消し忘れ機能を実装する方法も記事にしているので参考にして下さい。

ラズパイと赤外線でエアコンの自動ON、消し忘れ機能を実現
普段、エアコンを消し忘れてしまい夜間つけっぱなしにしてしまったり、冬場に朝エアコンを入れても暖かくなるのに時間がかかったことは無いでしょうか?本記事では、Raspberry Piと拡張基板を利用して、毎晩のエアコン消し忘れ機能、および朝に温度が低い場合に自動で暖房を入れる機能を実現します。

ステッピングモーターを指定速度/回転数で回転させる (Raspberry Pi + RPZ-Stepper)
一般的なステッピングモータードライバーでは、所望の速度に合わせたパルスをリアルタイムで出力し続けるひつようがあります。RPZ-Stepperは、速度指定モードに設定することで、自動的にステッピングモーターを回転させ続けることができ、Raspberry Piでは別の処理を行うことも容易です。途中で速度を変更も可能で、指定したパラメーターに応じて自動で加減速します。速度を細かく制御しながら回転し続けるようなアプリケーションを実現できます。

Raspberry Pi用 二酸化炭素センサー/リレー 拡張基板「RPZ-CO2-Sensor」
Raspberry Pi(ラズパイ)用CO2センサーとリレー拡張基板です。CO2濃度を測定することで換気の目安としたり、オフィス環境の改善やスマート農業のCO2モニタリングに利用できます。CO2濃度が一定以上になった際、リレーで換気ファンなどの外部機器をON/OFFできます。7色表示可能なRGB LEDを搭載し、CO2濃度に合わせて色を変えることも可能です。

