라즈베리 파이로 깜박이는 LED 만들기

라즈베리 파이 LED 특징 이미지

라즈베리 파이는 단순한 작은 컴퓨터 그 이상입니다. GPIO 핀을 통해 많은 작업을 수행할 수 있는 강력한 보드입니다. 여기서는 라즈베리 파이를 사용하여 깜박이는 LED를 만드는 방법을 보여줍니다.

목차

  • LED가 깜박이는 이유
  • 필요한 것들
  • 깜박이는 LED 만들기
  • 코드 작동 방식
  • 더 많은 LED를 깜박이게 해보자!
  • 자주 묻는 질문들

또한 읽어보세요: Windows를 통해 SSH로 라즈베리 파이를 제어하는 방법

LED가 깜박이는 이유

라즈베리 파이의 상단 부분을 살펴보면 약 40개의 금속 핀이 회로 기판에서 튀어나와 있는 것을 볼 수 있습니다. 라즈베리 제로가 있다면 헤더 핀을 납땜할 수 있는 원형 구멍이 있을 것입니다. 두 경우 모두 GPIO 핀(일반 목적 입력/출력)이라고 불립니다.

라즈베리 파이 GPIO 핀

각 GPIO 핀은 주어진 시간에 두 가지 모드 중 하나를 갖도록 설계되었습니다: HIGH와 LOW. 라즈베리 파이의 핀아웃 사양에 따르면, 3.3 V로 충전된 핀은 HIGH 또는 “논리 1”로 간주되며, 약 2.5 V 이하의 값은 LOW 또는 “논리 0”으로 간주됩니다. HIGH와 LOW 출력이 3.3 V에 기반한 보드는 “3.3v 논리”라고 합니다.

핀의 HIGH와 GND 핀 사이에 LED를 연결하면 기본적으로 완전한 회로를 만드는 것입니다. 전기가 흐르기 때문에 LED가 켜져야 합니다.

Lt Spice 회로도 LED 회로

때때로 너무 많은 전류가 흐르면 LED가 연기를 내며 터질 수 있습니다. 이를 방지하기 위해 저항기를 추가할 수 있습니다. 저항기가 애노드 또는 캐소드 쪽에 있든 상관없이 어느 쪽에든 전류가 감소해야 합니다.

또한 읽어보세요: 라즈베리 파이로 아두이노 프로그래밍하는 방법

GPIO 및 기타 핀

여기서 명확히 하자면, 모든 금속 핀이 GPIO로 간주되는 것은 아닙니다. 핀을 HIGH 또는 LOW로 프로그래밍할 수 있는 경우에만 GPIO입니다. 라즈베리 파이에는 전원(3.3v, 5v, GND) 및 EEPROM과 작업하기 위한 핀(ID_SD 및 ID_SC)도 있습니다.

이번에는 GND와 하나의 GPIO 핀을 제외한 다른 핀에 대해 생각할 필요가 없습니다.

GPIO 핀 프로그래밍하기

각 GPIO 핀에 무엇을 할지 어떻게 알려줄까요? 가장 기본적인 수준에서 기계어로 명령을 만들어야 합니다. 이는 초보자에게는 다소 어려울 것입니다.

대신 라즈베리 파이에서는 Python 또는 C++를 사용할 수 있으며, 이는 기계어로 컴파일됩니다.

이 특정 프로젝트에서는 사용하기 쉬운 Python을 사용합니다.

또한 읽어보세요: 라즈베리 파이 4에 Windows 11 설치하는 방법

필요한 것들

  • Pico가 아닌 모든 라즈베리 파이 모델(이 예제와 같은 라즈베리 파이 3 모델 B+가 바람직하지만 어떤 것이든 작동함), 라즈베리 파이 OS가 설치되어 있어야 합니다.
  • HDMI 모니터 및 케이블
  • 마우스 및 키보드
  • 라즈베리 파이에 전원을 공급할 전화 충전기
  • 작은 LED
  • 250Ω 저항기(이 값에 가까운 어떤 값도 가능)
  • 납땜이 필요 없는 브레드보드
  • x2 남성-여성 점퍼 와이어(헤더 모자가 있는 경우 남성-남성)

