레시피
레시피는 picozero를 사용하는 방법에 대한 예제를 제공합니다.
picozero 임포트하기
picozero를 사용하려면 스크립트 맨 위에 import 줄을 추가해야 합니다.
필요한 항목만 임포트할 수 있으며, 항목은 쉼표 ,로 구분합니다:
from picozero import pico_led, LED
이제 스크립트에서 pico_led와 LED를 사용할 수 있습니다:
pico_led.on() # Raspberry Pi Pico의 내장 LED 켜기
led = LED(14) # GP14 핀에 연결된 LED 제어
led.on()
또는 picozero 라이브러리 전체를 임포트할 수도 있습니다:
import picozero
이 경우 모든 picozero 항목 참조 앞에 접두사를 붙여야 합니다:
picozero.pico_led.on()
led = picozero.LED(14)
Pico LED
Raspberry Pi Pico의 LED를 켜려면:
from picozero import pico_led
pico_led.on()
스크립트를 실행하여 LED가 켜지는지 확인하십시오.
pico_led를 사용하는 것은 다음과 동일합니다:
pico_led = LED(25)
pico_led는 LED를 사용하여 만든 외부 LED와 동일한 방식으로 사용할 수 있습니다.
핀 배열 (Pin out)
핀과 핀 번호를 표시하는 Raspberry Pi Pico의 다이어그램을 출력할 수 있습니다.
from picozero import pinout
pinout()
---usb---
GP0 1 |o o| -1 VBUS
GP1 2 |o o| -2 VSYS
GND 3 |o o| -3 GND
GP2 4 |o o| -4 3V3_EN
GP3 5 |o o| -5 3V3(OUT)
GP4 6 |o o| -6 ADC_VREF
GP5 7 |o o| -7 GP28 ADC2
GND 8 |o o| -8 GND AGND
GP6 9 |o o| -9 GP27 ADC1
GP7 10 |o o| -10 GP26 ADC0
GP8 11 |o o| -11 RUN
GP9 12 |o o| -12 GP22
GND 13 |o o| -13 GND
GP10 14 |o o| -14 GP21
GP11 15 |o o| -15 GP20
GP12 16 |o o| -16 GP19
GP13 17 |o o| -17 GP18
GND 18 |o o| -18 GND
GP14 19 |o o| -19 GP17
GP15 20 |o o| -20 GP16
---------
LED
Raspberry Pi Pico로 외부 LED를 제어할 수 있습니다.
깜빡이기 (Flash)
LED를 켜고 끕니다:
from picozero import LED
from time import sleep
led = LED(14)
led.on()
sleep(1)
led.off()
LED를 토글하여 켜짐 상태에서 꺼짐 상태로 또는 그 반대로 바꿉니다:
from picozero import LED
from time import sleep
led = LED(14)
while True:
led.toggle()
sleep(1)
또는 blink() 메서드를 사용할 수 있습니다.
from picozero import LED
led = LED(14)
led.blink()
밝기 (Brightness)
LED의 밝기를 설정합니다:
from picozero import LED
from time import sleep
led = LED(14)
while True:
led.brightness = 0 # off
sleep(1)
led.brightness = 0.5 # half brightness
sleep(1)
led.brightness = 1 # full brightness
sleep(1)
맥박 효과(pulse effect) 만들기:
from picozero import LED
from time import sleep
from math import sin, radians
led = LED(14)
while True:
for i in range(360):
angle = radians(i)
led.brightness = 0.5 + 0.5 * sin(angle)
sleep(0.01)
또는 pulse() 메서드를 사용할 수 있습니다.
from picozero import LED
led = LED(14)
led.pulse()
터치 센서 (Touch sensor)
정전식 터치 센서를 사용하여 터치를 감지합니다:
from picozero import TouchSensor, pico_led
from time import sleep
# Capacitive touch sensor output connected to pin 2
touch = TouchSensor(2)
while True:
if touch.is_touched:
pico_led.on()
else:
pico_led.off()
sleep(0.1)
콜백(callbacks)을 사용하여 터치 이벤트에 응답합니다:
from picozero import TouchSensor, pico_led
from time import sleep
touch = TouchSensor(2)
touch.when_touch_starts = pico_led.on
touch.when_touch_ends = pico_led.off
모션 센서 (Motion sensor)
PIR(Passive Infrared) 센서를 사용하여 움직임을 감지합니다:
from picozero import MotionSensor
from time import sleep
pir = MotionSensor(2)
print("PIR Motion Sensor Example")
print("Waiting for motion...")
while True:
if pir.motion_detected:
print("Motion detected!")
sleep(1)
else:
print("No motion")
sleep(0.5)
콜백(callbacks)을 사용하여 모션 이벤트에 응답합니다:
from picozero import MotionSensor, pico_led
from time import sleep
pir = MotionSensor(2)
# Set up event callbacks
pir.when_motion = pico_led.on
pir.when_no_motion = pico_led.off
# Keep the program running
try:
while True:
sleep(1)
except KeyboardInterrupt:
print("\nShutting down...")
pico_led.off() # Make sure LED is off when exiting
RGB LED
RGBLED로 색상 설정하기:
from picozero import RGBLED
from time import sleep
rgb = RGBLED(red=2, green=1, blue=0)
rgb.red = 255 # full red
sleep(1)
rgb.red = 128 # half red
sleep(1)
rgb.on() # white
rgb.color = (0, 255, 0) # full green
sleep(1)
rgb.color = (255, 0, 255) # magenta
sleep(1)
rgb.color = (255, 255, 0) # yellow
sleep(1)
rgb.color = (0, 255, 255) # cyan
sleep(1)
rgb.color = (255, 255, 255) # white
sleep(1)
rgb.color = (0, 0, 0) # off
sleep(1)
# slowly increase intensity of blue
for n in range(255):
rgb.blue = n
sleep(0.01)
rgb.off()
toggle() 및 invert() 사용하기:
from picozero import RGBLED
from time import sleep
rgb = RGBLED(red=2, green=1, blue=0)
rgb.color = (255, 165, 0) # orange
sleep(1)
for _ in range(6):
rgb.toggle()
sleep(1)
for _ in range(6):
rgb.invert()
sleep(1)
rgb.off()
깜빡이기 (Blink)
색상 사이를 변경하려면 blink()를 사용하십시오. 어떤 색상을 사용할지, 각 색상이 얼마나 유지될지 제어할 수 있습니다. 색상 (0, 0, 0)`은 꺼짐을 의미합니다.
색상 사이를 변경하려면 :meth:`~picozero.RGBLED.blink를 사용하십시오. 어떤 색상을 사용할지, 각 색상이 얼마나 유지될지 제어할 수 있습니다. 색상 (0, 0, 0) 은 꺼짐을 의미합니다.
blink()가 정해진 횟수만큼 실행될지, 끝날 때까지 기다릴지, 아니면 다른 코드가 실행될 수 있도록 즉시 반환할지 제어할 수 있습니다.
from picozero import RGBLED
from time import sleep
rgb = RGBLED(1, 2, 3)
rgb.blink() # does not wait
sleep(6)
rgb.off()
sleep(1)
# blink purple 2 seconds, off 0.5 seconds
rgb.blink(on_times=(2, 0.5), colors=((1, 0, 1), (0, 0, 0)), wait=True, n=3)
rgb.off()
sleep(1)
# blink red 1 second, green 0.5 seconds, blue 0.25 seconds
rgb.blink((1, 0.5, 0.25), colors=((1, 0, 0), (0, 1, 0), (0, 0, 1)), wait=True, n=2)
맥박 (Pulse)
LED 색상을 점진적으로 변경하려면 pulse()를 사용하십시오. 기본값은 빨간색과 꺼짐, 초록색과 꺼짐, 파란색과 꺼짐 사이를 맥박처럼 움직입니다.
from picozero import RGBLED
from time import sleep
rgb = RGBLED(1, 2, 3)
rgb.pulse() # does not wait
sleep(6)
rgb.off()
sleep(1)
# 2 second to fade from purple to off, 0.5 seconds to change from off to purple
rgb.pulse(fade_times=(2, 0.5), colors=((1, 0, 1), (0, 0, 0)), wait=True, n=3)
rgb.off()
sleep(1)
# 4 seconds to change from red to green, 2 to change from green to blue, then 1 to change from blue back to red
rgb.pulse((4, 2, 1), colors=((1, 0, 0), (0, 1, 0), (0, 0, 1)), wait=True, n=2)
순환 (Cycle)
cycle()의 기본값은 빨간색에서 초록색으로, 초록색에서 파란색으로, 파란색에서 빨간색으로 순환하는 것입니다.
from picozero import RGBLED
from time import sleep
rgb = RGBLED(1, 2, 3)
# Gradually colour cycle through colours between red and green, green and blue then blue and red
rgb.cycle()
sleep(4)
rgb.off()
sleep(1)
# Colour cycle slower in the opposite direction
rgb.cycle(fade_times=3, colors=((0, 0, 1), (0, 1, 0), (1, 0, 0)), wait=True, n=2)
rgb.off()
가변 저항 (Potentiometer)
가변 저항이 보고하는 값, 전압 및 퍼센트를 출력합니다:
# Potentiometer connected to GP26 (ADC0), GND and 3V
from time import sleep
from picozero import Pot
pot = Pot(26)
while True:
print(pot.value, pot.voltage)
sleep(0.1)
참고
Thonny Python 에디터에서 보기(View) > **플로터(Plotter)**를 선택하면 print()의 출력을 그래프로 볼 수 있습니다.
가변 저항을 사용하여 LED의 밝기를 제어합니다:
from picozero import Pot, LED
# Potentiometer connected to GP26 (ADC0), GND and 3V
# LED connected to GP0
pot = Pot(26)
led = LED(0)
while True:
led.value = pot.value
조이스틱 (Joystick)
조이스틱은 가변 저항과 유사하므로 Pot 클래스를 사용하여 조이스틱을 제어할 수 있습니다.
조이스틱을 최소, 중간 및 최대 위치로 움직여 보십시오.
from picozero import Pot, Button
from time import sleep
x = Pot(27)
y = Pot(26)
button = Button(17)
while True:
if button.is_pressed:
print("Button is pressed\n")
print("x: " + str(x.raw_value) + ", y: " + str(y.raw_value))
sleep(0.1)
부저 (Buzzer)
전원이 공급될 때 음을 재생하는 능동 부저를 제어합니다:
# Active Buzzer that plays a note when powered
from time import sleep
from picozero import Buzzer
buzzer = Buzzer(10)
buzzer.on()
sleep(1)
buzzer.off()
sleep(1)
buzzer.beep()
sleep(4)
buzzer.off()
스피커 (Speaker)
다양한 톤이나 주파수를 재생할 수 있는 수동 부저나 스피커를 제어합니다:
from picozero import Speaker
from time import sleep
speaker = Speaker(5)
def tada():
c_note = 523
speaker.play(c_note, 0.1)
sleep(0.1)
speaker.play(c_note, 0.9)
def chirp():
global speaker
for _ in range(5):
for i in range(5000, 2999, -100):
speaker.play(i, 0.01)
sleep(0.2)
try:
tada()
sleep(1)
chirp()
finally: # Turn the speaker off if interrupted
speaker.off()
멜로디 연주하기
음 이름과 박자 길이를 사용하여 멜로디를 연주합니다:
from picozero import Speaker
speaker = Speaker(5)
BEAT = 0.25 # 240 BPM
liten_mus = [ ['d5', BEAT / 2], ['d#5', BEAT / 2], ['f5', BEAT], ['d6', BEAT], ['a#5', BEAT], ['d5', BEAT],
['f5', BEAT], ['d#5', BEAT], ['d#5', BEAT], ['c5', BEAT / 2],['d5', BEAT / 2], ['d#5', BEAT],
['c6', BEAT], ['a5', BEAT], ['d5', BEAT], ['g5', BEAT], ['f5', BEAT], ['f5', BEAT], ['d5', BEAT / 2],
['d#5', BEAT / 2], ['f5', BEAT], ['g5', BEAT], ['a5', BEAT], ['a#5', BEAT], ['a5', BEAT], ['g5', BEAT],
['g5', BEAT], ['', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT / 2], ['d6', BEAT / 2], ['c6', BEAT / 2],
['a#5', BEAT / 2], ['a5', BEAT / 2], ['g5', BEAT / 2], ['a5', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT],
['f5', BEAT], ['f5', BEAT], ['f5', BEAT / 2], ['d#5', BEAT / 2], ['d5', BEAT], ['f5', BEAT], ['d6', BEAT],
['d6', BEAT / 2], ['c6', BEAT / 2], ['b5', BEAT], ['g5', BEAT], ['g5', BEAT], ['c6', BEAT / 2],
['a#5', BEAT / 2], ['a5', BEAT], ['f5', BEAT], ['d6', BEAT], ['a5', BEAT], ['a#5', BEAT * 1.5]]
try:
speaker.play(liten_mus)
finally: # Turn speaker off if interrupted
speaker.off()
개별 음 연주하기
개별 음을 연주하고 타이밍을 제어하거나 다른 동작을 수행합니다:
from picozero import Speaker
from time import sleep
speaker = Speaker(5)
BEAT = 0.4
liten_mus = [ ['d5', BEAT / 2], ['d#5', BEAT / 2], ['f5', BEAT], ['d6', BEAT], ['a#5', BEAT], ['d5', BEAT],
['f5', BEAT], ['d#5', BEAT], ['d#5', BEAT], ['c5', BEAT / 2],['d5', BEAT / 2], ['d#5', BEAT],
['c6', BEAT], ['a5', BEAT], ['d5', BEAT], ['g5', BEAT], ['f5', BEAT], ['f5', BEAT], ['d5', BEAT / 2],
['d#5', BEAT / 2], ['f5', BEAT], ['g5', BEAT], ['a5', BEAT], ['a#5', BEAT], ['a5', BEAT], ['g5', BEAT],
['g5', BEAT], ['', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT / 2], ['d6', BEAT / 2], ['c6', BEAT / 2],
['a#5', BEAT / 2], ['a5', BEAT / 2], ['g5', BEAT / 2], ['a5', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT],
['f5', BEAT], ['f5', BEAT], ['f5', BEAT / 2], ['d#5', BEAT / 2], ['d5', BEAT], ['f5', BEAT], ['d6', BEAT],
['d6', BEAT / 2], ['c6', BEAT / 2], ['b5', BEAT], ['g5', BEAT], ['g5', BEAT], ['c6', BEAT / 2],
['a#5', BEAT / 2], ['a5', BEAT], ['f5', BEAT], ['d6', BEAT], ['a5', BEAT], ['a#5', BEAT * 1.5]]
try:
for note in liten_mus:
speaker.play(note)
sleep(0.1) # leave a gap between notes
finally: # Turn speaker off if interrupted
speaker.off()
서보 모터 (Servo)
단일 핀, 3.3v 및 그라운드에 연결된 서보 모터입니다.
서보를 최소, 중간 및 최대 위치로 움직입니다.
from picozero import Servo
from time import sleep
# Check the specifications SG-90 model
# Pulse width: 500 ~ 2400 µs
servo = Servo(1, 0, 0.5 / 1000, 2.4 /1000)
servo.move_to_degree(0)
sleep(1)
servo.move_to_degree(90)
sleep(1)
servo.move_to_degree(180)
sleep(1)
servo.off()
서보를 최소 위치와 최대 위치 사이에서 맥박처럼 움직입니다.
from picozero import Servo
servo = Servo(1)
servo.pulse()
서보를 최소 위치에서 최대 위치까지 100단계로 점진적으로 움직입니다.
from picozero import Servo
from time import sleep
servo = Servo(1)
for i in range(0, 100):
servo.value = i / 100
sleep(0.1)
servo.off()
모터 (Motor)
두 개의 핀(전진 및 후진)과 모터 드라이버 보드를 통해 연결된 모터를 움직입니다:
from picozero import Motor
from time import sleep
motor = Motor(14, 15)
motor.start()
sleep(1)
motor.stop()
로봇 로버 (Robot rover)
간단한 이륜 로봇 로버를 만듭니다.
로버를 1초 동안 앞으로 움직이고 멈춥니다:
from picozero import Robot
from time import sleep
robot_rover = Robot(left=(14,15), right=(12,13))
# move forward
robot_rover.forward()
sleep(1)
robot_rover.stop()
로버를 (대략) 사각형 모양으로 움직입니다:
from picozero import Robot
robot_rover = Robot(left=(14,15), right=(12,13))
for i in range(4):
# move forward for 1 second
robot_rover.forward(t=1, wait=True)
# rotate to the left for 1 second
robot_rover.left(t=1, wait=True)
스테퍼 모터 (Stepper motor)
드라이버 보드(예: ULN2003)를 통해 연결된 스테퍼 모터를 제어합니다.
아날로그 시계
계속해서 움직이는 아날로그 시계의 초침을 만듭니다:
from picozero import Stepper
# Second Hand Clock - Continuous 60s Rotation
# One full revolution every 60 seconds.
STEP_DELAY = 60.0 / 2048 # ≈ 0.029296875 seconds per step (full-step)
stepper = Stepper((1, 2, 3, 4), step_delay=STEP_DELAY)
stepper.run_continuous(direction="cw")
자동 블라인드
시간 기반 블라인드 컨트롤러:
from picozero import Stepper
from time import localtime, sleep
stepper = Stepper((1, 2, 3, 4), step_sequence="half")
OPEN_TIME = (7, 0) # Open at 7:00 AM (hour, minute)
CLOSE_TIME = (20, 0) # Close at 8:00 PM
ROTATIONS = 5 # Number of full rotations needed to fully open/close blinds
# Track state
is_open = False
def open_blinds():
global is_open
if not is_open:
for _ in range(ROTATIONS):
stepper.rotate(1, "cw")
is_open = True
def close_blinds():
global is_open
if is_open:
for _ in range(ROTATIONS):
stepper.rotate(1, "ccw")
is_open = False
def check_schedule():
now = localtime()
current_time = (now.tm_hour, now.tm_min)
# Check if it's time to open
if current_time == OPEN_TIME and not is_open:
open_blinds()
# Check if it's time to close
elif current_time == CLOSE_TIME and is_open:
close_blinds()
# Set starting position (closed)
stepper.reset_position()
is_open = False
# Check every 30 seconds
while True:
check_schedule()
sleep(30)
내부 온도 센서
Raspberry Pi Pico의 내부 온도를 섭씨 단위로 확인합니다:
# Choose View -> Plotter in Thonny to see a graph of the results
from picozero import pico_temp_sensor
from time import sleep
while True:
print(pico_temp_sensor.temp)
sleep(0.1)
초음파 거리 센서
초음파 거리 센(HC-SR04)로부터의 거리를 센티미터 단위로 가져옵니다:
from picozero import DistanceSensor
from time import sleep
ds = DistanceSensor(echo=2, trigger=3)
while True:
print(ds.distance)
sleep(0.1)
LCD 디스플레이
I2C 버스와 PCF8574 I2C 어댑터를 사용하여 LiquidCrystal 디스플레이(LCD)에 문자를 출력합니다.
from picozero import I2cLcd
from time import sleep
lcd = I2cLcd(1, 3, 2) # i2c_id=1, scl=3, sda=2
lcd.putstr('Hello World')
sleep(1)
lcd.move_to(0, 1)
lcd.putstr('Hello Pi Pico')
GPIO 핀만 사용하여 LiquidCrystal 디스플레이(LCD)에 문자를 출력합니다.
from picozero import GpioLcd
from time import sleep
# Create the LCD object
lcd = GpioLcd(rs_pin=16,
enable_pin=17,
d4_pin=18,
d5_pin=19,
d6_pin=20,
d7_pin=21,
num_lines=2,
num_columns=16)
lcd.putstr('Hello World')
sleep(1)
lcd.move_to(0, 1)
lcd.putstr('Hello Pi Pico')