콘텐츠로 이동

Chapter 03: Hello, Pico! - 첫 번째 프로그램 실행

🎯 이 장에서 배우는 것

  • [ ] Thonny에서 MicroPython 코드를 작성하고 실행할 수 있다
  • [ ] print() 함수로 원하는 메시지를 출력할 수 있다
  • [ ] 피코의 내장 LED를 켜고 끌 수 있다
  • [ ] 간단한 LED 깜빡임 프로그램을 만들 수 있다

💡 왜 이걸 배우나요?

프로그래밍을 배울 때 가장 먼저 하는 일이 뭔지 아세요? 바로 "Hello, World!"를 화면에 출력하는 거예요. 1970년대부터 지금까지, 전 세계 모든 프로그래머가 이렇게 첫 걸음을 뗐답니다.

왜 하필 "Hello, World!"일까요?

  • ✅ 코드가 제대로 작동하는지 가장 빠르게 확인할 수 있어요
  • ✅ 복잡한 문법 없이 성공의 기쁨을 맛볼 수 있어요
  • ✅ "내가 컴퓨터에게 명령했고, 컴퓨터가 응답했다!"는 첫 대화예요

그리고 피지컬 컴퓨팅에서는 한 단계 더 나아가요. 화면에 글자만 출력하는 게 아니라, 실제로 LED가 켜지는 걸 눈으로 확인하죠. 코드 한 줄로 전구가 켜지는 순간, "와, 내가 진짜 하드웨어를 제어하고 있구나!"라는 짜릿한 경험을 하게 될 거예요!


📚 핵심 개념

개념 1: print() 함수 - 컴퓨터에게 말 걸기

  1. 비유로 시작: print()는 마치 확성기와 같아요. 여러분이 하고 싶은 말을 컴퓨터 화면에 크게 출력해주죠.

  2. 정확한 정의: print()는 괄호 안의 내용을 화면(Shell)에 출력하는 파이썬 내장 함수입니다.

  3. 예시로 확인:

    print("안녕하세요!")  # 화면에 "안녕하세요!" 출력
    print(123)           # 숫자 123 출력
    print(1 + 2)         # 계산 결과 3 출력
    

쉽게 말하면: print()는 "이걸 화면에 보여줘!"라고 말하는 명령어예요.


개념 2: GPIO와 Pin - 피코의 손가락

  1. 비유로 시작: GPIO 핀은 마치 피코의 손가락이에요. 이 손가락으로 LED를 누르면(전기를 보내면) 불이 켜지고, 떼면 꺼지죠.

  2. 정확한 정의: GPIO(General Purpose Input/Output)는 전기 신호를 내보내거나(출력) 받아들이는(입력) 다용도 핀이에요. Pin 클래스는 이 핀을 제어하는 도구입니다.

  3. 예시로 확인:

flowchart LR A[🧠 피코 코드] --> B[📍 GPIO 핀] B --> C[💡 LED] style A fill:#e3f2fd,stroke:#1976d2 style B fill:#fff3e0,stroke:#f57c00 style C fill:#e8f5e9,stroke:#388e3c

쉽게 말하면: Pin은 피코가 외부 장치(LED, 센서 등)와 대화하는 통로예요.


개념 3: 내장 LED - 첫 번째 친구

  1. 비유로 시작: 피코에는 작은 초록색 LED가 이미 붙어 있어요. 마치 피코가 "나 여기 있어!"라고 신호를 보내는 과 같죠.

  2. 정확한 정의: Pico 2W에는 무선 칩에 연결된 내장 LED가 있어서, 별도 부품 없이도 바로 불을 켜볼 수 있습니다.

  3. 예시로 확인: 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가 켜졌어요! 피코를 확인해보세요 👀
+ 피코의 초록색 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가 꺼졌어요!
+ 피코의 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
깜빡이기 완료! 🎉
+ LED가 5번 깜빡임!

여기서 잠깐! 🤔

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초 대기


✅ 스스로 점검하기

  1. print() 함수는 무엇을 하나요?

  2. LED를 켜는 명령어와 끄는 명령어는 각각 무엇인가요?

  3. time.sleep(2)는 몇 초를 기다리나요?

  4. 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 패턴을 만들어볼 준비 되셨나요? 💡✨