2022年7月10日日曜日

Maker Pi RP2040で赤外線リモコンを受信する

Maker Pi RP2040とCircuitPythonで赤外線リモコンを受信するには、以下の手順を実行します。

・Maker Pi RP2040と赤外線センサーを接続した写真

実行手順

1. 部品の用意
Maker Pi RP2040以外に以下の部品を用意します。
・赤外線リモコン受信モジュールOSRB38C9AA(2個入)
https://akizukidenshi.com/catalog/g/gI-04659/

・オプトサプライ赤外線リモコン
https://akizukidenshi.com/catalog/g/gM-07245/

2. 部品の接続
OSRB38C9AAのピン配列を受光面&足を下にした面から見て、以下のように接続します。
OSRB38C9AAの左側のピン -> Maker Pi RP2040のコネクター1のGP1ピン
OSRB38C9AAの中央のピン -> Maker Pi RP2040のコネクター1のGNDピン
OSRB38C9AAの右側のピン -> Maker Pi RP2040のコネクター1の3V3(OUT)ピン

3. adafruit_irremoteモジュールのダウンロード
以下のページからモジュールのソースコードをダウンロードして、Maker Pi RP2040のlibフォルダに保存します。
https://github.com/adafruit/Adafruit_CircuitPython_IRRemote/blob/main/adafruit_irremote.py

4. code.pyを開いて、以下のプログラムを書き込みます。
オプトサプライの赤外線リモコンのA,B,CボタンでRGB LEDの発光が変化し、電源ボタンで消灯することを確認します。
※circuit python 7.2.5以降にアップグレードしてから実行してください。
※Mu Editorを使用せず、code.pyを直接エクスプローラーなどから保存する事も出来ます。
import time
import board
import pulseio
import digitalio
import adafruit_irremote
import neopixel_write

pulsein = pulseio.PulseIn(board.GP1, maxlen=108, idle_state=True)
decoder = adafruit_irremote.NonblockingGenericDecode(pulsein)

keydata ={
  27:"Power",
  31:"A",
  30:"B",
  26:"C",
  141:"Upper Left",
  5:"Up",
  132:"Upper Right",
  8:"Left",
  4:"Center",
  1:"Right",
  136:"Bottom Left",
  0:"Down",
  129:"Bottom Right",
}

# RGB LEDを初期化
dio18 = digitalio.DigitalInOut(board.GP18)
dio18.direction = digitalio.Direction.OUTPUT

while True:
    for message in decoder.read():
        if isinstance(message, adafruit_irremote.IRMessage):
            if len(message.code) == 4 and message.code[3] in keydata:
                print(keydata[message.code[3]]) 
                if message.code[3] == 31:
                    # Aのボタンの場合は2つのRGBLEDを緑色で点灯(GRB)
                    pixel_buf = bytearray([128, 0, 0, 128, 0, 0])
                    neopixel_write.neopixel_write(dio18, pixel_buf)
                if message.code[3] == 30:
                    # Bのボタンの場合は2つのRGBLEDを赤色で点灯(GRB)
                    pixel_buf = bytearray([0, 128, 0, 0, 128, 0])
                    neopixel_write.neopixel_write(dio18, pixel_buf)
                if message.code[3] == 26:
                    # Cのボタンの場合は2つのRGBLEDを青色で点灯(GRB)
                    pixel_buf = bytearray([0, 0, 128, 0, 0, 128])
                    neopixel_write.neopixel_write(dio18, pixel_buf)
                if message.code[3] == 27:
                    # 電源のボタンの場合は2つのRGBLEDを消灯(GRB)
                    pixel_buf = bytearray([0, 0, 0, 0, 0, 0])
                    neopixel_write.neopixel_write(dio18, pixel_buf)

関連情報

・Maker Pi RP2040に関する他の情報はこちらを参照してください。

・Mu Editorに関する他の情報はこちらを参照してください。

0 件のコメント:

コメントを投稿