東京デバイセズのUSBリレー制御基板を使えば、Raspberry PiからUSB経由でリレーを簡単にON/OFFできます。
この記事では、TDFA30301、TDFA30303、IWT313-USBを対象に、Raspberry Pi OSで制御コマンド TD-USB を準備し、Pythonから1秒ごとにリレーをON/OFFするところまでをわかりやすく解説します。
リレーが「カチッ」と動作するところまでを確認しましょう。
1. USBリレー制御基板について
今回使う3製品は、いずれもTD-USBコマンドでリレーの状態を数値として設定できます。違いは主にチャンネル数、接点容量、電源です。
| 製品 | チャンネル数 | 接点容量 | 電源 | TD-USBのモデル名 |
|---|---|---|---|---|
| TDFA30301 | 1接点 | 10A 250V AC / 10A 24V DC | USBバスパワー | tdfa30301 |
| TDFA30303 | 3接点 | 10A 250V AC / 10A 24V DC | USBバスパワー | tdfa30303 |
| IWT313-USB | 8接点 | 6A 250V AC / 6A 24V DC | 12V外部電源 | iwt313 |
TDFA30301は0または1で1つのリレーを制御します。
TDFA30303とIWT313-USBは、各チャンネルのON/OFFをビットで表した数値で指定します。例えば1ならチャンネル1だけON、3なら二進数で11なのでチャンネル1と2がON、0ならすべてOFFです。
2. はじめる前に準備するもの
| 必要なもの | 備考 |
|---|---|
| Raspberry Pi | Raspberry Pi OSをインストール済みで、ターミナル操作できる状態 |
| 対象のUSBリレー制御基板 | TDFA30301 / TDFA30303 / IWT313-USB のいずれか |
| USBケーブル | USB Type-A - mini-Bケーブル 推奨型番: TDAC-USB2B1M5 |
| インターネット接続 | パッケージ更新・GitHubからの取得に使用 |
| 12V ACアダプタ | IWT313-USBをACアダプタで使う場合のみ必要。推奨ACアダプタ型番: IWAC12-1.0 |
TDFA30301とTDFA30303はUSBバスパワーで動作します。 IWT313-USBは別途12V電源が必要です。ACアダプタか汎用の12V電源を用意します。
3. 必要なツールをインストールしよう
Raspberry Piで次のコマンドを実行して、TD-USBのビルドに必要なツールをインストールします。
sudo apt update
sudo apt install -y git build-essential libusb-dev python3
- git はソースコードのダウンロード用です。
- build-essential はソースコードをビルドするためのツールです。
- libusb-dev はUSB接続デバイスを扱うためのライブラリです。
4. USBの権限を設定する
一般ユーザーでもUSBリレー制御基板を使えるように、udevの設定を追加します。
3製品をまとめて使えるように、次の内容で設定ファイルを作ります。
sudo tee /etc/udev/rules.d/99-usb-tokyodevices.rules <<'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="32ee", ATTR{idProduct}=="1786", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="32ee", ATTR{idProduct}=="1787", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="05df", MODE="0666"
EOF
変更を反映します。
sudo udevadm control --reload-rules
sudo udevadm trigger
設定後、USBリレー制御基板をRaspberry Piに接続し直してください。 IWT313-USBを使う場合は、12V ACアダプタか汎用の12V電源を電源ターミナル端子に接続します。
5. 制御コマンドTD-USBをビルドする
GitHubから制御コマンドtd-usbをダウンロードして、Raspberry Pi上でビルドします。
git clone https://github.com/tokyodevices/td-usb.git
cd td-usb
make
ちゃんと動くか試してみましょう。
./td-usb
# バージョン情報が表示されれば成功!
6. コマンドでリレーをON/OFFしてみる
まずはPythonを使う前に、TD-USBコマンドだけでリレーを動かしてみます。
使っている製品に合わせて、次のうち1つを実行してください。
TDFA30301の場合:
./td-usb tdfa30301 set 1
./td-usb tdfa30301 get
./td-usb tdfa30301 set 0
TDFA30303の場合:
./td-usb tdfa30303 set 1
./td-usb tdfa30303 get
./td-usb tdfa30303 set 0
IWT313-USBの場合:
./td-usb iwt313 set 1
./td-usb iwt313 get
./td-usb iwt313 set 0
set 1でチャンネル1のリレーがON、set 0ですべてOFFになります。
getを実行すると、現在のリレー状態が数値で表示されます。
7. Pythonで1秒ごとにON/OFFする
次に、PythonからTD-USBを呼び出して、チャンネル1のリレーを1秒ごとにON/OFFしてみます。
td-usbディレクトリの中に、次の内容でblink_relay.pyを作成してください。
使う製品に合わせて、MODELの行を1つだけ有効にします。
#!/usr/bin/env python3
import subprocess
import time
# 使う製品に合わせて、どれか1行だけ有効にしてください。
MODEL = "tdfa30301" # TDFA30301
# MODEL = "tdfa30303" # TDFA30303
# MODEL = "iwt313" # IWT313-USB
try:
while True:
subprocess.run(["./td-usb", MODEL, "set", "1"], check=True)
print("ON")
time.sleep(1)
subprocess.run(["./td-usb", MODEL, "set", "0"], check=True)
print("OFF")
time.sleep(1)
except KeyboardInterrupt:
subprocess.run(["./td-usb", MODEL, "set", "0"], check=True)
print("\nOFFにして終了しました。")
保存したら、実行権限を付けます。
chmod +x blink_relay.py
実行します。
./blink_relay.py
1秒ごとにリレーがON/OFFを繰り返せば成功です。終了するときはCtrl+Cを押してください。スクリプト終了時にリレーをOFFへ戻します。
まとめ
- TDFA30301、TDFA30303、IWT313-USBはいずれもTD-USBコマンドから制御できます。
- Raspberry Pi OSでは、最初にUSB権限の設定とTD-USBのビルドを行います。
- Pythonからは
subprocess.run()で./td-usbを呼び出せば、簡単にリレーをON/OFFできます。
まずは無負荷でリレーの動作を確認し、実際の機器を接続する場合は、接点容量や配線方法を製品マニュアルで確認してから進めてください。



