기초 · 난이도 쉬움
라즈베리파이 피코 핀 지도 3V3·VBUS·GND·ADC·I²C·UART를 고르는 법
피코 40개 핀 가운데 센서에 쓸 수 있는 핀과 피해야 할 핀, 3.3V와 5V 전원 핀의 차이, 아날로그 입력이 세 개뿐인 이유, I²C·UART·SPI 핀 묶음, 피코와 피코 2의 5V 신호 차이를 정리했어요.
핀 번호가 두 가지예요
피코 핀은 두 가지 이름으로 불러요. 하나는 보드 가장자리를 따라 1번부터 40번까지 매긴 물리 핀 번호이고, 다른 하나는 코드에서 쓰는 GP 번호예요. 예를 들어 물리 20번 핀이 GP15예요. 코드에서는 Pin(15)라고 쓰고, 브레드보드에 꽂을 때는 "20번 핀"을 찾아야 해요. 둘을 헷갈리면 엉뚱한 핀에 선을 꽂게 되니, 배선표에는 늘 둘을 함께 적어요.
전원 핀
| 물리 핀 | 이름 | 하는 일 |
|---|---|---|
| 40 | VBUS | USB에서 들어온 5V. 5V 센서·모듈 전원으로 써요 |
| 39 | VSYS | 보드 전체의 입력 전원(1.8~5.5V). 전지로 피코를 켤 때 써요 |
| 37 | 3V3_EN | GND에 이으면 3.3V를 만드는 전원 회로가 꺼져 피코도 꺼져요. 평소에는 비워 둬요 |
| 36 | 3V3(OUT) | 3.3V 출력. 3.3V 센서 전원. 데이터시트는 300mA 이하로 쓰라고 권해요 |
| 35 | ADC_VREF | 아날로그 기준 전압. 비워 둬요 |
| 33 | AGND | 아날로그 전용 GND |
| 3·8·13·18·23·28·38 | GND | 접지 |
| 30 | RUN | GND에 잠깐 이으면 피코가 다시 시작해요 |
VBUS는 USB가 꽂혀 있을 때만 5V가 나와요. 전지로 VSYS에 전원을 넣었다면 VBUS는 0V예요. 5V 센서를 쓰는 작품을 전지로 돌리려면 5V를 따로 만들어야 해요.
쓸 수 있는 GP 핀
일반 입출력(GPIO)은 GP0~GP22, GP26~GP28이에요. 무선 칩이 붙은 Pico W와 Pico 2 W에서 GP23·24·25·29는 보드 안쪽 일(무선 칩 제어, 전원 전압 재기)에 쓰여서 핀으로 나와 있지 않거나 쓰면 안 돼요. 보드 위의 작은 LED도 GP25가 아니라 무선 칩에 붙어 있어서, 코드에서는 Pin("LED")로 켜요.
아날로그 입력은 세 개뿐이에요
전압을 숫자로 읽는 아날로그 입력(ADC)은 GP26(ADC0), GP27(ADC1), GP28(ADC2) 세 핀뿐이에요. 다른 핀에 아날로그 센서를 꽂으면 0 아니면 1만 읽혀요. MicroPython의 read_u16()은 0~3.3V를 0~65535로 돌려줘요. 칩 안의 ADC는 12비트(0~4095)인데, 값을 16비트 범위로 늘려서 주는 거예요.
아날로그 센서가 네 개 이상이면 핀이 모자라요. 이럴 때는 I²C로 연결하는 ADC 확장 모듈(예: ADS1115)을 쓰면 아날로그 입력을 늘릴 수 있어요. 시나브로 PICO 작업대에서 아날로그 센서를 네 개 꽂으면 네 번째는 막히고 이 방법을 알려 줘요.
I²C·UART·SPI는 정해진 핀 묶음만
통신 기능은 아무 핀에서나 되지 않아요. 칩 안의 장치마다 쓸 수 있는 핀이 정해져 있어요.
| 기능 | 핀 묶음(앞쪽이 신호 이름 순서) |
|---|---|
| I2C0 (SDA, SCL) | GP0·1, GP4·5, GP8·9, GP12·13, GP16·17, GP20·21 |
| I2C1 (SDA, SCL) | GP2·3, GP6·7, GP10·11, GP14·15, GP18·19, GP26·27 |
| UART0 (TX, RX) | GP0·1, GP12·13, GP16·17 |
| UART1 (TX, RX) | GP4·5, GP8·9, GP20·21 |
| SPI0 (SCK, TX(MOSI), RX(MISO)) | SCK GP2·6·18·22, TX GP3·7·19, RX GP0·4·16·20 |
| SPI1 | SCK GP10·14·26, TX GP11·15·27, RX GP8·12·28 |
I²C는 SDA·SCL 두 선에 장치 여러 개를 함께 이어 쓸 수 있어요. 대신 장치마다 주소가 달라야 해요(I²C 장치 여러 개 연결하기). UART는 한 묶음에 장치 하나예요. 피코에는 UART가 두 개(UART0, UART1)라서 GPS와 CO₂ 센서처럼 UART 장치 두 개까지 함께 쓸 수 있어요. 기본 I²C(GP4·5)와 UART1(GP4·5)이 같은 핀을 쓰니, 둘을 함께 쓸 때는 UART를 GP0·1이나 GP8·9로 옮겨요.
UART 배선은 엇갈려요. 센서의 TX(보내기)는 피코의 RX(받기)에, 센서의 RX는 피코의 TX에 이어요.
5V 신호를 바로 넣으면 안 되는 이유
피코의 핀은 3.3V로 동작해요. 첫 피코(RP2040)는 핀에 3.3V보다 높은 전압이 들어오면 망가질 수 있어요. 피코 2(RP2350)는 디지털 입력 핀이 3.3V 전원이 켜져 있는 동안 5.5V까지 견디도록 만들어졌지만, 두 가지 예외가 있어요. 아날로그 입력 핀(GP26~28)은 해당하지 않고, 피코 전원이 꺼져 있거나 막 켜지는 순간에는 데이터시트 기준 3.63V까지만 견뎌요. 센서를 다른 전원으로 켜면 피코보다 먼저 켜질 수 있어요.
그래서 이 자료실은 보드 종류와 상관없이 5V가 나오는 신호를 저항 두 개로 나눠서(분압) 피코에 넣어요. 방법은 5V 센서를 3.3V 피코에 안전하게 잇기에 정리했어요.
핀 고르기 순서
- 아날로그 센서부터 GP26·27·28에 배정해요. 가장 모자란 자원이에요.
- I²C 장치는 모두 한 묶음(보통 GP4·5)에 함께 이어요.
- UART 장치는 I²C와 겹치지 않는 묶음을 골라요.
- 남은 디지털 센서·LED·버튼은 GP15, GP14, GP13처럼 남은 핀에서 골라요.
- 고른 결과를 표로 적고, 코드의
Pin()숫자와 하나씩 맞춰 봐요.
시나브로 PICO 작업대는 이 순서대로 핀을 자동으로 정하고, 이미 꽂은 부품의 핀은 옮기지 않아요. [내 코드와 맞춰 보기]를 누르면 코드가 읽는 핀과 실제 배선이 같은지도 비교해 줘요.
핀 상태를 코드로 확인하기
from machine import Pin, ADC
import time
btn = Pin(14, Pin.IN, Pin.PULL_UP) # 버튼: 한쪽 GP14, 다른 쪽 GND
pot = ADC(Pin(26)) # 가변저항 가운데 다리 → GP26
for i in range(5):
raw = pot.read_u16()
volt = raw * 3.3 / 65535
print(f"DATA: btn={btn.value()}, raw={raw}, volt={volt:.2f}")
time.sleep(1)
Pin.PULL_UP은 피코 안의 저항으로 핀을 3.3V 쪽에 걸어 두는 설정이에요. 버튼을 누르지 않으면 1, 누르면 GND와 이어져 0이 돼요. 이 설정 없이 아무것도 안 이은 입력 핀은 값이 0과 1 사이를 떠다녀요.
더 알아보기
- 공식 자료: Raspberry Pi "Pico 2 W datasheet"(전원 핀, 3V3 출력 권장 전류), "RP2350 datasheet"(핀 기능표, 5V 견딤 조건), "Pico 2 W pinout"
- 기초 글: 브레드보드 처음 쓰기, 전원 계산, I²C 장치 여러 개