0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アレクサ、パソコンをつけて♪(ラズピコ+スマートリモコン)

Posted at

概要

PCの電源をアレクサから操作できれば素晴らしく便利ですね。最近はIoTにはまっていて、いろいろと設備がそろい始めました。手元にRaspberry Pi Pico、SwitchBot Hub Mini(スマートリモコン)、
かなり遠回りな方法になってしまいましたが実現できたのでまとめます。

実行環境

システム構成図

システム構成図を示しました。カッコ内の丸数字は後述の構築手順を参照します。

構築手順

各項目で実行される内容を設定もしくはコーディングします。

  • あらかじめ、SwitchBot、Hub mini、Alexaの設定や連携をしておく
  • 赤外線送信のため、switchBotアプリにて、適当な機器の電源をオンにするリモコン設定を追加
  • アレクサ側でデバイスが自動的に追加されたことを確認
  • Raspberry Pi Picoに赤外線受信モジュールを接続し受信した信号を解析するコードを追加
  • 任意のイベントをリレーできるようにRaspberry Pi PicoにフォトカプラでPCの電源スイッチを結線

SwitchBotアプリにて、リモコン設定を追加する

アプリを起動してHub Miniから、スマートリモコンを追加します。

  • アプリを起動
  • 「ホーム」にて、上部+アイコンから「デバイスの追加」

「赤外線リモコン」内の適当な製品を選択します。例では「テレビ」を選択しています。

ハブミニを選択します。

「リモコンの手動学習」を選択します。

適当な製品を選択します。私はあとあと楽なようにSonyの適当なテレビ「43X7000E」用リモコンを設定しました。後述のライブラリが対応している、NEC、Philips、Sony、MCE、Samsung、Panasonicの製品のどれかにすることを推奨します。ただし、家の中で使用している家電と被らない製品を選んでください。

リモコンを選択したら、適当なボタンを何か押下し「保存」します。

「パソコン」という名称を付けて「保存」します。アレクサから呼びかける名前になります。

Alexaアプリにて、追加したデバイスを確認

アレクサアプリから、SwitchBotより自動的にデバイスが追加されたことを確認します。

  • 下部のハンバーガーメニュー>「デバイス」一覧が表示される
  • SwitchBotにて追加した「パソコン」デバイスが表示されていることを確認

これで、「アレクサ、<デバイス名>をつけて♪」と発生するだけで先ほど指定したリモコンの電源ボタンを押下したときの赤外線データが送信されます。

電子部品をRaspberry Pi Picoへ接続

赤外線リモコン受信モジュールOSRB38C9AAで信号を受信します。

PIN番号 BCM(GPIO)番号又は名称 部品名 部品PIN名 備考
20 15 赤外線リモコン受信モジュール OSRB38C9AA OUTPUT 赤外線の信号線
18 GND 赤外線リモコン受信モジュール OSRB38C9AA GROUND GNDならどこでも接続してOK
40 VBUS 赤外線リモコン受信モジュール OSRB38C9AA VCC モジュールに5vを供給
19 14 フォトカプラ PS817 Anode 間に抵抗(46Ωぐらい)を挟んでください
18 GND フォトカプラ PS817 Cathode GNDならどこでも接続してOK

Raspberry Pi Pico のコード

信号を解析して、あらかじめ設定した信号かどうかを判断します。赤外線受信のライブラリはこちらを使用します。

赤外線通信の規格(だいたいNEC、Sony、MCE、Samsung、Panasonicのうちのどれか)を選択すれば、自動的にデータのパースを実施してくれます。おかげさまで、以下のように短いコードを書くだけで実装できました。

import time

from ir_rx.sony import SONY_20
from machine import Pin

PICO_LED = Pin("LED", Pin.OUT, value=0) # ラズピコ本体に実装されているLED
TARGET = Pin(14, Pin.OUT) # フォトカプラをつないでいるGPIO番号


def make_pulse(sleep_ms):
    """フォトカプラ経由でPCの電源を入れます"""
    PICO_LED.on() # 動作状況が分かるようにラズピコ本体に実装されているLEDをオンにします
    TARGET.on() # フォトカプラ オン (=電源スイッチ押下)
    time.sleep_ms(sleep_ms)
    TARGET.off() # フォトカプラ オフ (=電源スイッチ放す)
    PICO_LED.off() # LED オフ


def callback(data, addr, ctrl):
    """赤外線の信号を受信時に呼び出されるコールバック関数"""
    print("Data {:02x} ({:016})Addr {:04x}".format(data, data, addr))
    if data == 21:
        # 受信したデータが 0x15 (0000000000000021)Addr 0001 のとき
        # (= テレビ Sony 43X7000E リモコンの電源ボタン押下を受信したとき)
        # どのようなデータがスマートリモコンから送られてくるかは、
        # 実際にデータを送信してみて確かめればよい
        make_pulse(200)


# Sony製リモコンの設定
# Pinは赤外線リモコン受信モジュールをつないでいるGPIO番号
ir = SONY_20(Pin(15, Pin.IN), callback)
# 無限ループ、信号を受信するとcallback関数が呼ばれます。
while True:
    time.sleep_ms(1000)

PCへの接続

デスクトップPCに付属している電源ボタンの回路を、Raspberry Pi Picoで電気的に横取り(?)し操作します。

部品名 部品PIN名 接続先名称 備考
フォトカプラ PS817 Collector Switch +
フォトカプラ PS817 Emitter Switch -
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?