깜박이는 LED 만들기

한 번에 한 단계씩 진행하여 하나의 LED가 혼자 깜박이도록 만들어 보겠습니다.

  1. 터미널을 열고 sudo apt-get install python3-rpi.gpio를 입력하여 Python 3용 RPi.GPIO 모듈을 설치합니다.

터미널 Python GPIO 설치

  1. 텍스트 편집기를 열고 다음 코드를 입력합니다:
import RPI.GPIO as GPIO  
from time import sleep  
  
GPIO.setwarnings(False)  
GPIO.setmode(GPIO.BOARD)  
GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)  
  
while True:  
        GPIO.output(7, GPIO.HIGH)  
print("LED 켜짐")  
        sleep(1)  
        GPIO.output(7, GPIO.LOW)  
print("LED 꺼짐")  
        sleep(1)
  1. 어딘가에 저장합니다. 확장자는 .py여야 합니다. 제 라즈베리 파이에서는 찾기 쉽게 “rpi-blink.py”라고 이름을 지었습니다.

파일 탐색기 Rpi Blink 폴더

  1. 라즈베리 파이를 종료하고 모든 전원 공급 장치에서 분리합니다.
  2. 회로를 만들기 시작하려면 LED를 저항기와 연결하여 캐소드 또는 애노드 쪽에 저항기가 있도록 한 다음, 캐소드 쪽을 핀 7에, 애노드 쪽을 핀 9(GND)에 연결합니다.

Lt Spice 회로도 LED X1

팁: 핀 번호를 알아내려면 라즈베리 파이를 GPIO 핀이 오른쪽에 오도록 잡습니다. 왼쪽 상단 핀은 핀 1, 오른쪽 상단은 핀 2입니다. 핀 1 아래의 핀은 핀 3이고, 그 오른쪽은 핀 4이며, 계속해서 그렇게 됩니다.

  1. 다시 전원을 켜서 Python 스크립트를 실행할 수 있도록 합니다. 터미널을 열고 cd를 사용하여 Python 파일의 폴더로 이동합니다. 입력:
python3 rpi-blink.py

LED가 깜박이게 합니다.

터미널 Rpi Blink 실행 X1

대안: Thonny Python IDE가 있는 경우, “현재 스크립트 실행” 버튼을 클릭하여 IDE에서 직접 실행할 수 있습니다.

Thonny Python IDE 실행 버튼

  1. 중지하려면 터미널에서 Ctrl + C를 누릅니다. 그러나 Thonny Python IDE를 사용하는 경우 편집기를 닫기만 하면 됩니다.

라즈베리 파이 깜박이는 LED X1

또한 읽어보세요: 알아야 할 10가지 유용한 Python 원라이너

코드 작동 방식

작동하는 데 필요한 두 가지가 있습니다: 코드와 회로. 코드를 시작으로 세 부분으로 나누어 보겠습니다:

  1. 가져오기 명령
  2. 설정 명령
  3. 루프 명령

실제로 코드를 작은 함수로 생각하고 이를 그룹화하여 더 큰 함수를 만드는 것이 좋습니다.

가져오기 명령

Python은 일반적으로 GPIO 핀을 프로그래밍하는 것을 이렇게 쉽게 만들지 않습니다. 많은 일이 뒤에서 진행되고 있습니다. 좋은 소식은 이러한 성가신 것들을 처리하는 코드를 가져올 수 있다는 것입니다.

1번과 2번 줄을 살펴보세요:

import RPI.GPIO as GPIO  
from time import sleep

이들은 “Python 모듈”이라고 불리는 것에서 코드를 가져오는 두 줄입니다.

import RPI.GPIO as GPIO는 RPI.GPIO 모듈의 내용을 가져오고 GPIO 키워드를 사용하여 RPI.GPIO와 관련된 함수를 호출할 수 있게 해줍니다.

