【得捷电子Follow me第2期】 任务3:控制WS2812B
[复制链接]
本帖最后由 青蛙2009 于 2023-8-19 18:19 编辑
【得捷电子Follow me第2期】 任务3:控制WS2812B
使用电位计控制板载的Neopixel LED的显示和颜色切换。
需要额外用到两个电位计,和一些杜邦线:其中一个电位计控制亮度,另一个电位计控制色度。
用这两个电位计控制、板载的Neopixel LED,实现LED的颜色切换和亮度调节。
接线:
1、两个电位计两侧引脚并联
2、电位计两侧引脚Vcc、Gnd接开发板
3、两个电位计中间引脚分别接A0、A1
编程语言和环境用CircuitPython:
开发板:
Adafruit Feather ESP32-S3 TFT
运行环境:
Adafruit CircuitPython 8.2.3 on 2023-08-11
编辑器:
mu-editor
用到的模块:
1、内置的模块:time、analogio、board、rainbowio
2、需要的额外模块:neopixel
需要把:adafruit_pixelbuf.mpy、neopixel.mpy两个库文件复制到开发板的lib目录下。
代码解析:
以下是core.py文件完整代码:
#用两个电位计控制neopixel RGB彩灯
import time
import analogio
import digitalio
import board
import neopixel
from rainbowio import colorwheel
rx=analogio.AnalogIn(board.A0)
ry=analogio.AnalogIn(board.A1)
led=neopixel.NeoPixel(board.NEOPIXEL, 1)
def getV(pin):
return pin.value/61000
def getHue():
return colorwheel(getV(rx)*255)
def getBrightness():
v = round(getV(ry),2)
return v
while True:
hue=getHue()
brightness=getBrightness()
led[0]=hue
led.brightness=brightness
print((hue, brightness))
time.sleep(0.02)
rx、ry:分别是两个电位计输入,读取的是A0跟A1的模拟信号输入。
led:表示neopixel的彩灯。
getV(pin):函数是将模拟信号的输入值归一化,模拟输入的取值范围是0~65535。
正常来说应该是除以65535,但是有个教程说esp32有点限制,到不了65535,
照着那个教程也用了61000。
getHue():函数是将rx的取值范围改到0~255表示色度。
getBrightness():函数是将ry的取值0.00~1.00保留两位小数,因为小数位太多可能有点抽。
colorwheel():函数是rainbowio模块里面的,主要功能就是包0~255的色度值转成RGB值。
循环里面就是读取rx,ry值,再赋值给led。
效果如下:
调亮度:
调色度:
任务视频演示
任务源码
活动的心得体会:
第一次参加这种活动,生怕白嫖不了,里面卖的东西普遍贼贵,我买了两个运动传感器,
别问为啥买两个,问就是点错了,基本用不上了,贼可惜。
也是第一次用python做这种开发,虽然代码很简单,但是,学完很明显感觉对底层了解不够。
快速开发实现一些想法之类的还行。
|