3
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

micropythonで赤外線リモコンの簡単制御

Last updated at Posted at 2022-06-15

はじめに

Home IoTって響きカッコ良いですよね。家中の家電を IoT に繋げるのってロマンですよね。この記事は、Home IoT の第一歩として、まずは家電の自動制御についての紹介です。

家電を制御するには、以下のような手段が考えられます。

  1. 赤外線リモコン (テレビやエアコンが代表例)
  2. WIFI, Bluetooth搭載家電 (稀有ですね)
  3. switchbot の様な外付け制御装置
  4. スマートプラグで、ACコンセントの断続を WIFI, Bluetooth などで制御

今回は、家電制御の主流である 1. 赤外線リモコン に着目してみます。
マイコンと、簡単な外付け回路で、赤外線リモコンの信号データ収集と
送信を実現します。

マイコンで赤外線リモコンの送受信制御が本稿のテーマ

micropython

本稿のこだわりは、micropython。組込みマイコンにも python の波が押し寄せています。まだ一部のマイコンボード限定ですが、C/C++ アレルギーの方には朗報でしょう。これは使い倒す以外にありません。

  • シンプルなプログラミング言語 python のサブセット
  • 書いたコードが即座に動く REPL 環境
  • 公式ドキュメント の充実
  • 開発環境のセットアップが不要

とは言え、micropython にも欠点があります。リアルタイム性に弱く、処理スピードが (C/C++ に比べ) 遅くなっています。赤外線リモコンの送受信処理では、この欠点が致命傷になります。本稿で紹介する赤外線リモコンライブラリは、その欠点を巧みに回避し、安定した動作を実現しています。

micropython は欠点を踏まえて使えば最強。

リモコン送受信ライブラリの決定版 RemotePy

Arduino版(C/C++) の赤外線リモコンライブラリと言えば、IRremote でしょう。リモコン信号解析などの機能も豊富で、かなり大がかりなライブラリです。

一方 micropython 版になると、あまり良い赤外線リモコンライブラリがありません。そこで、自作してしまいました。github で公開しています。「決定版」だなんて自画自賛も甚だしい限りです...

  • 本家 micropython 上で動作します。
  • ESP32, RP2040 (Raspberry Pi Picoが代表例) の両マイコン限定です。
  • 極めてシンプルな構成のライブラリで、理解・改変も容易でしょう。
  • リモコン信号の取得に校正処理を掛けているため、極めて安定した動作をします。
  • リモコンのメーカに依らず、家電の種類にも依りません。
  • すぐ使えるように、PC側のGUIアプリケーションソフトも同梱しています。

赤外線リモコンライブラリの (自称) 決定版 RemotePy

プログラム準備

対象となるマイコンは、ESP32 と RP2040(代表例 Raspberry Pi Pico) の2種類になります。

  1. 本家micropython Download から、適切なファームウェアをダウンロードします。
  2. マイコンに同ファームウェアを書込みます。
  3. github RemotePy をダウンロードします。UpyIrTx.py, UpyIrRx.py 2つのファイルを、マイコンに書込みます。
  4. 赤外線送信は UpyIrTx.py を、赤外線受信は UpyIrRx.py を用いて、メインプログラム main.py を記述します。main.py をマイコンに書込めばプログラム完成です。
  5. マイコンボードとは別に、赤外線リモコン送受信する外付け基板を用意します。

外付け赤外線送受信回路

赤外線リモコン送受信するには、専用回路が必要になります。回路の代表例は
下回路図の通りです。専用の回路を起こすのが大変な場合、出来合いのモジュール製品(IR REMOTE UNIT) を利用すると便利です。
送信側と、受信側の回路は独立しているため、どちらか一方しか使わないなら、他方は不要です。受信回路は、リモコン信号を学習する時にだけ、使われることが多いでしょう。

送信には、赤外線LED ( 部品例 ) が必要です。
受信には、赤外線リモコン受信モジュール ( 部品例 ) が必要です。稀に Vout にプルアップ抵抗が必要になるモジュールも存在します。その場合、RxPin にはプルアップ抵抗を挿入します。

