본문 바로가기
라즈베리파이_피코_피코 W/마이크로파이썬

07.라즈베리파이 피코 WS2812

by 땜블리 2023. 3. 1.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.
라즈베리파이 피코 베이직 트레이닝 보드를 이용한 WS2812 제어를 진행 하겠습니다.
베이직 트레이닝 보드는 아래에서 확인이 가능합니다.
https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

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

댓글