🙆

TouchDesignerからSPI信号を送信して照明を操作する Part 1: ESP8266

2023/12/20に公開

この記事はTouchDesigner Advent Calendar 2023の20日目の記事です。

2022年の記事
2021年の記事

概要

SPI信号で制御することのできるLEDバーやLEDテープライトをTouchDesinerから操作する方法を記事にします.
以下のGIFの演出のように,パソコンから送った信号をもとにLEDバーの色や光の量がリアルタイムに操作することが可能になります.

Part 1では,簡易的で廉価な方法として,ESP8266というArduinoライクに使用できるWi-Fi搭載のマイコンボードからSPI信号を出力して制御します.
Part 2では,照明の稼働安定させることを目指してDMXコンバータとSPIデコーダを導入して照明のシステム構築の試行錯誤を行いました.
それぞれの方法で,接続が不安定であったり信号のノイズやカクツキなどで一長一短であり,未だにベストプラクティスが見つかっていないのが現状ですが,よくわからない点も含めて公開するので助言いただければ幸いです.

必要なもの

LEDバーへの電気信号のやり取りにはESP8266を使用し,データの転送にはWi-Fiを介してArtNetの通信を行った.

  • LEDバー本体
  • 直流電源,±15 V
  • ESP8266
  • 抵抗 330Ω
  • Wi-Fiルーター
  • その他配線の部品

LEDバーについて

本記事ではAli Expressで入手可能なLEDバーを借用して使用しています.

SMD5050型のLEDが組み込まれた基盤のようなもので,この型番から光の量やチップのサイズがわかります.
UCS2903という制御ICを積んでおり,これにSPI信号を渡すことで制御が可能です.
1ピクセルの情報で6つのLED球がまとめて同じ色に指定されます.
1本あたり8ピクセル分の情報だけしか使用しないが,光の量が多いのでストロボなどの演出には向いています.

IMG_8776.jpeg

今回はLEDバーを使用しましたが,SPI信号で操作可能なICを積んでいれば他の製品でも使用可能です.
WS2812BというICを使用したLEDテープライトにおいても同様の接続で動かすことができました.

LEDバー・電源・ESP8266の配線

WiFiを通じてArtNet信号をESP8266に接続し,ESP8266から出力されたSPI信号によってLEDバーの照明を操作します.
ArtNet信号は照明の操作でよく使用されるDMX信号の一つの規格で,DMX専用のケーブルまたはイーサネットやWi-Fiを介して伝送することが可能です.
ESP8266からLEDバーへの接続には大電流の発生を防止するために330Ωの抵抗を経由しています.
LEDバーには直流の+15Vと-15Vの配線を接続しますが,アース信号のGNDをESP8266と共通になるように分配しておきます.

参考のためにESP8266と直流電源の配線の写真を載せておきます.

IMG_8798.jpeg

IMG_8788.jpeg

ESP8266の設定

はじめにESP8266をArduino IDEで書き込むための設定を行います.
こちらの記事などを参考にしてスケッチをESP8266に書き込み可能な状態にします.

続いて,ESP8266をUSB経由でパソコンに接続して設定を行います.
Arduinoの開発環境であるArduino IDEを開いてライブラリをインストールします.
ツール >> ライブラリを管理 からライブラリマネージャを開き,"ArtnetWifi"と"FastLED"を検索してインストールします.
ファイル >> スケッチ例 >> ArtnetWifi >> ArtnetWifiFastLED を開いて環境に合わせて変更します.

ArtnetWifiFastLED.ino
// Wifi settings
const char* ssid = "ssid";
const char* password = "pAsSwOrD";

// LED settings
const int numLeds = 8; // CHANGE FOR YOUR SETUP
const int numberOfChannels = numLeds * 3; // Total number of channels you want to receive (1 led = 3 channels)
const byte dataPin = 4;
CRGB leds[numLeds];
  • 変数"ssid"を接続したいWi-Fiのssidに
  • 変数"password"を接続したいWi-Fiのパスワードに
  • 変数"numLeds”を送信するピクセル数に(今回はLEDバーの本数*8)
  • 変数"dataPin"をESP8266からの指令値を出すピンの番号に(今回は4に設定)

編集が終わったらESP8266に書き込んで,電源を起動しておきます.

TouchDesignerでの設定

TouchDesignerのサンプルファイルはこちらです.

ESP8266に書き込んだNUM_PIXELの分のRGB情報をTOPとして準備し,TOP to CHOPを用いて変換します.
作成したCHOPをDMX out CHOPに接続し,パラメータをArtNet,サブネットマスクを255.255.255.255と設定します.
ここまでの設定がうまく行っていると,TouchDesigner上のTOPの色に合わせてLEDバーがリアルタイムで変化するようになり,上のGIFのようにリアルタイムで接続できるようになります.

終わりに

ESP8266を用いてSPI信号ベースの照明を制御する方法は,照明も機材も廉価に入手可能なので機材を集めていくハードルが比較的低いです.
その反面として,Wi-Fiで接続することによる不安定さを完全に解消することが難しいのが現状です.
個人的な経験としては,設営でなかなか接続ができなかったり,設営ではうまく接続ができたのにイベント開始1時間で制御できなくなってそのまま動かなかったりしたことがあります.
対策としては,ESP8266がWi-Fiを捕まえることがボトルネックなような気がするので,

  • 2.4GHz帯ではなく5GHz帯を使用すること
  • ルーターをなるべくESP8266のそばに置いてPCからは長いLanケーブルで接続すること
  • PCはインターネットやその他のWi-Fiに接続しないで,ESP8266との孤立したネットワークで接続すること
    などがありますが,完全に安定化させようと思うなら有線での接続が良いようです[注1].
    そこで,Part 2ではDMXコンバーターとSPIデコーダーを使用して有線ベースでの接続を行います.

注1, ArduinoにはEtherNet Sieldを接続することで有線Lanケーブルでの接続が可能です.これも試してみたのですが,ArtNetのライブラリで触ると10ピクセルまではうまく制御できるのですが,それ以上だとなぜか光らなくなります.開発者はArduino UNOはスペックが不足している可能性があるので,Arduino MEGAでの接続を推奨していますが,まだ試せてはいません.

Discussion