대상: Raspberry Pi 5로 IMU, 카메라, 모션 센서 등 외부 장치를 연결하려는 임베디드 개발자
환경: Raspberry Pi 5 + Raspberry Pi OS (Bookworm / Debian 12 기반)
기본 조건:sudo권한, 터미널 사용 가능
1. 문제/주제 요약
Raspberry Pi 5에서는 기존 모델보다 GPIO 하드웨어 구조가 조금 달라졌고,raspi-config 대신 rpi-config 또는 raspi-config nonint 명령을 사용하는 환경이 생겼다.
I2C, SPI, UART 같은 인터페이스를 활성화하지 않으면 센서가 /dev/i2c-*, /dev/spi*, /dev/tty* 장치로 나타나지 않는다.
이 글에서는 Raspberry Pi 5에서 I2C/SPI/UART를 활성화하고 센서를 연결하는 기본 절차를 정리한다.
2. 원인/배경 설명
Raspberry Pi의 GPIO 핀은 다기능 핀(Multiplexed Pin)으로, 기본적으로는 GPIO 모드(입출력) 로 설정되어 있다.
이를 I2C, SPI, UART 등의 주변장치 기능(Alternate Function) 으로 변경해야 하며,
이 설정은 디바이스 트리 오버레이(Device Tree Overlay) 로 관리된다.
Pi 5에서는 GPIO 핀맵이 이전과 유사하지만, 내부 컨트롤러 주소와 드라이버 구조가 BCM2712 기반으로 변경되어 있다.
따라서 /boot/config.txt 수정 시 기존 모델과 동일한 설정이지만, 시스템 레이어는 다르다.
3. 설정 및 연결 단계
(1) 시스템 업데이트
sudo apt update && sudo apt full-upgrade -y
sudo reboot
(2) 인터페이스 설정 진입
Raspberry Pi OS Desktop이 아닌 Lite 환경이라면 다음 명령으로 설정 메뉴를 연다:
sudo raspi-config
메뉴 → Interface Options →
- I2C: Enable
- SPI: Enable
- Serial Port: Enable (→ Login Shell: No, Serial Port HW: Yes)
변경 후 재부팅한다:
sudo reboot
(3) 설정 확인
✅ I2C 확인
ls /dev/i2c*
# 예시 출력: /dev/i2c-1
I2C 툴 설치:
sudo apt install -y i2c-tools
sudo i2cdetect -y 1
센서가 연결되어 있다면 아래처럼 주소가 표시된다:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- 1e -- -- -- -- -- -- -- --
위 예시는 I2C 주소
0x1e(예: LSM303, HMC5883L 등) 감지된 상황
✅ SPI 확인
ls /dev/spi*
# 예시 출력: /dev/spidev0.0 /dev/spidev0.1
SPI 테스트용 패키지:
sudo apt install python3-spidev
테스트 코드 예시 (Python):
import spidev
spi = spidev.SpiDev()
spi.open(0, 0) # Bus 0, Device 0
spi.max_speed_hz = 500000
resp = spi.xfer2([0xAA, 0xBB])
print(resp)
spi.close()
✅ UART 확인
기본 UART 장치는 /dev/serial0 또는 /dev/ttyAMA0 로 매핑된다.
ls -l /dev/serial*
# → /dev/serial0 -> /dev/ttyAMA0
테스트 (Loopback):
sudo apt install -y minicom
sudo minicom -b 115200 -o -D /dev/serial0
RX-TX를 직접 연결한 후 입력하면 동일한 문자가 에코되면 정상 동작이다.
(4) 하드웨어 연결 요약
| 인터페이스 | 기본 핀 | 참고 | 예시 센서 |
|---|---|---|---|
| I2C | SDA(핀 3), SCL(핀 5) | 3.3V Pull-up 필요 | BME280, MPU6050 |
| SPI | MOSI(19), MISO(21), SCLK(23), CE0(24), CE1(26) | 3.3V 레벨 | MCP3008, MAX7219 |
| UART | TX(핀 8), RX(핀 10) | 3.3V TTL 레벨 | GPS, Bluetooth 모듈 |
⚠️ 주의: Raspberry Pi 5는 5V 신호 비호환이므로 반드시 3.3V 장치만 연결할 것.
4. 추가 팁 / 자주 하는 실수
| 문제 상황 | 원인 | 해결 방법 |
|---|---|---|
/dev/i2c-1 없음 | 오버레이 비활성화 | /boot/config.txt 확인 (dtparam=i2c_arm=on) |
| SPI 장치 감지 안 됨 | MOSI/MISO 교차 연결 | 배선 방향 재확인 (센서 GND/3.3V 포함) |
| UART 동작 안 함 | Login shell이 UART 점유 | raspi-config → Interface Options → Serial → No (login shell) |
| I2C 주소 충돌 | 여러 장치 동일 주소 | I2C 멀티플렉서(TCA9548A 등) 사용 |
| I2C 통신 불안정 | Pull-up 저항 미비 | SDA/SCL에 4.7kΩ 저항 추가 |
5. 정리
- Raspberry Pi 5에서도 I2C/SPI/UART 설정은 기존과 유사하지만, 커널 및 디바이스 트리 구조가 새로워졌으므로 최신 OS에서 설정해야 한다.
raspi-config또는/boot/config.txt편집으로 활성화 후/dev/*장치를 반드시 확인.- 각 인터페이스는 3.3V TTL 기준으로 동작하며, 하드웨어 배선 오류가 가장 흔한 문제다.