liminfo

Raspberry Pi Reference

Raspberry Pi 레퍼런스

27개 결과

Raspberry Pi Reference 소개

라즈베리파이 레퍼런스는 라즈베리파이를 이용한 물리 컴퓨팅과 IoT 프로젝트를 위한 체계적이고 검색 가능한 치트 시트입니다. GPIO, 카메라, 센서, 통신, 설정, Python 등 6개 카테고리로 구성되어 있으며, 각 항목에는 실제 Python 코드 예제가 포함되어 있어 하드웨어 배선 및 제어 스크립트 작성 시 문서 페이지를 전환하지 않아도 됩니다. 취미 제작자, 메이커, 엔지니어, 학생 모두에게 유용합니다.

GPIO 섹션은 RPi.GPIO 라이브러리의 핵심을 다룹니다: 핀 번호 체계(BCM vs BOARD) 설정, 풀업/풀다운 저항을 이용한 입출력 핀 구성, 디지털 상태 읽기/쓰기, LED 밝기 조절·서보 모터 제어·버저 음향을 위한 PWM 신호 생성. 카메라 섹션에서는 정지 사진 촬영, H.264 동영상 녹화, 실시간 미리보기를 위한 최신 picamera2 라이브러리를 다룹니다. 센서 섹션에는 인기 있는 센서들의 예제가 포함됩니다: DHT11/DHT22(온습도), HC-SR04 초음파(거리 측정), MCP3008 SPI ADC(아날로그 센서), BMP280 I2C 기압 센서, PIR 모션 감지.

통신 섹션은 라즈베리파이에서 사용 가능한 모든 주요 프로토콜을 다룹니다: 센서·디스플레이 통신을 위한 smbus I2C, 고속 ADC·SD 카드를 위한 spidev SPI, 마이크로컨트롤러·GPS 연결을 위한 UART 시리얼, 네트워크 프로그래밍을 위한 TCP/UDP 소켓, IoT 메시지 브로커링을 위한 paho-mqtt. 설정 섹션에서는 raspi-config(I2C·SPI·카메라 인터페이스 활성화), /boot/config.txt 부트 설정, `pinout` 명령, `i2cdetect` I2C 기기 스캔을 다룹니다. Python 섹션에서는 `add_event_detect`를 이용한 인터럽트 기반 GPIO, gpiozero 고수준 라이브러리, subprocess 시스템 명령 실행, asyncio 동시 GPIO 처리 패턴을 다룹니다.

주요 기능

  • GPIO·카메라·센서·통신·설정·Python 6개 카테고리 수록
  • GPIO: BCM/BOARD 핀 모드, 입출력 설정, 풀업/풀다운 저항, PWM(듀티 사이클 제어)
  • 카메라: picamera2 정지 사진 촬영, H.264 동영상 녹화, 실시간 미리보기
  • 센서: DHT11/DHT22(온습도), HC-SR04(초음파 거리), MCP3008 ADC, BMP280(I2C 기압), PIR 모션
  • 통신: I2C(smbus), SPI(spidev), UART 시리얼, TCP/UDP 소켓, MQTT(paho-mqtt)
  • 설정: raspi-config, /boot/config.txt, pinout 명령, i2cdetect 디바이스 스캔
  • Python: GPIO.add_event_detect 콜백, gpiozero LED/Button, subprocess, asyncio blink
  • 100% 클라이언트 사이드 처리 — 회원가입 불필요, 데이터 서버 전송 없음

자주 묻는 질문

라즈베리파이에서 BCM과 BOARD 핀 번호 체계의 차이는 무엇인가요?

BCM(Broadcom SOC Channel) 번호는 Broadcom 칩이 할당한 GPIO 번호를 가리킵니다. 예를 들어 GPIO18은 물리 헤더의 12번 핀입니다. BOARD 번호는 40핀 헤더의 물리적 위치를 기준으로 하며, 왼쪽 상단 3.3V 핀부터 1번으로 시작합니다. BCM 번호 체계가 Python 코드와 문서에서 가장 일반적입니다. `GPIO.setmode(GPIO.BCM)`으로 설정합니다. 터미널에서 `pinout` 명령을 실행하면 보드에 맞는 두 번호 체계를 모두 확인할 수 있습니다.

라즈베리파이에서 PWM으로 LED 밝기를 제어하려면 어떻게 하나요?

