라즈베리 파이 LED 지연 없이 깜박임

라즈베리 파이가 두 가지 작업을 수행해야 한다고 상상해 보자: LED를 깜빡이게 하는 것과 언제든지 누를 수 있는 버튼의 상태를 모니터링하는 것. 이전 튜토리얼에서 논의된 time.sleep() 함수를 활용하면 라즈베리 파이가 일부 버튼 누르기를 감지하지 못할 수 있다. 즉, 라즈베리 파이는 두 번째 작업을 완전히 수행할 수 없다.

이 자습서는 Raspberry Pi가 LED를 깜빡이게 하고 버튼의 상태를 누락 없이 모니터링하는 방법을 안내합니다.

세 가지 예를 검토하고 그들 간의 차이점을 비교하겠습니다.

이 방법은 LED 깜박임과 버튼 상태 확인에만 국한되지 않습니다. 이는 라즈베리 파이가 서로 간섭하지 않고 여러 작업을 동시에 수행할 수 있도록 합니다.

Hardware Preparation

1×Raspberry Pi 4 Model B Amazon
1×LED Kit with resistor Amazon
1×LED (red) Amazon
1×220 ohm resistor Amazon
1×Breadboard-mount Button with Cap 쿠팡 | Amazon
1×Breadboard-mount Button Kit 쿠팡 | Amazon
1×Panel-mount Push Button Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(추천) Screw Terminal Block Shield for Raspberry Pi 쿠팡 | Amazon
1×(추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B Amazon
1×(추천) Plastic Case and Cooling Fan for Raspberry Pi 4B Amazon
1×(추천) HDMI Touch Screen Monitor for Raspberry Pi Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

LED 및 버튼에 관하여

LED와 버튼(핀아웃, 기능, 프로그래밍 포함)에 익숙하지 않다면, 다음 튜토리얼이 안내를 제공할 수 있습니다:

Wiring Diagram

라즈베리 파이 LED 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:

Raspberry Pi Screw Terminal Block Shield

Raspberry Pi 코드 - 지연 포함

Detailed Instructions

  • Raspberry Pi에 Raspbian 또는 기타 Raspberry Pi 호환 운영 체제가 설치되어 있는지 확인하십시오.
  • Raspberry Pi가 PC와 동일한 로컬 네트워크에 연결되어 있는지 확인하십시오.
  • 라이브러리를 설치해야 하는 경우 Raspberry Pi가 인터넷에 연결되어 있는지 확인하십시오.
  • Raspberry Pi를 처음 사용하는 경우 Raspberry Pi 설정 방법을 참조하세요.
  • Linux 및 macOS의 내장 SSH 클라이언트 또는 Windows의 PuTTY를 사용하여 SSH를 통해 PC를 Raspberry Pi에 연결하십시오. SSH를 통해 PC를 Raspberry Pi에 연결하는 방법은 여기를 참조하세요.
  • RPi.GPIO 라이브러리가 설치되어 있는지 확인하십시오. 그렇지 않은 경우 다음 명령어를 사용하여 설치하십시오:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Python 스크립트 파일 led_blink_with_delay.py를 생성하고 다음 코드를 추가하십시오:
# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-led-blink-without-delay import RPi.GPIO as GPIO import time # Constants won't change: LED_PIN = 18 # the number of the LED pin BUTTON_PIN = 16 # the number of the button pin BLINK_INTERVAL = 1 # interval at which to blink LED (seconds) # Variables will change: led_state = False # led_state used to set the LED prev_button_state = False # will store last time button was updated GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) try: while True: # if the LED is off turn it on and vice-versa: led_state = not led_state # set the LED with the led_state of the variable: GPIO.output(LED_PIN, led_state) time.sleep(BLINK_INTERVAL) # If button is pressed during this time, Raspberry Pi CANNOT detect button_state = GPIO.input(BUTTON_PIN) if button_state != prev_button_state: # print out the state of the button: print(button_state) # save the last state of the button prev_button_state = button_state # DO OTHER WORKS HERE except KeyboardInterrupt: GPIO.cleanup()
  • 파일을 저장하고 터미널에서 다음 명령어를 실행하여 Python 스크립트를 실행하십시오.
python3 led_blink_with_delay.py
  • 버튼을 네 번 눌러주세요.
  • LED를 확인하세요. 매초 켜짐과 꺼짐을 번갈아가며 나타날 것입니다.
  • 터미널의 출력을 확인하세요.
PuTTY - Raspberry Pi
1 0
  • 터미널에서 일부 누름 시간이 기록되지 않았습니다. 이는 Raspberry Pi가 지연 시간 동안 아무것도 할 수 없기 때문에 누름 이벤트를 감지할 수 없기 때문입니다.

스크립트는 터미널에서 Ctrl + C를 누를 때까지 무한 루프로 계속 실행됩니다.

Raspberry Pi 코드 - 지연 없음

Detailed Instructions

  • Python 스크립트 파일 led_blink_without_delay.py를 생성하고 다음 코드를 추가하세요:
# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/tutorials/raspberry-pi/raspberry-pi-led-blink-without-delay import RPi.GPIO as GPIO import time # Constants won't change LED_PIN = 18 # The GPIO number of the LED pin BUTTON_PIN = 16 # The GPIO number of the button pin BLINK_INTERVAL_MS = 500 # Interval at which to blink LED (milliseconds) - 500 milliseconds # Variables will change led_state = GPIO.LOW # led_state used to set the LED prev_button_state = GPIO.LOW # Will store the last time button was updated # Function to get the current time in milliseconds def millis(): return time.perf_counter_ns() // 1000000 # Get the initial time in milliseconds previousTime = millis() # Setup GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) try: while True: # Check if it's time to blink the LED currentTime = millis() if currentTime - previousTime >= BLINK_INTERVAL_MS: # If the LED is off, turn it on, and vice-versa led_state = not led_state # Set the LED with the led_state variable GPIO.output(LED_PIN, led_state) # Save the last time you blinked the LED previousTime = currentTime # Check button state's change button_state = GPIO.input(BUTTON_PIN) if button_state != prev_button_state: # Print out the state of the button print(button_state) # Save the last state of the button prev_button_state = button_state # DO OTHER WORKS HERE (IF NEEDED) except KeyboardInterrupt: # Clean up GPIO on keyboard interrupt GPIO.cleanup()
  • 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하십시오.
python3 led_blink_without_delay.py
  • 버튼을 4번 누르세요.
  • LED가 매초 켜짐과 꺼짐을 번갈아가며 확인하세요.
  • 터미널에서 출력을 확인하세요.
PuTTY - Raspberry Pi
1 0 1 0 1 0 1 0
  • LED가 깜빡이는 동안 모든 눌린 이벤트가 식별되었습니다.

이 스크립트는 터미널에서 Ctrl + C를 누를 때까지 무한 루프 상태로 계속 실행됩니다.

코드 설명

소스 코드의 주석에 포함된 줄별 설명을 확인하세요!

Video Tutorial

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

확장성

이 방법은 Raspberry Pi가 서로 간섭하지 않고 동시에 여러 작업을 수행할 수 있도록 합니다. 예를 들어, 인터넷에 요청을 보내고 응답을 기다리는 동안 LED 표시등을 깜빡이고 취소 버튼을 확인할 수 있습니다.