Serial DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Serial DAT のシリアル通信受信機能を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – シリアル通信を行ごとに記録

Serial DATは、COM ポート経由のシリアル通信を送受信し、受信データを行ごとにテーブル形式で記録する DATです。Arduino や M5Stack などのマイコンとの連携を想定しており、受信フォーマットの切替・ボーレートなどの通信設定・受信ごとの Python コールバック発火・出力行数の上限制御まで備えています。

主な用途 🎯

  • マイコンからのシリアル受信データのテーブル化(Arduino / M5Stack / Teensy 等が送る行データを 1 行 1 メッセージで記録)
  • Callbacks DAT による受信ごとの Python 駆動(メッセージ受信のたびに 1 回スクリプトを実行して per-message 処理)
  • センサー値・コマンド文字列の双方向通信(受信だけでなく send() でデバイスへコマンド送出)
  • 通信フォーマットの切替(バイト単位 / 行単位 / メッセージ単位で受信データの区切り方を選択)
  • 受信ログの行数制限とクリア(長時間運用でテーブルが膨張しないよう上限制御)

データフロー 🔄

入力: COM ポート経由のシリアルデータ

フォーマット解析(バイト / 行 / メッセージ単位で区切り)

Callbacks DAT 発火(受信ごとに 1 回スクリプト実行)

出力: テーブル DAT(受信メッセージを 1 行ずつ記録)

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Connect Page 📋

接続の有効化 🔌

Active .active
Active (接続の有効化) — On 時にシリアル接続を有効化して送受信を開始
– Off 時は接続を閉じ、受信処理を停止

受信フォーマット .format 📑

Row/ Callback Format (受信データの区切り方) — 受信データをバイナリ / ASCII のどちらとして解釈し、どの単位で 1 行を追加するかを選択するメニュー

項目 内部名 説明
One Per Byte .perbyte バイナリ 1 バイトごとに 1 行を追加(旧称 binary)
One Per Line .perline null または改行で区切られたメッセージごとに 1 行を追加(旧称 Ascii)
One Per Message .permessage 受信した完全なメッセージ全体を 1 行として追加

ポート選択 .port 🔢

Port でシリアル接続に使用する COM ポートを選択:

  • Port: Port (使用する COM ポート) — シリアル接続で使う COM ポートを指定。ポップアップには 1 から 8 が用意されるが、任意の名前を手入力も可能

ボーレート .baudrate

Baud Rate (1 秒あたりの転送ビット数) — 制御ビットを含めて毎秒転送される情報量。入力デバイス側の既定ボーレートに合わせて設定するメニュー

項目 内部名 説明
1200 .1200 1200 bps
2400 .2400 2400 bps
9600 .9600 9600 bps(マイコンの一般的な既定値)
19200 .19200 19200 bps
38400 .38400 38400 bps
57600 .57600 57600 bps
115200 .115200 115200 bps(高速通信でよく使われる値)
230400 .230400 230400 bps
460800 .460800 460800 bps
921600 .921600 921600 bps
1382400 .1382400 1382400 bps

データビット .databits 🧮

Data Bits (1 回の転送あたりのデータビット数) — データビットは最下位ビット (LSB) から最上位ビット (MSB) の順で送られるため、解釈時は右から左へ読むメニュー

項目 内部名 説明
6 .6 6 データビット
7 .7 7 データビット
8 .8 8 データビット(最も一般的)
9 .9 9 データビット

パリティ .parity 🛡️

Parity (誤り検出用ビット) — データビットの後に付く簡易な誤り検出ビット。偶数 / 奇数 / なし を選択するメニュー。設定はデータ送信側とそろえる必要があります

項目 内部名 説明
Even .even 偶数パリティ(1 の個数が偶数になるよう調整)
Odd .odd 奇数パリティ(1 の個数が奇数になるよう調整)
None .none パリティビットなし

ストップビット .stopbits ⏹️

Stop Bits (転送パケット末尾のビット) — 送信パケットの最後に付く 1 または 2 ビット。これを送り終えると次のスタートビットを待機するメニュー

項目 内部名 説明
1 .1 ストップビット 1 個
2 .2 ストップビット 2 個

DTR フロー制御 .dtr 🔁

DTR (data-terminal-ready フロー制御 / Windows のみ) — デバイスを開いたときの DTR ラインの扱いを選択するメニュー

項目 内部名 説明
Disable .disable デバイスを開いたときにラインを無効化
Enable .enable デバイスを開いたときにラインを有効化
Handshake .handshake デバイスとのハンドシェイクを有効化

RTS フロー制御 .rts 🔄

RTS (request-to-send フロー制御 / Windows のみ) — デバイスを開いたときの RTS ラインの扱いを選択するメニュー

項目 内部名 説明
Disable .disable デバイスを開いたときにラインを無効化
Enable .enable デバイスを開いたときにラインを有効化
Handshake .handshake RTS ハンドシェイクを有効化
Toggle .toggle 送出バイトがあるときのみラインを High にする

Received Data Page 📨

Callbacks .callbacks 🐍

Callbacks DAT .callbacks 📜
Callbacks DAT (受信ごとに実行するスクリプト) — メッセージを受信するたびに 1 回スクリプトを実行する Callbacks DAT のパス

実行スコープ .executeloc 📍

Execute from (スクリプトの実行場所) — Callbacks DAT のスクリプトをどの OP の場所から実行するかを決定するメニュー

項目 内部名 説明
Current Node .current 現在の Node 位置からスクリプトを実行
Specified Operator .specified From Operator で指定した OP からスクリプトを実行
Parent of Callbacks DAT .callback Callbacks DAT の親 OP からスクリプトを実行

From Operator .fromop 🔗

Execute fromSpecified Operator のときに参照される OP パス:

  • From Operator パス: From Operator (参照する OP のパス) — Execute fromSpecified Operator のときにスクリプトの実行元となる OP のパス

出力行数制御 📏

Clamp Output .clamp 🚧
Clamp Output (出力行数の上限制御) — On 時に出力テーブルの行数を制限
– DAT はデフォルトで 100 メッセージに制限されるが、Clamp Output により任意値・無制限に変更可能

Maximum Lines .maxlines 📐
Maximum Lines (保持するメッセージ数の上限) — 出力テーブルに保持するメッセージ数を制限
– 上限を超えると古いメッセージから順に削除される

Clear Output .clear 🗑️
Clear Output (出力のクリア) — ヘッダ行を除く全行を削除するパルス
– スクリプトからの実行例: opparm -c /serial1 clear

Bytes Column .bytes 🔣
Bytes Column (生バイト列の列出力) — On 時に各メッセージの raw bytes を別カラムとして出力に追加
– バイナリプロトコルのデバッグや生データ確認に有用


Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: センサー値を受信 🔌

Arduino → Serial DAT (One Per Line, 9600) → Convert DAT → CHOP

Arduino が改行区切りで送るセンサー値を Serial DAT で 1 行ずつ受信し、Convert DAT でテーブルから CHOP へ変換してビジュアル制御に流し込む基本フロー。マイコン連携の出発点になります。

  1. Port に Arduino が接続された COM ポートを指定し、Baud Rate を Arduino 側の Serial.begin() と同じ 9600 にそろえる
  2. Row/ Callback FormatOne Per Line にして改行区切りのメッセージを 1 行ずつ記録
  3. Active を On にして受信を開始
  4. Convert DAT で受信テーブルを CHOP 用フォーマットに変換し、後段の CHOP ネットワークへ渡す
  5. Maximum Lines を 100 程度に設定し、長時間運用でも行が膨張しないようにする

Example 2: 受信ごとに発火 🐍

Microcontroller → Serial DAT (Callbacks DAT) → Constant CHOP

