虚谷号

 找回密码
 立即注册
搜索
热搜: 活动 交友
12
返回列表 发新帖
楼主: linmiaoyan

当Yeelight遇上虚谷号(课程大纲和新手入门)

[复制链接]

16

主题

41

帖子

181

积分

注册会员

Rank: 2

积分
181
 楼主| 发表于 2019-3-12 13:29:41 | 显示全部楼层
09遥控灯

IR库的使用
先跳过,日后再更

回复

使用道具 举报

16

主题

41

帖子

181

积分

注册会员

Rank: 2

积分
181
 楼主| 发表于 2019-3-12 13:31:41 | 显示全部楼层
10NFC刷卡

NFC的使用
先跳过

回复

使用道具 举报

16

主题

41

帖子

181

积分

注册会员

Rank: 2

积分
181
 楼主| 发表于 2019-3-12 14:33:32 | 显示全部楼层
本帖最后由 linmiaoyan 于 2019-3-16 15:30 编辑

11调色灯

(使用调色板给LED调颜色)
说明:使用tkinter库,提供三条滑杆调颜色。

import tkinter as tk
from yeelight import Bulb
bulb = Bulb("192.168.199.142")


window=tk.Tk()

def sliderUpdate(something):
    red=redSlider.get()
    green=greenSlider.get()
    blue=blueSlider.get()
    colour="#%02X%02X%02X"%(red,green,blue)
    canvas.config(bg=colour)
    hexText.delete(0,tk.END)
    hexText.insert(0,colour)
   
def buttonClick():
    colour=hexText.get()   
    canvas.config(bg=colour)
    red=int(colour[1:3],16)
    green=int(colour[3:5],16)
    blue=int(colour[5:7],16)
    redSlider.set(red)
    greenSlider.set(green)
    blueSlider.set(blue)
    print(red,green,blue)
    if red+green+blue>0:
        bulb.set_rgb(red,green,blue)
   
canvas=tk.Canvas(window)
redSlider=tk.Scale(window,from_=0,to=255,command=sliderUpdate)
greenSlider=tk.Scale(window,from_=0,to=255,command=sliderUpdate)
blueSlider=tk.Scale(window,from_=0,to=255,command=sliderUpdate)
hexText=tk.Entry(window,text="#FFFFFF")
button=tk.Button(window,text="设置生效",command=buttonClick)

redSlider.grid(row=1,column=1)
greenSlider.grid(row=1,column=2)
blueSlider.grid(row=1,column=3)
canvas.grid(row=2,column=1,columnspan=3)
hexText.grid(row=3,column=1,columnspan=3)
button.grid(row=4,column=1,columnspan=3)
window.mainloop()

----------------------------------------------------------------------------------------

案例2 通过外接旋钮元件达到同样的调色效果
from xugu import Pin
from yeelight import Bulb
import time
bulb = Bulb("192.168.31.39")
bulb.turn_on()
p0 = Pin("A0", Pin.IN) # 初始化 A0 引脚,设置为输入模式
p1 = Pin("A1", Pin.IN) # 初始化 A1 引脚,设置为输入模式
p2 = Pin("A2", Pin.IN) # 初始化 A2引脚,设置为输入模式
# RGB控制方式,R(红),G(绿),B(蓝)
while 1:
    value0 = p0.read_analog() #读取 A0 引脚的电压值
    value1 = p1.read_analog() #读取 A1 引脚的电压值
    value2 = p2.read_analog() #读取 A2 引脚的电压值
    r=value0/4#读取数值的取值范围在0到1024
    g=value1/4
    b=value2/4
    print(r,g,b)
    if r+g+b>0:
        bulb.set_rgb(int(r),int(g),int(b))



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

41

帖子

181

积分

注册会员

Rank: 2

积分
181
 楼主| 发表于 2019-3-13 14:19:53 | 显示全部楼层

附件为代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

本帖最后由 linmiaoyan 于 2019-3-13 14:28 编辑

13智能变色灯
在外接的摄像头前放置不同颜色的物体,灯泡自动变换颜色

Cv2库的下载与使用
方法①sudo pip install opencv-python
方法②sudo apt-get install python-opencv
scope的密码:输入scope后回车
同理,还有其他的:python-scipy/python-numpy/

压缩包内四个文件
colorlist是本地的py文件,用于存储各种颜色的字典,可以修改之以提高精度及对应颜色
main.py主函数
cachephoto和__pycache__为缓存

main.py主程序源代码

import cv2
from yeelight import Bulb
import time
import colorList

