yywudao 发表于 2019-4-28 16:40:31

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》(针对掌控的一些模块及引脚定义做了相应的修改)


rzyzzxw 发表于 2019-4-28 18:20:59

DF很快要出掌控扩展板了,出了我送您一块哈。{:5_141:}
页: [1]
查看完整版本: 10mmRGB全彩LED传感器在掌控下的使用(搬运)