Raspberry Pi LED Nhấp Nháy Không Có Delay

Hãy tưởng tượng rằng Raspberry Pi cần thực hiện hai tác vụ: nhấp nháy LED và giám sát trạng thái của một nút nhấn có thể được nhấn bất kỳ lúc nào. Nếu chúng ta sử dụng hàm time.sleep() (như đã thảo luận trong Raspberry Pi - LED), Raspberry Pi có thể không phát hiện được một số lần nhấn nút. Nói cách khác, Raspberry Pi không thể hoàn toàn thực hiện tác vụ thứ hai.

Hướng dẫn này sẽ dạy bạn cách Raspberry Pi có thể nhấp nháy LED và giám sát trạng thái nút nhấn mà không bỏ lỡ bất kỳ sự kiện nhấn nào.

Chúng ta sẽ xem xét ba ví dụ và so sánh sự khác biệt giữa chúng:

Phương pháp này không chỉ giới hạn ở việc nhấp nháy LED và kiểm tra trạng thái nút nhấn. Nó cho phép Raspberry Pi thực hiện nhiều tác vụ đồng thời mà không can thiệp lẫn nhau.

Phần cứng cần chuẩn bị

1×Raspberry Pi 5
1×LED Kit
1×LED (red)
1×LED Module
1×điện trở 220 ohm
1×Nút nhấn gắn breadboard với nắp
1×Bộ kit nút nhấn gắn breadboard
1×Nút nhấn gắn panel
1×mô-đun nút nhấn
1×breadboard (bo mạch thí nghiệm)
1×Dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi
1×(Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit
1×(Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về LED và Button

Nếu bạn chưa quen với LED và button (bao gồm pinout, chức năng và lập trình), các hướng dẫn sau có thể giúp bạn:

Sơ Đồ Kết Nối

sơ đồ kết nối LED Raspberry Pi

This image is created using Fritzing. Click to enlarge image

Code Raspberry Pi - Có Delay

Các Bước Thực Hiện

  • Đảm bảo bạn đã cài đặt Raspbian hoặc hệ điều hành tương thích khác với Raspberry Pi trên Pi của mình.
  • Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng cục bộ với PC của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối internet nếu bạn cần cài đặt một số thư viện.
  • Nếu đây là lần đầu tiên bạn sử dụng Raspberry Pi, hãy xem Raspberry Pi - Cài Đặt Phần Mềm
  • Kết nối PC của bạn với Raspberry Pi qua SSH sử dụng SSH client tích hợp sẵn trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC với Raspberry Pi qua SSH.
  • Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, hãy cài đặt bằng lệnh sau:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Tạo một file script Python led_blink_with_delay.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/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()
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 led_blink_with_delay.py
  • Nhấn nút bốn lần.
  • Kiểm tra LED; nó sẽ thay đổi giữa trạng thái bật và tắt mỗi giây.
  • Xem kết quả đầu ra trong Terminal.
PuTTY - Raspberry Pi
1 0
  • Trên terminal, một số lần nhấn không được ghi lại. Điều này là do Raspberry Pi không thể làm gì trong thời gian delay, do đó nó không thể phát hiện sự kiện nhấn.

Script chạy trong vòng lặp vô hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.

Code Raspberry Pi - Không Có Delay

Các Bước Thực Hiện

  • Tạo một file script Python led_blink_without_delay.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/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()
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 led_blink_without_delay.py
  • Nhấn nút 4 lần.
  • Kiểm tra LED, nó sẽ thay đổi giữa trạng thái BẬT và TẮT mỗi giây.
  • Kiểm tra kết quả đầu ra trong Terminal.
PuTTY - Raspberry Pi
1 0 1 0 1 0 1 0
  • Tất cả các sự kiện nhấn đều được nhận diện trong khi LED đang nhấp nháy.

Script chạy trong vòng lặp vô hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.

Giải Thích Code

Hãy xem giải thích từng dòng code có trong phần comments của source code!

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Khả Năng Mở Rộng

Phương pháp này cho phép Raspberry Pi thực hiện nhiều tác vụ đồng thời mà không can thiệp lẫn nhau. Ví dụ, gửi request lên Internet và chờ phản hồi, đồng thời nhấp nháy một số đèn LED báo hiệu và kiểm tra nút hủy.