虚谷号

 找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 543|回复: 14

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

[复制链接]

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
发表于 2019-3-5 15:46:07 | 显示全部楼层 |阅读模式
本帖最后由 linmiaoyan 于 2019-3-22 17:22 编辑

课程名称:当Yeelight遇上虚谷号
课程内容:    基于Python的物联网灯光控制,可以学习Python基本语法、物联网原理等
器材设备    1)Yeelight互联网灯泡(彩光版)
    2)虚谷号、扩展板和其他基本传感器
其他说明:
    1)建议提供
提供5*5(25)个LED,组合起来可以显示特定的图案,如笑脸,字母等。
    2)如果学生较多,可以两位学生一组,使用一个LED。
yeelight库介绍https://yeelight.readthedocs.io/en/latest/
    1)准备工作
(1)设置灯;(灯泡联网)
  • 下载yeelight官方同名app,进入寻找设备界面,选择对应设备
  • 连续开关灯泡5次,自动进入连接模式
  • 选择无线网
  • 进入设置界面,开启局域网控制(见下图)
(2)安装库;(yeelight)
新手通道:1.打开命令提示符
2.找到pip安装路径 x:\Python\Scripts(pip提供了对Python 库的查找、下载、安装、卸载等功能
3.在命令行中切换至该目录cd x:\Python\Scripts
4.输入 pip install yeelight




本帖子中包含更多资源

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

x
回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-5 16:05:46 | 显示全部楼层
本帖最后由 linmiaoyan 于 2019-3-13 10:10 编辑

课程大纲

  • 基本操作(灯泡必须和电脑在同一局域网内)


01        寻找设备(列出地址)
02        控制单一设备状态(两种方式)
03        控制单一设备亮度
04        控制单一设备色彩(RGB方式)
05        控制多个设备联动(逐个亮起)

  • 互动操作(使用xugu库,灯泡必须和虚谷号板子在同一局域网内)

在虚谷号中运行程序的两种方法:
①存入/upload/python/文件夹中,命名为main.py,即可开机自动运行(须检查config.txt中的python=main.py)
②ctrl+alt+t打开LX终端,输入cd /文件路径/          #切换的对应的路径
   再输入python3 文件名称.py                              #在linux终端运行python文件


06        按钮控制灯(按钮传感器);
    用按钮控制开、关灯,使用切换状态函数。
07        人体红外感应灯(人体红外热释电);
    感应人体活动信息后,延时1分钟(采用计时的方式)
08        自动感应夜灯(光敏、声音);
    光线暗时,听到声音就亮起,一会儿关闭;
09        遥控灯(DF的超声遥控模块)
    接遥控器的ABCD,切换灯光的不同状态。
*10        刷卡智能灯(刷卡键盘或者或者刷卡)
    刷卡后判断信息是否正确,然后亮灯,一会儿关闭

  • 综合应用(灯泡必须和虚谷号板子在同一局域网内

11        调色灯
        用Python做调色板来控制灯
12        智能变色灯(摄像头)
        在摄像头放置不同颜色的物体,灯泡自动改变颜色。
13        天气灯
        定时自动获取天气,设置相应的灯泡颜色
14        语音智能灯(麦克风、百度AI)
        用语音控制开灯、关灯和亮度

回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-11 09:03:34 | 显示全部楼层
本帖最后由 linmiaoyan 于 2019-3-11 09:58 编辑

01寻找设备

利用函数寻找当前局域网内的的智能设备
关键代码:discover_bulbs()

from yeelight import discover_bulbs
ledlist=discover_bulbs()
#ledlist的数据类型为列表
print("发现%d个LED设备"%len(ledlist))
print(ledlist)

   返回数据示例:
发现1个LED设备
{'ip': '192.168.199.184', 'port': 55443, 'capabilities': {'id': '0x0000000007e1d3f8', 'model': 'color', 'fw_ver': '70', 'support': 'get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb set_hsv set_adjust adjust_bright adjust_ct adjust_color set_music set_name', 'power': 'on', 'bright': '100', 'color_mode': '2', 'ct': '4000', 'rgb': '16711680', 'hue': '359', 'sat': '100', 'name': ''}}


列出设备的IP地址
关键代码:discover_bulbs()

from yeelight import discover_bulbs
ledlist=discover_bulbs()
#ledlist的数据类型为列表,列表中每一项是字典
#输出所有的设备的ip对应的值:
for i in ledlist:
        print(i[("ip")])
    输出结果:
192.168.199.184

回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-11 10:01:39 | 显示全部楼层
02控制一个设备的开关状态


关键代码:bulb.turn_on()、bulb.turn_off()、bulb.toggle()     (已有函数)
方式1:
from yeelight import Bulb
import time
bulb = Bulb("192.168.31.39")
#打开
bulb.turn_on()
time.sleep(2)
#关闭
bulb.turn_off()
time.sleep(2)
方式2:
from yeelight import Bulb
import time
bulb = Bulb("192.168.199.142")
#循环切换状态
while True:
    bulb.toggle()
    time.sleep(2)

回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-11 11:00:06 | 显示全部楼层
本帖最后由 linmiaoyan 于 2019-3-11 11:24 编辑

03控制一个设备的亮度(呼吸灯)

关键代码:bulb.set_brightness(50)# 控制亮度数值百分比

范例1:
from yeelight import Bulb
bulb = Bulb("192.168.31.39")
# 控制亮度为50%
bulb.set_brightness(50)
bulb.turn_on()

范例2:
from yeelight import Bulb
import time
bulb = Bulb("192.168.31.39")
bulb.turn_on()
#当前亮度
level=0
#每次增加的亮度间隔(不宜过大)
interval=10
while True:
    bulb.set_brightness(level)
    level=level+interval
    time.sleep(1)
    print(level)
    if level>=100 or level<=0:
        interval=-interval
bulb = Bulb("192.168.31.39", effect="smooth", duration=1000)
#补充:效果控制指灯泡从一种状态变为另一种状态,是马上变化还是逐步变化,以及逐渐变化需多长时间。effect参数为:smooth和sudden。duration为变化所需的时间:单位为毫秒

回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-11 13:22:32 | 显示全部楼层
04控制一个设备的色彩(RGB)

关键代码:Set RGB value
范例1:
from yeelight import Bulb
import time
bulb = Bulb("192.168.31.39")
# RGB控制方式,R(红),G(绿),B(蓝)
bulb.set_rgb(255, 0, 0)
time.sleep(1)
# HSV控制方式,色调(H),饱和度(S),明度(V)
bulb.set_hsv(320, 100, 50)
time.sleep(1)
# HSV控制方式中,明度可以省略
bulb.set_hsv(320, 100)
time.sleep(1)
# 色温控制方式(K),白织灯2800,日光5600,紫光灯9000,标准白色光6500
# 小于3000是温暖(带红的白色),大于5000是冷(带蓝的白色),中间(白色)
bulb.set_color_temp(4700)
time.sleep(1)
# 保存当前颜色为默认设置
bulb.set_default()

范例2(输入颜色范围):
from yeelight import Bulb
import time
bulb = Bulb("192.168.199.142")
# RGB控制方式,R(红),G(绿),B(蓝)
while True:
    r=input("请输入0-255之间的红色\r")
    g=input("请输入0-255之间的绿色\r")
    b=input("请输入0-255之间的蓝色\r")
    print(r,g,b)
    bulb.set_rgb(int(r),int(g),int(b))

回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-11 14:02:05 | 显示全部楼层
05控制多个设备联动(逐个亮起)

要点:不同的变量名称
from yeelight import Bulb
import time
bulb1 = Bulb("192.168.31.39")
bulb2 = Bulb('192.168.31.37')
#打开
bulb1.turn_on()
time.sleep(2)
bulb2.turn_on()
time.sleep(2)
#关闭
bulb1.turn_off()
bulb2.turn_off()

回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-11 20:37:31 | 显示全部楼层
本帖最后由 linmiaoyan 于 2019-3-16 11:09 编辑

第二部分:互动操作
需求:虚谷号和外接硬件

在虚谷号中运行程序的两种方法:

①存入/upload/python/文件夹中,命名为main.py,即可开机自动运行(须检查config.txt中的python=main.py)

②ctrl+alt+t打开控制终端,输入cd /文件路径/      #切换的对应的路径

   再输入python3 文件名称.py                             #在linux终端运行python文件

06按钮控制灯(按下按钮灯亮,松开后灯暗)

#从xugu库中导入Pin类
from xugu import Pin
from yeelight import Bulb
import time
#xugu库中的创建Pin对象
pin = Pin(5,Pin.IN)
bulb = Bulb("192.168.31.39")
while 1:
#读取对应Pin脚的电平值
        value = pin.read_digital()
        if value:
                bulb.toggle()
                time.sleep(1)

本帖子中包含更多资源

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

x
回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-11 20:45:01 | 显示全部楼层
本帖最后由 linmiaoyan 于 2019-3-16 11:08 编辑

07人体红外感应灯(人体红外热释电)

人体红外释电传感器同样是返回高低电平

当检测到有人走过时亮起60秒


源代码


#从xugu库中导入Pin类
from xugu import Pin
from yeelight import Bulb
import time

#xugu库中的创建Pin对象
pin = Pin(5,Pin.IN)
bulb = Bulb("192.168.31.39")

while 1:
        value = pin.read_digital()
#如果电平为1
        if value:
                bulb.turn_on()
                time.sleep(60)
#通过返回值确认程序的运行状况
                print(1)
        else:
                bulb.turn_off()
                time.sleep(1)
#通过返回值确认程序的运行状况
                print(0)

回复

使用道具 举报

16

主题

40

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2019-3-12 13:06:44 | 显示全部楼层
08自动感应夜灯(光敏、声音)

光线暗时,听到声音就亮起,一会关闭

如果模拟信号返回值恒定在350-500说明没有正确连接
调试参数用代码
from xugu import Pin
from yeelight import Bulb
import time
#xugu库中的创建Pin对象
pinlight = Pin('A0',Pin.IN)
pinsound = Pin('A1',Pin.IN)
while 1:
#读取对应Pin脚的模拟输入值
    valuelight = pinlight.read_analog()
    valuesound = pinsound.read_analog()
    print('灯光值为',valuelight)
    print('声音值为',valuesound)
    time.sleep(1)

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


完整使用代码
from xugu import Pin
from yeelight import Bulb
import time

#xugu库中的创建Pin对象
pinlight = Pin('A0',Pin.IN)
pinsound = Pin('A1',Pin.IN)
bulb = Bulb("192.168.31.39")

while 1:
#读取当前光线强度,小于300则为天黑
    valuelight = pinlight.read_analog()
    while (valuelight<300):
#读取对应Pin脚的模拟输入值
        valuesound = pinsound.read_analog()
        if(valuesound>50):
            bulb.turn_on()
            time.sleep(20)
        valuelight = pinlight.read_analog()
        if (valuelight>300):
            bulb.turn_off()
            break
    time.sleep(1)
time.sleep(60)


本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

虚谷号

GMT+8, 2024-3-28 19:41 , Processed in 0.058363 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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