Flutter USB DMX控制插件dmx_usb_pro的使用

Flutter USB DMX控制插件dmx_usb_pro的使用

这是针对运行在Windows上的ENTTEC DMX USB PRO的Dart驱动程序包的实现。

它纯粹是用于ftd2xx.dll的ffi实现。

示例用法

// 获取模块版本信息。
final dmxUsbPro = DmxUsbPro.open(0);
print(dmxUsbPro.version);
print(dmxUsbPro.info);

// 设置超时并重置设备接收器
dmxUsbPro.setTimeouts(10, 100);
dmxUsbPro.purge(DmxUsbPro.RX);

// 发送命令
final buf = Uint8List(4);
buf[0] = 0;
buf[1] = 255;
buf[2] = 255;
buf[3] = 255;
dmxUsbPro.write(EnttecProLabels.SET_DMX_TX_MODE, buf);

完整示例代码

import 'dart:typed_data';

import 'package:dmx_usb_pro/dmx_usb_pro.dart';

void main() {
  // 打开DMX USB PRO设备
  final dmxUsbPro = DmxUsbPro.open(0);

  // 打印设备版本信息
  print(dmxUsbPro.version);
  print(dmxUsbPro.info);

  // 设置超时时间
  dmxUsbPro.setTimeouts(10, 100);

  // 清空接收缓冲区
  dmxUsbPro.purge(DmxUsbPro.RX);

  // 创建一个长度为75的Uint8List
  final buf = Uint8List(75);

  // 初始化buf的前四个字节
  buf[0] = 0;

  // 循环发送数据
  for (int i = 0; i < 10000; i++) {
    buf[1] = i;
    buf[2] = i;
    buf[3] = i;
    dmxUsbPro.write(EnttecProLabels.SET_DMX_TX_MODE, buf);
  }
}

更多关于Flutter USB DMX控制插件dmx_usb_pro的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter USB DMX控制插件dmx_usb_pro的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中dmx_usb_pro插件的使用,以下是一个简单的代码示例,展示了如何集成和使用这个插件来控制USB DMX设备。

首先,确保你已经在pubspec.yaml文件中添加了dmx_usb_pro依赖:

dependencies:
  flutter:
    sdk: flutter
  dmx_usb_pro: ^最新版本号  # 替换为实际最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用dmx_usb_pro插件:

  1. 导入插件

在你的Dart文件中导入插件:

import 'package:dmx_usb_pro/dmx_usb_pro.dart';
  1. 初始化DMX控制器

创建一个DMX控制器实例,并初始化连接:

class _MyHomePageState extends State<MyHomePage> {
  DmxUsbPro? _dmxController;

  @override
  void initState() {
    super.initState();
    _initDmxController();
  }

  Future<void> _initDmxController() async {
    _dmxController = DmxUsbPro();

    _dmxController?.listen((event) {
      // 处理连接状态变化、错误等事件
      if (event is DmxUsbProStatus) {
        print('DMX Controller Status: ${event.status}');
      } else if (event is DmxUsbProError) {
        print('DMX Controller Error: ${event.message}');
      }
    });

    // 尝试打开连接(假设设备已连接)
    bool isOpen = await _dmxController?.open();
    if (isOpen) {
      print('DMX Controller opened successfully.');
    } else {
      print('Failed to open DMX Controller.');
    }
  }

  @override
  void dispose() {
    _dmxController?.close();
    super.dispose();
  }

  // 其他UI逻辑...
}
  1. 发送DMX数据

一旦连接成功,你可以发送DMX数据到设备。例如,设置某个通道的亮度:

void _sendDmxData() async {
  if (_dmxController?.isOpen ?? false) {
    List<int> dmxData = List.filled(512, 0);  // 创建一个512长度的列表,初始值为0
    dmxData[1] = 255;  // 设置第2个通道的亮度为255(满亮度)

    bool isSent = await _dmxController?.sendData(dmxData);
    if (isSent) {
      print('DMX Data sent successfully.');
    } else {
      print('Failed to send DMX Data.');
    }
  } else {
    print('DMX Controller is not open.');
  }
}
  1. 在UI中调用发送函数

你可以在按钮点击事件中调用上述发送函数:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // ...(之前的代码)

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DMX Control'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _sendDmxData,
          child: Text('Send DMX Data'),
        ),
      ),
    );
  }
}

这个示例展示了如何初始化dmx_usb_pro插件,监听连接状态,发送DMX数据到设备,并在UI中提供一个按钮来触发数据发送。请注意,实际使用时你可能需要处理更多的错误情况,并根据你的具体需求调整代码。

此外,确保你的设备已经正确连接到计算机,并且驱动程序已经安装。不同的设备和操作系统可能需要不同的配置步骤。

回到顶部