안녕하세요 땜블리 입니다.
라즈베리파이 피코 베이직 트레이닝 보드를 이용한 WS2812 제어를 진행 하겠습니다.
베이직 트레이닝 보드는 아래에서 확인이 가능합니다.
https://ttcw.tistory.com/4
1) WS2812 제어 구동 원리
(1) 동작설명
WS2812 칩은 LED 빨강, LED 초록, LED 파랑을 한칩에 다 넣은 IC입니다.
24 bit 데이터를 전송하여 LED의 색을 나타내고 순서는 아래와 같이 G R B 순서입니다.
2) WS2812의 제어
(1) 동작설명
neopixel 모듈의 함수로 WS2812를 제어 합니다.
먼저 neopixel 모듈 라이브러리를 추가 해주어야 합니다.
라이브러리는 아래 사이트에서 받을 수 있습니다.
https://circuitpython.org/libraries
번들 항목에 보면 버전별로 소스와 예제 등 다운 받을 수있습니다.
현재 버전은 boot_out.txt 파일을 열어보면 확인이 됩니다
최신 버전은 8.0.3 으로 8.x 버전의 번들을 다운받아 압축을 풀면 여러 라이브러리가 나오는데 필요한 라이브러리를 lib 폴더에 넣어주면 됩니다.
mpy 파일은 파이썬 코드를 바이트코드로 컴파일하고 최적화하여 만든 파일입니다. 이 파일은 일반적인 파이썬 코드 파일(.py)보다 작고 빠르게 실행될 수 있습니다.
(2) 코드작성
code.py
import time
import board
from rainbowio import colorwheel
import neopixel
#https://circuitpython.org/libraries
pixel_pin = board.GP13
num_pixels = 4
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)
def color_chase(color, wait):
for i in range(num_pixels):
pixels[i] = color
time.sleep(wait)
pixels.show()
time.sleep(0.5)
def rainbow_cycle(wait):
for j in range(255):
for i in range(num_pixels):
rc_index = (i * 256 // num_pixels) + j
pixels[i] = colorwheel(rc_index & 255)
pixels.show()
time.sleep(wait)
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
while True:
pixels.fill(RED)
pixels.show()
# Increase or decrease to change the speed of the solid color change.
time.sleep(1)
pixels.fill(GREEN)
pixels.show()
time.sleep(1)
pixels.fill(BLUE)
pixels.show()
time.sleep(1)
color_chase(RED, 0.1) # Increase the number to slow down the color chase
color_chase(YELLOW, 0.1)
color_chase(GREEN, 0.1)
color_chase(CYAN, 0.1)
color_chase(BLUE, 0.1)
color_chase(PURPLE, 0.1)
rainbow_cycle(0) # Increase the number to slow down the rainbow
(3) 동작 결과
3) ws2812 밝기 제어하기
(1) 동작 설명
neopixel 모듈에서는 Pixel 클래스를 제공합니다. 이 클래스는 brightness 속성을 갖고 있으며, 이를 사용하여 LED의 밝기를 조절할 수 있습니다.
가변 저항을 이용하여 brightness 속성의 값을 변경하여 밝기를 조절합니다.
(2) 소스 코드
code.py
import board
import neopixel
import analogio
pixel_pin = board.GP13 # GPIO 핀 번호
num_pixels = 4 # LED 개수
pixels = neopixel.NeoPixel(pixel_pin, num_pixels)
VR = analogio.AnalogIn(board.GP26) # 가변저항을 연결한 아날로그 핀 번호
while True:
# 가변저항의 출력 값을 읽어들입니다.
# 출력 값의 범위는 0에서 65535 사이의 정수입니다.
pot_value = VR.value
# 가변저항 출력 값의 범위를 0.0에서 1.0으로 정규화합니다.
brightness = pot_value / 65535.0
# 밝기를 조절합니다.
pixels.brightness = brightness
# LED 색상 지정
pixels[0] = (255, 255, 255) # 흰색
pixels[1] = (255, 255, 255) # 흰색
pixels[2] = (255, 255, 255) # 흰색
pixels[3] = (255, 255, 255) # 흰색
# LED 업데이트
pixels.show()
(3) 동작 결과
'라즈베리파이_피코_피코 W > circuitPython' 카테고리의 다른 글
09. Circuit 파이썬 라즈베리파 피코 W DHT11 (0) | 2023.03.18 |
---|---|
08. Circuit 파이썬 라즈베리파 피코 W 릴레이제어 (0) | 2023.03.17 |
06. Circuit 파이썬 라즈베리파이 피코 W PWM제어 (0) | 2023.03.15 |
05. Circuit 파이썬 라즈베리파이 피코 W ADC 제어 (0) | 2023.03.14 |
04. Circuit 파이썬 라즈베리파이 피코 W 부저 제어 (2) | 2023.03.13 |
댓글