マイコンから届くカンマ区切りの行データを、受信のたびに Callbacks DAT で捕捉して Python でパースし、各値を Constant CHOP に書き込むパターン。複数センサーを 1 本のシリアルで多重化する用途に向きます。

  1. Row/ Callback FormatOne Per Line にし、Callbacks DAT に受信処理用 DAT のパスを指定
  2. コールバック内で受信行を line.split(',') でパースし、各フィールドを数値化
  3. op('constant1').par.value0 = float(fields[0]) 等で Constant CHOP に書き戻す
  4. Execute from を用途に合わせて選び、参照する OP のスコープを明確にする

Example 3: コマンド双方向通信 📡

Serial DAT (send) → Microcontroller → Serial DAT (receive)

Serial DAT は受信だけでなく send() によるコマンド送出にも対応します。TouchDesigner 側からマイコンへ点灯指示やモード切替コマンドを送り、応答を同じ DAT で受け取る双方向のやり取りを構築する例。

  1. Serial DAT を配置し、Port / Baud Rate をデバイスにそろえて Active を On にする
  2. Python から op('serial1').send('LED ON\n') のようにコマンド文字列を送出
  3. デバイスからの応答は同じ Serial DAT の出力テーブルに行として追加される
  4. Bytes Column を On にして、応答の生バイト列をデバッグ確認できるようにする

関連オペレータ 🔗

類似機能OP 🔍

  • Serial CHOP — CHOP 版のシリアル入出力。受信値をチャンネルとして扱いたいときに使用
  • OSC In DAT — OSC プロトコル受信版。メッセージを 1 行 1 イベントで記録
  • MIDI In DAT — MIDI 入力版。受信イベントをテーブル化する近接 DAT

組み合わせ推奨OP 🔄

  • Convert DAT — 受信テーブルを CHOP / 別フォーマットへ変換する定番ペア
  • DAT Execute DAT — 行追加イベントをトリガーに Python を発火する組み合わせ
  • Constant CHOP — コールバックで取り出した値を CHOP ネットワークへ流す
  • Table DAT — 受信ログを別 DAT に転記・保存する用途
  • File Out DAT — 受信ログをファイルに書き出すロギング用途

前処理・後処理DAT 🎯


Info DAT情報 📊

Serial DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: 受信データが出てこない
✅ Solution:

  • Active が On になっているか確認
  • Port がデバイスの接続されている COM ポートと一致しているか確認
  • Baud Rate がデバイス側の送信ボーレートと一致しているか確認(不一致だと文字化けや無受信になる)
  • 他のソフト(Arduino IDE のシリアルモニタ等)が同じ COM ポートを占有していないか確認

❌ Problem: 文字化け・行の区切りがおかしい
✅ Solution:

  • Row/ Callback Format がデバイスの送信形式(バイト / 行 / メッセージ)と合っているか確認
  • Data Bits / Parity / Stop Bits をデバイス側の設定とそろえる
  • デバイス側が改行(\n)でメッセージを終端しているか確認し、One Per Line と整合させる

❌ Problem: 出力行数が無制限に増えてメモリを圧迫する
✅ Solution:

  • Clamp Output を On にし、Maximum Lines で適切な上限を設定
  • Callbacks DAT で必要な情報を別 DAT / 外部ファイルに転記したあと Clear Output で定期クリア
  • 受信頻度が高い場合は One Per Message でメッセージ単位に集約して行数を抑える

❌ Problem: Callbacks スクリプトが発火しない・エラーで止まる
✅ Solution:

  • Callbacks DAT パラメータに正しいパスが設定されているか確認
  • Execute from の選択が意図したスコープ(Current Node / Specified Operator / Parent of Callbacks DAT)になっているか確認
  • コールバック内を try / except Exception as e: で囲み、Textport にトレースバックを出力して例外を特定

参考資料 📚

その他 🔗

公式リソース 📖

関連記事 🔗

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました