이제 라즈베리파이에 "동작"을 만들 차례
앞장에서는 터미널에서 폴더를 이동하고, 파일을 만들고, 명령을 실행하는 방법을 익혔습니다. 이제 그 기본기를 바탕으로 라즈베리파이에 직접 명령을 내려 보겠습니다.
라즈베리파이는 작은 컴퓨터입니다. 그래서 일반 컴퓨터처럼 문서 작성이나 웹 검색도 할 수 있지만, 진짜 재미는 내가 작성한 코드로 무언가를 자동으로 실행하게 만드는 것에서 시작됩니다.
이번 장에서는 파이썬을 사용합니다. 파이썬은 문법이 비교적 읽기 쉽고, 라즈베리파이 예제에서 가장 자주 쓰이는 언어입니다. 센서를 읽거나, LED를 켜거나, 카메라를 제어하거나, 서버를 만드는 작업에도 파이썬이 자주 등장합니다.
이번 장의 목표는 거창하지 않습니다.
파이썬 파일을 만든다.
터미널에서 실행한다.
기본 문법을 읽을 수 있게 된다.
오류 메시지를 보고 어디가 문제인지 찾는다.
필요한 기능을 라이브러리로 확장하는 흐름을 이해한다.
아직 GPIO 핀이나 전자회로를 다루지는 않습니다. 그 내용은 다음 장에서 본격적으로 다룹니다. 이번 장에서는 라즈베리파이 안에서 파이썬 코드가 어떻게 작성되고 실행되는지 익히는 데 집중하겠습니다.

