6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DMX照明機器をIoT化(MQTT対応)してみた。

Posted at

舞台設備照明機器の標準的なインターフェイスとなっている DMX(DMX512) を外部から制御するため IoT化(MQTT対応) してみた。
DMX(DMX512) をネットワーク対応した Art-Net という規格や DMX / MQTT Converter 製品が存在するが、今回は ESP8266 と Grove - DMX512 モジュールを使用して IoT化(MQTT対応) してみた。

動作確認

まず、Grove - DMX512 モジュールと照明機器 (Lixada 86 RGB LED Light
DMX Lighting Projector
) の動作確認のため、wiki に記載されているとおりに DmxSimple Library を使用して Arduino UNO と Grove - DMX512 モジュール と照明機器を接続して操作してみた。(当然、問題無く動作する。)

※ 照明機器 Lixada DMX-512 LED PAR Light 12LED RGBW は PC + Lixada USB-DMX512 との組み合わせでは動作したが、Grove - DMX512 モジュールとの組み合わせでは正常に動作しなかった。

接続構成・配線図

今回、外部から照明機器を制御するため Wi-Fi 機能を持つ ESP8266 を Arduino 化して使用するが、DmxSimple Library は ESP8266 に対応していないため、DMX Library for Arduino with ESP8266 を使用した。このライブラリは ESP8266 の UART1 TX (D4端子:GPIO2) を使用するため、ESP8266 と Grove - DMX512 を Groveケーブル で接続する際に黄色ケーブル (EN) を D4、赤色ケーブルを 3.3V、黒色ケーブルを GND へ接続する。

ソースコード

ESP8266 のサンプルコードはこちら
MQTT Broker は Milkcocoa を使用した。

ESP8266_MQTT-Dmx_86LEDs.ino
# include <ESP8266WiFi.h>
# include <Milkcocoa.h>
# include <Arduino.h>
# include <ESPDMX.h>

# define WLAN_SSID       ""  // Wi-Fi SSID
# define WLAN_PASS       ""  // Wi-Fi Password

WiFiClient client;
DMXESPSerial dmx;

# define MILKCOCOA_APP_ID      ""  // MilkCocoa Application ID
# define MILKCOCOA_DATASTORE   ""  // MilkCocoa Datastore Name
# define MILKCOCOA_SERVERPORT  1883

const char MQTT_SERVER[] PROGMEM    = MILKCOCOA_APP_ID ".mlkcca.com";
const char MQTT_CLIENTID[] PROGMEM  = __TIME__ MILKCOCOA_APP_ID;

Milkcocoa milkcocoa = Milkcocoa(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);

int red = 0;
int green = 0;
int blue = 0;
int dimmer = 0;
int address = 0;

void onpush(DataElement *elem) {
  Serial.println("onpush");
  Serial.print("r:");
  Serial.print(elem->getInt("r"));
  Serial.print(",g:");
  Serial.print(elem->getInt("g"));
  Serial.print(",b:");
  Serial.print(elem->getInt("b"));
  Serial.print(",s:");
  Serial.print(elem->getInt("s"));
  Serial.print(",t:");
  Serial.print(elem->getInt("t"));
  Serial.println();

  red = elem->getInt("r");  // R [0-255]
  green = elem->getInt("g");  // G [0-255]
  blue = elem->getInt("b");  // B [0-255]
  dimmer = elem->getInt("s");  // Dimmer Strength [0-127]
  address = elem->getInt("t");  // DMX Address [1-512]

  //write to DMX bus
  dmx.write(address, dimmer);
  dmx.write(address+1, red);
  dmx.write(address+2, green);
  dmx.write(address+3, blue);
  dmx.update();
}

void setupWiFi() {
  Serial.println(); Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);
  WiFi.begin(WLAN_SSID, WLAN_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}


void setup() {
  Serial.begin(115200);
  setupWiFi();
  Serial.println( milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush) );
}

void loop() {
  milkcocoa.loop();
}

参考

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?