반면에 from time import sleep는 Python의 내장 시간 모듈에서 sleep() 함수를 가져옵니다. 이는 다음 코드 줄을 주어진 초 수만큼 지연시킬 수 있게 해줍니다.

설정 명령

일부 코드는 “설정”되거나 정의되어야 합니다. 이는 다른 코드에서 복잡한 논리를 수행하는 데 사용됩니다. 이를 설정 명령이라고 부르겠습니다.

가져오기 명령과 달리 설정 명령은 외부 모듈에서 코드를 “가져오지“ 않습니다. 이미 가져온 모듈에서 가져옵니다.

예를 들어, GPIO.setwarnings(False)는 이전에 GPIO로 정의된 RPI.GPIO 모듈에서 .setwarnings() 함수를 가져옵니다. 이 함수는 코드를 실행할 때 트리거 경고를 중지합니다. 기본적으로 True로 설정되어 있습니다.

다른 두 가지를 설명하기 위해 GPIO.setmode(GPIO.BOARD)를 계속하겠습니다. 이는 RPI.GPIO에 사용할 핀아웃 종류를 알려줍니다. 두 가지 유형이 있습니다: BOARD와 BCM. BOARD 핀아웃은 핀 번호를 기준으로 핀을 선택할 수 있게 해줍니다. 반면 BCM 핀아웃은 Broadcom SOC 채널 지정을 기준으로 합니다. 간단히 말해, BOARD는 어떤 라즈베리 파이 모델을 사용하든 항상 동일하기 때문에 사용하기 더 쉽습니다. 반면 BCM은 모델마다 다를 수 있습니다.

마지막으로 GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)가 있습니다. 이는 세 가지를 요청하는 .setup() 함수를 사용합니다: 핀 번호, 지정 및 초기 값. 여기서 사용하고 있는 핀 번호는 7번 핀입니다. 이를 출력 핀으로 설정하고 LOW로 시작하도록 해야 합니다. 이 없이는 라즈베리 파이가 7번 핀으로 무엇을 해야 할지 알 수 없습니다.

루프 명령

이 부분이 멋진 부분입니다. 루프 명령은 라즈베리 파이에게 작업을 수행하도록 지시할 수 있게 해줍니다. 우리는 while True:로 이 루프를 시작하며, 이는 다음 코드 줄을 영원히 반복합니다.

루프에는 세 가지 함수가 있습니다: GPIO.output(), print(), 및 sleep().

  • GPIO.output()은 출력 핀을 가져와 HIGH 또는 LOW로 설정합니다. 라즈베리 파이에서 사용할 핀을 변경하고 싶다면 7을 원하는 핀 번호로 변경해야 합니다.
  • print()는 콘솔에 무언가를 출력합니다. 문자열, 숫자 또는 이전 두 가지를 포함하는 변수를 입력받습니다.
  • sleep()은 프로그램 전체를 특정 초 수만큼 일시 중지합니다. 1보다 작은 숫자를 사용하여 1초 미만으로 일시 중지할 수 있습니다.

회로

이제 코드가 어떻게 작동하는지 알았으니 회로를 살펴보겠습니다. 코드는 핀 7을 GND에 연결하여 회로를 만듭니다. 핀 7이 HIGH일 때 3.3V가 저항기와 LED를 통과하여 GND로 들어갑니다. 이것이 완전한 회로가 되며 LED가 켜지는 이유입니다.

Lt Spice 회로도 라즈베리 파이 핀 7 켜짐 및 꺼짐

하지만 핀 7이 LOW일 때는 어떻게 될까요? 3.3V가 약 0V로 떨어집니다. 이렇게 되면 전기가 LED를 통과하지 않으므로 LED가 켜지지 않습니다. 핀 7을 스위치처럼 생각할 수 있으며, 회로를 켜거나 끌 수 있습니다.

더 많은 LED를 깜박이게 해보자!

이제 작동 원리를 알았으니, 코드를 조금 수정하여 두 개의 LED가 깜박이도록 만들어 보겠습니다.

이를 위해서는 색상에 관계없이 LED 두 개와 250Ω 저항기 두 개만 추가하면 됩니다.

  1. 코드 편집기를 다시 열고 다음 코드를 붙여넣습니다:
