본문 바로가기
라즈베리파이

Raspberry Pi Pico – Micropython 시작하기 (라즈베리 파이 피코)

by 모빌리티키즈 2023. 11. 14.
728x90

Raspberry Pi Pico는 Raspberry Pi 제품군에 최근 추가된 제품입니다. 하지만 다른 파이 보드와는 달리 리눅스 컴퓨터는 아닙니다. 이것은 강력한 새 칩인 RP2040을 탑재한 새로운 마이크로컨트롤러 보드입니다. RP2040은 264KB 내부 RAM을 갖춘 듀얼 코어 Arm Cortex-M0+ 프로세서이며 최대 16MB의 오프칩 플래시를 지원합니다.

이 튜토리얼에서는 Raspberry Pi Pico를 컴퓨터에 연결하는 방법을 배웁니다. Micropython과 C, C++를 사용하여 프로그래밍하는 방법입니다. 그리고 마지막에는 온보드 LED와 외부 LED를 깜박이는 방법, PWM을 사용하여 LED의 밝기를 제어하는 ​​방법, 아날로그 센서 데이터를 읽는 방법과 같은 몇 가지 예를 제공합니다.

RP2040

Raspberry Pi Pico는 Raspberry Pi의 새로운 마이크로컨트롤러인 RP2040을 중심으로 구축되었습니다. Micropython 및 C/C++와 함께 작동하도록 설계되었습니다. 매우 유연한 설계와 광범위한 I/O 덕분에 광범위한 마이크로컨트롤러 애플리케이션에 적합합니다. 사용하기 쉽고 가격이 저렴하여 제조업체 커뮤니티에서 인기가 높습니다.

RP2040 사양

  • 듀얼 ARM Cortex-M0+ @ 133MHz
  • 6개의 독립 뱅크에 264kB 온칩 SRAM
  • 전용 QSPI 버스를 통해 최대 16MB의 오프칩 플래시 메모리 지원
  • DMA 컨트롤러
  • 보간기와 정수 분배기 주변 장치
  • 코어 전압을 생성하는 온칩 프로그래밍 가능 LDO
  • USB 및 코어 클록을 생성하는 온칩 PLL 2개
  • GPIO 핀 30개(이 중 4개는 아날로그 입력으로 사용 가능)

라즈베리 파이 피코 기능

RP2040 마이크로컨트롤러
듀얼 Cortex M0+ 프로세서, 최대 133MHz
내장 SRAM 264kB
온보드 플래시 메모리 2MB
프로그래밍 가능 I/O 블록(PIO) 2개 전원,
데이터 및 플래시 메모리 프로그래밍을 위한 마이크로 USB B 포트.
3핀 ARM SWD(직렬 와이어 디버그) 포트

 

라즈베리 파이 피코 주변기기

  • 다기능 범용 IO 30개(ADC에 4개 사용 가능)
  • 12비트 500ksps 아날로그-디지털 변환기(ADC)
  • 다양한 디지털 주변기기
    • 2 × UART, 2 × I2C, 2 × SPI, 16 × PWM 채널
    • 4개 알람이 포함된 타이머 1개, 실시간 카운터 1개
  • 2 × 프로그래밍 가능 IO(PIO) 블록, 총 8개의 상태 머신
    • 유연하고 사용자가 프로그래밍할 수 있는 고속 IO
    • SD 카드 및 VGA와 같은 인터페이스를 에뮬레이션할 수 있습니다.

라즈베리 파이 피코 GPIO 핀아웃

Raspberry Pi Pico의 MicroPython

Micropython은 마이크로컨트롤러에서 실행되도록 최적화된 Python 3 버전입니다. 2014년 Damien George에 의해 만들어졌으며 PyBoard 개발 보드와 함께 처음 사용되었습니다. 그 이후로 날마다 인기를 얻었으며 다양한 시스템과 하드웨어 플랫폼을 지원하는 많은 포크가 만들어졌습니다. thonny를 사용하면 Raspberry Pi Pico용 Micropython 코드를 작성할 수 있습니다.

Thonny 설치

Thonny는 MicroPython도 지원하는 간단한 Python IDE입니다. Raspberry Pi Pico용 MicroPython용 인터프리터가 내장되어 있습니다. 따라서 thonny를 사용하여 Micropython 코드를 쉽게 실행하고 Raspberry Pi Pico에 업로드할 수 있습니다. Windows, Mac, Linux 세 가지 주요 플랫폼 모두에서 사용할 수 있습니다. thonny.org에서 IDE를 다운로드하여 장치에 설치하세요.
응용 프로그램을 열면 다음과 같이 표시됩니다.

