跳至正文
首页 » 博客 » Steering LED RGBW light bulb in .NET

Steering LED RGBW light bulb in .NET

导言

Milight LED RGBW灯泡是一种类似于Phillips Hue灯泡的照明系统。两者都使用相同的模式工作: 它们可以通过您可以编写的软件通过无线网络进行控制。但是Milight比Hue便宜得多。Milight灯泡有两种类型: 白色和RGBW (红-绿-蓝-白)。我们决定使用RGBW版本,因为它比纯白色版本具有更大的潜力,并允许我们构建更高级和 “区分大小写” 的程序,如持续集成信号工具 (稍后会详细介绍)。所有这些都将基于我们将创建的这个简单的转向应用程序。我们在这个项目中的目标是创建一个.NET应用程序,可以通过控制此照明系统Wi-Fi桥 (Wi-Fi控制器)并最终持续集成 (CI)信令工具

如何运作?

MiLight LED RGBW是无线电控制的灯泡,使用Wi-Fi桥接器作为 “介质”,将通过Wi-Fi网络发送的UDP数据包转换为灯泡本身可读的无线电信号。

1。RGBW LED灯泡架构。

要在照明系统上执行命令,我们需要使用UDP并向Wi-Fi控制器发送包含2字节信息的数据包。Wi-Fi控制器将其转换为无线电信号并直接发送到灯泡。每个字节由8位十六进制代码中的值表示 (例如0 x00)。灯泡只能在一个方向上通信,因此它只能对命令做出反应,但无法查询其实际状态。

我们可以:

-配对我们的应用程序与灯泡,

-更改值的颜色或亮度,

-打开和关闭它。

设置

图1显示了我们的gear。一个Miligth RGBW灯泡,一个Milight WiFi网桥和一个用于网桥的电源线。

2。完整的Milight无线灯泡设置与Wi-Fi控制器。

您可以连接设置并使用其中一个移动设备应用程序 (可在Google Play商店和Apple商店中使用) 来引导灯泡。但是,如果您想使用自己的软件来引导光线 (就像我们一样!),则需要将静态ip设置为它。一个伟大的文章如何做到这一点可以在这里找到

在此设置中,网桥提供了自己的WiFi网络,称为milight或milight_“somthing”。您可以连接到此网络,并且可以将命令发送到默认网关。

您还可以将网桥连接到现有的WiFi网络 (STA模式)。为此,请打开浏览器,转到默认网关IP,并使用 “admin” 作为用户名和密码登录。设置STA模式。在这种情况下,你应该知道命令的IP是什么。

实施情况

为了创建我们的应用程序,我们使用了Microsoft Windows Presentation Foundation (WPF),对于颜色选择器,我们使用了Infragistics颜色选择器[1]

1) 发送数据包通过UDP

为了将UDP数据包传输到Wi-Fi控制器,我们创建了UDP传输类:

Udp传输 {私人 const 智力端口 = 8899; 公共 静态 无效变速器 (字节[] 数据,字符串ip) {varserverAdd =IPAddress。解析 (ip); UdpClient udpClient = UdpClient (port);udpClient.Connect(serverAdd, port); udpClient.Send(data, data.Length); System.Threading.螺纹睡眠 (100); udpClient.Close(); }}

Udp传输类包含具有两个参数的传输方法,该参数仅接受一个字节数组和一个IP字符串。根据文档,UDP数据包需要在端口8899所以它被设置为常量。更重要的是,每个命令都需要以100毫秒的延迟发送,所以这就是为什么线程被置于睡眠状态100毫秒的持续时间。请注意,为了保持代码示例简短,没有提供错误处理。

2) 命令,代码灵活和可读性

为了代码的可读性,灯泡可以执行的每个动作都用Enum表示。此项目中有3种类型的枚举:

· 活动 (连接)

·状态 (On、Off)

·DiscoMode (高级多色照明)

在每个命令 (包含2个字节)一个字节总是恒定的,因此在这种情况下,我们可以轻松地将命令字节附加到代表适当动作的等效项的枚举。例如:

公共 静态 字节[] 国家 (状态) { 字节stateByte; 开关状态 (state) {案例 。开: stateByte = 0 x42; 中断;案例 。关: stateByte = 0 x41; 中断; 默认值: 引发 IndexOutOfRangeException exception ();} 返回 字节 [] { stateByte,0x1B };}

这种结构增加了代码的灵活性,使程序员更容易阅读。

3) 配对应用与灯泡

注意: 我们的应用程序必须连接到由Milight Wi-Fi控制器创建的无线网络,才能执行配对和其他命令。

在发送任何命令之前,我们的应用程序需要与灯泡配对。我们可以通过发送一个2字节的数组来实现这一点,其中第一个字节由代码表示0x45后跟第二个字节,即常量0 x00。下面显示了一个代码片段。从现在开始,灯泡将对每个命令做出反应。

