สวิตช์ปุ่มกดเป็นอุปกรณ์อินพุตที่เรียบง่าย แต่มีประสิทธิภาพมักใช้ในโครงการเช่นเริ่มต้นหรือหยุดกระบวนการควบคุม LED หรือการเรียกเหตุการณ์ บทช่วยสอนนี้จะนำคุณผ่านการเชื่อมต่อสวิตช์ปุ่มกดกับ Raspberry Pi ตั้งค่าการเดินสายและเขียนสคริปต์ Python เพื่อตรวจจับการกดปุ่ม
สิ่งที่คุณต้องการ
- Raspberry Pi (รุ่นใด ๆ ที่มีการสนับสนุน GPIO เช่น PI 3, PI 4)
- สวิตช์ปุ่มกด
- เครื่องหั่นขนมปังและสายจัมเปอร์
- ตัวต้านทาน (10kΩสำหรับการดึงลง)
- ติดตั้ง Python บนราสเบอร์รี่ pi ของคุณ
- ห้องสมุด GPIO สำหรับการควบคุมหมุด GPIO ของ Raspberry Pi
ขั้นตอนที่ 1: เดินสายปุ่มกดไปยัง Raspberry Pi
สวิตช์ปุ่มกดทำงานโดยการเชื่อมต่อพิน GPIO กับสถานะสูง (3.3V) เมื่อกดหรือดึงลงไปต่ำ (0V) เมื่อไม่ได้กด เราจะใช้ตัวต้านทานแบบดึงลงเพื่อให้แน่ใจว่าพิน GPIO อ่านต่ำเมื่อปุ่มไม่ได้กด
เดินสายปุ่มกด
ปุ่มกดปุ่ม | Raspberry Pi GPIO PIN |
---|---|
หนึ่งพิน | GPIO17 (พิน 11) |
พินอื่น ๆ | พื้นดิน (พิน 6) |
หนึ่งพิน | ตัวต้านทาน10kΩถึงกราวด์ |
นี่คือการตั้งค่าการเดินสาย:
- เชื่อมต่อหนึ่งขั้วของปุ่มกดเข้ากับ GPIO17 (พิน 11)
- เชื่อมต่อเทอร์มินัลอื่น ๆ ของปุ่มกดเข้ากับ พื้น (พิน 6)
- เชื่อมต่อตัวต้านทาน10kΩระหว่าง GPIO17 และ พื้น ทำหน้าที่เป็นตัวต้านทานแบบดึงลง
สิ่งนี้ทำให้มั่นใจได้ว่าเมื่อกดปุ่ม GPIO17 จะอ่านสูง (3.3V) และเมื่อไม่ได้กด GPIO17 จะถูกดึงลงต่ำ (0V) โดยตัวต้านทาน
ขั้นตอนที่ 2: เปิดใช้งานพิน GPIO ใน Python
-
ก่อนอื่นให้อัปเดตรายการแพ็คเกจ Raspberry Pi ของคุณ:
sudo apt update sudo apt upgrade -y
-
ติดตั้งไลบรารี Python GPIO ที่ต้องการ (หากยังไม่ได้ติดตั้ง):
sudo apt install python3-rpi.gpio
-
นำเข้าไลบรารีในสคริปต์ Python ของคุณ:
import RPi.GPIO as GPIO import time
ขั้นตอนที่ 3: การเขียนรหัส Python
ทีนี้มาเขียนสคริปต์ Python เพื่อตรวจจับเมื่อกดปุ่มและดำเนินการตามนั้น
ตัวอย่างรหัส Python
import RPi.GPIO as GPIO
import time
# Set up the GPIO mode and pin
GPIO.setmode(GPIO.BCM) # Use BCM numbering
button_pin = 17 # GPIO pin connected to the button
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Set up pin with pull-down resistor
# Function to detect button press
def button_callback(channel):
print("Button was pressed!")
# Set up an event on the button pin
GPIO.add_event_detect(button_pin, GPIO.RISING, callback=button_callback, bouncetime=300)
try:
print("Press the button...")
while True:
# Keep the program running to wait for button press
time.sleep(0.1)
except KeyboardInterrupt:
print("Program exited")
finally:
GPIO.cleanup() # Clean up GPIO to ensure a clean exit
รหัสคำอธิบาย:
- gpio.setMode (gpio.bcm): ตั้งค่าหมายเลขพิน GPIO เป็นโหมด BCM (Broadcom)
- gpio.setup (button_pin, gpio.in, pull_up_down = gpio.pud_down): กำหนดค่าพินปุ่มเป็นอินพุตที่มีตัวต้านทานแบบดึงลงซึ่งหมายความว่ามันจะอ่านต่ำเมื่อไม่ได้กด
-
gpio.add_event_detect (): ตรวจจับขอบที่เพิ่มขึ้น (กดปุ่ม) ของพิน gpio และทริกเกอร์ฟังก์ชันการโทรกลับ
button_callback
เมื่อกดปุ่ม - Time.sleep (0.1): ให้สคริปต์ทำงานเพื่อให้สามารถรอการกดปุ่ม
- gpio.cleanup (): ทำความสะอาดการตั้งค่า GPIO เมื่อออกจากสคริปต์
ขั้นตอนที่ 4: ทดสอบปุ่ม
-
เรียกใช้สคริปต์ Python ของคุณ:
python3 button.py
-
กดปุ่มกดและสังเกตข้อความ“ กดปุ่ม!” ในเทอร์มินัล
ขั้นตอนที่ 5: แอปพลิเคชัน
นี่คือแนวคิดบางประการสำหรับการใช้ปุ่มกดในโครงการของคุณ:
- ควบคุม LED: ใช้ปุ่มกดเพื่อสลับการเปิดและปิด LED
- เรียกเหตุการณ์: เริ่มต้นหรือหยุดกระบวนการ (เช่นเริ่มมอเตอร์เปิดพัดลมหรือเริ่มต้นสคริปต์)
- ออดฉลาด: ใช้ปุ่มเป็นออดเพื่อส่งการแจ้งเตือนไปยังโทรศัพท์ของคุณ
- อินพุตผู้ใช้: รับข้อมูลผู้ใช้อย่างง่ายสำหรับโครงการของคุณ (เช่นคำตอบ "ใช่/ไม่ใช่")
การแก้ไขปัญหา
-
ไม่พบปุ่ม:
- ตรวจสอบให้แน่ใจว่าปุ่มมีสายอย่างถูกต้องด้วยตัวต้านทานแบบดึงลง
- ตรวจสอบการตั้งค่าพิน GPIO ของคุณอีกครั้งในรหัส
-
ข้อผิดพลาด GPIO:
- ตรวจสอบให้แน่ใจว่ามีการติดตั้งไลบรารี GPIO อย่างถูกต้องและหมายเลข PIN ในสคริปต์ของคุณถูกต้อง
-
ปุ่มตีกลับ:
- หากคุณสังเกตเห็นการกดปุ่มหลายครั้งคุณสามารถเพิ่มเวลา debounce (
bouncetime=300
ในสคริปต์) เพื่อหลีกเลี่ยงการตรวจจับที่ผิดพลาด
- หากคุณสังเกตเห็นการกดปุ่มหลายครั้งคุณสามารถเพิ่มเวลา debounce (
บทสรุป
การใช้สวิตช์ปุ่มกดกับ Raspberry Pi เป็นวิธีที่ง่ายในการเพิ่มฟังก์ชั่นอินพุตให้กับโครงการของคุณ ไม่ว่าจะเป็นการสลับไฟ LED การเรียกเหตุการณ์หรือการโต้ตอบกับฮาร์ดแวร์อื่น ๆ การตั้งค่าง่าย ๆ นี้สามารถเป็นรากฐานสำหรับแอปพลิเคชันที่น่าสนใจมากมาย ทดลองกับหมุด GPIO ที่แตกต่างกันและการตั้งค่า debounce เพื่อให้เหมาะกับความต้องการของคุณ!