파이썬은 라즈베리 파이의 리모컨이다
라즈베리 파이를 작은 컴퓨터라고 한다면, 파이썬은 그 컴퓨터에 일을 시키는 리모컨에 가깝습니다. 버튼을 누르듯 한 줄씩 명령을 적으면 파일을 만들고, 시간을 확인하고, 센서 값을 저장하고, 나중에는 LED와 모터도 움직일 수 있습니다.
이번 장에서는 전자부품을 바로 연결하지 않습니다. 대신 "장치를 제어하는 흐름"을 파이썬 코드로 먼저 익힙니다. 지금은 화면에 글자를 출력하고 CSV 파일에 값을 저장하지만, 다음 장부터는 이 출력 부분이 LED, 버튼, 센서 제어로 바뀝니다.
먼저 작업 폴더를 만듭니다.
mkdir -p ~/pi-study/python-control
cd ~/pi-study/python-control
python3 --versionPython 3.x.x처럼 버전이 보이면 준비가 끝났습니다. 앞으로 이 폴더 안에서 실습합니다.
AI 생성 이미지
첫 파이썬 파일 실행하기
터미널에서 바로 파이썬을 실행할 수도 있지만, 프로젝트를 만들 때는 파일로 저장하는 습관이 좋습니다.
nano hello_pi.py아래 코드를 입력합니다.
from datetime import datetime
name = "Raspberry Pi"
count = 3
print("파이썬 실습을 시작합니다.")
print("장치 이름:", name)
print("현재 시간:", datetime.now())
for number in range(1, count + 1):
print(number, "번째 명령을 실행했습니다.")저장한 뒤 실행합니다.
python3 hello_pi.py화면에 장치 이름, 현재 시간, 1부터 3까지의 실행 메시지가 나오면 성공입니다.
여기서 중요한 문법은 네 가지입니다.
name = "Raspberry Pi": 값을 담는 변수입니다.for number in range(...): 같은 일을 반복하는 반복문입니다.print(...): 화면에 결과를 보여 주는 함수입니다.datetime.now(): 현재 시간을 가져오는 명령입니다.
변수는 작은 상자라고 생각하면 됩니다. 온도 기준값, LED 상태, 파일 이름처럼 나중에 바뀔 수 있는 값을 이름 붙여 담아 둡니다.
조건문으로 판단하게 만들기
라즈베리 파이는 단순히 명령을 실행하는 것보다 "상황에 따라 다르게 행동"할 때 쓸모가 커집니다. 예를 들어 온도가 높으면 경고하고, 낮으면 정상이라고 알려 줄 수 있습니다.
새 파일을 만듭니다.
nano check_value.pytemperature = 28
limit = 26
if temperature >= limit:
print("온도가 높습니다. 팬을 켜야 합니다.")
else:
print("온도가 안정적입니다.")실행합니다.
python3 check_value.pytemperature 값을 24, 26, 30으로 바꿔 다시 실행해 보세요. 조건에 따라 출력이 달라집니다.
이 구조는 나중에 그대로 장치 제어에 쓰입니다.
if 버튼이_눌렸다면:
LED를_켠다
else:
LED를_끈다아직 GPIO를 사용하지 않았을 뿐, 프로그램의 뼈대는 이미 장치 제어와 같습니다.
함수로 명령 묶기
같은 코드를 여러 번 복사하면 나중에 수정하기 어렵습니다. 함수는 자주 쓰는 명령 묶음에 이름을 붙인 것입니다.
nano control_flow.pydef check_temperature(temperature, limit):
if temperature >= limit:
return "경고"
else:
return "정상"
values = [23, 25, 28, 27]
limit = 26
for value in values:
result = check_temperature(value, limit)
print("측정값:", value, "상태:", result)실행합니다.
python3 control_flow.py결과는 측정값마다 정상 또는 경고로 나뉩니다.
함수를 쓰면 좋은 점은 분명합니다. 판단 기준을 바꾸고 싶을 때 함수 안쪽만 고치면 됩니다. 센서를 바꾸거나 출력 장치를 바꿀 때도 전체 코드를 다시 짜지 않아도 됩니다.
가상환경 만들기
파이썬 프로젝트가 커지면 외부 패키지를 설치하게 됩니다. 패키지는 다른 사람이 만들어 둔 기능 묶음입니다. 예를 들어 일정 시간마다 작업을 실행하는 schedule 패키지를 설치하면 자동화 코드를 간단히 만들 수 있습니다.
그런데 패키지를 시스템 전체에 마구 설치하면 프로젝트끼리 충돌할 수 있습니다. 그래서 프로젝트마다 독립된 파이썬 공간을 만듭니다. 이것을 가상환경이라고 합니다.
현재 폴더에서 가상환경을 만듭니다.
cd ~/pi-study/python-control
python3 -m venv .venv만약 venv 관련 오류가 나오면 다음 명령으로 필요한 도구를 설치한 뒤 다시 시도합니다.
sudo apt update
sudo apt install python3-venv
python3 -m venv .venv주의:
sudo pip install ...처럼 관리자 권한으로 파이썬 패키지를 직접 설치하지 마세요. 시스템 파이썬 환경이 꼬일 수 있습니다. 일반 프로젝트 패키지는 가상환경 안에 설치하는 습관을 들입니다.
가상환경을 켭니다.
source .venv/bin/activate터미널 앞에 (.venv)가 보이면 활성화된 상태입니다. 이제 이 프로젝트 안에서만 사용할 패키지를 설치합니다.
python -m pip install --upgrade pip
python -m pip install schedule설치 확인은 이렇게 합니다.
python -c "import schedule; print('schedule 설치 완료')"가상환경을 끄려면 다음 명령을 사용합니다.
deactivate다시 실습할 때는 프로젝트 폴더로 이동한 뒤 source .venv/bin/activate를 먼저 실행해야 합니다.
CSV 파일에 실험 데이터 저장하기
센서를 연결하면 값이 계속 생깁니다. 이 값을 화면에만 출력하면 지나간 데이터를 다시 볼 수 없습니다. 그래서 파일에 기록해야 합니다.
이번에는 실제 센서 대신 임의의 온도 값을 만들어 CSV 파일에 저장합니다. CSV는 쉼표로 칸을 구분한 표 형식 파일입니다. 나중에 스프레드시트나 그래프 도구로 열기 쉽습니다.
nano save_data.pyimport csv
import random
from datetime import datetime
from pathlib import Path
file_path = Path("experiment.csv")
if not file_path.exists():
with file_path.open("w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["time", "temperature"])
temperature = round(20 + random.random() * 10, 2)
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with file_path.open("a", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow([now, temperature])
print("저장 완료:", now, temperature)실행합니다.
python3 save_data.py몇 번 더 실행한 뒤 파일 내용을 확인합니다.
cat experiment.csv또는 마지막 몇 줄만 봅니다.
tail -n 5 experiment.csv결과는 다음과 비슷합니다.
time,temperature
2026-07-15 10:15:02,24.61
2026-07-15 10:15:05,28.13여기서 random으로 만든 값은 나중에 온습도 센서, 조도 센서, 거리 센서 값으로 바꿀 수 있습니다. 중요한 것은 "측정한다 → 시간과 함께 저장한다 → 나중에 확인한다"는 흐름입니다.
정해진 시간마다 작업 실행하기
자동화 프로그램은 사람이 매번 실행하지 않아도 스스로 반복해야 합니다. 이를 위해 time, datetime, schedule을 함께 사용해 보겠습니다.
가상환경이 꺼져 있다면 먼저 켭니다.
cd ~/pi-study/python-control
source .venv/bin/activate자동 기록 프로그램을 만듭니다.
nano auto_logger.pyimport csv
import random
import time
from datetime import datetime
from pathlib import Path
import schedule
file_path = Path("auto_experiment.csv")
def prepare_file():
if not file_path.exists():
with file_path.open("w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["time", "temperature"])
def read_temperature():
return round(20 + random.random() * 10, 2)
def record_data():
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
temperature = read_temperature()
with file_path.open("a", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow([now, temperature])
print("기록:", now, temperature)
prepare_file()
schedule.every(10).seconds.do(record_data)
print("자동 기록을 시작합니다. 멈추려면 Ctrl+C를 누르세요.")
while True:
schedule.run_pending()
time.sleep(1)실행합니다.
python auto_logger.py10초마다 기록 메시지가 나오면 성공입니다. 멈출 때는 Ctrl+C를 누릅니다.
다른 터미널을 하나 더 열어 파일이 쌓이는지 확인할 수도 있습니다.
cd ~/pi-study/python-control
tail -f auto_experiment.csvtail -f는 파일 끝부분을 계속 지켜보는 명령입니다. 서버 로그나 센서 기록을 확인할 때 자주 씁니다.
오류가 나도 바로 멈추지 않게 하기
프로그램은 항상 예상대로만 움직이지 않습니다. 파일 경로가 틀릴 수 있고, 패키지를 설치하지 않았을 수도 있고, 나중에는 센서 연결이 순간적으로 끊길 수도 있습니다. 이때 오류 메시지를 읽고, 필요한 부분에는 예외 처리를 넣어야 합니다.
자주 만나는 오류는 다음과 같습니다.
SyntaxError: 문법이 틀렸습니다. 따옴표, 괄호, 콜론을 확인합니다.IndentationError: 들여쓰기가 맞지 않습니다. 파이썬은 들여쓰기로 코드 블록을 구분합니다.ModuleNotFoundError: 패키지를 찾지 못했습니다. 가상환경을 켰는지, 패키지를 설치했는지 확인합니다.FileNotFoundError: 파일이나 폴더 경로가 틀렸습니다.PermissionError: 권한이 없어 파일을 읽거나 쓸 수 없습니다. 시스템 폴더가 아닌 홈 폴더에서 작업하는지 확인합니다.
자동 기록 코드에 기본적인 예외 처리를 넣으면 다음과 같습니다.
try:
record_data()
except Exception as error:
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("오류 발생:", now, error)전체 반복문에 적용하면 프로그램이 한 번의 오류로 바로 종료되는 일을 줄일 수 있습니다.
while True:
try:
schedule.run_pending()
time.sleep(1)
except KeyboardInterrupt:
print("사용자가 프로그램을 종료했습니다.")
break
except Exception as error:
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("오류 발생:", now, error)
time.sleep(5)KeyboardInterrupt는 사용자가 Ctrl+C를 눌렀을 때 발생합니다. 이 경우는 오류라기보다 정상 종료에 가깝기 때문에 따로 처리해 주는 것이 좋습니다.
주의:
except Exception으로 모든 오류를 숨기기만 하면 문제 원인을 놓칠 수 있습니다. 처음 실습할 때는 오류 메시지를 화면에 출력하고, 어떤 줄에서 문제가 생겼는지 확인하세요.
이번 장의 작은 프로젝트 정리
이번 장에서 만든 프로그램은 아직 단순하지만, 라즈베리 파이 프로젝트의 기본 구조를 모두 담고 있습니다.
변수에 기준값과 상태를 저장했습니다.
조건문으로 정상과 경고를 나눴습니다.
반복문으로 같은 작업을 여러 번 실행했습니다.
함수로 측정, 판단, 기록을 분리했습니다.
가상환경으로 프로젝트 패키지를 따로 관리했습니다.
CSV 파일에 시간과 값을 저장했습니다.
일정 시간마다 자동으로 작업을 실행했습니다.
예외 처리로 프로그램이 중간에 멈추는 상황에 대비했습니다.
다음 장에서는 이 코드의 print()와 임의의 숫자 생성 부분이 실제 GPIO 제어로 바뀝니다. 화면에 "LED를 켠다"고 출력하던 명령이 실제 LED를 켜는 명령이 됩니다. 파이썬 문법을 완벽히 외울 필요는 없습니다. 중요한 것은 값을 읽고, 판단하고, 기록하고, 반복하는 흐름을 이해하는 것입니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.