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

07. Circuit 파이썬 라즈베리파이 피코 W WS2812 제어하기

by 커피하는조이 2023. 3. 16.
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 모듈의 함수로 WS2812를 제어 합니다.

 

먼저 neopixel 모듈 라이브러리를 추가 해주어야 합니다.

라이브러리는 아래 사이트에서 받을 수 있습니다.

https://circuitpython.org/libraries

 

CircuitPython - Libraries

The easiest way to program microcontrollers

circuitpython.org

 번들 항목에 보면 버전별로 소스와 예제 등 다운 받을 수있습니다.

현재 버전은 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) 동작 결과

 

 

728x90
반응형
LIST

댓글