import RPI.GPIO as GPIO  
from time import sleep  
  
GPIO.setwarnings(False)  
GPIO.setmode(GPIO.BOARD)  
GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)  
GPIO.setup(12, GPIO.OUT, initial=GPIO.HIGH)  
GPIO.setup(37, GPIO.OUT, initial=GPIO.LOW)  
  
while True:  
        GPIO.output(7, GPIO.HIGH)  
        GPIO.output(12, GPIO.LOW)  
print("LED 켜짐 @ 핀 7")  
print("LED 꺼짐 @ 핀 12")  
sleep(1)  
        GPIO.output(7, GPIO.LOW)  
        GPIO.output(12, GPIO.HIGH)  
print("LED 꺼짐 @ 핀 7")  
print("LED 켜짐 @ 핀 12")  
sleep(1)  
if x == 1:  
                GPIO.output(37, GPIO.HIGH)  
print("LED 켜짐 @ 핀 37")  
                x = 0  
elif x == 0:  
                GPIO.output(37, GPIO.LOW)  
print("LED 꺼짐 @ 핀 37")  
                x = 1  
else:  
print("논리 오류")  
sleep(1)
  1. 저장한 후 라즈베리 파이를 종료합니다.
  2. 회로를 연결하려면 각 LED마다 저항기를 직렬로 연결한 후, 캐소드 쪽을 라즈베리 파이에 연결합니다. 핀 7, 핀 12, 핀 37 각각에 대해 하나씩 있어야 합니다. 애노드 쪽은 GND에 연결해야 합니다. 이 핀들 각각은 옆에 GND 핀이 있습니다. 핀 9, 20, 39가 해당 핀입니다.

Lt Spice 회로도 LED X3

팁: 남성-여성 점퍼 와이어가 부족한 경우, 남성-남성과 여성-여성 점퍼 와이어를 연결하여 더 긴 남성-여성 점퍼 와이어를 만들 수 있습니다.

점퍼 핀

  1. 완료되면 라즈베리 파이를 켜고 6단계를 반복하여 Python 스크립트를 실행합니다.

라즈베리 파이 깜박이는 LED X3

또한 읽어보세요: 기본 Linux 시스템 관리 및 네트워킹 작업에 Python 활용하는 방법

자주 묻는 질문들

스크립트를 중지할 때 LED가 계속 켜져 있는 이유는 무엇인가요?

라즈베리 파이가 Python 스크립트를 읽을 때, 명령을 실행하기 전에 줄을 읽습니다. 아마도 GPIO.output(7, GPIO.HIGH) 줄을 읽은 직후에 중지했기 때문에 핀을 LOW로 설정할 수 없었습니다. 그대로 두어도 괜찮습니다. 다음에 재부팅할 때 LOW로 돌아갑니다. 또는 핀을 LOW로 설정하는 다른 Python 스크립트를 만들어 실행할 수 있습니다.

LED를 올바른 핀에 놓았지만 전혀 켜지지 않습니다. 왜 그런가요?

두 가지 가능한 이유가 있습니다: LED가 고장났거나 캐소드를 반대쪽에 놓았기 때문입니다. 먼저 LED의 핀을 뒤집어 보세요.

LED를 반대 방향으로 놓는 것이 안전한가요?

네. 반대 방향으로 놓아도 괜찮으며, 전류가 통과하지 않을 뿐입니다. 이는 다이오드, 심지어 을 방출하는 다이오드의 특별한 특성입니다. 한쪽에서는 전기가 통과하고 다른 쪽에서는 통과하지 않도록 허용합니다.

라즈베리 파이가 켜져 있는 동안 LED를 재배치하는 것이 안전한가요?

LED를 반대 방향으로 돌리는 것이라면 괜찮고, 해가 없습니다. 그러나 LED를 여러 곳에 놓으려면 5v 핀과 GPIO 핀을 단락시킬 가능성이 있습니다. 이는 보드를 손상시킬 것입니다.