MicroPython动手做(28)——物联网之Yeelight-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

MicroPython动手做(28)——物联网之Yeelight

[复制链接]
 楼主| 发表于 2020-6-4 18:42 | 显示全部楼层
5、AB键控制Yeelight灯泡升级版(绿色光)


[mw_shl_code=python,true]# MicroPython动手做(28)——物联网之Yeelight
#AB键控制Yeelight灯泡升级版

from mpython import *
import network
import music
import time
from yeelight import *

my_wifi = wifi()

my_wifi.connectWiFi("zh", "zy1567")

def on_button_a_down(_):
    global i
    time.sleep_ms(10)
    if button_a.value() == 1: return
    music.play('F4:1')
    time.sleep_ms(500)
    LED.turn_on()
    time.sleep_ms(500)
    LED.set_rgb(153, 255, 153)
    rgb.fill((int(0), int(102), int(0)))
    rgb.write()
    time.sleep_ms(1)
    oled.fill(0)
    oled.DispChar("打开电灯", 43, 22, 1)
    oled.show()

def on_button_b_down(_):
    global i
    time.sleep_ms(10)
    if button_b.value() == 1: return
    music.play('D4:1')
    time.sleep_ms(500)
    LED.turn_off()
    rgb.fill( (0, 0, 0) )
    rgb.write()
    time.sleep_ms(1)
    oled.fill(0)
    oled.DispChar("关闭电灯", 43, 22, 1)
    oled.show()

button_a.irq(trigger=Pin.IRQ_FALLING, handler=on_button_a_down)

button_b.irq(trigger=Pin.IRQ_FALLING, handler=on_button_b_down)


music.play('A4:1')
rgb[1] = (int(51), int(51), int(255))
rgb.write()
time.sleep_ms(1)
if len(discover_bulbs()) > 0:
    LED = Bulb(discover_bulbs()[0]["ip"])[/mw_shl_code]
 楼主| 发表于 2020-6-4 19:05 | 显示全部楼层
12.gif
 楼主| 发表于 2020-6-4 19:06 | 显示全部楼层
mPyehon X 实验图形编程

09.png
 楼主| 发表于 2020-6-4 20:54 | 显示全部楼层
6、自动变色循环流光灯



[mw_shl_code=python,true]# MicroPython动手做(28)——物联网之Yeelight
#自动变色循环流光灯

from mpython import *
import network
import time
from yeelight import *

my_wifi = wifi()

my_wifi.connectWiFi("zh", "zy1567")


rgb[1] = (int(0), int(102), int(0))
rgb.write()
time.sleep_ms(1)
while True:
    if len(discover_bulbs()) > 0:
        D = Bulb(discover_bulbs()[0]["ip"])
        time.sleep_ms(500)
        D.turn_on()
        time.sleep_ms(500)
        D.set_rgb(32, 178, 170)
        for i in range(10, 101, 5):
            time.sleep_ms(500)
            D.set_brightness(i)
            time.sleep_ms(500)
            D.set_hsv(359, i)
        time.sleep_ms(500)
        D.turn_off()[/mw_shl_code]
 楼主| 发表于 2020-6-4 20:56 | 显示全部楼层
mPyehon X 实验图形编程

13.png
 楼主| 发表于 2020-6-4 21:04 | 显示全部楼层
06.jpg
 楼主| 发表于 2020-6-5 19:25 | 显示全部楼层
7、局域网控制
Yeelight 支持Google Assistant 和 Amazon Alexa 智能语音控制。还支持国内少有支持的IFTTT。它可以社交媒体、智能硬件等各类网络服务更好的联动。后续我们会讲解IFTTT的有关应用。 除此外,Yeelight还针对技术爱好者推出,第三方控制协议,可实现局域网内的个性化的控制。本文讲解的掌控板控制Yeelight智能照明设备就是用到该协议。

Yeelight第三方控制协议:https://www.yeelight.com/downloa ... -Operation_Spec.pdf

Yeelight 拥有完整的智能家居照明产品线,产品系列辐射家居照明系列、台上照明系列、氛围照明系列以及智能控制系列。集前沿技术和至美设计于一体是Yeelight一贯的追求。 AI技术、BLE MESH技术、全屋智能照明技术均旗下产品进行广泛应用,全线WiFi产品支持智能语音控制,灯光变化,尽在言语之间。

掌控板提供 yeelight 驱动库,该库可在 awesome-mpython/libary/yeelight 获取。里面有更详细的 yeelight 模块的API说明。 yeelight.py 下载至掌控板的文件系统。掌控板连接到Yeelight相同的局域网内。

 楼主| 发表于 2020-6-5 19:39 | 显示全部楼层
8、MicroPython编程
(1)发现灯泡

掌控板和Yeelight灯泡在同局域网内后,我们要控制灯泡,首先需要知道该灯泡的IP地址,我们可以使用 discover_bulbs() 函数:

[mw_shl_code=python,true]from mpython import *                   # 导入mpython模块
from yeelight import *                  # 导入yeelight模块

