eagler8
发表于 2020-6-5 20:02
<p>Yeelight 智能灯</p>
<p> </p>
<p> </p>
<p><strong>(1)yeelight.discover_bulbs(timeout=2)</strong></p>
<p> </p>
<p>描述: 发现所有局域网内的Yeelight灯泡</p>
<p> </p>
<p>返回值: 字典列表,包含网络中每个灯泡的IP,端口和功能</p>
<p> </p>
<p>参数:</p>
<p> </p>
<p>timeout (int) - 等待回复需要多少秒。发现将总是要花这么长的时间, 因为它不知道当所有的灯泡都响应完毕时</p>
<p> </p>
<p> </p>
<p><strong>(2)class yeelight.Bulb(ip, port=55443, effect=’smooth’, duration=300, auto_on=False)</strong></p>
<p> </p>
<p>描述: YeeLight的控制类</p>
<p> </p>
<p>参数:</p>
<p> </p>
<p>ip (str) - 灯泡的IP</p>
<p>port (int) - 连接灯泡的端口号,默认55443</p>
<p>effect (str) - 效果类型.”smooth” or “sudden”</p>
<p>duration (int) - 效果的持续时间,以毫秒为单位.最小值为30.突然效果会忽略此值</p>
<p>auto_on (bool) - 是否 ensure_on() 在每次操作之前调用以自动打开灯泡,如果它已关闭。这会在每条消息之前更新灯泡的属性, 每个命令会花费一个额外的消息。 如果您担心速率限制,请将其关闭并自行检查。get_properties() 或运行 ensure_on()</p>
<p> </p>
<p> </p>
<p><strong>(3)Bulb.turn_on()</strong></p>
<p> </p>
<p>描述: 打开灯泡</p>
<p> </p>
<p> </p>
<p><strong>(4)Bulb.turn_off()</strong></p>
<p> </p>
<p>描述: 关闭灯泡</p>
<p> </p>
<p> </p>
<p><strong>(5)Bulb.toggle()</strong></p>
<p> </p>
<p>描述: 反转灯泡状态</p>
<p> </p>
<p> </p>
<p><strong>(6)Bulb.set_rgb(red, green, blue)</strong></p>
<p> </p>
<p>描述: 设置灯泡的 RGB 值</p>
<p> </p>
<p>参数:</p>
<p> </p>
<p>red (int) - 红色范围 (0-255)</p>
<p>green (int) - 绿色范围 (0-255)</p>
<p>blue (int) - 蓝色范围 (0-255)</p>
<p> </p>
<p><strong>(7)Bulb.set_hsv(hue, saturation)</strong></p>
<p> </p>
<p>描述: 设置灯泡的 HSV 值</p>
<p> </p>
<p>参数:</p>
<p> </p>
<p>hue (int) - 色调(0-359)</p>
<p>saturation (int) - 饱和度(0-100)</p>
<p> </p>
<p><strong>(8)Bulb.set_color_temp(degrees)</strong></p>
<p> </p>
<p>描述: 设置灯泡色温</p>
<p> </p>
<p>参数:</p>
<p> </p>
<p>degrees (int) - 色温范围(1700-6500)</p>
<p> </p>
<p><strong>(9)Bulb.set_brightness(brightness)</strong></p>
<p> </p>
<p>描述: YeeLight的控制类</p>
<p> </p>
<p>参数:</p>
<p> </p>
<p>brightness (int) - 亮度范围 (1-100)</p>
eagler8
发表于 2020-6-6 16:01
<p><strong>9、RGB颜色模型</strong><br />
Yeelight使用"RGB" 和"HSV" 两种颜色模型来设置灯泡灯光的颜色。</p>
<p> </p>
<p>RGB色彩模式由自然界中光的三原色的混合原理发展而来。RGB分别代表红色(Red)、绿色(Green)、蓝色(Blue)。它的每个象素在每种颜色上可以负载2的8次方(256)种亮度级别,这样三种颜色通道合在一起就可以产生256的3次方(1670多万)种颜色,它在理论上可以还原自然界中存在的任何颜色。</p>
<p> </p>
<p>RGB模式的图像支持多个图层。据有R、G、B三个单色通道和一个由它们混合颜色的彩色通道。</p>
<p> </p>
<p>在RGB色彩模式的图像中,某种颜色的含量越多,那么这种颜色的亮度也越高,由其产生的结果中这种颜色也就越亮。例如如果三种颜色的亮度级别都为0(亮度级别最低),则它们混合出来的颜色就是黑色;如果它们的亮度级别都为255(亮度级别最高),则其结果为白色。这和自然界中光的三原色的混合原理相同。</p>
<p> </p>
<p>RGB色彩模式是运用最广泛的色彩模式之一,它能适应多种输出的需要,并能较完整地还原图像的颜色信息。如大多数的显示屏、RGB打印、多种写真输出设备都需要用RGB色彩模式的图像来输出。<br />
</p>
<p></p>
eagler8
发表于 2020-6-6 16:10
<p>10、六个触摸键控制的RGB颜色灯</p>
<p> </p>
<pre>
<code># MicroPython动手做(28)——物联网之Yeelight
#六个触摸键控制的RGB颜色灯
from mpython import *
import network
import time
import music
from yeelight import *
from machine import Timer
my_wifi = wifi()
my_wifi.connectWiFi("zh", "zy1567")
_status_p = _status_y = _status_t = _status_h = _status_o = _status_n = 0
def on_touchpad_P_pressed():pass
def on_touchpad_P_unpressed():pass
def on_touchpad_Y_pressed():pass
def on_touchpad_Y_unpressed():pass
def on_touchpad_T_pressed():pass
def on_touchpad_T_unpressed():pass
def on_touchpad_H_pressed():pass
def on_touchpad_H_unpressed():pass
def on_touchpad_O_pressed():pass
def on_touchpad_O_unpressed():pass
def on_touchpad_N_pressed():pass
def on_touchpad_N_unpressed():pass
tim12 = Timer(12)
def timer12_tick(_):
global _status_p, _status_y, _status_t, _status_h, _status_o, _status_n
try:
touchPad_P.read();pass
except:
return
if touchPad_P.read() < 400:
if 1 != _status_p:_status_p = 1;on_touchpad_P_pressed()
elif 0 != _status_p:_status_p = 0;on_touchpad_P_unpressed()
if touchPad_Y.read() < 400:
if 1 != _status_y:_status_y = 1;on_touchpad_Y_pressed()
elif 0 != _status_y:_status_y = 0;on_touchpad_Y_unpressed()
if touchPad_T.read() < 400:
if 1 != _status_t:_status_t = 1;on_touchpad_T_pressed()
elif 0 != _status_t:_status_t = 0;on_touchpad_T_unpressed()
if touchPad_H.read() < 400:
if 1 != _status_h:_status_h = 1;on_touchpad_H_pressed()
elif 0 != _status_h:_status_h = 0;on_touchpad_H_unpressed()
if touchPad_O.read() < 400:
if 1 != _status_o:_status_o = 1;on_touchpad_O_pressed()
elif 0 != _status_o:_status_o = 0;on_touchpad_O_unpressed()
if touchPad_N.read() < 400:
if 1 != _status_n:_status_n = 1;on_touchpad_N_pressed()
elif 0 != _status_n:_status_n = 0;on_touchpad_N_unpressed()
tim12.init(period=100, mode=Timer.PERIODIC, callback=timer12_tick)
def on_touchpad_P_pressed():
global i
time.sleep_ms(500)
bulb.set_rgb(153, 0, 0)
oled.DispChar("P键红色", 38, 32, 1)
oled.show()
rgb.fill((int(153), int(0), int(0)))
rgb.write()
time.sleep_ms(1)
def on_touchpad_Y_pressed():
global i
time.sleep_ms(500)
bulb.set_rgb(0, 153, 0)
oled.DispChar("Y键绿色", 38, 32, 1)
oled.show()
rgb.fill((int(0), int(153), int(0)))
rgb.write()
time.sleep_ms(1)
def on_touchpad_T_pressed():
global i
time.sleep_ms(500)
bulb.set_rgb(51, 51, 255)
oled.DispChar("T键蓝色", 38, 32, 1)
oled.show()
rgb.fill((int(51), int(51), int(255)))
rgb.write()
time.sleep_ms(1)
def on_touchpad_H_pressed():
global i
time.sleep_ms(500)
bulb.set_rgb(255, 102, 0)
oled.DispChar("H键橙色", 38, 32, 1)
oled.show()
rgb.fill((int(153), int(51), int(0)))
rgb.write()
time.sleep_ms(1)
def on_touchpad_O_pressed():
global i
time.sleep_ms(500)
bulb.set_rgb(204, 51, 204)
oled.DispChar("O键紫色", 38, 32, 1)
oled.show()
rgb.fill((int(102), int(51), int(102)))
rgb.write()
time.sleep_ms(1)
def on_touchpad_N_pressed():
global i
time.sleep_ms(500)
bulb.set_rgb(255, 204, 51)
oled.DispChar("N键黄色", 38, 32, 1)
oled.show()
rgb.fill((int(153), int(102), int(51)))
rgb.write()
time.sleep_ms(1)
rgb = (int(51), int(51), int(51))
rgb.write()
time.sleep_ms(1)
music.play('G5:1')
bulb = Bulb(discover_bulbs()["ip"])
time.sleep_ms(500)
bulb.turn_on()
oled.fill(0)
oled.DispChar("触摸键控制RGB灯", 18, 16, 1)
oled.show()</code></pre>
<p> </p>
eagler8
发表于 2020-6-6 16:15
<p>mPython X 实验图形编程</p>
<p> </p>
<p></p>
eagler8
发表于 2020-6-6 17:17
<p># MicroPython动手做(28)——物联网之Yeelight<br />
#六个触摸键控制的RGB颜色灯(实验视频)</p>
<p> </p>
<p>https://v.youku.com/v_show/id_XNDcwMTY3MzkxNg==.html?spm=a2h0c.8166622.PhoneSokuUgc_1.dtitle</p>
<p> </p>
<p><iframe allowfullscreen="true" frameborder="0" height="450" src="http://player.youku.com/embed/XNDcwMTY3MzkxNg" style="background:#eee;margin-bottom:10px;" width="750"></iframe><br />
</p>
eagler8
发表于 2020-6-6 17:35
<p><strong>11、随机颜色的RGB模型彩虹灯</strong></p>
<p>命令消息配额限制为line 243(到限额会自动停止运行)</p>
<p> </p>
<pre>
<code># MicroPython动手做(28)——物联网之Yeelight
#随机颜色的RGB模型彩虹灯
from mpython import *
import network
from yeelight import *
import time
import music
import random
my_wifi = wifi()
my_wifi.connectWiFi("zh", "zy1567")
random.seed(time.ticks_cpu())
bulb = Bulb(discover_bulbs()["ip"])
time.sleep_ms(500)
bulb.turn_on()
oled.fill(0)
oled.DispChar("RGB彩虹灯", 33, 16, 1)
oled.DispChar(discover_bulbs()['ip'], 15, 28, 1)
oled.show()
music.play('G5:1')
time.sleep_ms(500)
bulb.set_rgb(0, 153, 0)
rgb.fill((int(0), int(102), int(0)))
rgb.write()
time.sleep_ms(1)
while True:
time.sleep_ms(500)
bulb.set_rgb(0, (random.randint(1, 255)),(random.randint(1, 255)))
time.sleep_ms(500)
bulb.set_rgb((random.randint(1, 255)), 0,(random.randint(1, 255)))
time.sleep_ms(500)
bulb.set_rgb((random.randint(1, 255)), (random.randint(1, 255)),0)</code></pre>
<p> </p>
eagler8
发表于 2020-6-6 18:00
<p>mPython X 实验图形编程</p>
<p> </p>
<p></p>
eagler8
发表于 2020-6-6 18:36
<p># MicroPython动手做(28)——物联网之Yeelight<br />
#随机颜色的RGB模型彩虹灯(实验视频)</p>
<p> </p>
<p>https://v.youku.com/v_show/id_XNDcwMTgxOTQwOA==.html?spm=a2h0c.8166622.PhoneSokuUgc_1.dtitle</p>
<p> </p>
<p><iframe allowfullscreen="true" frameborder="0" height="450" src="http://player.youku.com/embed/XNDcwMTgxOTQwOA" style="background:#eee;margin-bottom:10px;" width="750"></iframe><br />
</p>
eagler8
发表于 2020-6-6 18:52
<p></p>
<p><strong>12、HSV颜色模型</strong><br />
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。</p>
<p> </p>
<p>色调H<br />
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°。</p>
<p> </p>
<p>饱和度S<br />
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。</p>
<p> </p>
<p>明度V<br />
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。</p>
<p> </p>
<p>RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。</p>
eagler8
发表于 2020-6-6 18:59
<p>HSV的六棱锥<br />
H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。</p>
<p> </p>
<p>纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。</p>
<p> </p>
<p>V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。</p>
<p> </p>
<p>HSV对用户来说是一种直观的颜色模型。我们可以从一种纯色彩开始,即指定色彩角H,并让V=S=1,然后我们可以通过向其中加入黑色和白色来得到我们需要的颜色。增加黑色可以减小V而S不变,同样增加白色可以减小S而V不变。例如,要得到深蓝色,V=0.4 S=1 H=210度。要得到淡蓝色,V=1 S=0.4 H=210度。一般说来,人眼最大能区分128种不同的色彩,130种色饱和度,23种明暗度。如果我们用16Bit表示HSV的话,可以用7位存放H,4位存放S,5位存放V,即745或者655就可以满足我们的需要了。由于HSV是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛,如Photoshop(在Photoshop中叫HSB)等等,但这也决定了它不适合使用在光照模型中,许多光线混合运算、光强运算等都无法直接使用HSV来实现。顺便提一下,另外一种直观颜色模型是HSL模型,该模型中前两个参数和HSV一样,而L表示亮度。它的三维表示为一双棱锥。</p>
<p> </p>
<p></p>
eagler8
发表于 2020-6-6 20:23
<p><strong>13、测试HSV颜色模型的hue色调变动(饱和度设为100)</strong></p>
<p> </p>
<p>Yeelight灯泡的HSV(Hue Saturation Value)颜色模型:</p>
<p>hue 色调,用角度度量,取值范围为0~359,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。</p>
<p> </p>
<p>saturation 饱和度,表示颜色接近光谱色的程度。颜色的饱和度也就愈高。饱和度高,颜色则深而艳。范围0~100。 </p>
<p> </p>
<p>Value亮度参数,未提供支持。只需设置 hue 、saturation 参数即可。在做些彩虹效果,颜色过渡时,HSV更为自然。</p>
<p> </p>
<p></p>
eagler8
发表于 2020-6-6 20:30
<p># MicroPython动手做(28)——物联网之Yeelight<br />
#测试HSV颜色模型的hue 色调(饱和度设为100)</p>
<p> </p>
<pre>
<code># MicroPython动手做(28)——物联网之Yeelight
#测试HSV颜色模型的hue 色调(饱和度设为100)
from mpython import *
import network
import music
from yeelight import *
import time
my_wifi = wifi()
my_wifi.connectWiFi("zh", "zy1567")
music.play('G5:1')
oled.fill(0)
oled.DispChar("测试HSV色调", 35, 18, 1)
oled.DispChar("0-359", 55, 29, 1)
oled.show()
bulb = Bulb(discover_bulbs()["ip"])
time.sleep_ms(500)
bulb.turn_on()
time.sleep_ms(500)
bulb.set_brightness(100)
time.sleep_ms(500)
bulb.set_rgb(51, 0, 0)
rgb = (int(0), int(102), int(0))
rgb.write()
time.sleep_ms(1)
while True:
for i in range(0, 360, 22):
time.sleep_ms(500)
bulb.set_hsv(i, 100)</code></pre>
<p> </p>
eagler8
发表于 2020-6-6 20:34
<p>mPython X 实验图形编程</p>
<p> </p>
<p></p>
eagler8
发表于 2020-6-6 20:54
本帖最后由 eagler8 于 2020-6-6 21:04 编辑
<p># MicroPython动手做(28)——物联网之Yeelight<br />
# 测试HSV颜色模型的hue色调变动(实验视频)</p>
<p> </p>
<p>https://v.youku.com/v_show/id_XNDcwMTk1MDgyOA==.html?spm=a2h0c.8166622.PhoneSokuUgc_3.dtitle</p>
<p> </p>
<p> </p>
<p><iframe allowfullscreen="true" frameborder="0" height="450" src="http://player.youku.com/embed/XNDcwMTk1MDgyOA" style="background:#eee;margin-bottom:10px;" width="750"></iframe><br />
</p>
eagler8
发表于 2020-6-6 21:07
<p><strong>14、测试Yeelight灯泡的色温变动(1700k-6500k)</strong></p>
<p> </p>
<p>可以使用 set_color_temp(degrees) 函数设置灯泡色温 <br />
degrees 色温参数,范围1700k~6500k。</p>
<p> </p>
<p>知识点:</p>
<p>色温<br />
是表示光线中包含颜色成分的一个计量单位。从理论上说,黑体温度指绝对黑体从绝对零度(-273℃)开始加温后所呈现的颜色。黑体在受热后,逐渐由黑变红,转黄,发白,最后发出蓝色光。当加热到一定的温度,黑体发出的光所含的光谱成分,就称为这一温度下的色温,计量单位为“K”(开尔文)。如果某一光源发出的光,与某一温度下黑体发出的光所含的光谱成分相同,就称为某K色温。如100W灯泡发出的光的颜色,与绝对黑体在2527℃时的颜色相同,那么这只灯泡发出的光的色温就是:(2527+273)K=2800K。</p>
<p> </p>
<p></p>
<p> </p>
<p>色温与亮度<br />
高色温光源照射下,如亮度不高则给人们有一种阴冷的气氛;低色温光源照射下,亮度过高会给人们有一种闷热感觉。光色的对比:在同一空间使用两种光色差很大的光源,其对比将会出现层次效果,光色对比大时,在获得亮度层次的同时,又可获得光色的层次。</p>
<p> </p>
<p>色温原理<br />
开尔文认为,假定某一纯黑物体,能够将落在其上的所有热量吸收,而没有损失,同时又能够将热量生成的能量全部以“光”的形式释放出来的话,它产生辐射最大强度的波长随温度变化而变化。例如,当黑体受到的热力相当于500—550℃时,就会变成暗红色(某红色波长的辐射强度最大),达到1050—1150℃时,就变成黄色……因而,光源的颜色成分是与该黑体所受的温度相对应的。色温通常用开尔文温度(K)来表示,而不是用摄氏温度单位。打铁过程中,黑色的铁在炉温中逐渐变成红色,这便是黑体理论的最好例子。通常我们所用灯泡内的钨丝就相当于这个黑体。色温计算法就是根据以上原理,用K来对应表示物体在特定温度辐射时最大波长的颜色。根据这一原理,任何光线的色温是相当于上述黑体散发出同样颜色时所受到的“温度”。颜色实际上是一种心理物理上的作用,所有颜色印象的产生,是由于时断时续的光谱在眼睛上的反应,所以色温只是用来表示颜色的视觉印象。</p>
eagler8
发表于 2020-6-6 21:43
<p># MicroPython动手做(28)——物联网之Yeelight<br />
# 测试Yeelight灯泡的色温变动(1700k-6500k)</p>
<p> </p>
<pre>
<code># MicroPython动手做(28)——物联网之Yeelight
# 测试Yeelight灯泡的色温变动(1700k-6500k)
from mpython import *
import network
import music
from yeelight import *
import time
my_wifi = wifi()
my_wifi.connectWiFi("zh", "zy1567")
music.play('G5:1')
oled.fill(0)
oled.DispChar("测试色温变动", 30, 18, 1)
oled.DispChar("1700-6500", 33, 29, 1)
oled.show()
bulb = Bulb(discover_bulbs()["ip"])
time.sleep_ms(500)
bulb.turn_on()
time.sleep_ms(500)
bulb.set_rgb(51, 0, 0)
rgb = (int(0), int(102), int(0))
rgb.write()
time.sleep_ms(1)
while True:
for i in range(1700, 6501, 80):
time.sleep_ms(500)
bulb.set_color_temp(i)</code></pre>
<p> </p>
eagler8
发表于 2020-6-7 05:35
<p>mPython X 实验图形编程</p>
<p> </p>
<p></p>
eagler8
发表于 2020-6-7 05:39
<p>色温1700K</p>
<p> </p>
<p></p>
eagler8
发表于 2020-6-7 05:44
<p>色温3800K</p>
<p> </p>
<p></p>
eagler8
发表于 2020-6-7 05:46
<p>色温6500K</p>
<p> </p>
<p></p>