Overview
- Raspberry Pi Zero에서 Raspberry Pi OS (Legacy, 32-bit) Lite를 사용
- PN532를 이용한 NFC RFID 보드를 연동
- NFC TAG 인지하는 MP3 플레이어 구현
- 구동에 필요한 라이브러리 및 파이썬 설치
- 기본적인 전력 소비량과 디스크 사용량을 측정
- 전력 소비량은 USB 전력 측정기로 간단히 확인
- 디스크 사용량은 df 명령어로 확인
- 부팅 시간은 systemd-analyze 명령어로 확인
Test Environment
Hardware
| Item | Value |
|---|
| Board | Raspberry Pi Zero V1.3 |
| NFC Module | PN532 NFC RFID Module |
| Audio | Raspberry Pi Audio Module (B) |
Operating System
| Item | Value |
|---|
| Image | RASPBERRY PI OS (Legacy, 32-BIT) LITE |
| Kernel | Linux zero 6.1.21+ #1642 Mon Apr 3 17:19:14 BST 2023 armv6l GNU/Linux |
Software / Library
| Item | Version |
|---|
| Python | 3.9.2 |
| pip | 20.3.4 |
| adafruit-circuitpython-pn532 | 2.4.3 |
| pygame | 2.6.1 |
Connecting wires
Connection Overview
| Raspberry Pi GPIO Pin | Device Pin | Cable Color |
|---|
| 6 (GND) | PN532 1 (GND) | Black |
| 4 (5V) | PN532 2 (5V) | Red |
| 3 (GPIO2, SDA) | PN532 3 (SDA) | White |
| 5 (GPIO3, SCL) | PN532 4 (SCL) | Brown |
| 12 (GPIO18, PCM_CLK) | Audio | (HAT) |
| 35 (GPIO19, PCM_FS) | Audio | (HAT) |
Actual Wiring Photo

Set Audio Module
Setting
- config.txt 편집
맨 아래쪽에 다음 한 줄을 추가
dtoverlay=audremap,pins_18_19
raspi-config 수행
System Options -> S2. Audio -> bcm2835 Headphones 선택
I2C Setting
- 터미널 실행
sudo raspi-config 명령어 입력
- 3. Interface Options 선택
- I5 I2C 선택
- “Would you like the ARM I2C interface to be enabled?”
- 설정이 끝나면 Finish 후 라즈베리 파이 재부팅
Network Setting for Gadget Mode (macOS)
Purpose
Raspberry Pi Zero 모델은 이더넷 포트나 Wi-Fi 모듈이 기본적으로 탑재되지 않음. 따라서 Gadget Mode의 네트워크를 이용해 인터넷 공유를 설정하여 apt-get, pip 등을 수행할 수 있도록 설정
Setting (macOS)
설정 - 일반 - 공유 - 인터넷 공유 진입
- 다음과 같이 옵션 설정
- 다음으로부터 연결 공유:
Wi-Fi
- 다음을 사용하는 기기 대상:
RNDIS/Ethernet Gadget
Setting (raspberry)
- config.txt
맨 아래쪽에 다음 한 줄을 추가
dtoverlay=dwc2
- cmdline.txt
rootwait 뒤에 한 칸 띄우고 modules-load=dwc2,g_ether 삽입
- 접속 확인
ssh pi@raspberrypi.local
Install Python Library
- 패키지 목록 업데이트 & pip 설치
sudo apt-get update
sudo apt-get install -y python3-pip python3-venv libsdl2-2.0-0 libsdl2-mixer-2.0-0
- 가상 환경 생성 및 활성화
python3 -m venv .venv
source .venv/bin/activate
- 라이브러리 설치
pip3 install adafruit-circuitpython-pn532
pip3 install pygame
Sample Code
import time
import board
import busio
from adafruit_pn532.i2c import PN532_I2C
import pygame
# 1) Initialize PN532
i2c = busio.I2C(board.SCL, board.SDA)
pn532 = PN532_I2C(i2c, debug=False)
pn532.SAM_configuration()
# 2) Initialize pygame sound
pygame.mixer.init()
track_path = "/home/user/sample.mp3" # Path to your audio file
card_present = False # Whether a card is currently detected
print("Please place and remove the card repeatedly.")
try:
while True:
# Read card UID (0.5 second timeout)
uid = pn532.read_passive_target(timeout=0.5)
if uid is not None:
if not card_present:
print(f"Card detected! UID: {uid}")
# Play the audio file
pygame.mixer.music.load(track_path)
pygame.mixer.music.play()
card_present = True
else:
if card_present:
# If the card was present and is now removed, stop playback
print("Card removed.")
pygame.mixer.music.stop()
card_present = False
time.sleep(0.1)
except KeyboardInterrupt:
print("Terminated by user.")
pygame.mixer.music.stop()
Booting Time
- 기본 세팅과 비교하면, PN532와 Audio Module을 설치했을 때 부팅 시간이 소폭 늘어남
$ systemd-analyze
Startup finished in 4.809s (kernel) + 42.671s (userspace) = 47.480s
multi-user.target reached after 40.546s in userspace
Disk Usage
| Filesystem | Used | Mounted on |
|---|
| /dev/mmcblk0p1 | 52M | /boot |
| /dev/root | 1.9G | / |
Power Consumption
| State | Voltage | Ampere (Max) | Watt (Max) |
|---|
| Booting | 5V | 0.2A | 1W |
| Idle | 5V | 0.13A | 0.65W |
| Polling | 5V | 0.21A | 1.05W |
| Playing | 5V | 0.24A | 1.2W |
Issue - Sound Noise
- Raspberry Pi Zero의 상태 LED가 깜빡일 때마다 짧게 노이드 발생
- LED를 소프트웨어적으로 비활성화했지만 동일 현상 발생
- SD CARD 접근시 노이즈 발생 확인
- 실험1. 파일을 백그라운드로 주기적으로 WRITE 후 SYNC를 수행, 노이즈 발생
- 실험2. 네트워크 소켓을 연 후 파일을 다른 서버에서 READ 수행, 노이즈 발생
- Audio Module 회로 분석에는 전원 연결부에는 커패시터가 부착되어 있음을 확인
- NFC TAG 연결에서는 노이즈 없음
- 전원부보다 PCM 신호에 노이즈가 의심이 됨
Conclusion
- 부팅 시간은 약 47초 소요, 기존보다 약 2~3초 늘어남
- 소비 전력은 부팅시 약 1W, 유휴시 약 0.65W 소모
- NFC 카드를 Polling시 전력 소모 발생
- SD CARD Read/Write 시에 PCM으로 연결된 Audio Module에 노이즈 발생
- PCM 신호를 디버깅하기보다 소프트웨어적으로 우회 방향 고민
Next Steps
Raspberry Pi Zero 모델에 Alpine Linux 부팅 시간 및 전력 사용량 확인
Alpine Linux 사용 시 더욱 짧은 부팅 시간을 기대
- Arduino Pro Mini (3.3V, 8MHz) 모델의 전력 사용량 확인
- NFC 인식과 간단한 오디오 재생 정도라면 마이크로컨트롤러 기반으로도 충분할 수 있음
- 저전력 환경이 필요한 간단 프로젝트에는 아두이노가 훨씬 경제적일 것으로 기대
Link