`GPIO.PWM(pin, frequency)`로 PWM 객체를 생성하고 `pwm.start(duty_cycle)`로 출력을 시작합니다. 듀티 사이클은 핀이 HIGH인 시간의 비율(0~100%)입니다. 50%이면 LED가 절반 시간만 켜져 절반 밝기로 보입니다. `pwm.ChangeDutyCycle(value)`로 동적으로 변경하고 `pwm.stop()`으로 중지합니다. 서보 모터는 50Hz 주파수를 사용하고 듀티 사이클을 약 2.5%(0도)에서 12.5%(180도) 사이로 조정합니다.

DHT22 센서로 온도와 습도를 읽으려면 어떻게 하나요?

`adafruit-circuitpython-dht` 라이브러리를 설치하고 `adafruit_dht`와 `board`를 임포트합니다. `dht = adafruit_dht.DHT22(board.D4)`로 GPIO4에 연결된 센서 객체를 만듭니다. `dht.temperature`(섭씨)와 `dht.humidity`(%)로 값을 읽습니다. DHT22는 DHT11보다 정확도가 높아 온도 ±0.5°C, 습도 ±2-5% 정밀도를 제공합니다. 간헐적으로 읽기 오류가 발생할 수 있으므로 try/except로 감싸는 것이 좋습니다.

라즈베리파이에서 I2C를 활성화하고 연결된 기기를 찾으려면 어떻게 하나요?

`sudo raspi-config`의 인터페이스 옵션에서 I2C를 활성화하거나, `/boot/config.txt`에 `dtparam=i2c_arm=on`을 추가하고 재부팅합니다. 활성화 후 `sudo i2cdetect -y 1`로 버스 1을 스캔합니다. 연결된 기기의 주소가 그리드에 표시됩니다(예: PCF8591 ADC는 0x48, BMP280은 0x77). Python에서 smbus 라이브러리를 사용합니다: `bus = smbus.SMBus(1)`로 버스 1을 열고 `read_byte_data`와 `write_byte_data`로 데이터를 교환합니다.

MQTT란 무엇이고 라즈베리파이에서 어떻게 사용하나요?

MQTT(Message Queuing Telemetry Transport)는 IoT 기기를 위해 설계된 경량 발행/구독 메시지 프로토콜입니다. 브로커(Mosquitto 등)가 토픽별로 발행자와 구독자 사이에서 메시지를 라우팅합니다. `paho-mqtt` 라이브러리를 설치하고 `client.connect("브로커_주소", 1883)`으로 연결합니다. `client.publish("sensor/temperature", "25.3")`으로 센서 데이터를 발행하고, `client.subscribe("device/command")`로 명령을 수신할 수 있습니다. 라즈베리파이 센서를 대시보드, 홈 자동화 시스템, 클라우드에 연결하는 데 이상적입니다.

gpiozero 라이브러리는 RPi.GPIO와 어떻게 다른가요?

gpiozero는 원시 핀 제어 대신 기기 추상화를 제공하는 고수준 라이브러리입니다. 핀 모드를 설정하고 HIGH/LOW 값을 읽는 대신 기기 객체를 만듭니다: `led = LED(17)`로 LED를 만들고 `led.on()`, `led.off()`, `led.blink()`를 호출합니다. `Button(2)`는 `when_pressed`와 `when_released` 이벤트 콜백을 제공합니다. RPi.GPIO는 더 낮은 수준의 제어를 제공하며 타이밍이 중요한 커스텀 애플리케이션에 적합합니다.

HC-SR04 초음파 센서로 거리를 측정하려면 어떻게 하나요?

HC-SR04는 짧은 초음파 펄스(트리거 핀)를 발생시키고 에코가 돌아오는 시간(에코 핀)을 측정합니다. TRIG 핀에 10마이크로초 HIGH 펄스를 보냅니다: `GPIO.output(TRIG, True); time.sleep(0.00001); GPIO.output(TRIG, False)`. 그런 다음 ECHO 핀이 HIGH인 시간을 측정합니다: ECHO가 HIGH가 되는 시작 시간과 LOW가 되는 종료 시간을 기록합니다. 거리(cm) = `(종료 - 시작) * 17150`(왕복 시간의 절반 × 음속 ≈ 34300 cm/s).

라즈베리파이에서 아날로그 센서를 읽으려면 어떻게 하나요(내장 ADC가 없음)?

라즈베리파이 GPIO 핀은 디지털 전용이므로 아날로그 센서를 위해 외부 ADC가 필요합니다. MCP3008은 8채널 10비트 SPI ADC로 널리 사용됩니다. raspi-config에서 SPI를 활성화하고 MCP3008을 SPI 핀(MOSI, MISO, SCLK, CE0)에 연결한 후 `spidev` 라이브러리를 사용합니다. `spi.xfer2([1, (8+채널)<<4, 0])`을 호출해 채널을 읽고 응답 바이트에서 10비트 값을 추출합니다.