파이썬이 설치되어 있는지 확인하기
라즈베리파이 OS에는 보통 파이썬 3가 기본으로 준비되어 있습니다. 먼저 터미널을 열고 다음 명령을 입력해 봅니다.
python3 --version예를 들어 다음과 비슷한 결과가 나오면 파이썬을 사용할 수 있습니다.
Python 3.11.2버전 숫자는 환경에 따라 다를 수 있습니다. 중요한 것은 Python 3로 시작하는 결과가 나오는지입니다.
파이썬 파일을 실행할 때는 보통 python이 아니라 python3 명령을 사용합니다. 라즈베리파이와 리눅스 환경에서는 이 습관을 들이는 것이 좋습니다.
첫 번째 파이썬 파일 만들기
먼저 실습용 폴더를 하나 만들겠습니다. 터미널에서 다음 명령을 입력합니다.
mkdir ~/python-practice
cd ~/python-practice현재 위치가 잘 바뀌었는지 확인합니다.
pwd이제 hello.py 파일을 만듭니다. 앞장에서 사용한 nano 편집기를 그대로 써도 됩니다.
nano hello.py파일이 열리면 다음 코드를 입력합니다.
print("Hello, Raspberry Pi!")저장하고 나옵니다.
저장:
Ctrl + O, Enter종료:
Ctrl + X
이제 파일을 실행합니다.
python3 hello.py화면에 다음처럼 출력되면 성공입니다.
Hello, Raspberry Pi!방금 한 일은 간단해 보이지만 매우 중요합니다.
파이썬 파일을 만들었습니다.
코드를 작성했습니다.
터미널에서 실행했습니다.
결과를 확인했습니다.
앞으로 만드는 거의 모든 라즈베리파이 프로젝트도 이 흐름을 따릅니다.
코드가 실행되는 순서 이해하기
파이썬은 보통 위에서 아래로 한 줄씩 실행됩니다. 다음 파일을 만들어 보겠습니다.
nano order.py아래 코드를 입력합니다.
print("프로그램 시작")
print("라즈베리파이가 명령을 읽고 있습니다")
print("프로그램 끝")실행합니다.
python3 order.py결과는 코드 순서와 같습니다.
프로그램 시작
라즈베리파이가 명령을 읽고 있습니다
프로그램 끝처음에는 이 단순한 규칙만 기억해도 충분합니다.
파이썬은 위에서 아래로 읽는다.
조건이나 반복문이 있으면 흐름이 바뀐다.
이제 그 흐름을 바꾸는 방법을 하나씩 살펴보겠습니다.
변수: 값을 이름으로 저장하기
변수는 값을 담아 두는 이름입니다. 숫자, 글자, 상태 등을 저장할 수 있습니다.
variable.py 파일을 만듭니다.
nano variable.py다음 코드를 입력합니다.
name = "Raspberry Pi"
count = 3
print(name)
print(count)
print("안녕하세요, " + name)실행합니다.
python3 variable.py변수는 라즈베리파이 프로젝트에서 자주 쓰입니다.
예를 들어 다음과 같은 값을 저장할 수 있습니다.
led_pin = 17
temperature = 28.5
is_button_pressed = False각 변수의 의미는 다음과 같습니다.
led_pin: LED가 연결된 핀 번호temperature: 센서에서 읽은 온도is_button_pressed: 버튼이 눌렸는지 여부
지금은 실제 부품을 연결하지 않더라도, 이런 식으로 값을 이름으로 저장한다는 감각을 익히면 됩니다.
조건문: 상황에 따라 다르게 실행하기
조건문은 "만약 이렇다면 이렇게 하라"는 명령입니다.
라즈베리파이 프로젝트에서는 조건문이 매우 자주 쓰입니다.
온도가 높으면 팬을 켠다.
버튼이 눌리면 LED를 켠다.
움직임이 감지되면 사진을 찍는다.
네트워크 연결이 끊기면 다시 시도한다.
먼저 숫자로 간단히 연습해 보겠습니다.
nano condition.py다음 코드를 입력합니다.
temperature = 31
if temperature >= 30:
print("온도가 높습니다")
else:
print("온도가 적당합니다")실행합니다.
python3 condition.py여기서 중요한 부분은 들여쓰기입니다.
if temperature >= 30:
print("온도가 높습니다")if 아래에서 실행될 코드는 오른쪽으로 들여써야 합니다. 보통 스페이스 4칸을 사용합니다. 파이썬은 들여쓰기를 매우 중요하게 봅니다. 들여쓰기가 틀리면 코드의 의미가 달라지거나 오류가 납니다.
조건을 조금 더 늘릴 수도 있습니다.
temperature = 25
if temperature >= 30:
print("덥습니다")
elif temperature >= 20:
print("적당합니다")
else:
print("쌀쌀합니다")elif는 "앞 조건은 아니지만, 이 조건이라면"이라는 뜻입니다.
반복문: 같은 일을 여러 번 실행하기
반복문은 같은 코드를 여러 번 실행할 때 사용합니다.
예를 들어 LED를 5번 깜빡이게 하거나, 센서 값을 1초마다 읽거나, 서버가 계속 요청을 기다리게 만들 때 반복문이 필요합니다.
먼저 for 반복문을 사용해 보겠습니다.
nano loop_for.py다음 코드를 입력합니다.
for i in range(5):
print("반복 번호:", i)실행합니다.
python3 loop_for.py결과는 다음과 비슷합니다.
반복 번호: 0
반복 번호: 1
반복 번호: 2
반복 번호: 3
반복 번호: 4range(5)는 0부터 4까지 총 5번 반복합니다. 처음부터 1이 아니라 0에서 시작한다는 점을 기억해 둡니다.
이번에는 while 반복문을 보겠습니다.
nano loop_while.pycount = 0
while count < 5:
print("현재 count:", count)
count = count + 1while은 조건이 참인 동안 계속 반복합니다. 위 코드에서는 count가 5보다 작은 동안 반복합니다.
라즈베리파이 프로젝트에서는 다음과 같은 구조가 자주 나옵니다.
while True:
print("계속 실행 중입니다")while True는 무한 반복입니다. 프로그램을 직접 멈추기 전까지 계속 실행됩니다. 터미널에서 실행 중인 프로그램을 멈추려면 보통 Ctrl + C를 누릅니다.
다만 무한 반복을 사용할 때는 주의해야 합니다. 너무 빠르게 계속 실행되면 라즈베리파이에 부담이 될 수 있습니다. 그래서 보통 잠깐 쉬는 코드를 함께 넣습니다.
import time
while True:
print("1초마다 실행됩니다")
time.sleep(1)time.sleep(1)은 1초 동안 기다리라는 뜻입니다.
함수: 자주 쓰는 동작을 묶기
함수는 여러 줄의 코드를 하나의 이름으로 묶는 방법입니다.
예를 들어 인사말을 출력하는 코드를 함수로 만들 수 있습니다.
nano function.pydef say_hello():
print("안녕하세요")
print("라즈베리파이 파이썬 실습입니다")
say_hello()실행합니다.
python3 function.py함수는 def로 만듭니다.
def 함수이름():
실행할 코드함수는 값을 받을 수도 있습니다.
def show_temperature(value):
print("현재 온도:", value)
show_temperature(24)
show_temperature(31)함수를 쓰면 코드가 정리됩니다. 같은 코드를 여러 번 복사하지 않아도 됩니다. 나중에 LED 켜기, 센서 읽기, 사진 찍기 같은 동작도 함수로 묶어 사용할 수 있습니다.
예를 들면 이런 모양입니다.
def turn_on_led():
print("LED를 켭니다")
def turn_off_led():
print("LED를 끕니다")
turn_on_led()
turn_off_led()아직 실제 LED를 연결하지 않았기 때문에 화면에 글자만 출력하지만, 구조는 실제 프로젝트와 같습니다.
라즈베리파이의 온도 읽어 보기
이번에는 라즈베리파이에서 조금 더 실제적인 값을 읽어 보겠습니다. 라즈베리파이는 내부 온도 정보를 파일 형태로 제공합니다. 파이썬으로 그 파일을 읽으면 현재 CPU 온도를 확인할 수 있습니다.
cpu_temp.py 파일을 만듭니다.
nano cpu_temp.py다음 코드를 입력합니다.
def read_cpu_temperature():
with open("/sys/class/thermal/thermal_zone0/temp", "r") as file:
text = file.read()
millidegree = int(text)
temperature = millidegree / 1000
return temperature
current_temp = read_cpu_temperature()
print("현재 CPU 온도:", current_temp, "도")
if current_temp >= 70:
print("온도가 높습니다. 통풍 상태를 확인하세요.")
else:
print("온도가 안정적인 편입니다.")실행합니다.
python3 cpu_temp.py결과는 환경에 따라 다릅니다.
현재 CPU 온도: 48.2 도
온도가 안정적인 편입니다.이 예제에는 지금까지 배운 내용이 함께 들어 있습니다.
def: 함수 만들기open: 파일 읽기int: 글자를 숫자로 바꾸기변수:
current_temp,temperature조건문: 온도에 따라 다른 문장 출력하기
return: 함수 결과 돌려주기
라즈베리파이 제어는 대부분 이런 식입니다. 값을 읽고, 판단하고, 필요한 동작을 실행합니다.
값 읽기 → 조건 판단 → 동작 실행이 흐름을 기억해 두면 센서와 액추에이터를 배울 때 훨씬 쉽게 이해할 수 있습니다.
Thonny로 코드 작성하기
터미널과 nano만으로도 파이썬 코드를 작성할 수 있습니다. 하지만 초보자라면 Thonny 같은 개발 환경을 사용하면 더 편합니다.
Thonny는 파이썬 입문자에게 적합한 편집기입니다. 코드 작성 창, 실행 버튼, 결과 창이 한 화면에 있어 오류를 확인하기 쉽습니다.
라즈베리파이 데스크톱 환경에서 Thonny를 실행해 봅니다.
시작 메뉴를 엽니다.
개발 또는 프로그래밍 메뉴에서 Thonny를 찾습니다.
Thonny를 실행합니다.
만약 Thonny가 보이지 않는다면 터미널에서 설치할 수 있습니다.
sudo apt update
sudo apt install thonnyThonny에서 새 파일을 열고 다음 코드를 입력합니다.
print("Thonny에서 실행합니다")상단의 실행 버튼을 누르면 아래쪽 Shell 창에 결과가 표시됩니다.
Thonny의 장점은 다음과 같습니다.
코드와 실행 결과를 한 화면에서 볼 수 있습니다.
오류가 난 줄을 찾기 쉽습니다.
초보자가 파일을 저장하고 실행하기 편합니다.
파이썬 문법 색상이 표시되어 오타를 발견하기 쉽습니다.
처음에는 Thonny로 연습하고, 터미널 실행에도 익숙해지는 방식이 좋습니다. 실제 프로젝트를 만들다 보면 두 방법을 모두 사용하게 됩니다.
import: 기능을 가져와 쓰기
파이썬에는 기본 기능만 있는 것이 아닙니다. 필요한 기능을 가져와 사용할 수 있습니다. 이때 사용하는 명령이 import입니다.
예를 들어 시간을 다루려면 time 모듈을 가져옵니다.
import time
print("3초 후에 메시지를 출력합니다")
time.sleep(3)
print("완료")무작위 숫자가 필요하면 random 모듈을 사용할 수 있습니다.
import random
number = random.randint(1, 6)
print("주사위 결과:", number)time과 random은 파이썬에 기본으로 포함된 기능입니다. 그래서 따로 설치하지 않아도 됩니다.
앞으로 라즈베리파이 프로젝트를 하다 보면 이런 코드를 자주 보게 됩니다.
import time
from gpiozero import LED여기서 gpiozero는 GPIO 제어에 자주 사용되는 파이썬 라이브러리입니다. 다음 장에서 GPIO를 다룰 때 다시 만나게 됩니다.
지금은 import의 의미만 기억하면 됩니다.
import는 이미 만들어진 기능을 내 코드로 가져오는 명령입니다.
외부 라이브러리 설치하기
파이썬의 힘은 라이브러리에서 나옵니다. 라이브러리는 누군가 미리 만들어 둔 기능 묶음입니다.
예를 들어 다음과 같은 기능을 라이브러리로 쉽게 사용할 수 있습니다.
웹사이트에서 데이터 가져오기
센서 값 읽기
카메라 제어하기
그래프 그리기
서버 만들기
인공지능 모델 사용하기
라이브러리를 설치하는 방법은 크게 두 가지로 생각하면 됩니다.
첫째, 라즈베리파이 OS의 패키지 관리자인 apt로 설치하는 방법입니다.
sudo apt install python3-requests둘째, 파이썬 전용 도구인 pip를 사용하는 방법입니다. 최근 라즈베리파이 OS에서는 시스템 파이썬을 보호하기 위해 가상 환경을 만들어 사용하는 방식이 권장됩니다. 가상 환경은 프로젝트마다 따로 마련한 파이썬 작업 공간이라고 생각하면 됩니다.
처음에는 어렵게 느껴질 수 있으니 구조만 이해해도 괜찮습니다.
sudo apt install python3-venv python3-pip
python3 -m venv .venv
source .venv/bin/activate
pip install requests위 명령의 의미는 다음과 같습니다.
python3 -m venv .venv:.venv라는 가상 환경 만들기source .venv/bin/activate: 가상 환경 켜기pip install requests: 현재 가상 환경 안에requests설치하기
가상 환경이 켜지면 터미널 앞에 (.venv) 같은 표시가 붙을 수 있습니다.
설치한 라이브러리는 코드에서 import해서 사용합니다.
import requests
response = requests.get("https://example.com")
print(response.status_code)실습이 끝난 뒤 가상 환경을 끄려면 다음 명령을 입력합니다.
deactivate초보 단계에서는 모든 라이브러리 설치 방법을 외울 필요는 없습니다. 중요한 것은 흐름입니다.
필요한 기능 찾기 → 설치하기 → import하기 → 코드에서 사용하기오류 메시지는 적이 아니라 안내문이다
코드를 작성하다 보면 오류가 반드시 납니다. 초보자뿐 아니라 숙련자도 매일 오류를 만납니다. 중요한 것은 오류가 났다는 사실이 아니라, 오류 메시지를 읽는 습관입니다.
일부러 오류를 만들어 보겠습니다.
error_test.py 파일을 만듭니다.
nano error_test.py다음 코드를 입력합니다.
print("오류 연습 시작")
print(message)실행합니다.
python3 error_test.py아마 다음과 비슷한 메시지가 나올 것입니다.
Traceback (most recent call last):
File "/home/pi/python-practice/error_test.py", line 2, in <module>
print(message)
NameError: name 'message' is not defined처음 보면 무섭게 느껴지지만, 읽는 순서는 간단합니다.
어떤 파일에서 문제가 났는가?
몇 번째 줄에서 문제가 났는가?
어떤 종류의 오류인가?
오류 설명은 무엇인가?
위 메시지에서는 line 2가 중요합니다.
line 22번째 줄에서 문제가 났다는 뜻입니다.
그리고 마지막 줄을 보면 다음 내용이 있습니다.
NameError: name 'message' is not definedmessage라는 이름이 정의되지 않았다는 뜻입니다. 즉, 변수를 만들지 않고 사용했다는 말입니다.
수정하려면 변수를 먼저 만들면 됩니다.
message = "안녕하세요"
print("오류 연습 시작")
print(message)오류 메시지는 "망했다"는 뜻이 아닙니다. "여기를 확인하라"는 안내문입니다.
자주 만나는 오류들
초보자가 자주 만나는 오류는 몇 가지로 정리할 수 있습니다.
SyntaxError
문법이 틀렸을 때 발생합니다.
print("Hello"위 코드는 닫는 괄호 )가 없습니다. 이런 경우 SyntaxError가 날 수 있습니다.
확인할 것:
괄호를 닫았는가?
따옴표를 닫았는가?
콜론
:을 빠뜨리지 않았는가?
NameError
정의하지 않은 이름을 사용했을 때 발생합니다.
print(user_name)user_name 변수를 만든 적이 없다면 오류가 납니다.
확인할 것:
변수 이름을 먼저 만들었는가?
이름을 잘못 입력하지 않았는가?
대소문자가 일치하는가?
파이썬은 대소문자를 구분합니다.
name = "Pi"
print(Name) # name과 Name은 다릅니다IndentationError
들여쓰기가 잘못되었을 때 발생합니다.
if True:
print("실행")if 아래의 코드는 들여써야 합니다.
올바른 코드는 다음과 같습니다.
if True:
print("실행")확인할 것:
if,for,while,def다음 줄을 들여썼는가?들여쓰기 칸 수가 섞이지 않았는가?
탭과 스페이스를 불필요하게 섞지 않았는가?
ModuleNotFoundError
가져오려는 라이브러리가 설치되어 있지 않을 때 발생합니다.
import requestsrequests가 설치되어 있지 않으면 다음과 같은 오류가 날 수 있습니다.
ModuleNotFoundError: No module named 'requests'확인할 것:
라이브러리를 설치했는가?
가상 환경을 사용 중이라면, 그 환경 안에 설치했는가?
코드를 실행하는 터미널에서도 같은 가상 환경이 켜져 있는가?
오류를 해결할 때는 한 번에 많은 것을 바꾸지 않는 것이 좋습니다. 한 가지를 고치고 다시 실행해 봅니다. 그래야 무엇이 문제였는지 알 수 있습니다.
작은 자동화 예제 만들기
이제 지금까지 배운 내용을 모아 작은 자동화 프로그램을 만들어 보겠습니다.
목표는 간단합니다.
CPU 온도를 읽습니다.
5번 반복해서 확인합니다.
온도에 따라 메시지를 다르게 출력합니다.
2초마다 한 번씩 실행합니다.
temp_monitor.py 파일을 만듭니다.
nano temp_monitor.py다음 코드를 입력합니다.
import time
def read_cpu_temperature():
with open("/sys/class/thermal/thermal_zone0/temp", "r") as file:
text = file.read()
return int(text) / 1000
def show_status(temperature):
print("현재 CPU 온도:", temperature, "도")
if temperature >= 70:
print("상태: 주의가 필요합니다")
else:
print("상태: 정상 범위입니다")
for i in range(5):
print("측정", i + 1)
temp = read_cpu_temperature()
show_status(temp)
print("---")
time.sleep(2)
print("온도 확인을 마쳤습니다")실행합니다.
python3 temp_monitor.py이 예제에는 여러 요소가 들어 있습니다.
import time: 시간 기능 가져오기def: 함수로 코드 묶기for: 정해진 횟수만큼 반복하기if: 조건에 따라 다르게 실행하기변수: 읽은 온도 저장하기
time.sleep(2): 2초 기다리기
이제 라즈베리파이는 단순히 명령을 입력받는 컴퓨터가 아니라, 스스로 값을 확인하고 판단하는 작은 장치가 되었습니다.
코드를 작성할 때 좋은 습관
처음부터 긴 코드를 한 번에 작성하려고 하면 오류를 찾기 어렵습니다. 작은 단위로 나누어 작성하는 습관을 들이는 것이 좋습니다.
다음 순서를 추천합니다.
한두 줄을 작성합니다.
바로 실행합니다.
결과를 확인합니다.
문제가 없으면 다음 코드를 추가합니다.
오류가 나면 방금 추가한 부분부터 확인합니다.
파일 이름도 중요합니다. 의미 있는 이름을 사용하면 나중에 찾기 쉽습니다.
좋은 예:
cpu_temp.py
button_test.py
led_blink.py
camera_capture.py피하는 것이 좋은 예:
test.py
a.py
new.py
final_final.py코드 안에 메모를 남길 수도 있습니다. 파이썬에서는 # 뒤에 적은 내용은 실행되지 않습니다.
# CPU 온도를 읽어서 출력하는 예제입니다
temperature = 48.2
print(temperature)주석은 너무 많이 쓰기보다, 나중에 봤을 때 헷갈릴 부분에만 짧게 남기는 것이 좋습니다.
이번 장에서 익힌 흐름
이번 장에서는 파이썬으로 라즈베리파이를 제어하기 위한 기본 흐름을 익혔습니다.
핵심은 다음과 같습니다.
파이썬 파일은
.py확장자를 사용합니다.터미널에서는
python3 파일이름.py로 실행합니다.변수는 값을 저장하는 이름입니다.
조건문은 상황에 따라 다른 코드를 실행합니다.
반복문은 같은 일을 여러 번 실행합니다.
함수는 자주 쓰는 코드를 묶어 줍니다.
import는 필요한 기능을 가져오는 명령입니다.라이브러리를 설치하면 파이썬의 기능을 확장할 수 있습니다.
오류 메시지에서 파일 이름, 줄 번호, 오류 종류를 먼저 확인합니다.
라즈베리파이 프로젝트는 대부분 다음 흐름으로 구성됩니다.
입력값 읽기 → 조건 판단 → 동작 실행 → 반복다음 장에서는 이 흐름을 실제 전자회로와 연결합니다. GPIO 핀을 사용해 LED를 켜고 끄며, 라즈베리파이가 바깥세상과 어떻게 신호를 주고받는지 배워 보겠습니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.