公共 静态 字节[] 活动 (活动活动) { 字节activityByte; 切换开关 (活动) {案例 活动。连接: activityByte = 0x45; 中断; 默认值: 引发 IndexOutOfRangeException exception ();} 返回 字节 [] { activityByte,0 x00 };}

请记住,初始配对必须在灯泡获得电流后的两秒钟内完成。有关详细信息,请参阅文章末尾的无限LED开发文档。

4) 最有用的命令代码排序的行动

国家:实施: byte [] { stateByte, 0x00 };

上- > stateByte = 0x42

关-> stateByte = 0x41

迪斯科模式控制:实施: byte [] { discoByte, 0x00 };

开启/切换到下一模式- > discoByte = 0x4D

提高速度-> discoByte = 0x44

降低速度-> discoByte = 0x43

要关闭迪斯科模式,只需手动更改颜色即可。 更改颜色:实施: byte [] { 0x40, colorByte };Milight灯泡使用8位调色板,因此颜色范围从0开始,结束于FF。白光:实施: 字节 [] { 0 xc7,0 x00 };

5) 亮度

更改亮度值后,将更改附加到应用程序布局的滑块。亮度值在十进制2和27之间振荡,其中2是最小值,27是最大值。要形成一个命令,需要将滑块的值转换为字节并按如下所述传递它。

新建 字节 [] { 0 x4e,convertedBrightnessByte }

接口

3。管理面板示例应用程序。

1. 控制面板与开/关开关。

2. ip地址文本框。

3.连接按钮-> 点击后,应用程序检查ip地址是否正确输入。如果是正确的,那么其余的按钮将被启用,如果不是,“不正确的IP号码!” 消息将被显示。

4. 颜色选择器-> Infragistics颜色选择器允许用户选择一个颜色从可用的调色板。

5. 切换模式按钮-> 在第一次点击时,应用程序将打开迪斯科模式; 每次下一次点击将切换到下一个编程照明。

6. 更改颜色为白光。

7. 加速或减速实际迪斯科模式程序。

8. 亮度滑块。

持续集成 (CI) 信号工具

有了关于这种照明系统内部工作原理的所有知识,就可以创建一个持续集成 (CI)[2]物理工具,将使用RGBW Wi-Fi灯泡作为构建状态的指示器。它应该简单地:

把灯泡变绿,如果所有的构建都通过,一切都很好,

把灯泡黄色/橙色,如果一个或多个构建的方式,

把灯泡红色,如果一个或多个构建失败。

这个应用程序可以工作,如图4所示。

4。示例应用程序流。

有几种方法可以实现这种应用程序。因为它是仅显示CI服务器状态的应用程序,所以可以将其开发为图标颜色不断变化的系统托盘应用程序。它可能比普通的Windows窗体/WPF样式应用程序更容易用作查询生成服务器状态的Windows服务。但似乎实现它的最佳方法是编写一个现有CI服务器的插件,该插件将打开和关闭灯泡并使用正确的颜色。

为了不中断用户的工作流程,控制器需要直接连接到现有网络。不间断的网络切换可能非常烦人,因此以下是将Wi-Fi控制器连接到现有网络并为其分配固定ip地址的几个简单步骤:

1)连接到Milight Wi-Fi网络。

2)管理面板, 通过web浏览器。

3)在工作模式下,将工作类型更改为STA。

4)在STA设置中更改SSID为您现有Wi-Fi网络的名称。

5)选择加密类型,您的网络正在使用现在。

6)密码框中输入您的Wi-Fi密码。

7)“获取ip地址自动” 设置为禁用。

8)固定IP地址、子网掩码、网关地址和DNS服务器地址 (可能因网络配置而异) 输入到正确的框中。

9)点击 “保存” 并重新启动控制器使用重新启动按钮位于左侧菜单栏

等待一段时间,让控制器加入您现有的Wi-Fi网络,并通过在浏览器中键入分配的IP地址进行检查。如果出现问题并且控制器无法连接您现有的网络,请通过将回形针或针的末端插入位于micro USB端口左侧的重置孔来手动重置控制器。

对于每个持续集成 (CI) 解决方案,查询服务器的代码的实现可能不同。

5。CI构建成功。

6。CI构建失败。

7。CI构建正在进行中。

结论

本文的主要目的是向您展示如何使用引导mitight RGBW灯泡。NET。这是一个简单的应用程序,可以使用RGBW light作为更大系统的基础,如持续集成服务器状态信号等。我们展示了最有用的命令模式以及这种照明系统的工作原理,希望您喜欢。快乐的黑客!

文档:

http://www.limitlessled.com/dev/

技术信息:

http://www.philippinestuffs.com/milight-wifi-控制-灯-灯泡/

[1]https://www.infragistics.com/products/wpf/ 数据输入和显示/颜色选择器

[2] https://en.wikipedia.org/wiki/Continuous_integration

带来大量的复杂信息的生活与Infragistics WPF强大的数据可视化功能! 下载免费试用吧!

</a