Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

有線DMX512でRDM方式での通信手順 無料版のGPT3.5で 調査

0
Last updated at Posted at 2023-06-13

はじめに RDMの必要性 

現在Wio-Terminalなどで DMXモニターとDMXシーン書き込みをメモリー調光器を兼用で使っています
今回標準boxタイプのESP32S3の小さな基板にはRS488双方向ICが一つしか載せられませんでした。
そこでRDMの双方向半2重通信を利用して、シーン書き込みを行う必要があり、ここにまとめ始めました。

まず ChatGPT 3.5で 

Q 有線DMX512で RDM方式で 入力がなければ 出力する プログラム例有りますか

A-(GPT)
はい、DMX512のRDM(Remote Device Management)方式で入力がない場合に出力するプログラムの例を提供できます。以下はPythonを使用した例です。

import time
import random

# DMX512のRDM方式で入力がない場合に出力する関数
def output_without_input():
    while True:
        # 入力チェック(ここではランダムな値を生成して入力の代わりとします)
        input_value = random.randint(0, 255)
        
        # DMX512の出力処理(ここでは印字するだけとします)
        print(f"DMX512出力: {input_value}")
        
        # 出力間隔(ここでは1秒とします)
        time.sleep(1)

# プログラムの実行
output_without_input()

この例では、output_without_inputという関数を定義しています。無限ループ内で入力チェックを行い、ランダムな値を生成して入力の代わりにします。その後、DMX512の出力処理を行い、指定された出力間隔でループが繰り返されます。

このプログラムは単純な例であり、実際のDMX512のRDMシステムにはさまざまな要素が含まれます(デバイスの検出、識別、パラメータの取得など)。具体的な要件に合わせてカスタマイズする必要がありますが、この例は基本的な動作の理解に役立つでしょう。

Q Aruduinoでは 出来ますか?

A(GPT)
はい、Arduinoを使用してもDMX512のRDM方式で入力がない場合に出力することができます。
以下はArduinoのプログラム例です。


#include <DmxSimple.h>
#include <DmxSerial.h>

#define DMX_START_ADDRESS 1  // DMXの開始アドレス
#define DMX_CHANNEL_COUNT 512  // DMXのチャンネル数

void setup() {
  DmxSimple.usePin(3);  // DMX信号線に使用するピンを指定(例ではArduino Unoのピン3を使用)

  // DMXシリアル通信の初期化
  DmxSerial.init(DMXReceiver);  // デバイスをDMX受信モードで初期化
  DmxSerial.write(0, DMX_CHANNEL_COUNT);  // 全チャンネルをゼロに初期化
}

void loop() {
  // DMXシリアル通信の受信処理
  DmxSerial.receive();

  // 入力チェック(ここではランダムな値を生成して入力の代わりとします)
  int input_value = random(256);

  // DMX出力処理
  for (int i = 0; i < DMX_CHANNEL_COUNT; i++) {
    DmxSimple.write(i + DMX_START_ADDRESS, input_value);
  }

  // 出力間隔(ここでは1秒とします)
  delay(1000);
}

この例では、DMXSimpleおよびDmxSerialライブラリを使用しています。DmxSimpleはDMX信号の送信を制御し、DmxSerialはDMX信号の受信を制御します。

プログラムでは、まずDMXシリアル通信を初期化し、全てのチャンネルをゼロに初期化します。その後、loop関数内でDMXシリアル通信を受信し、入力の代わりにランダムな値を生成してDMX出力を行います。DMX_START_ADDRESSとDMX_CHANNEL_COUNTを適切な値に設定して、出力したいDMXチャンネルの範囲を指定してください。

このプログラムは単純な例であり、実際のDMX512のRDMシステムの要件に合わせてカスタマイズする必要があります。Arduinoのプログラミングに慣れている場合は、さらに詳細な制御やRDM機能の実装も可能です

Q (User)
有線DMX512で RDM方式で 入力がなければ 出力する esp_dmx プログラム例