circuit

プログラム事例

ライブラリ UpyIrTx.py , UpyIrRx.py のAPI仕様は、ドキュメント をご覧ください。使い方はとっても簡単です。受信ライブラリ UpyIrRx.py により、リモコン信号が数値リスト形式で取得出来ます。送信ライブラリ UpyIrTx.py により、得られた数値リストを指定すると、赤外線リモコン送信されます。

ESP32 内蔵の M5Stack ATOM と、IR REMOTE UNIT を Grove コネクタで接続した場合のプログラム事例です。

# main.py
from machine import Pin
from UpyIrTx import UpyIrTx
from UpyIrRx import UpyIrRx

rx_pin = Pin(32, Pin.IN)   # Pin No.32
rx = UpyIrRx(rx_pin)

tx_pin = Pin(26, Pin.OUT)  # Pin No.26
tx = UpyIrTx(0, tx_pin)    # 0ch
...
# 3000msec 以内に、受信回路に向けてリモコン送信すると、リモコン信号取得される。
rx.record(3000)
if rx.get_mode() == UpyIrRx.MODE_DONE_OK:
    signal_list = rx.get_calibrate_list()
    # ex) [430, 1290, 430, 430, 430, 860, ...]
else:
    signal_list = []
...
# 送信回路から、リモコン信号を送信する。送信完了までブロッキング。
if signal_list:
    tx.send(signal_list)
...

M5Stack

デモプログラム

赤外線リモコン信号を学習 & ファイル保存し、送信テストも出来る GUI アプリケーションソフトも同梱されています。M5Stack ATOM と、IR REMOTE UNIT を Grove コネクタで接続した実機で、すぐに試せます。

PC 側は、Windows, Ubuntu, Raspbian での動作を確認しています。この PC 側アプリケーションソフトは、M5Stack ATOM 以外のマイコンに対しても使えます。但し、一部モジュール communication.py を微修正する必要があります。詳しくは マニュアル をご覧ください。

  1. デモ用 main.py と、ライブラリ UpyIrTx.py , UpyIrRx.py をマイコンに書込みます。
  2. M5Stack ATOM と PC 間を USBケーブルで接続します。
  3. PC 側には python (可能ならAnaconda推奨) をインストールをします。
  4. PC 側には、pySerialライブラリ をインストールします。 $ pip install pyserial
  5. デモ用PCアプリ を PC にコピーして、PC から main.py を起動します。

gui

既存又は新規ファイル名をオープンして、赤外線リモコン信号の学習 & 保存が出来ます。学習データの正当性を確認するために、送信を試すことも出来ます。赤外線リモコン信号は、json 形式のテキストファイルとして保存されます。詳細な使い方は、マニュアル を参照ください。

赤外線リモコン信号を学習した json ファイルを事前に用意しておけば、その記録信号を元に好きに送信することが出来ます。json ファイルは以下の様なフォーマットになっています。"signal" キーにある、数値リストで、赤外線リモコンの送信が出来るようになります。上記のプログラム事例での、tx.send(数値リスト) に相当します。

{"リモコン信号キー名1(ex. CH1)"  : {"signal": [数値リスト...], "comment": "任意コメント1"},
 "リモコン信号キー名2(ex. VolUp)": {"signal": [数値リスト...], "comment": "任意コメント2"},
 ...}

家じゅうにある赤外線リモコンをかき集めて、信号を片っ端から学習しちゃいましょう。

Home IoT に向けて

マイコンに ESP32 を使った場合は、WIFI 接続することが出来ます。家庭内に Raspberry Pi サーバーを立てて連携することで、なんちゃって IoT家電に早変わりです。

家庭内 Raspberry Pi サーバーを ngrok と組み合わせることで、外出中のスマホやLINE 経由で家電制御が出来るようになります。本稿に引き続き、IoT化の道筋を別記事で紹介したいと思います。ご期待ください。

本稿は、その第一歩、赤外線リモコン信号の学習でした。気に入って頂けましたら、こちら(github) までスターをよろしくお願いいたします。

3
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?