Chapter 03: Hello, Pico! - 첫 번째 프로그램 실행¶
🎯 이 장에서 배우는 것¶
- [ ] Thonny에서 MicroPython 코드를 작성하고 실행할 수 있다
- [ ] print() 함수로 원하는 메시지를 출력할 수 있다
- [ ] 피코의 내장 LED를 켜고 끌 수 있다
- [ ] 간단한 LED 깜빡임 프로그램을 만들 수 있다
💡 왜 이걸 배우나요?¶
프로그래밍을 배울 때 가장 먼저 하는 일이 뭔지 아세요? 바로 "Hello, World!"를 화면에 출력하는 거예요. 1970년대부터 지금까지, 전 세계 모든 프로그래머가 이렇게 첫 걸음을 뗐답니다.
왜 하필 "Hello, World!"일까요?
- ✅ 코드가 제대로 작동하는지 가장 빠르게 확인할 수 있어요
- ✅ 복잡한 문법 없이 성공의 기쁨을 맛볼 수 있어요
- ✅ "내가 컴퓨터에게 명령했고, 컴퓨터가 응답했다!"는 첫 대화예요
그리고 피지컬 컴퓨팅에서는 한 단계 더 나아가요. 화면에 글자만 출력하는 게 아니라, 실제로 LED가 켜지는 걸 눈으로 확인하죠. 코드 한 줄로 전구가 켜지는 순간, "와, 내가 진짜 하드웨어를 제어하고 있구나!"라는 짜릿한 경험을 하게 될 거예요!
📚 핵심 개념¶
개념 1: print() 함수 - 컴퓨터에게 말 걸기¶
-
비유로 시작: print()는 마치 확성기와 같아요. 여러분이 하고 싶은 말을 컴퓨터 화면에 크게 출력해주죠.
-
정확한 정의: print()는 괄호 안의 내용을 화면(Shell)에 출력하는 파이썬 내장 함수입니다.
-
예시로 확인:
print("안녕하세요!") # 화면에 "안녕하세요!" 출력 print(123) # 숫자 123 출력 print(1 + 2) # 계산 결과 3 출력
쉽게 말하면: print()는 "이걸 화면에 보여줘!"라고 말하는 명령어예요.
개념 2: GPIO와 Pin - 피코의 손가락¶
-
비유로 시작: GPIO 핀은 마치 피코의 손가락이에요. 이 손가락으로 LED를 누르면(전기를 보내면) 불이 켜지고, 떼면 꺼지죠.
-
정확한 정의: GPIO(General Purpose Input/Output)는 전기 신호를 내보내거나(출력) 받아들이는(입력) 다용도 핀이에요. Pin 클래스는 이 핀을 제어하는 도구입니다.
-
예시로 확인:
쉽게 말하면: Pin은 피코가 외부 장치(LED, 센서 등)와 대화하는 통로예요.
개념 3: 내장 LED - 첫 번째 친구¶
-
비유로 시작: 피코에는 작은 초록색 LED가 이미 붙어 있어요. 마치 피코가 "나 여기 있어!"라고 신호를 보내는 눈과 같죠.
-
정확한 정의: Pico 2W에는 무선 칩에 연결된 내장 LED가 있어서, 별도 부품 없이도 바로 불을 켜볼 수 있습니다.
-
예시로 확인:
Pin("LED", Pin.OUT)으로 내장 LED를 제어할 수 있어요.
쉽게 말하면: 피코를 샀으면 LED도 하나 공짜! 바로 실습해볼 수 있어요.
🔨 따라하기¶
Step 1: Hello, Pico! 출력하기¶
목표: 화면에 첫 번째 메시지를 출력해요.
코드:
# === WHAT: 화면에 인사말 출력하기 ===
# 프로그래밍의 전통! 첫 프로그램은 항상 인사로 시작해요
# --- WHY: 왜 필요한지 ---
# 코드가 제대로 실행되는지 가장 빠르게 확인할 수 있어요
# HOW: 어떻게 동작하는지
print("Hello, Pico!") # 괄호 안의 문자열을 Shell에 출력
실행 방법: 1. Thonny에서 위 코드를 입력해요 2. 초록색 ▶️ 실행 버튼을 클릭해요 3. 아래 Shell 창을 확인해요!
실행 결과:
Hello, Pico!
여기서 잠깐! 🤔
큰따옴표(") 안에 있는 글자는 문자열(string)이라고 불러요. 컴퓨터에게 "이건 그냥 글자야, 명령어가 아니야"라고 알려주는 표시죠.
Step 2: 다양한 메시지 출력하기¶
목표: print()로 여러 가지를 출력해봐요.
코드:
# === WHAT: 다양한 내용 출력하기 ===
# 문자, 숫자, 계산 결과 모두 출력 가능해요!
# --- WHY: 왜 필요한지 ---
# 나중에 센서 값이나 상태를 확인할 때 print()를 많이 써요
# HOW: 어떻게 동작하는지
print("안녕하세요, 저는 피코예요!") # 한글도 OK
print("1 + 1 =", 1 + 1) # 여러 개를 쉼표로 연결
print("=" * 20) # 문자 반복 (구분선 만들기)
실행 결과:
안녕하세요, 저는 피코예요!
1 + 1 = 2
====================
여기서 잠깐! 🤔
print() 안에서 쉼표(,)로 여러 값을 연결하면 자동으로 띄어쓰기가 들어가요. 편리하죠?
Step 3: 내장 LED 켜기¶
목표: 드디어 하드웨어를 제어해요! LED를 켜봅시다.
코드:
# === WHAT: 피코 내장 LED 켜기 ===
# 코드 한 줄로 실제 불이 켜져요!
# --- WHY: 왜 필요한지 ---
# 피코가 제대로 연결됐는지 확인하고, 하드웨어 제어의 첫걸음!
# HOW: 어떻게 동작하는지
from machine import Pin # Pin 클래스 가져오기 (GPIO 제어용)
led = Pin("LED", Pin.OUT) # 내장 LED를 출력 모드로 설정
led.on() # LED 켜기!
print("LED가 켜졌어요! 피코를 확인해보세요 👀")
실행 방법: 1. 코드를 입력하고 ▶️ 실행 2. 피코 보드를 직접 봐주세요! 3. 작은 초록색 LED가 켜져 있나요? 🎉
실행 결과:
LED가 켜졌어요! 피코를 확인해보세요 👀
여기서 잠깐! 🤔
from machine import Pin은 "machine이라는 도구상자에서 Pin이라는 도구를 꺼내올게"라는 뜻이에요. MicroPython에서 하드웨어를 제어할 때 항상 필요해요.
Step 4: LED 끄기¶
목표: 켠 LED를 꺼봐요.
코드:
# === WHAT: LED 끄기 ===
# on()의 반대는 off()!
from machine import Pin
led = Pin("LED", Pin.OUT)
led.off() # LED 끄기
print("LED가 꺼졌어요!")
실행 결과:
LED가 꺼졌어요!
Step 5: LED 깜빡이기 (완성!)¶
목표: LED를 켰다 껐다 반복해서 깜빡이게 만들어요.
코드:
# === WHAT: LED 깜빡이기 ===
# 켜고 → 잠깐 기다리고 → 끄고 → 잠깐 기다리고... 반복!
# --- WHY: 왜 필요한지 ---
# 이게 바로 피지컬 컴퓨팅의 기본! 신호등, 비상등 모두 이 원리예요
# HOW: 어떻게 동작하는지
from machine import Pin # 핀 제어
import time # 시간 관련 기능 (대기)
led = Pin("LED", Pin.OUT) # LED 설정
# 5번 깜빡이기
for i in range(5): # 0, 1, 2, 3, 4 (총 5번)
led.on() # 켜기
print("💡 ON")
time.sleep(0.5) # 0.5초 대기
led.off() # 끄기
print("⚫ OFF")
time.sleep(0.5) # 0.5초 대기
print("깜빡이기 완료! 🎉")
실행 결과:
💡 ON
⚫ OFF
💡 ON
⚫ OFF
💡 ON
⚫ OFF
💡 ON
⚫ OFF
💡 ON
⚫ OFF
깜빡이기 완료! 🎉
여기서 잠깐! 🤔
time.sleep(0.5)는 "0.5초 동안 쉬어!"라는 명령이에요. 이게 없으면 LED가 너무 빨리 켜졌다 꺼져서 눈에 안 보여요.
📝 전체 코드¶
# === Hello, Pico! - LED 깜빡이기 완성본 ===
# 피지컬 컴퓨팅 첫 번째 프로그램
# 내장 LED를 5번 깜빡입니다
from machine import Pin # GPIO 핀 제어
import time # 시간 관련 함수
# LED 설정
led = Pin("LED", Pin.OUT) # 내장 LED를 출력 모드로
# 시작 메시지
print("=" * 30)
print("🚀 Hello, Pico!")
print("LED 깜빡이기를 시작합니다")
print("=" * 30)
# 5번 깜빡이기
for i in range(5):
led.on()
print(f"💡 {i+1}번째 ON")
time.sleep(0.5)
led.off()
print(f"⚫ {i+1}번째 OFF")
time.sleep(0.5)
# 종료 메시지
print("=" * 30)
print("✅ 완료! 첫 프로그램 성공!")
print("=" * 30)
⚠️ 자주 하는 실수¶
실수 1: 따옴표를 빼먹음¶
증상:
SyntaxError: invalid syntax
원인: 문자열을 따옴표로 감싸지 않았어요.
해결:
# ❌ 잘못된 코드
print(Hello, Pico!)
# ✅ 올바른 코드
print("Hello, Pico!")
실수 2: Pin 이름을 잘못 씀¶
증상:
ValueError: invalid pin
원인: 내장 LED의 이름은 정확히 "LED"여야 해요.
해결:
# ❌ 잘못된 코드
led = Pin("led", Pin.OUT) # 소문자
led = Pin("LED내장", Pin.OUT) # 이상한 이름
# ✅ 올바른 코드
led = Pin("LED", Pin.OUT) # 정확히 "LED"
실수 3: import를 안 함¶
증상:
NameError: name 'Pin' is not defined
원인: Pin을 사용하려면 먼저 불러와야(import) 해요.
해결:
# ❌ 잘못된 코드 (import 없음)
led = Pin("LED", Pin.OUT)
# ✅ 올바른 코드
from machine import Pin # 이 줄이 꼭 필요!
led = Pin("LED", Pin.OUT)
실수 4: sleep에 시간을 안 씀¶
증상: LED가 너무 빨리 깜빡여서 안 보임 (또는 에러)
원인: sleep() 함수에는 대기 시간(초)을 넣어야 해요.
해결:
# ❌ 잘못된 코드
time.sleep() # 시간이 없음!
# ✅ 올바른 코드
time.sleep(0.5) # 0.5초 대기
time.sleep(1) # 1초 대기
✅ 스스로 점검하기¶
-
print() 함수는 무엇을 하나요?
-
LED를 켜는 명령어와 끄는 명령어는 각각 무엇인가요?
-
time.sleep(2)는 몇 초를 기다리나요? -
왜
from machine import Pin을 코드 맨 위에 쓰나요?
정답 확인
1. 괄호 안의 내용을 화면(Shell)에 출력합니다. 2. `led.on()`으로 켜고, `led.off()`로 끕니다. 3. 2초를 기다립니다. (괄호 안의 숫자가 초 단위) 4. Pin 클래스를 사용하려면 먼저 machine 모듈에서 가져와야 하기 때문입니다. import 없이는 Pin이 뭔지 파이썬이 몰라요!🚀 더 해보기¶
도전 1: 나만의 인사말 출력하기¶
print()를 사용해서 자신만의 인사말을 3줄 이상 출력해보세요.
# 예시 시작점
print("=" * 30)
print("여기에 나만의 메시지!")
# ... 더 추가해보세요!
도전 2: 깜빡임 속도 바꾸기¶
time.sleep() 안의 숫자를 바꿔서 LED가 더 빠르게 또는 느리게 깜빡이게 해보세요.
- 빠르게:
time.sleep(0.1) - 느리게:
time.sleep(1.5)
어떤 속도가 가장 보기 좋은지 실험해보세요!
도전 3: SOS 신호 만들기 ⭐¶
모스 부호에서 SOS는 ··· --- ··· 입니다.
- 짧은 신호(·): LED 0.2초 켜기
- 긴 신호(-): LED 0.6초 켜기
- 신호 사이: 0.2초 끄기
힌트:
# S = 짧게 3번
for i in range(3):
led.on()
time.sleep(0.2) # 짧게
led.off()
time.sleep(0.2)
# O = 길게 3번 (직접 완성해보세요!)
# S = 짧게 3번 (위와 같음)
🔗 다음 장으로¶
축하합니다! 🎉
오늘 여러분은:
- ✅ 첫 MicroPython 코드를 작성하고 실행했어요
- ✅ print()로 화면에 메시지를 출력했어요
- ✅ 실제 LED를 코드로 제어했어요!
이게 바로 피지컬 컴퓨팅의 시작이에요. 코드가 화면에서 끝나는 게 아니라, 실제 세상에 영향을 주죠.
다음 장에서는 LED를 더 다양하게 제어해볼 거예요. 외부 LED를 연결하고, 여러 개의 LED를 동시에 제어하는 방법을 배웁니다. 나만의 LED 패턴을 만들어볼 준비 되셨나요? 💡✨