Raspberry Pi Zero With PN532

해초의 꿈·2025년 3월 1일

Overview

  • Raspberry Pi Zero에서 Raspberry Pi OS (Legacy, 32-bit) Lite를 사용
  • PN532를 이용한 NFC RFID 보드를 연동
  • NFC TAG 인지하는 MP3 플레이어 구현
  • 구동에 필요한 라이브러리 및 파이썬 설치
  • 기본적인 전력 소비량과 디스크 사용량을 측정
    • 전력 소비량은 USB 전력 측정기로 간단히 확인
    • 디스크 사용량은 df 명령어로 확인
    • 부팅 시간은 systemd-analyze 명령어로 확인

Test Environment

Hardware

ItemValue
BoardRaspberry Pi Zero V1.3
NFC ModulePN532 NFC RFID Module
AudioRaspberry Pi Audio Module (B)

Operating System

ItemValue
ImageRASPBERRY PI OS (Legacy, 32-BIT) LITE
KernelLinux zero 6.1.21+ #1642 Mon Apr 3 17:19:14 BST 2023 armv6l GNU/Linux

Software / Library

ItemVersion
Python3.9.2
pip20.3.4
adafruit-circuitpython-pn5322.4.3
pygame2.6.1

Connecting wires

Connection Overview

Raspberry Pi GPIO PinDevice PinCable 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

  1. config.txt 편집
    맨 아래쪽에 다음 한 줄을 추가
    dtoverlay=audremap,pins_18_19
  2. raspi-config 수행
    System Options -> S2. Audio -> bcm2835 Headphones 선택

I2C Setting

  1. 터미널 실행
  2. sudo raspi-config 명령어 입력
  3. 3. Interface Options 선택
  4. I5 I2C 선택
  5. “Would you like the ARM I2C interface to be enabled?”
    • Yes 선택
  6. 설정이 끝나면 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)

  1. config.txt
    맨 아래쪽에 다음 한 줄을 추가
    dtoverlay=dwc2
  2. cmdline.txt
    rootwait 뒤에 한 칸 띄우고 modules-load=dwc2,g_ether 삽입
  3. 접속 확인
    ssh pi@raspberrypi.local

Install Python Library

  1. 패키지 목록 업데이트 & pip 설치
sudo apt-get update
sudo apt-get install -y python3-pip python3-venv libsdl2-2.0-0 libsdl2-mixer-2.0-0
  1. 가상 환경 생성 및 활성화
python3 -m venv .venv
source .venv/bin/activate
  1. 라이브러리 설치
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

FilesystemUsedMounted on
/dev/mmcblk0p152M/boot
/dev/root1.9G/

Power Consumption

StateVoltageAmpere (Max)Watt (Max)
Booting5V0.2A1W
Idle5V0.13A0.65W
Polling5V0.21A1.05W
Playing5V0.24A1.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 인식과 간단한 오디오 재생 정도라면 마이크로컨트롤러 기반으로도 충분할 수 있음
    • 저전력 환경이 필요한 간단 프로젝트에는 아두이노가 훨씬 경제적일 것으로 기대

0개의 댓글