thonny를 사용하여 Micropython뿐만 아니라 표준 Python 코드도 작성할 수 있습니다. Micropython 코드를 사용하려면 먼저 펌웨어를 설치해야 합니다.

Raspberry Pi Pico용 MicroPython 펌웨어 설치

Raspberry Pi Pico용 Micropython 펌웨어를 설치하려면 Pico를 컴퓨터에 연결하는 동안 BOOTSEL 버튼을 길게 눌러야 합니다. 그러면 Pico가 대용량 저장 장치 모드로 열립니다. 그런 다음 thonny의 오른쪽 하단에서 Python 버전 번호를 볼 수 있습니다.

여기를 클릭하면 다음과 같은 옵션이 표시됩니다.

 

MicroPython(Raspberry Pi Pico)을 선택하면 Raspberry Pi Pico에 최신 펌웨어를 설치할 수 있는 대화 상자가 열립니다.

설치 버튼을 클릭하여 펌웨어를 설치하고 잠시 기다려 설치를 완료하세요.
펌웨어를 성공적으로 설치한 후에는 다시 설치할 필요가 없습니다. 다음번에는 BOOTSEL 버튼을 누르지 않고 Raspberry Pi Pico를 연결하고 코딩을 시작하면 됩니다.

코딩 시작

두 가지 방법으로 Raspberry Pi Pico에서 Python 코드를 실행할 수 있습니다. 기본 Python 편집기를 사용하고 기본 코드 편집기 아래의 셸을 사용합니다.
Shell은 단축 코드를 작성하거나 코드 출력을 빠르게 확인하려고 할 때 매우 유용합니다.
아래 코드를 복사하여 셸에 붙여넣고 Enter 키를 누릅니다. 온보드 LED가 켜집니다.

from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)

그런 다음 이 코드를 led.value(0) 셸에 입력하고 Enter 키를 누르기만 하면 됩니다. LED가 꺼지게 됩니다. 여기에서 쉘이 작은 코드를 실행하고 확인하는 데 매우 유용하다는 것을 이해할 수 있습니다.

그러나 쉘을 사용하여 긴 프로그램을 작성하는 것은 그리 효율적이지 않습니다. 쉘에서 Enter 버튼을 누른 후에는 코드를 편집할 수 없습니다. 그렇기 때문에 긴 프로그램에는 메인 코드 편집기를 사용해야 합니다.

메인 코드 편집기를 사용하려면 Thonny의 메인 편집기 섹션에 아래 코드를 입력하세요.

from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)

실행 버튼을 누르면 대화 상자가 열립니다. 이 컴퓨터 또는 Micropython 장치에 코드를 저장할 수 있는 옵션이 제공됩니다. Micropython 장치를 선택하고 .py 확장자로 코드를 저장합니다. 이제 프로그램을 실행할 수 있습니다.

이제 Raspberry Pi Pico에서 Micropython 코드를 실행하는 방법에 대한 기본 아이디어를 얻었습니다. 이제 몇 가지 기본적인 예를 들어보겠습니다.

Raspberry Pi Pico 온보드 LED 깜박임

Raspberry Pi Pico의 USB 포트 옆에는 녹색 LED가 있습니다. 코딩을 통해 제어할 수 있습니다.

이 LED는 25번 핀에 연결되어 있습니다. Mycropython을 사용하여 LED를 깜박이려면 핀과 타이머라는 두 가지 기능이 필요합니다. Micropython의 Pin 기능은 GPIO와 상호 작용하는 데 사용되고 Timer 기능은 시간 관련 작업을 수행하는 데 사용됩니다. 따라서 먼저 기계 기능에서 핀과 타이머를 가져와야 합니다.

from machine import Pin, Timer

그런 다음 led_pin이라는 LED 객체를 생성하고 여기에 핀 번호 25를 연결하고 해당 핀을 출력 핀으로 설정합니다.

led_pin =Pin(25, Pin.OUT)

tim또한 함수 에 대한 변수를 만듭니다 . 그런 다음 호출 시 LED를 토글하는 함수를 정의합니다

.Timer()
led_blink

그리고 마지막으로 타이머 기능을 사용하여 주파수 1의 주기적인 시간으로 LED를 토글합니다. 즉, LED가 1초 내에 한 번 깜박입니다.

전체 코드는 다음과 같습니다.