bulb = Bulb("192.168.31.39")
bulb.turn_on()
#得到图片
def get_pic():
    cap=cv2.VideoCapture(0)
    sucess,img=cap.read()
    cv2.imshow("img",img)
    cv2.imwrite("CachePhoto/image2.jpg",img)
    cv2.destroyAllWindows()
    cap.release()

#处理图片
def get_color(frame):
    print('开始处理')
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    maxsum = -100
    color = None
    color_dict = colorList.getColorList()
    for d in color_dict:
        mask = cv2.inRange(hsv, color_dict[d][0], color_dict[d][1])
        cv2.imwrite('CachePhoto/' + d +'.jpg', mask)
        binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
        binary = cv2.dilate(binary, None, iterations=2)
        img, cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        sum = 0
        for c in cnts:
#计算轮廓面积,根据轮廓大小确定屏幕中的主要颜色
            sum += cv2.contourArea(c)  
        if sum > maxsum:
            maxsum = sum
            color = d
    return color

if __name__ == '__main__':
    while 1:
        #参数路径
        get_pic()
        filename = r"CachePhoto/image2.jpg"
        frame = cv2.imread(filename)
        rgb=get_color(frame)
        red=int(rgb[1:3],16)
        green=int(rgb[3:5],16)
        blue=int(rgb[5:7],16)
        bulb.set_rgb(red,green,blue)
        time.sleep(5)

-----------------------------------------------------------------

colorlist部分代码
# 定义字典存放颜色分量上下限
# 例如:{颜色: [min分量, max分量]}
# {'red': [array([160,  43,  46]), array([179, 255, 255])]}

def getColorList():
    dict = collections.defaultdict(list)

    # 黑色
    lower_black = np.array([0, 0, 0])
    upper_black = np.array([180, 255, 46])
    color_list = []
    color_list.append(lower_black)
    color_list.append(upper_black)
    dict['#131314'] = color_list

    # 红色
    lower_red = np.array([156, 43, 46])
    upper_red = np.array([180, 255, 255])
    color_list = []
    color_list.append(lower_red)
    color_list.append(upper_red)
    dict['#FF0900'] = color_list

········

    return dict


if __name__ == '__main__':
    color_dict = getColorList()
    print(color_dict)

    num = len(color_dict)
    print('num=', num)

    for d in color_dict:
        print('key=', d)
        print('value=', color_dict[d][1])


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

41

帖子

181

积分

注册会员

Rank: 2

积分
181
 楼主| 发表于 2019-3-13 14:21:47 | 显示全部楼层
13天气灯(根据天气情况控制LED)

根据网络上获取的当地天气,显示不同颜色的灯光色温。
阴天:#B4B4B4
雨天:#8080FF
多云:#00FFFF
晴天:#FFFFFF
其他(雪):#FFFF00
睡觉前(色温):bulb.set_color_temp(2000)
早上(色温):bulb.set_color_temp(6500)
白天(色温):bulb.set_color_temp(4700)
其他说明:使用requests库
国家气象局提供的天气预报接口,接口地址:
http://www.weather.com.cn/data/sk/101210701.html
http://www.weather.com.cn/data/cityinfo/101210701.html

设置不同的色温
bulb = Bulb("192.168.31.39")
color=[2000,4700,6500]
r = requests.get(url)
bulb.set_color_temp(color[0])

参考代码:

from yeelight import Bulb
import requests
import json
bulb = Bulb("192.168.199.142")
url = "http://www.weather.com.cn/data/cityinfo/101210701.html" # 天气网,温州

r = requests.get(url)
json_response = r.content.decode()  # 获取r的文本 就是一个json字符串
# 将json字符串转换成dic字典对象
dict_json = json.loads(json_response)
weather=dict_json["weatherinfo"]["weather"]
print(weather)
if weather.find("晴")!=-1:
    rgb='#FFFFFF'
elif weather.find("云")!=-1:
    rgb='#00FFFF'
elif weather.find("阴")!=-1:
    rgb='#B4B4B4'
elif weather.find("雨")!=-1:
    rgb='#8080FF'
else:
    rgb='#FFFF00'
red=int(rgb[1:3],16)
green=int(rgb[3:5],16)
blue=int(rgb[5:7],16)
bulb.turn_on()
bulb.set_rgb(red,green,blue)

回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2019-9-5 21:29:08 | 显示全部楼层
1234567890
回复

使用道具 举报

0

主题

3

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2019-11-15 16:52:10 | 显示全部楼层
很详细!感谢分享!
回复

使用道具 举报

0

主题

7

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2020-1-10 16:17:56 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

虚谷号

GMT+8, 2021-10-26 14:49 , Processed in 0.048896 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表