Flutter智能灯控插件wled的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter智能灯控插件wled的使用


Pub Version

🚧 注意! 当前版本完全可用,但在1.0发布之前API可能会多次更改。🚧


变更日志

查看 CHANGELOG.md


使用方法

// 将被解析为 `http://localhost`。
final wled = Wled('localhost');
// 或者
final wled = Wled('127.0.0.1');

await wled.toggle();

final status = await wled.status();
print('${wled.host} => isOn: ${status.isOn}');

操作支持情况

已实现

  • ✅ 开启
  • ✅ 关闭
  • ✅ 切换
  • ✅ 调整亮度
  • ✅ 更改颜色

未实现

  • ❌ 效果
  • ❌ 调色板
  • ❌ 夜间模式
  • ❌ 高级功能:主色/次色/第三色
  • ❌ 高级功能:色调/饱和度
  • ❌ 通知
  • ❌ 预设
  • ❌ 宏
  • ❌ 段落
  • ❌ 重启
  • ❌ 当前/倒计时时间
  • ❌ 颜色滑块模式
  • ❌ 调试IO
  • ❌ 内部模式
  • ❌ 锁定
  • ❌ 实验性
  • ❌ Cronixie
  • ❌ 实时UDP
  • ❌ 实时数据
  • ❌ 响应解析

示例代码

import 'package:wled/wled.dart';

void main() async {
  // 创建WLED对象并指定主机地址
  final wled = Wled('localhost');
  
  // 打开灯
  await wled.turnOn();
  
  // 获取当前状态
  final status = await wled.status();
  
  // 输出灯的状态
  print('${wled.host} => isOn: ${status.isOn}');
  
  // 切换灯的状态
  await wled.toggle();
  
  // 再次获取状态
  final newStatus = await wled.status();
  
  // 输出新的灯状态
  print('${wled.host} => isOn: ${newStatus.isOn}');
  
  // 设置亮度
  await wled.brightness(50);
  
  // 改变颜色(这里假设颜色是RGB格式)
  await wled.changeColor(255, 0, 0); // 红色
  
  // 关闭灯
  await wled.turnOff();
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用WLED智能灯控插件的示例代码。这个示例将展示如何通过Flutter与WLED设备进行通信和控制。

首先,你需要添加wled的Flutter插件到你的项目中。你可以使用wled_client这个社区提供的Flutter插件(假设有这样的插件存在,如果没有,你可以考虑使用HTTP请求直接与WLED API交互)。

  1. 添加依赖

在你的pubspec.yaml文件中添加wled_client依赖:

dependencies:
  flutter:
    sdk: flutter
  wled_client: ^x.y.z  # 请替换为实际版本号

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

  1. 导入并使用WLED客户端

在你的Dart文件中(例如main.dart),导入并使用wled_client

import 'package:flutter/material.dart';
import 'package:wled_client/wled_client.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WLEDControlScreen(),
    );
  }
}

class WLEDControlScreen extends StatefulWidget {
  @override
  _WLEDControlScreenState createState() => _WLEDControlScreenState();
}

class _WLEDControlScreenState extends State<WLEDControlScreen> {
  late WLEDClient wledClient;
  late bool isConnected;

  @override
  void initState() {
    super.initState();
    isConnected = false;

    // 初始化WLED客户端,替换为你的WLED设备IP地址和端口
    wledClient = WLEDClient('http://<YOUR_WLED_DEVICE_IP>:80', 'your_secret_password');

    // 尝试连接到WLED设备
    connectToWLED();
  }

  Future<void> connectToWLED() async {
    try {
      await wledClient.connect();
      setState(() {
        isConnected = true;
      });
      print('Connected to WLED device');
    } catch (e) {
      print('Failed to connect to WLED device: $e');
    }
  }

  Future<void> changeColor(int red, int green, int blue) async {
    if (isConnected) {
      try {
        await wledClient.setColor(red, green, blue);
        print('Color changed to RGB($red, $green, $blue)');
      } catch (e) {
        print('Failed to change color: $e');
      }
    } else {
      print('Not connected to WLED device');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WLED Control'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Connected to WLED: $isConnected'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                changeColor(255, 0, 0); // 设置红色
              },
              child: Text('Set Red'),
            ),
            ElevatedButton(
              onPressed: () {
                changeColor(0, 255, 0); // 设置绿色
              },
              child: Text('Set Green'),
            ),
            ElevatedButton(
              onPressed: () {
                changeColor(0, 0, 255); // 设置蓝色
              },
              child: Text('Set Blue'),
            ),
          ],
        ),
      ),
    );
  }
}

// 假设WLEDClient类的简单实现(实际实现可能不同,请参考具体插件文档)
class WLEDClient {
  String baseUrl;
  String password;
  bool isConnected = false;

  WLEDClient(this.baseUrl, this.password);

  Future<void> connect() async {
    // 示例:发送一个GET请求以验证连接(具体实现取决于WLED API)
    var response = await http.get(Uri.parse('$baseUrl/json/state'));
    if (response.statusCode == 200) {
      // 假设连接成功
      isConnected = true;
      // 可能的身份验证步骤(这里简化处理)
      // ...
    }
  }

  Future<void> setColor(int red, int green, int blue) async {
    if (!isConnected) return;
    // 发送POST请求以设置颜色(具体实现取决于WLED API)
    var body = jsonEncode({'on': true, 'seg': {
      'start': 0,
      'stop': 24,
      'col': [red, green, blue, 255], // 假设最后一个参数是亮度
      'effect': 0,
      'speed': 1,
      'intensity': 127,
      'pal': 0
    }});
    var response = await http.post(
      Uri.parse('$baseUrl/json/state'),
      body: body,
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer $password' // 假设使用Bearer Token,具体取决于API
      },
    );
    if (response.statusCode != 200) {
      throw Exception('Failed to set color: ${response.body}');
    }
  }
}

注意

  • 上面的WLEDClient类是一个简化的示例,实际使用时,你需要参考wled_client插件的文档或WLED API文档来进行实现。
  • 实际的wled_client插件可能提供了更多方法和更简洁的API,因此你应该查看其官方文档来了解如何正确使用。
  • 替换<YOUR_WLED_DEVICE_IP>为你的WLED设备的实际IP地址,并设置正确的密码。
  • 如果wled_client插件不存在,你可以考虑使用http包直接与WLED设备的REST API进行通信。

这个示例展示了如何在Flutter应用中初始化WLED客户端,连接到WLED设备,并更改灯的颜色。你可以根据需要扩展这个示例来实现更多功能,比如调整亮度、设置效果等。

回到顶部