728x90
반응형
SMALL
안녕하세요 땜블리 입니다.
라즈베리파이 피코 베이직 트레이닝 보드를 이용한 WS2812 제어를 진행 하겠습니다.
베이직 트레이닝 보드는 아래에서 확인이 가능합니다.
https://ttcw.tistory.com/4
1) WS2812 제어 구동 원리
(1) 동작설명
WS2812 칩은 LED 빨강, LED 초록, LED 파랑을 한칩에 다 넣은 IC입니다.
24 bit 데이터를 전송하여 LED의 색을 나타내고 순서는 아래와 같이 G R B 순서입니다.
2) WS2812의 밝기 제어
(1) 동작설명
neopixel 모듈의 밝기 함수로 밝기를 조절 합니다.
(2) 코드작성
main.py
import ws2812Bright
ws2812Bright.py
from machine import Pin
from time import sleep
import neopixel
led1 = Pin(2,Pin.OUT)
led2 = Pin(3,Pin.OUT)
n =4# 네오픽셀 개체 수
p =13# 핀 번호
np = neopixel.NeoPixel(Pin(p),n)# 네오픽셀 설정
def set_color(r,g,b):
for i in range(n):
np[i] = (r,g,b)
np.write()
def clear():
for i in range(n):
np[i] = (0, 0, 0)
np.write()
while True:
led1.value(0)
#set_color(r,g,b)
set_color(30,0,0)
led1.value(1)
sleep(1)
led1.value(0)
#set_color(r,g,b)
set_color(100,0,0)
led1.value(1)
sleep(1)
led1.value(0)
#set_color(r,g,b)
set_color(250,0,0)
led1.value(1)
sleep(1)
led1.value(0)
#set_color(r,g,b)
set_color(0,30,0)
led1.value(1)
sleep(1)
led1.value(0)
#set_color(r,g,b)
set_color(0,100,0)
led1.value(1)
sleep(1)
led1.value(0)
#set_color(r,g,b)
set_color(0,250,0)
led1.value(1)
sleep(1)
led1.value(0)
#set_color(r,g,b)
set_color(0,0,30)
led1.value(1)
sleep(1)
led1.value(0)
#set_color(r,g,b)
set_color(0,0,100)
led1.value(1)
sleep(1)
led1.value(0)
#set_color(r,g,b)
set_color(0,0,250)
led1.value(1)
sleep(1)
#clear()
반응형
(3) 동작결과
3) WS2812의 풀컬러 제어
(1) 동작설명
ws2812 LED 4개를 레인보우 사이클로 동작 합니다.
import neopixel 네오픽셀 모듈을 가져와 사용
np = neopixel.NeoPixel(Pin(p),n) 네오픽셀 사용 선언
rainbow_cycle(0.1) 선언된 함수 실행
(2) 코드작성
main.py
import ws2812Fullcolor
ws2812Fullcolor.py
from machine import Pin
from time import sleep
import neopixel
led1 = Pin(2,Pin.OUT)
led2 = Pin(3,Pin.OUT)
n =4# 네오픽셀 개체 수
p =13# 핀 번호
np = neopixel.NeoPixel(Pin(p),n)# 네오픽셀 설정
def set_color(r,g,b):
for i in range(n):
np[i] = (r,g,b)
np.write()
# bounce
def bounce(r, g, b, wait):
for i in range(2* n):
for j in range(n):
np[j] = (r, g, b)
if (i // n) % 2==0:
np[i % n] = (0, 0, 0)
else:
np[n -1- (i % n)] = (0, 0, 0)
np.write()
sleep(wait)
# cycle
def cycle(r, g, b, wait):
for i in range(n):
for j in range(n):
np[j] = (0, 0, 0)
np[i % n] = (r, g, b)
np.write()
sleep(wait)
def wheel(pos):
if pos <0 or pos >255:
return (0, 0, 0)
if pos <85:
return (255- pos *3, pos *3, 0)
if pos <170:
pos -=85
return (0, 255- pos *3, pos *3)
pos -=170
return (pos *3, 0, 255- pos *3)
# rainbow
def rainbow_cycle(wait):
for j in range(255):
for i in range(n):
rc_index = (i *256// n) + j
np[i] = wheel(rc_index &255)
np.write()
sleep(wait)
# turn off all pixels
def clear():
for i in range(n):
np[i] = (0, 0, 0)
np.write()
while True:
led1.value(0)
rainbow_cycle(0.05)
led1.value(1)
clear()
sleep(0.5)
(3) 동작결과
728x90
반응형
LIST
'라즈베리파이_피코_피코 W > 마이크로파이썬' 카테고리의 다른 글
09. 라즈베리파이 피코 DHT11제어 (0) | 2023.03.03 |
---|---|
08. 라즈베리파이 피코 릴레이제어 (0) | 2023.03.02 |
06. 라즈베리파이 피코 PWM제어 (0) | 2023.02.28 |
05. 라즈베리파이 피코 ADC 제어 (0) | 2023.02.27 |
04. 라즈베리파이 피코 부져제어 (0) | 2023.02.26 |
댓글