ARM Core - 7. 실습 프로젝트 (2. Raspberry Pi를 활용한 ARM 기반 리눅스 시스템 개발)

2025. 3. 7. 14:56정보기술/하드웨어

2. Raspberry Pi를 활용한 ARM 기반 리눅스 시스템 개발

Raspberry Pi는 ARM 기반의 저전력, 고성능 싱글보드 컴퓨터(SBC)로, 임베디드 시스템, IoT, 교육, 서버, 로봇 개발 등 다양한 용도로 활용된다.
ARM 아키텍처와 리눅스를 기반으로 하여 임베디드 시스템 개발, 네트워크 애플리케이션 구축, 센서 제어 등의 프로젝트를 구현할 수 있다.


1. Raspberry Pi 개요 및 ARM 기반 시스템 개발의 장점

1) Raspberry Pi의 특징

  • ARM 기반 저전력 프로세서 → Cortex-A 시리즈 CPU 탑재
  • 라즈비안(Raspberry Pi OS) 및 다양한 리눅스 배포판 지원
  • GPIO 핀을 활용한 하드웨어 제어 가능
  • HDMI, USB, 이더넷, Wi-Fi, 블루투스 등 다양한 입출력 인터페이스 제공

2) ARM 기반 리눅스 시스템 개발의 장점

장점  설명
저전력 & 고성능 ARM 기반 프로세서를 활용하여 에너지 효율적인 시스템 구축 가능
리눅스 환경 지원 다양한 리눅스 배포판(Raspberry Pi OS, Ubuntu, Debian 등) 사용 가능
임베디드 개발 최적화 GPIO, I2C, SPI 등의 하드웨어 제어 가능
네트워크 지원 IoT, 서버, 네트워크 애플리케이션 개발 가능

2. Raspberry Pi 기반 ARM 리눅스 개발 환경 설정

1) 기본 하드웨어 및 소프트웨어 준비

필요한 하드웨어:

  • Raspberry Pi 4/5 또는 Raspberry Pi Zero
  • microSD 카드 (16GB 이상 권장)
  • 전원 어댑터 (5V, 3A)
  • HDMI 모니터, USB 키보드/마우스

운영체제(OS) 설치:

  1. Raspberry Pi Imager 다운로드 및 설치
  2. Raspberry Pi OS(Ubuntu, Debian 등) 선택 후 microSD 카드에 플래싱
  3. Raspberry Pi 부팅 후 기본 설정 완료

2) 리눅스 개발 환경 구축

1️⃣ 패키지 및 필수 도구 설치

sudo apt update && sudo apt upgrade -y
sudo apt install -y git vim build-essential cmake python3 python3-pip

설명: 개발에 필요한 필수 패키지 및 빌드 도구 설치

2️⃣ GPIO 및 센서 제어 라이브러리 설치

sudo apt install -y python3-rpi.gpio i2c-tools

설명: Raspberry Pi의 GPIO를 제어하기 위한 라이브러리 설치

3️⃣ 네트워크 설정 및 SSH 활성화

sudo systemctl enable ssh
sudo systemctl start ssh

설명: SSH를 활성화하여 원격 접속 가능하도록 설정


3. Raspberry Pi를 활용한 ARM 기반 프로젝트 개발

1) GPIO를 활용한 LED 제어 (Python 예제)

import RPi.GPIO as GPIO
import time

LED_PIN = 18  # GPIO 18번 핀 사용

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)

try:
    while True:
        GPIO.output(LED_PIN, GPIO.HIGH)  # LED ON
        time.sleep(1)
        GPIO.output(LED_PIN, GPIO.LOW)   # LED OFF
        time.sleep(1)
except KeyboardInterrupt:
    GPIO.cleanup()  # 종료 시 GPIO 핀 초기화

GPIO를 활용한 기본적인 LED 제어 프로그램


2) I2C 센서를 활용한 온습도 데이터 수집 (HTU21D 센서 예제)

import smbus

HTU21D_ADDR = 0x40  # I2C 주소
CMD_TEMP = 0xE3

bus = smbus.SMBus(1)

def read_temperature():
    data = bus.read_i2c_block_data(HTU21D_ADDR, CMD_TEMP, 2)
    raw_temp = (data[0] << 8) | data[1]
    temp = -46.85 + (175.72 * raw_temp / 65536.0)
    return temp

print("Temperature:", read_temperature(), "°C")

I2C를 이용한 온습도 센서 데이터 읽기 예제


3) Raspberry Pi를 MQTT 브로커로 활용한 IoT 데이터 전송

1️⃣ Mosquitto(MQTT 브로커) 설치

sudo apt install -y mosquitto mosquitto-clients
sudo systemctl enable mosquitto
sudo systemctl start mosquitto

설명: Raspberry Pi에서 MQTT 브로커(Mosquitto) 실행

2️⃣ Python을 활용한 MQTT 퍼블리셔(Publisher) 예제

import paho.mqtt.client as mqtt

mqtt_broker = "localhost"
mqtt_topic = "sensor/temperature"

client = mqtt.Client()
client.connect(mqtt_broker, 1883, 60)

temp_data = 25.5
client.publish(mqtt_topic, temp_data)
print(f"Published temperature: {temp_data} °C")

센서 데이터를 MQTT를 통해 브로커로 전송하는 예제


4. ARM 리눅스 시스템의 확장 및 최적화

1) 성능 최적화 및 전력 관리

# CPU 성능 확인
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 전력 절약 모드 설정
echo "powersave" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Raspberry Pi의 CPU 성능을 조절하여 전력 효율 최적화


2) Raspberry Pi를 웹 서버로 활용 (Flask 웹 애플리케이션 예제)

from flask import Flask

app = Flask(__name__)

@app.route("/")
def home():
    return "Hello, Raspberry Pi Web Server!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
pip install flask
python3 app.py

Flask를 이용한 간단한 웹 서버 구축


5. Raspberry Pi를 활용한 ARM 리눅스 시스템 개발의 장점

저전력, 고성능 → ARM 기반 저전력 시스템을 효율적으로 운영 가능
GPIO, I2C, SPI 등 다양한 하드웨어 인터페이스 지원
리눅스 환경을 활용한 다양한 애플리케이션 개발 가능
IoT, 네트워크, 엣지 컴퓨팅 등 다양한 용도로 확장 가능


6. 확장 가능한 프로젝트 아이디어

  • IoT 환경 모니터링 시스템 → 센서 데이터를 실시간으로 수집 및 클라우드 전송
  • 홈 자동화 시스템 → 라즈베리를 활용한 스마트 홈 구현
  • AI 기반 이미지 처리 시스템 → OpenCV 및 딥러닝을 활용한 객체 인식

7. 결론

  • Raspberry Pi는 ARM 기반 리눅스 시스템 개발을 위한 최적의 플랫폼
  • GPIO, I2C, SPI를 활용하여 다양한 하드웨어와 연동 가능
  • MQTT, Flask, SSH 등 다양한 소프트웨어 환경을 구축하여 확장 가능
  • IoT, 서버, 네트워크 애플리케이션을 개발하는 데 매우 유용함

Raspberry Pi를 활용하면 ARM 기반 임베디드 시스템 개발이 용이하며, 다양한 프로젝트로 확장할 수 있다.