Flutter智能灯控插件wled的使用
Flutter智能灯控插件wled的使用
🚧 注意! 当前版本完全可用,但在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交互)。
- 添加依赖
在你的pubspec.yaml
文件中添加wled_client
依赖:
dependencies:
flutter:
sdk: flutter
wled_client: ^x.y.z # 请替换为实际版本号
然后运行flutter pub get
来安装依赖。
- 导入并使用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设备,并更改灯的颜色。你可以根据需要扩展这个示例来实现更多功能,比如调整亮度、设置效果等。