M5Stack Core2 に MAX485 を直結して DMX512 出力を実装する
はじめに
照明制御の業界標準プロトコル DMX512 を M5Stack Core2 から出力するため、MAX485 トランシーバを直接配線して実装しました。本記事では、ハードウェア改造の詳細と実際の配線方法を解説します。
イメージ
M5GO2 ボトムベースの GPIO ポートを活用し、MAX485 モジュールを接続しています。
使用部品
| 部品 | 型番・仕様 | 数量 |
|---|---|---|
| M5Stack Core2 | ESP32搭載 | 1 |
| M5GO2 ボトムベース | GPIO拡張ポート付き | 1 |
| MAX485 モジュール | RS-485 トランシーバ | 1 |
| 終端抵抗 | 120Ω 1/4W | 1 |
| 配線材 | AWG24〜28 程度 | 適量 |
| XLR コネクタ | 5ピン または 3ピン | 1 |
DMX512 とは
DMX512 は舞台照明や建築照明で広く使われるシリアル通信プロトコルです。
- 通信速度: 250kbps
- 電気規格: RS-485 (差動信号)
- チャンネル数: 最大 512ch
- フレーム: Break → MAB → Start Code → 最大512バイトのデータ
ESP32 の UART で DMX512 フレームを生成し、MAX485 で RS-485 信号に変換して出力します。
GPIO ピン割り当て
今回のファームウェアでは以下の GPIO を使用しています:
constexpr dmx_port_t kDmxPort = DMX_NUM_2; // UART2 を使用
constexpr int kDmxTxPin = 19; // TX → MAX485 DI
constexpr int kDmxRxPin = 35; // RX ← MAX485 RO (受信は未使用)
constexpr int kDmxEnablePin = 27; // DE/RE 制御
なぜこのピン?
M5Stack Core2 の M5GO2 ボトムベースには GPIO ポートが引き出されており、以下が利用可能です:
| ポート | 利用可能 GPIO |
|---|---|
| GPIO ポート | G25, G26, G35, G36 |
| UART ポート | G13, G5 (TX/RX) |
GPIO 19 と GPIO 27 は内部的にアクセス可能なピンで、今回は UART2 として使用しています。
MAX485 の接続
MAX485 ピン配置
┌─────┐
RO │1 8│ VCC (5V)
/RE │2 7│ B (Data-)
DE │3 6│ A (Data+)
DI │4 5│ GND
└─────┘
配線図
M5Stack Core2 MAX485
============ =======
GPIO 19 (UART2 TX) ──────────→ DI (Pin 4)
GPIO 27 ─────────────┬───────→ DE (Pin 3)
│
└───────→ /RE (Pin 2)
GPIO 35 (UART2 RX) ←────────── RO (Pin 1)
GND ─────────────────────────→ GND (Pin 5)
5V ──────────────────────────→ VCC (Pin 8)
DMX 出力 (XLR コネクタ)
======================
MAX485 A (Pin 6) ────────────→ XLR Pin 3 (Data+)
MAX485 B (Pin 7) ────────────→ XLR Pin 2 (Data-)
GND ─────────────────────────→ XLR Pin 1 (GND)
┌─────┐
A ───┤ 120Ω├─── B ← 終端抵抗
└─────┘
実装のポイント
1. DE/RE の接続
MAX485 の DE (Driver Enable) と /RE (Receiver Enable、負論理) は、送信専用として使う場合は両方とも同じ GPIO に接続します。
- HIGH: 送信モード (DE=1, /RE=1 で送信有効)
- LOW: 受信モード (今回は使用しない)
// 送信時に HIGH にする
digitalWrite(kDmxEnablePin, HIGH);
2. 終端抵抗
DMX512 規格では、ライン終端に 120Ω の抵抗を A-B 間に挿入します。これにより信号の反射を防ぎ、安定した通信が可能になります。
写真の茶色い抵抗がこの終端抵抗です。
3. 電圧レベル
| デバイス | ロジックレベル |
|---|---|
| ESP32 | 3.3V |
| MAX485 | 5V 動作、3.3V 入力許容 |
MAX485 の DI 入力は 3.3V でも動作するため、レベルシフタなしで直結可能です。
配線手順
Step 1: MAX485 モジュールの準備
市販の MAX485 ブレイクアウトボードを使用する場合は、ピンヘッダをはんだ付けします。
Step 2: 電源とグランドの接続
M5Stack 5V → MAX485 VCC
M5Stack GND → MAX485 GND
Step 3: 信号線の接続
緑色のワイヤで GPIO 19 から MAX485 の DI へ接続:
GPIO 19 → MAX485 DI
GPIO 27 から DE と /RE へ接続(両方同じ線で OK):
GPIO 27 → MAX485 DE
GPIO 27 → MAX485 /RE
Step 4: DMX 出力の配線
XLR コネクタへの配線:
MAX485 A → XLR Pin 3 (Data+)
MAX485 B → XLR Pin 2 (Data-)
GND → XLR Pin 1
Step 5: 終端抵抗の取り付け
A と B の間に 120Ω 抵抗を取り付けます。
ファームウェア実装
ESP32 用の DMX ライブラリとして esp_dmx を使用しています。
#include "esp_dmx.h"
void setupDmx() {
// DMX ドライバのインストール
dmx_driver_install(kDmxPort, DMX_DEFAULT_INTR_FLAGS);
// ピン設定
dmx_set_pin(kDmxPort, kDmxTxPin, kDmxRxPin, kDmxEnablePin);
}
void sendDmxData(uint8_t* data, size_t length) {
// DMX データ送信
dmx_write(kDmxPort, data, length);
dmx_send(kDmxPort, length);
dmx_wait_sent(kDmxPort, pdMS_TO_TICKS(100));
}
動作確認
テスト方法
- DMX テスター(または DMX 対応照明器具)を接続
- ファームウェアから CH1 に値を送信
- 受信側で値が反映されることを確認
トラブルシューティング
| 症状 | 原因と対策 |
|---|---|
| 全く通信できない | DE/RE の接続を確認。GPIO 27 が HIGH になっているか |
| データが化ける | 終端抵抗を確認。ケーブル長が長い場合は必須 |
| 不安定 | GND 接続を確認。シールドケーブルを使用 |
まとめ
M5Stack Core2 と MAX485 を使って DMX512 出力インターフェースを実装しました。
ポイント:
- GPIO 19 (TX), GPIO 27 (DE/RE) を使用
- MAX485 の DE と /RE は送信固定で共通接続
- 終端抵抗 120Ω を忘れずに
この改造により、M5Stack から直接 DMX512 照明器具を制御できるようになります。スマート照明コントローラや舞台演出システムのプロトタイプに活用できます。
参考資料
関連記事
- (リンク: M5Stack で照明制御システムを作る - 全体構成編)
- (リンク: ESP32 DMX512 送信の実装詳細)
タグ: M5Stack, ESP32, DMX512, MAX485, RS-485, 照明制御, 電子工作