from machine import Pin, Timer
led_pin = Pin(25, Pin.OUT)
tim = Timer()

def blink_led(tim):
    led_pin.toggle()

tim.init(freq=1, mode=Timer.PERIODIC, callback=blink_led)

외부 LED를 깜박이는 것은 매우 간단합니다. 이를 위해서는 브레드보드에 작은 회로를 만들어야 합니다. LED의 긴 다리(+ve)를 저항(~220ohm)을 직렬로 사용하여 일반 핀 15번에 연결합니다. LED의 짧은 다리(-ve)를 Raspberry pi Pico의 접지 핀에 연결합니다.

아래 코드를 실행하면 LED가 깜박이기 시작합니다.

 

from machine import Pin, Timer
led_pin = Pin(15, Pin.OUT)
tim = Timer()

def blink_led(tim):
    led_pin.toggle()

tim.init(freq=1, mode=Timer.PERIODIC, callback=blink_led)

참고 :- 파일을 다른 이름으로 저장하면 컴퓨터에서 Raspberry Pi Pico 연결을 끊을 때까지 코드가 실행됩니다. 다음에 연결할 때 Raspberry Pi Pico에 코드를 다시 업로드해야 합니다. 그러나 코드를 이름으로 저장하면 Raspberry Pi Pico의 전원을 켤 때마다 자동으로 실행됩니다.

 

blink.py
main.py

PWM 작업

펄스 폭 변조 또는 PWM은 디지털 시스템 내에서 신호와 같은 아날로그를 생성하는 기술입니다. Raspberry Pi Pico에는 PWM 신호를 생성하는 데 사용할 수 있는 핀이 16개 있습니다. 15번 핀에서 PWM 신호를 생성하고 해당 PWM 신호를 사용하여 LED의 밝기를 제어합니다.

이 예의 회로는 이전 회로와 동일합니다. 아래와 같이 코드를 변경하고 출력을 확인하면 됩니다.

import machine
import utime
pwm_width = 0
led_pin = machine.PWM(machine.Pin(15))
led_pin.freq(1000)

while True:  
  while pwm_width < 65536:
      pwm_width += 100
      utime.sleep(0.001)
      led_pin.duty_u16(pwm_width)    
  while pwm_width > 0:
      pwm_width -= 100
      utime.sleep(0.001)
      led_pin.duty_u16(pwm_width)

코드 설명

여기에서 필요한 라이브러리를 먼저 가져온 것을 볼 수 있습니다. machine라이브러리는 핀 조작에 사용되며 utime시간 관련 작업에 사용됩니다. 그런 다음 핀 번호 15에 대한 핀 객체를 생성 led_pin하고 이를 PWM 핀으로 설정합니다. 해당 핀의 주파수를 1000Hz로 설정했습니다. while 루프에서는 변수 값을 pwm_width0에서 65536까지 점진적으로 늘리고 해당 값을 led_pinPWM 너비로 전달합니다. 따라서 LED의 밝기는 0에서 높은 강도로 증가합니다.

pwm_width그런 다음 변수 값을 65536에서 0으로 줄여서 led_pin. 따라서 LED의 밝기는 높은 강도에서 낮은 강도로 감소합니다. 전반적으로 어두워지는 효과를 만들어냅니다.

Raspberry Pi Pico의 아날로그 입력

Raspberry Pi Pico에는 3개의 12비트 아날로그-디지털 변환기(ADC) GPIO 26,27,28(물리적 핀 번호 – 31, 32, 34)이 있습니다. ADC 컨트롤러는 16비트 정수를 사용하여 ADC를 작동합니다. 이는 아날로그 핀의 입력 범위가 0~65535 사이임을 의미합니다.

이 예에서는 전위차계를 사용하여 ADC에 가변 전압을 공급합니다. 가변 아날로그 전압을 읽어 디지털 데이터로 변환하여 터미널에 인쇄하겠습니다. 그런 다음 해당 데이터를 사용하여 LED의 밝기를 제어하겠습니다.

먼저 Pico에 10kΩ 전위차계를 연결하겠습니다. 이를 위해 전위차계 +ve 핀을 3.3v 핀에 연결하고 -ve 핀을 접지 핀에 연결하고 중간 핀을 Pico의 핀 번호 26(ADC0)에 연결해야 합니다.

이제 아래 코드를 Raspberry Pi Pico에 업로드하고 손잡이를 돌립니다. 터미널의 숫자는 시계 방향이나 시계 반대 방향으로 돌리면 증가하거나 감소합니다.

