3951| 1
|
[入门教程] 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[0]) G_Pin.duty(RGB[1]) B_Pin.duty(RGB[2]) time.sleep_ms(50) wheel() # 调用定义的wheel()函数 10mmRGB全彩LED灯会出现颜色的渐进式变化 P.S. 以上程序原出处均出自于《超图解Python》(针对掌控的一些模块及引脚定义做了相应的修改) |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed