10mmRGB全彩LED传感器在掌控下的使用(搬运)
近来在看台湾赵英杰的《超图解Python物联网实作入门:使用ESP8266与Micropython》(以下简称《超图解Python》)里面一些例子蛮有趣的。掌控的主芯片是ESP32的,烧录的固件也是基于micropython的,应该可以通用,无非是掌控下的一些引脚及模块的定义重新做“改动”,所以有了“搬运”的想法。
材料:
1. RGB全彩LED一个(arduino下传感器套装基本都会有)
2. 掌控板
3. microbit扩展板一个
手头没有掌控的扩展板,盛思的又迟迟不见动静(吐槽下)。microbit的扩展板也可以用,不过需要掌控板反插,本人喵粉,用的是喵家的iobit扩展板。
4. 杜邦线若干(母对母杜邦线,也可以配合面包板使用公对母杜邦线)
接线:(此次用的RGB传感器是共电的,还有一种共地的。)
RGB 掌控
V 3.3V
R P1
G P0
B P5
此次是要使用引脚的 PWM 模块,掌控上的P3和P4引脚不支持PWM。
原理:
颜色表达有RGB和HSV两种格式。两者的转换百度能够查到。此次是通过定义引脚的PWM(Pulse Width Modulation 脉宽调制)模块(module),给出特定的duty(占空比)值,让RGB传感器产生颜色变化。
准备:
需要进行HSV的颜色数据操作,RGB和HSV转换,先编程个color.py 文件作为这个RGB和HSV转换的“库文件”
此程序出处在《超图解Python》书上
color.py 文件内程序如下:
def hsv2rgb(h, s, v):
if s == 0.0:
return v, v, v
r, g, b = v, v, v
i = int(h/60.0)
f = h/60.0 - i
if i == 0:
g *= 1.0 - s * (1.0 - f)
b *= 1.0 - s
elif i == 1:
r *= 1.0 - s * f
b *= 1.0 - s
elif i == 2:
r *= 1.0 - s
b *= 1.0 - s * (1.0 - f)
elif i == 3:
r *= 1.0 - s
g *= 1.0 - s * f
elif i == 4:
r *= 1.0 - s * (1.0 - f)
g *= 1.0 - s
elif i == 5:
g *= 1.0 - s
b *= 1.0 - s * f
return (int(r * 1023.0), int(g * 1023.0), int(b * 1023.0))
把 color.py 文件考入掌控板中
在掌控的 REPL界面下试验:
from mpython import Pin, PWM
import time
import color
R_Pin = PWM(Pin(Pin.P1))
G_Pin = PWM(Pin(Pin.P0))
B_Pin = PWM(Pin(Pin.P5))
def wheel():
for i in range(360):
RGB = color.hsv2rgb(i, 1, 1)
R_Pin.duty(RGB)
G_Pin.duty(RGB)
B_Pin.duty(RGB)
time.sleep_ms(50)
wheel() # 调用定义的wheel()函数
10mmRGB全彩LED灯会出现颜色的渐进式变化
P.S. 以上程序原出处均出自于《超图解Python》(针对掌控的一些模块及引脚定义做了相应的修改)
DF很快要出掌控扩展板了,出了我送您一块哈。{:5_141:}
页:
[1]