import machine
import utime
 
pot = machine.ADC(26)
 
while True:
    print(pot.read_u16())
    utime.sleep(1)

코드 설명

machine여기에서는 GPIO 조작을 위한 라이브러리와 utime시간 관련 작업을 위한 라이브러리를 가져오는 것을 볼 수 있습니다 . pot그런 다음 입력 데이터를 보유할 변수를 정의합니다 .

 

pot = ADC(Pin(26))

 

여기서 "ADC"는 해당 핀의 아날로그 입력 기능을 활성화하는 데 사용됩니다.
루프 섹션에서는 해당 데이터를 인쇄합니다.

 

print(pot.read_u16())

 

여기서는 16비트 부호 없는 정수 모드에서 해당 데이터를 읽는 데 사용됩니다. 이는 입력 데이터가 0에서 65535 사이에서 변한다는 것을 의미합니다. 그런 다음 이 연속 루프에서 1초 지연을 사용합니다.

 

read_u16()

 

지금까지 Raspberry Pi Pico를 사용하여 아날로그 데이터를 읽는 방법을 배웠습니다. 이제 우리는 그 데이터를 사용하여 사물을 제어할 수 있는 방법을 살펴보겠습니다.

LED의 밝기 제어

이 예에서는 전위차계를 사용하여 LED의 밝기를 제어합니다.
이 실험의 회로는 매우 간단합니다. 기존 회로에 LED를 추가하기만 하면 됩니다. 이것을 직접 추가할 수 있기를 바랍니다. 그렇지 않으면 아래 회로도를 따르십시오.

이제 아래 코드를 업로드하고 손잡이를 돌립니다. LED의 밝기는 시계 방향이나 반시계 방향으로 돌리면 증가하거나 감소합니다.

import machine
import utime

led_pin = machine.PWM(machine.Pin(15))
pot = machine.ADC(26)

while True:
    led_pin.duty_u16(pot.read_u16())
    utime.sleep_ms(2)

코드 설명

여기서는 이전처럼 전위차계 값을 읽는 것을 볼 수 있습니다. 그런 다음 while 루프에서 해당 값을 LED 핀에 PWM 폭으로 전달하여 전위차계 값이 증가함에 따라 LED의 밝기도 증가합니다.

푸시 버튼 작업

푸시 버튼은 간단하지만 프로젝트를 보다 상호 작용적으로 만드는 데 매우 유용합니다. 이 예에서는 푸시 버튼을 사용하여 4가지 색상의 LED를 제어합니다.

이 예에서는 아래와 같은 작은 회로를 만들어야 합니다. 직렬 220옴 저항을 사용하여 LED를 핀 번호 15에 연결합니다. 그런 다음 푸시 버튼의 한쪽을 Pico의 3.3v 핀에 연결하고 다른 쪽을 핀 번호 26에 연결합니다.

이제 아래 코드를 Pico에 업로드하고 버튼을 누르세요. 버튼을 한 번 누르면 LED가 켜지고 다시 누르면 꺼집니다.

# BUTTON - Pico - Pin 26 PULL_DOWN
# LED - Pico - Pin 15
 
from machine import Pin, Timer
import utime
 
button_pin = Pin(26, Pin.IN, Pin.PULL_DOWN) 
led_pin = Pin(15, Pin.OUT)

while True:
    if button_pin.value() == 1:
        led_pin.toggle()
        utime.sleep(0.2)

코드 설명

여기에서 필요한 라이브러리를 먼저 가져오는 것을 볼 수 있습니다. 그런 다음 핀 번호 26을 입력 핀으로 설정하고 핀 데이터를 보관할 변수를 할당합니다 . 또한 핀 번호 15를 출력 핀으로 설정하고 해당 핀에 변수를 할당합니다.

 

pull-downbutton_pinled_pin

button_pin = Pin(26, Pin.IN, Pin.PULL_DOWN)
led_pin = Pin(15, Pin.OUT)

 

while 루프에서 버튼_핀 값이 1인지 확인한 다음 led_pin을 토글합니다. 버튼 누름 충돌을 피하기 위해 0.2초 지연을 사용합니다.

결론

이것은 Raspberry Pi Pico의 초보자 가이드입니다. 유용하고 유익한 정보가 되길 바랍니다. 더욱 발전된 Raspberry Pi Pico 프로젝트를 기대해 주세요.
아래 댓글 섹션에서 Raspberry Pi Pico와 관련된 프로젝트와 생각을 알려주세요.

728x90