1. 虚谷号结合Yeelight做”变色龙“灯

案例提供:林淼焱(温州)

支持手机APP控制的智能灯泡很多, 但是能够让用户自行编程控制的却寥寥无几。研究了市场上常见的开放接口的智能灯泡, 总结出自定义编程大致有两种方式:一是智能灯泡的物联网网关支持第三方认证接入, 如天猫精灵;二是智能灯泡同时支持局域网内部的控制, 如Yeelight。

默认情况下,yeelight智能灯泡与物联网网关建立联系,然后手机App通过网关发送控制指令给灯泡,每一个智能灯泡都是一个智能终端。但是,yeelight智能灯泡如果开启了“局域网控制”功能,那么就可以同时响应来自局域网任一智能设备的控制指令了,发送控制指令的设备可以是电脑、手机,也可以是任何一个支持网络功能的MCU,如掌控板、虚谷号和树莓派等。

1.1. 案例描述

我们能利用虚谷号和智能灯泡做出怎样的案例呢?DF论坛上有人发了一篇关于制作“变色龙”的文章,大都是利用RGB全彩LED灯珠或灯带,结合颜色识别传感器,做能够根据环境颜色发出不同光芒的“变色龙”。这一作品激起很多创客的兴趣,于是大家就进一步改造,让这个“会变色”的作品越来越好玩。

这类变色主题的作品再多,也无非是利用了颜色传感器,控制的还是REG灯,在我们看来都不够好玩。在研究利用Wi-Fi控制互联网智能灯泡的过程中,我们发现只要遵循一定的协议,控制物联网家电并非难事。于是,我们想到了利用虚谷号来控制Yeelight灯泡,做一个智能变色灯。和其他作品不同的是,我们用摄像头或者高拍仪来代替颜色传感器,控制的是220V的“真正灯泡”。

1.2. 原理分析

之所以用摄像头来替代颜色传感器,是因为前者不仅便宜,而且随处可以获取。利用摄像头获取颜色,可以借助于Python中OpenCV库,调用摄像头拍照,并对拍到的图像进行处理分析,将图像中的主要颜色分解为RGB三种颜色数值,再通过局域网发送控制指令使智能灯泡变色。Yeeligh灯泡支持局域网控制,能够接收到局域网内任一智能设备的控制指令,用虚谷号控制智能灯泡的原理,这里不作详细介绍。

这个智能变色灯需要的器材很少,只需要虚谷号加yeelight智能灯泡、摄像头就可以了,作品的工作流程图如下。

../_images/yeelight01.png

1.3. 用摄像头获取物体颜色的代码实现

摄像头前物体是什么颜色?看起来问题很简单,但是让计算机来回答并不容易。当我们要判断某个物体是什么颜色的时候,往往会先找出这一物体的最主要颜色,再判断这一颜色和哪种颜色最接近。计算机虽然说不出天蓝、橘黄之类的色彩名词,但可以精确地分析出图像中某一个像素点的RGB值,即RGB三种颜色的具体组成,但一个物体往往不会是纯色的,所以要确定一张含有多种颜色的图像的“颜色”,需要确定一个算法。

算法一:将这个图像的所有像素点的RGB值分别相加,取出RGB三种颜色的平均值。如果担心计算的效率太低,可以均匀地取出部分像素,应该可以得到大致的颜色平均值。

部分代码:

../_images/yeelight03.png

算法二:利用滤镜功能,给这个图像加上RGB三种颜色遮罩,处理为黑白图片,然后通过计算分别得到图像的白色区域面积大小,换算为0-255之间的数值。

../_images/yeelight02.png

部分代码:

../_images/yeelight04.png

其实,这两种算法的原理是差不多的,只不过实现的方式不一样。OpenCV库作为著名的跨平台计算机视觉库,提供了很多图像处理和计算机视觉方面的通用算法,可以很简单地帮我们完成颜色分析的功能。

1.4. 虚谷号控制物联网灯泡的代码实现

为方便用户控制灯泡,Yeelight公司提供的一个小型库,可让用户通过Wi-Fi发送指令来控制Yeelight灯泡。只要获取了设备的IP地址,通过ON、OFF、Set_Color等简单的函数,就能调整灯泡的开关、颜色、亮度等参数。

需要强调的是,Yeelight灯泡要开启“局域网控制”功能,默认情况下这一功能是关闭的。另外,虚谷号和Yeelight灯泡一定要处于同一局域网,即连接同一个无线路由器,才能通过指令来找到设备的IP地址。

控制灯泡颜色的参考代码如下:

../_images/yeelight05.png

我们在虚谷号的论坛中,提供了更多关于Yeelight库的教程,可以在”创意项目”中找到,地址如下: http://vvboard.net.cn/bbs/

1.5. 作品运行效果

作品演示效果很好,因为在局域网中,反应速度很快。

../_images/yeelight06.png

视频链接:https://www.bilibili.com/video/av91288427/

1.6. 关于yeelight控制的课程

我们还提供了有关yeelight灯泡的一系列课程,可以在github上下载

https://github.com/vvlink/yeelight

利用yeelight,我们还可以完成各种有趣的综合案例,比如:语音智能灯(麦克风、百度AI)用语音控制开灯、关灯和亮度等指令;天气灯,定时自动获取天气,设置相应的灯泡颜色;调色灯,使用python调色盘控制RGB数值等等。