TIPS 2026年7月11日

Raspberry Piから産業用デジタル信号を読む

この記事では、USB接続のデジタル入力基板「TDFA30608」を使って、押しボタンスイッチのON/OFFをRaspberry Piで読み取ってみます。

TDFA30608は8点のデジタル入力を持つ基板です。外部機器の接点信号やスイッチの状態を、USB経由で自分のプログラムから簡単に読み取ることができます。入力側とUSB側は絶縁されているので、設備や外部電源を使った実験にも使いやすいのが特徴です。

今回はまず、CH0に押しボタンスイッチを1個つないで、ボタンを押したときに入力がONになるところまで試してみます。

用意するもの

アイテム 説明
Raspberry Pi(OSインストール済み) Pi 4 または 5 推奨。Raspberry Pi OSが入っていること
TDFA30608 デジタル入力基板 8点入力のUSB絶縁デジタル入力モジュールです
USBケーブル TDAC-USB2B1M5 Raspberry PiとTDFA30608を接続します
外部電源 5Vや12Vなど。TDFA30608の入力側に使います
押しボタンスイッチ まずはCH0のON/OFF確認に使います
配線材 外部電源、押しボタン、TDFA30608の端子を接続します
インターネット ツールのインストールやソースの取得で使います

TDFA30608の入力電圧は5~24Vに対応しています。この記事では5Vまたは12Vの外部電源を想定します。

まずは配線してみよう

今回はC端子を外部電源のプラス側に接続する方法で試します。

まずはRaspberry PiにはまだUSBを接続せず、入力側の配線をします。

 外部電源の +  →  TDFA30608の C 端子
 外部電源の -  →  押しボタンスイッチの片側
 押しボタンスイッチのもう片側  →  TDFA30608の CH0 端子

この配線では、ボタンを押していないときはCH0がOFF、ボタンを押すとCH0がONになります。

CH1以降も同じ考え方で使えます。たとえばCH1を使う場合は、押しボタンの片側をCH1につなぎます。C端子は共通なので、外部電源のプラス側に接続したままでOKです。

配線が終わったら、外部電源を入れます。LEDの点灯確認は、このあとUSBケーブルでRaspberry Piに接続してから行います。

ツールを準備しよう

Raspberry Pi のソフトをアップデートしてから、必要な開発ツールやライブラリをインストールします。

 sudo apt update && sudo apt upgrade -y
 sudo apt install -y git build-essential libusb-dev python3

USBの権限を設定する

TDFA30608を一般ユーザーから使えるように、USBのアクセス権限を設定します。

以下のコマンドで「udev」ルールを作ります。32ee は東京デバイセズ製品のベンダーID、1770 はTDFA30608のプロダクトIDです。

 sudo tee /etc/udev/rules.d/99-usb-tokyodevices.rules <<EOF
 SUBSYSTEM=="usb", ATTR{idVendor}=="32ee", ATTR{idProduct}=="1770", MODE="0666"
 EOF

変更を反映します。

 sudo udevadm control --reload-rules
 sudo udevadm trigger

ここまでできたら、USBケーブルでRaspberry PiとTDFA30608を接続します。すでに接続していた場合は、一度抜き差ししてください。

ボタンを押したときにTDFA30608上のCH0に対応するLEDが点灯すれば、入力側の配線はできています。

TD-USBツールをインストールしよう

TDFA30608を操作するには、「TD-USB」という公式のコマンドラインツールを使います。GitHubからソースコードを取得してビルドします。

 git clone https://github.com/tokyodevices/td-usb.git
 cd td-usb
 make

ちゃんと動くか試してみましょう。

 ./td-usb
 # → バージョン情報が表示されれば成功!

TDFA30608が見えているかも確認してみます。

 ./td-usb tdfa30608 list
 XXXXXXXXXXXXXX

接続されているTDFA30608が見つかると、シリアル番号が表示されます。

入力を読み取ってみよう

まずは現在の入力状態を1回だけ読み取ってみます。

 ./td-usb tdfa30608 get
 0

ボタンを押していない状態では、すべての入力がOFFなので 0 が表示されます。

次に、CH0につないだ押しボタンを押しながら同じコマンドを実行します。

 ./td-usb tdfa30608 get
 1

1 が表示されれば、CH0がONとして読み取れています。

TDFA30608の読み取り値は、8個の入力状態をまとめた数値です。CH0がONなら 1、CH1がONなら 2、CH0とCH1が両方ONなら 3 になります。

入力状態 2進数でのイメージ 表示される値
すべてOFF 00000000 0
CH0だけON 00000001 1
CH1だけON 00000010 2
CH0とCH1がON 00000011 3
CH7だけON 10000000 128

繰り返し読み取りたい場合は、--loop オプションを使います。次の例では200ミリ秒ごとに入力状態を表示します。

 ./td-usb tdfa30608 get --loop=200
 0
 0
 1
 1
 0

終了するときは Ctrl+C を押してください。

Pythonで動かしてみよう

ここでは、Pythonから ./td-usb tdfa30608 get --loop=200 を呼び出して、CH0の状態が変わったときだけ表示するスクリプトを書いてみます。

td-usb フォルダの中で、button_watch.py というファイルを作成してください。

 #!/usr/bin/env python3
 import subprocess
 import time

 CMD = ['./td-usb', 'tdfa30608', 'get', '--loop=200']

 def is_on(value, channel):
     return (value & (1 << channel)) != 0

 proc = subprocess.Popen(CMD, stdout=subprocess.PIPE, text=True, bufsize=1)
 last_state = None

 print('CH0の監視を開始します。終了するにはCtrl+Cを押してください。')

 try:
     for line in proc.stdout:
         try:
             value = int(line.strip())
         except ValueError:
             continue

         ch0 = is_on(value, 0)

         if ch0 != last_state:
             state_text = 'ON' if ch0 else 'OFF'
             print(f'[{time.strftime("%H:%M:%S")}] CH0: {state_text}  入力値: {value}')
             last_state = ch0

 except KeyboardInterrupt:
     proc.terminate()
     print('\n監視を終了しました。')

実行してみよう

 python3 button_watch.py
 CH0の監視を開始します。終了するにはCtrl+Cを押してください。
 [12:03:10] CH0: OFF  入力値: 0
 [12:03:14] CH0: ON  入力値: 1
 [12:03:17] CH0: OFF  入力値: 0

押しボタンを押すと CH0: ON、離すと CH0: OFF と表示されれば成功です。

CH1以降も読み取ってみよう

CH1以降を使う場合も、配線とPythonの考え方は同じです。

たとえばCH2を確認したい場合は、押しボタンをCH2につなぎ、Python側では次のようにチャンネル番号を 2 にします。

 ch2 = is_on(value, 2)

複数のスイッチをつないで、CH0、CH1、CH2をまとめて見ることもできます。入力値はビットの組み合わせなので、どのチャンネルがONになっているかをプログラムで判定できます。

おわりに

この記事では、TDFA30608とRaspberry Piを使って、押しボタンスイッチのON/OFFを読み取るところまで試しました。

デジタル入力が読めるようになると、たとえば次のような用途に応用できます。

  • ドアやカバーが開いたかどうかを検知する
  • フットスイッチや押しボタンをPCアプリの入力にする
  • 設備の接点出力をRaspberry Piで記録する
  • 複数のスイッチ状態をまとめて監視する

TDFA30608はUSBから簡単に扱えるので、はじめて外部接点をプログラムから読み取る実験にも使いやすい基板です。まずは1チャンネルだけ動かしてみて、慣れてきたら複数チャンネルの監視にも広げてみてください。

この記事に関連する商品

この記事をシェア

最近のTIPS