my_wifi = wifi()                        # 连接到与YeeLight相同的局域网内
my_wifi.connectWiFi("ssid","password")


discover_bulbs()                        # 发现局域网内YeeLight的设备信息[/mw_shl_code]

网内的Yeelight灯泡响应并返回包含bulbs属性的字典:


[mw_shl_code=arduino,true]>>> discover_bulbs()
[{'ip': '192.168.0.8', 'capabilities': {'rgb': '16711680', 'bright': '100', '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', 'sat': '100', 'power': 'off', 'id': '0x0000000007e7544d', 'name': '', 'fw_ver': '26', 'color_mode': '2', 'hue': '359', 'ct': '3500', 'model': 'color'}, 'port': '55443'}][/mw_shl_code]

discover_bulbs() 函数,可获取网内Yeelight设备的属性。从上述返回的来看,该灯泡的IP地址为 192.168.0.8 。


(2)开关控制

知道IP地址后,我们构建 Bulb 对象,对灯泡开关控制:

[mw_shl_code=arduino,true]bulb=Bulb("192.168.0.8")    # 构建对象
bulb.turn_on()              # 开灯指令
bulb.turn_off()             # 关灯指令[/mw_shl_code]

除了 turn_on() 、turn_off() 还可使用 toggle() 反转状态。




 楼主| 发表于 2020-6-5 19:51 | 显示全部楼层
(3)亮度调节


[mw_shl_code=arduino,true]bulb.set_brightness(100)[/mw_shl_code]




set_brightness(brightness) , brightness 参数为亮度值,可调范围0~100 。







(4)设置颜色


[mw_shl_code=arduino,true]bulb.set_rgb(255,0,0)           # 通过RGB设置灯泡颜色
bulb.set_hsv(180,100)           # 通过HSV设置灯泡颜色
bulb.set_color_temp(1700)       # 设置灯泡色温[/mw_shl_code]




yeelight 模块提供 set_rgb(red, green, blue) 和 set_hsv(hue, saturation) 两个函数。"RGB" 和"HSV" 两种颜色模型来设置灯泡灯光颜色。RGB颜色模型比较常用,相信大家并不陌生。通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色。 HSV(Hue Saturation Value)颜色模型:hue 色调,用角度度量,取值范围为0~359,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。saturation 饱和度,表示颜色接近光谱色的程度。颜色的饱和度也就愈高。饱和度高,颜色则深而艳。范围0~100。 Value亮度参数,未提供支持。只需设置 hue 、saturation 参数即可。在做些彩虹效果,颜色过渡时,HSV更为自然。




还可以使用 set_color_temp(degrees) 函数设置灯泡色温, degrees 色温参数,范围1700~6500。







14-.jpg




注意

Yeelight, 目前WiFi智能设备最多支持4个同时TCP连接。超过的连接尝试将被拒绝。对于每个连接,都有一个命令消息配额限制, 也就是每分钟60个指令。所有LAN也有一个总配额限制,144。


 楼主| 发表于 2020-6-5 20:02 | 显示全部楼层
Yeelight 智能灯


(1)yeelight.discover_bulbs(timeout=2)

描述: 发现所有局域网内的Yeelight灯泡

返回值: 字典列表,包含网络中每个灯泡的IP,端口和功能

参数:

timeout (int) - 等待回复需要多少秒。发现将总是要花这么长的时间, 因为它不知道当所有的灯泡都响应完毕时


(2)class yeelight.Bulb(ip, port=55443, effect=’smooth’, duration=300, auto_on=False)

描述: YeeLight的控制类

参数:

ip (str) - 灯泡的IP
port (int) - 连接灯泡的端口号,默认55443
effect (str) - 效果类型.”smooth” or “sudden”
duration (int) - 效果的持续时间,以毫秒为单位.最小值为30.突然效果会忽略此值
auto_on (bool) - 是否 ensure_on() 在每次操作之前调用以自动打开灯泡,如果它已关闭。这会在每条消息之前更新灯泡的属性, 每个命令会花费一个额外的消息。 如果您担心速率限制,请将其关闭并自行检查。get_properties() 或运行 ensure_on()


(3)Bulb.turn_on()

描述: 打开灯泡


(4)Bulb.turn_off()

描述: 关闭灯泡


(5)Bulb.toggle()

描述: 反转灯泡状态


(6)Bulb.set_rgb(red, green, blue)

描述: 设置灯泡的 RGB 值

参数:

red (int) - 红色范围 (0-255)
green (int) - 绿色范围 (0-255)
blue (int) - 蓝色范围 (0-255)

(7)Bulb.set_hsv(hue, saturation)

描述: 设置灯泡的 HSV 值

参数:

hue (int) - 色调(0-359)
saturation (int) - 饱和度(0-100)

(8)Bulb.set_color_temp(degrees)

描述: 设置灯泡色温

参数:

degrees (int) - 色温范围(1700-6500)

(9)Bulb.set_brightness(brightness)

描述: YeeLight的控制类

参数:

brightness (int) - 亮度范围 (1-100)

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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 00:55 , Processed in 0.199147 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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