A (GPT)
有線DMX512での入力確認後に出力するためのプログラム例を示します。

#include <ESP8266WiFi.h>  // ESP8266用のライブラリ
// #include <WiFi.h>      // ESP32用のライブラリ

#include <esp_dmx.h>

#define DMX_DATA_PIN 2    // DMX信号線に使用するピン(例ではGPIO 2を使用)
#define INPUT_PIN 12     // 入力ピン(例ではGPIO 12を使用)
#define THRESHOLD 100    // 入力の閾値

// WiFi接続の設定
const char* ssid = "Your WiFi SSID";
const char* password = "Your WiFi Password";

void setup() {
  // WiFi接続
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  // DMX512の初期化
  ESPDmx.startOutput(DMX_DATA_PIN, ESPDMX_UNIVERSE_SIZE);

  // 入力ピンの設定
  pinMode(INPUT_PIN, INPUT_PULLUP);

  // RDMの初期化
  ESPDmx.enableRdmResponder();
}

void loop() {
  // RDM受信の処理
  if (ESPDmx.isRdmPacketReceived()) {
    // RDMパケットの処理(ここでは受信したパケットを無視します)
    ESPDmx.clearRdmPacket();
  }

  // 入力の確認
  int input_value = digitalRead(INPUT_PIN);
  if (input_value < THRESHOLD) {
    // 入力が閾値未満の場合にDMX出力を行う
    for (int channel = 1; channel <= ESPDMX_UNIVERSE_SIZE; channel++) {
      ESPDmx.setChannelValue(channel, 255);
    }
  } else {
    // 入力が閾値以上の場合はDMX出力を停止する
    for (int channel = 1; channel <= ESPDMX_UNIVERSE_SIZE; channel++) {
      ESPDmx.setChannelValue(channel, 0);
    }
  }

  // DMX信号を送信
  ESPDmx.flush();

  // 出力間隔(ここでは1秒とします)
  delay(1000);
}

このプログラムでは、WiFi接続を設定し、DMX512の初期化とRDMレスポンダの有効化を行っています。isRdmPacketReceived関数を使用してRDMパケットの受信をチェックし、受信したパケットを無視しています。
また、指定した入力ピン(例ではGPIO 12)の状態を確認し、閾値(例では100)と比較して、
閾値未満の場合にDMX出力を行います。

参考になる ページ紹介 願います

Q (User)
有線DMX512でRDM方式での通信手順の 手引きなど 参考になる ページ紹介 願います

A (GPT)
DMX512のRDM(Remote Device Management)方式に関する通信手順や仕様について
学ぶための参考ページをいくつかご紹介します。
以下のリソースはDMX512およびRDMに関する情報を提供しています。

USITT(米国舞台技術者協会)の公式ウェブサイト:

USITTは、舞台技術や照明に関する産業標準を提供しています。DMX512とRDMについての情報や関連規格を見つけることができます。
ANSI E1.20(Entertainment Technology - Remote Device Management over USITT DMX512)規格:

ANSI E1.20は、RDMに関する規格です。この規格では、DMX512信号を使用したRDM通信の手順やデータフォーマットなどが定義されています。
Art-Netプロトコル仕様:

Art-Netは、DMX512とRDMのネットワークプロトコルです。Art-Netのウェブサイトには、Art-Netプロトコル仕様やサンプルコードなどが提供されています。
Open Lighting Project:

Open Lighting Projectは、オープンソースの照明制御ソフトウェアを提供しています。サイト上には、DMX512およびRDMに関する情報やリソースがあります。
これらのリソースはDMX512およびRDMに関する詳細な情報を提供しており、通信手順やデータフォーマットについて理解を深めるのに役立つでしょう。それぞれのウェブサイトを訪れて、必要な情報を参照してください。

おわりに

まずは Pythonで GPTは 例を教えてくれますね!
この調査により この程度は 無料版のGPT3.5でも 充分良い解答が得られました。

参考資料

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?