DMX512 模块

DMX-Base 是专为 DMX-512 数据传输场景设计的功能底座,通过串口与 M5 主机通信并实现控制,配备 XLR-5 和 XLR-3 公头与母头接口,方便用户连接不同接口的 DMX 设备。此外,该模块还提供 HT3.96 间距的 485 接口,便于连接 Expansion 485 设备。

支持以下产品:

dmx

MicroPython 应用示例 发送数据:

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import DMX512Module
 9import time
10
11
12Title = None
13label1 = None
14label0 = None
15module_dmx_0 = None
16
17
18ch_data = None
19
20
21def setup():
22    global Title, label1, label0, module_dmx_0, ch_data
23
24    M5.begin()
25    Widgets.fillScreen(0x222222)
26    Title = Widgets.Title(
27        "DMX512Module Send example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18
28    )
29    label1 = Widgets.Label("Not Sent", 2, 129, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
30    label0 = Widgets.Label(
31        "Not initialized", 2, 76, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18
32    )
33
34    module_dmx_0 = DMX512Module(2, mode=1)
35    ch_data = 0
36    label0.setText(str("Initialized"))
37
38
39def loop():
40    global Title, label1, label0, module_dmx_0, ch_data
41    M5.update()
42    label1.setText(str("Not Sent"))
43    ch_data = ch_data + 1
44    if ch_data >= 255:
45        ch_data = 0
46    module_dmx_0.write_data(1, ch_data)
47    module_dmx_0.write_data(2, ch_data)
48    module_dmx_0.write_data(3, ch_data)
49    label1.setText(str("Sent"))
50    time.sleep(0.7)
51
52
53if __name__ == "__main__":
54    try:
55        setup()
56        while True:
57            loop()
58    except (Exception, KeyboardInterrupt) as e:
59        try:
60            from utility import print_error_msg
61
62            print_error_msg(e)
63        except ImportError:
64            print("please update to latest firmware")

MicroPython 应用示例 接收数据:

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import DMX512Module
 9
10
11Title = None
12label0 = None
13label1 = None
14module_dmx_0 = None
15
16
17dmx_data = None
18dmx_data2 = None
19
20
21def module_dmx_0_channel1_receive_event(received_data):
22    global Title, label0, label1, module_dmx_0, dmx_data, dmx_data2
23    dmx_data = received_data
24    label0.setText(str((str("Channel 1:") + str(dmx_data))))
25
26
27def module_dmx_0_channel2_receive_event(received_data):
28    global Title, label0, label1, module_dmx_0, dmx_data, dmx_data2
29    dmx_data2 = received_data
30    label1.setText(str((str("Channel 2:") + str(dmx_data2))))
31
32
33def setup():
34    global Title, label0, label1, module_dmx_0, dmx_data, dmx_data2
35
36    M5.begin()
37    Widgets.fillScreen(0x222222)
38    Title = Widgets.Title(
39        "DMX512Module Rec example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18
40    )
41    label0 = Widgets.Label("Channel 1:", 0, 82, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
42    label1 = Widgets.Label("Channel 2:", 0, 134, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
43
44    module_dmx_0 = DMX512Module(1, mode=2)
45    module_dmx_0.attach_channel(1, module_dmx_0_channel1_receive_event)
46    module_dmx_0.attach_channel(2, module_dmx_0_channel2_receive_event)
47    module_dmx_0.receive_none_block()
48
49
50def loop():
51    global Title, label0, label1, module_dmx_0, dmx_data, dmx_data2
52    M5.update()
53
54
55if __name__ == "__main__":
56    try:
57        setup()
58        while True:
59            loop()
60    except (Exception, KeyboardInterrupt) as e:
61        try:
62            from utility import print_error_msg
63
64            print_error_msg(e)
65        except ImportError:
66            print("please update to latest firmware")

UiFlow2 应用示例:

tx_example.png

UiFlow2 从机应用示例:

rx_example.png

dmx512_core2_send_example.m5f2

dmx512_core2_receive_example.m5f2

class DMX512Module

构造函数

class DMX512Module(id, mode=DMX_MASTER)

使用指定的 UART ID 和端口引脚初始化 DMX512 模块。

参数:
  • id (Literal[0,1,2]) – UART 设备 ID(DMX 端口 ID)。

  • mode (int) – 工作模式(1 为 Master,2 为 Slave)。

UiFlow2

init.png

Methods

DMX512Module.dmx_init(mode) None

使用 UART 引脚和模式初始化 DMX512 通信。

参数:

mode – 工作模式(1 为 Master,2 为 Slave)。

UiFlow2

dmx_init.png

DMX512Module.deinit() None

反初始化 DMX512 模块,并停止任何正在进行的操作。

UiFlow2

deinit.png

DMX512Module.write_data(channel, data) None

更新指定 DMX 通道的数据。数据将在下一个更新周期发送。

参数:
  • channel – DMX 通道编号(1 - 512)。

  • data – 要发送的数据值(0 - 255)。如果通道编号超出范围,将引发 ValueError。

UiFlow2

write_data.png

DMX512Module.clear_buffer() None

清除 DMX 缓冲区并重置数据。

UiFlow2

clear_buffer.png

DMX512Module.read_data(channel) int

在 Slave 模式下,从指定的 DMX 通道读取数据。

参数:

channel – DMX 通道编号(1 - 512)。

UiFlow2

read_data.png

DMX512.receive_none_block() None

为指定通道启动非阻塞数据接收,并关联相应的回调函数。

UiFlow2

receive_none_block.png

DMX512Module.attach_channel(channel, callback) None

将回调函数绑定到指定的 DMX 通道。

参数:
  • channel – 要绑定回调函数的 DMX 通道编号(1-512)。

  • callback – 当指定通道上的数据发生变化时要调用的函数。

UiFlow2

receive_data_event.png

DMX512.stop_receive() None

停止非阻塞数据接收任务。

UiFlow2

stop_receive.png

DMX512Module.detach_channel(channel) None

从指定的 DMX 通道中解除回调函数的绑定。

参数:

channel – 要从中解除回调函数绑定的 DMX 通道编号(1-512)。