Approved Reseller of Raspberry Pi

Raspberry Pi GPIO — เริ่มเขียนโค้ดควบคุม LED และปุ่มกดด้วย Python 🧠💡

Raspberry Pi GPIO LED Python - เริ่มต้นควบคุม LED

Raspberry Pi GPIO LED Python

เริ่มต้นควบคุม LED ด้วย Python และ GPIO

💡🍓🐍

GPIO (General Purpose Input/Output) คือขา Pin ของ Raspberry Pi ที่สามารถใช้ควบคุมอุปกรณ์อิเล็กทรอนิกส์ภายนอกได้ เช่น LED, ปุ่มกด, เซ็นเซอร์ต่างๆ บทความนี้จะสอนวิธีการควบคุม LED ด้วย Python ตั้งแต่พื้นฐาน การต่อวงจร การเขียนโค้ด ไปจนถึงโปรเจคขั้นสูง เหมาะสำหรับผู้เริ่มต้นที่อยากเรียนรู้ IoT และ Physical Computing

GPIO คืออะไร?

GPIO (General Purpose Input/Output) คือขา Pin บน Raspberry Pi ที่สามารถตั้งค่าให้เป็น Input หรือ Output ได้ตามต้องการ ใช้สำหรับเชื่อมต่อและควบคุมอุปกรณ์อิเล็กทรอนิกส์ภายนอก

หลักการทำงาน GPIO:

  • 🔌 Output Mode - ส่งสัญญาณ HIGH (3.3V) หรือ LOW (0V) ออกไป
  • 📥 Input Mode - รับสัญญาณจากภายนอก เช่น ปุ่มกด, เซ็นเซอร์
  • Voltage - ใช้แรงดัน 3.3V (ไม่ใช่ 5V!)
  • 🔢 Pin Numbering - มี 2 แบบ: BCM (GPIO Number) และ BOARD (Physical Pin)
  • 💻 Control - ควบคุมผ่าน Python, C, Node.js, หรือภาษาอื่นๆ
Raspberry Pi GPIO Pinout
Raspberry Pi GPIO Pinout - แผนผังขา Pin

GPIO Pin Layout (40 Pins):

Pin Type จำนวน คำอธิบาย ตัวอย่าง
GPIO Pins 26 ขา ใช้ควบคุม Input/Output GPIO2, GPIO3, GPIO4...
3.3V Power 2 ขา จ่ายไฟ 3.3V Pin 1, Pin 17
5V Power 2 ขา จ่ายไฟ 5V Pin 2, Pin 4
Ground (GND) 8 ขา ขาลบ (0V) Pin 6, Pin 9, Pin 14...
Special Pins 2 ขา I2C, SPI, UART SDA, SCL, MOSI, MISO

⚠️ ข้อควรระวัง GPIO:

  • ใช้แรงดัน 3.3V เท่านั้น - ห้ามต่อ 5V เข้า GPIO จะไหม้!
  • 🔌 กระแสไม่เกิน 16mA - ต่อ LED ต้องใช้ Resistor
  • 💥 Short Circuit - ห้ามต่อ GPIO เข้า GND โดยตรง
  • 🔥 ความร้อน - GPIO ทำงานหนักจะร้อน ต้องระบายความร้อน
  • 🛡️ Static Electricity - สัมผัส Ground ก่อนต่อวงจร

Pin Numbering Mode:

  • 🔢 BCM Mode - ใช้หมายเลข GPIO (GPIO2, GPIO3, GPIO4...)
  • 📍 BOARD Mode - ใช้หมายเลข Physical Pin (Pin 1, Pin 2, Pin 3...)
  • 💡 แนะนำ BCM - ใช้ BCM เพราะตรงกับ Datasheet

ตัวอย่าง Pin Mapping:

  • 📌 GPIO17 = Physical Pin 11
  • 📌 GPIO27 = Physical Pin 13
  • 📌 GPIO22 = Physical Pin 15
  • 📌 GPIO23 = Physical Pin 16
  • 📌 GPIO24 = Physical Pin 18

อุปกรณ์ที่ต้องใช้

อุปกรณ์หลัก:

  • 🍓 Raspberry Pi - รุ่นใดก็ได้ (Pi 3, 4, 5, Zero)
  • 💡 LED - สีแดง, เขียว, เหลือง, หรือสีอื่นๆ
  • Resistor 220Ω-330Ω - ป้องกัน LED ไหม้
  • 🔌 Jumper Wires - สายไฟ Male-to-Female
  • 🍞 Breadboard - บอร์ดทดลอง (Optional)

LED Specifications:

LED Color Forward Voltage Current Resistor (3.3V)
Red LED 1.8-2.2V 20mA 220Ω
Green LED 2.0-2.4V 20mA 220Ω
Yellow LED 2.0-2.2V 20mA 220Ω
Blue LED 3.0-3.4V 20mA 100Ω
White LED 3.0-3.4V 20mA 100Ω

การคำนวณ Resistor:

สูตร: R = (Vs - Vf) / I Vs = แรงดันจ่าย (3.3V) Vf = Forward Voltage ของ LED (1.8-2.2V) I = กระแส (0.02A = 20mA) ตัวอย่าง Red LED: R = (3.3 - 2.0) / 0.02 R = 1.3 / 0.02 R = 65Ω ใช้ Resistor 220Ω เพื่อความปลอดภัย

💡 เคล็ดลับการเลือก LED:

  • 🔴 Red LED - ใช้ไฟน้อยที่สุด เหมาะสำหรับเริ่มต้น
  • 🟢 Green LED - มองเห็นชัดเจน เหมาะสำหรับ Indicator
  • 🔵 Blue/White LED - ใช้ไฟมากกว่า ต้องใช้ Resistor ต่ำกว่า
  • Resistor 220Ω-330Ω - ใช้ได้กับ LED ทุกสี ปลอดภัย
  • 🍞 Breadboard - ทดลองง่าย ไม่ต้องบัดกรี

Jumper Wire Types:

  • 🔌 Male-to-Female - ต่อ Raspberry Pi กับ Breadboard
  • 🔌 Male-to-Male - ต่อบน Breadboard
  • 🔌 Female-to-Female - ต่อ Raspberry Pi กับ LED โดยตรง

ราคาอุปกรณ์ (ประมาณ):

  • 💡 LED - 1-5 บาท/ดวง
  • Resistor - 1-2 บาท/ตัว
  • 🔌 Jumper Wires (10 เส้น) - 20-50 บาท
  • 🍞 Breadboard - 50-150 บาท
  • 📦 Starter Kit - 300-800 บาท (ครบชุด)

การต่อวงจร

ขั้นตอนการต่อวงจร LED:

LED Wiring Diagram
การต่อวงจร LED กับ Raspberry Pi

1. ปิด Raspberry Pi ก่อนต่อวงจร

  • 🔌 Shutdown - รันคำสั่ง sudo shutdown -h now
  • ถอดสายไฟ - รอ LED ดับหมดก่อนต่อวงจร
  • 🛡️ ป้องกัน Short Circuit - ต่อวงจรขณะปิดเครื่อง

2. จำแนก LED Polarity

  • Anode (ขาบวก) - ขายาว, ต่อกับ GPIO ผ่าน Resistor
  • Cathode (ขาลบ) - ขาสั้น, ต่อกับ Ground (GND)
  • 💡 ดูจากตัว LED - ด้านแบนคือ Cathode (ขาลบ)

3. ต่อวงจรแบบง่าย (ไม่ใช้ Breadboard)

  • 🔴 GPIO17 (Pin 11) → Resistor 220Ω → LED Anode (ขายาว)
  • LED Cathode (ขาสั้น) → Ground (Pin 6 หรือ Pin 9)

4. ต่อวงจรแบบใช้ Breadboard

  • 🔌 GPIO17 (Pin 11) → Breadboard Row A
  • Resistor 220Ω → Row A → Row B
  • 💡 LED Anode → Row B
  • 💡 LED Cathode → Row C
  • Ground Wire → Row C → Raspberry Pi GND (Pin 6)
Breadboard Wiring
การต่อวงจรบน Breadboard

5. ตรวจสอบวงจร

  • Polarity ถูกต้อง - Anode ต่อ GPIO, Cathode ต่อ GND
  • Resistor ต่ออยู่ - ห้ามต่อ LED โดยตรง
  • ไม่มี Short Circuit - GPIO ไม่ต่อ GND โดยตรง
  • สายไฟแน่น - ไม่หลวม ไม่หลุด

⚠️ ข้อควรระวังการต่อวงจร:

  • 🔌 ปิดเครื่องก่อนต่อ - ป้องกัน Short Circuit
  • ต้องมี Resistor - ห้ามต่อ LED โดยตรง
  • ➕➖ ดู Polarity - ต่อกลับ LED จะไม่ติด
  • 🔥 ห้ามต่อ 5V - GPIO ใช้ 3.3V เท่านั้น
  • 🛡️ ตรวจสอบก่อนเปิดเครื่อง - ดูวงจรให้ดีก่อน

Pin Mapping สำหรับโปรเจคนี้:

Component Connect To GPIO Number Physical Pin
LED Anode (+) Resistor → GPIO GPIO17 Pin 11
LED Cathode (-) Ground GND Pin 6 หรือ Pin 9
Resistor GPIO → LED Anode - -

เขียนโค้ด Python

ติดตั้ง RPi.GPIO Library:

sudo apt update sudo apt install python3-rpi.gpio -y

โค้ดพื้นฐาน - เปิด LED:

import RPi.GPIO as GPIO import time # ตั้งค่า GPIO Mode GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # กำหนด Pin LED_PIN = 17 # ตั้งค่า Pin เป็น Output GPIO.setup(LED_PIN, GPIO.OUT) # เปิด LED GPIO.output(LED_PIN, GPIO.HIGH) print("LED ON") # รอ 5 วินาที time.sleep(5) # ปิด LED GPIO.output(LED_PIN, GPIO.LOW) print("LED OFF") # ปิด GPIO GPIO.cleanup()

โค้ดกระพริบ LED (Blink):

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) LED_PIN = 17 GPIO.setup(LED_PIN, GPIO.OUT) try: while True: GPIO.output(LED_PIN, GPIO.HIGH) print("LED ON") time.sleep(1) GPIO.output(LED_PIN, GPIO.LOW) print("LED OFF") time.sleep(1) except KeyboardInterrupt: print("\nStopped by User") GPIO.cleanup()

โค้ด PWM - ปรับความสว่าง LED:

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) LED_PIN = 17 GPIO.setup(LED_PIN, GPIO.OUT) # สร้าง PWM ที่ 100Hz pwm = GPIO.PWM(LED_PIN, 100) pwm.start(0) try: while True: # ค่อยๆ สว่างขึ้น for duty in range(0, 101, 5): pwm.ChangeDutyCycle(duty) time.sleep(0.05) # ค่อยๆ มืดลง for duty in range(100, -1, -5): pwm.ChangeDutyCycle(duty) time.sleep(0.05) except KeyboardInterrupt: pwm.stop() GPIO.cleanup()

โค้ดควบคุมหลาย LED:

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # กำหนด LED หลายดวง LEDS = [17, 27, 22] # ตั้งค่าทุก Pin for led in LEDS: GPIO.setup(led, GPIO.OUT) GPIO.output(led, GPIO.LOW) try: while True: # เปิดทีละดวง for led in LEDS: GPIO.output(led, GPIO.HIGH) time.sleep(0.5) GPIO.output(led, GPIO.LOW) except KeyboardInterrupt: GPIO.cleanup()

💡 อธิบายโค้ด:

  • 🔧 GPIO.setmode(GPIO.BCM) - ใช้หมายเลข GPIO
  • 📌 GPIO.setup(pin, GPIO.OUT) - ตั้งค่า Pin เป็น Output
  • GPIO.output(pin, GPIO.HIGH) - เปิด LED (3.3V)
  • GPIO.output(pin, GPIO.LOW) - ปิด LED (0V)
  • 🧹 GPIO.cleanup() - ปิด GPIO เมื่อจบโปรแกรม
  • 🎛️ PWM - ปรับความสว่าง LED ด้วย Duty Cycle

รันโค้ด Python:

# สร้างไฟล์ nano led_blink.py # รันโค้ด python3 led_blink.py # หยุดโปรแกรม Ctrl + C

โปรเจคขั้นสูง

เมื่อเข้าใจพื้นฐานแล้ว ลองทำโปรเจคขั้นสูงเหล่านี้:

🚦

Traffic Light

สร้างไฟจราจร 3 สี (แดง-เหลือง-เขียว) ควบคุมด้วย Python

🎮

LED + Button

กดปุ่มเปิด-ปิด LED หรือเปลี่ยนโหมดกระพริบ

🌡️

Temperature LED

แสดงอุณหภูมิด้วย LED สีต่างๆ (เย็น=น้ำเงิน, ร้อน=แดง)

🎵

Music LED

LED กระพริบตามจังหวะเพลง ใช้ Audio Input

🌐

Web Control LED

ควบคุม LED ผ่านเว็บเบราว์เซอร์ ใช้ Flask

📱

LINE Notify LED

ส่งข้อความ LINE เมื่อ LED เปิด-ปิด

ตัวอย่างโค้ด Traffic Light:

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) RED = 17 YELLOW = 27 GREEN = 22 GPIO.setup(RED, GPIO.OUT) GPIO.setup(YELLOW, GPIO.OUT) GPIO.setup(GREEN, GPIO.OUT) try: while True: # Red Light GPIO.output(RED, GPIO.HIGH) time.sleep(5) GPIO.output(RED, GPIO.LOW) # Yellow Light GPIO.output(YELLOW, GPIO.HIGH) time.sleep(2) GPIO.output(YELLOW, GPIO.LOW) # Green Light GPIO.output(GREEN, GPIO.HIGH) time.sleep(5) GPIO.output(GREEN, GPIO.LOW) except KeyboardInterrupt: GPIO.cleanup()

ตัวอย่างโค้ด LED + Button:

import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) LED_PIN = 17 BUTTON_PIN = 27 GPIO.setup(LED_PIN, GPIO.OUT) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) led_state = False try: while True: button_state = GPIO.input(BUTTON_PIN) if button_state == GPIO.LOW: led_state = not led_state GPIO.output(LED_PIN, led_state) print(f"LED: {'ON' if led_state else 'OFF'}") time.sleep(0.3) except KeyboardInterrupt: GPIO.cleanup()

🎯 เคล็ดลับโปรเจคขั้นสูง:

  • 🚦 Traffic Light - ใช้ LED 3 สี ควบคุมตามเวลา
  • 🎮 Button Control - ใช้ Pull-up Resistor ป้องกัน Floating
  • 🌐 Web Control - ใช้ Flask สร้างเว็บควบคุม LED
  • 📱 LINE Notify - ส่งแจ้งเตือนผ่าน LINE API
  • 🎵 Music LED - ใช้ FFT วิเคราะห์เสียง

แก้ปัญหาและ Tips

ปัญหาที่พบบ่อยและวิธีแก้:

1. LED ไม่ติด:

  • 🔌 ตรวจสอบ Polarity - ต่อ Anode กับ GPIO, Cathode กับ GND
  • ตรวจสอบ Resistor - ต้องมี Resistor ต่ออยู่
  • 🔧 ตรวจสอบโค้ด - ใช้ GPIO.HIGH เปิด LED
  • 💡 ทดสอบ LED - ต่อ LED กับถ่าน 3V ดูว่าติดไหม

2. LED สว่างน้อย:

  • Resistor สูงเกินไป - ลองใช้ 220Ω แทน 330Ω
  • 🔋 แรงดันต่ำ - ตรวจสอบ Power Supply
  • 💡 LED เสื่อม - ลองเปลี่ยน LED ใหม่

3. LED ไหม้:

  • ไม่มี Resistor - ต้องใช้ Resistor 220Ω-330Ω
  • 🔥 ต่อ 5V - GPIO ใช้ 3.3V เท่านั้น
  • 💥 Polarity กลับ - ต่อ Anode กับ GND (ผิด)

4. Error: RuntimeError: No access to /dev/mem

# แก้ไข: รันด้วย sudo sudo python3 led_blink.py # หรือเพิ่ม User เข้า gpio group sudo usermod -a -G gpio $USER # Logout และ Login ใหม่

5. Error: This channel is already in use

# แก้ไข: เพิ่ม GPIO.cleanup() ก่อนรันใหม่ GPIO.cleanup() # หรือปิด Warning GPIO.setwarnings(False)

💡 Tips & Best Practices:

  • 🧹 GPIO.cleanup() - เรียกทุกครั้งก่อนจบโปรแกรม
  • ใช้ Resistor 220Ω - ปลอดภัยกับ LED ทุกสี
  • 🔌 ปิดเครื่องก่อนต่อ - ป้องกัน Short Circuit
  • 📝 Comment โค้ด - อธิบายว่า Pin ไหนต่ออะไร
  • 🧪 ทดสอบทีละขั้น - เริ่มจาก LED 1 ดวงก่อน
  • 🛡️ ใช้ try-except - จัดการ Ctrl+C และ Error

คำสั่งที่มีประโยชน์:

# ดู GPIO Status gpio readall # ตรวจสอบ Python Version python3 --version # ติดตั้ง RPi.GPIO sudo apt install python3-rpi.gpio # ดู CPU Temperature vcgencmd measure_temp # Shutdown Raspberry Pi sudo shutdown -h now

สรุป

การควบคุม LED ด้วย Raspberry Pi GPIO และ Python เป็นพื้นฐานสำคัญของ Physical Computing และ IoT เมื่อเข้าใจหลักการแล้ว คุณสามารถต่อยอดไปควบคุมอุปกรณ์อื่นๆ เช่น มอเตอร์, เซ็นเซอร์, จอ LCD, และอื่นๆ ได้อีกมากมาย

สิ่งที่ได้เรียนรู้:

  • 🔌 GPIO - เข้าใจหลักการทำงานของ GPIO Pins
  • 💡 LED - การต่อวงจร LED กับ Resistor
  • 🐍 Python - เขียนโค้ดควบคุม GPIO ด้วย RPi.GPIO
  • 🎛️ PWM - ปรับความสว่าง LED ด้วย Pulse Width Modulation
  • 🚦 โปรเจค - ทำโปรเจคขั้นสูง เช่น Traffic Light, Web Control

ต่อยอดโปรเจค:

  • 🌡️ เซ็นเซอร์ - ต่อ DHT11/DHT22 วัดอุณหภูมิ-ความชื้น
  • 🎮 ปุ่มกด - ควบคุม LED ด้วยปุ่ม
  • 🌐 IoT - ควบคุมผ่านเว็บหรือแอพมือถือ
  • 🤖 Automation - สร้างระบบอัตโนมัติในบ้าน
  • 📊 Data Logging - บันทึกข้อมูลลง Database

🎓 บทเรียนที่ได้:

  • ✅ เข้าใจหลักการ GPIO และ Pin Numbering
  • ✅ รู้จักการต่อวงจร LED อย่างปลอดภัย
  • ✅ เขียนโค้ด Python ควบคุม GPIO ได้
  • ✅ ใช้ PWM ปรับความสว่าง LED
  • ✅ แก้ปัญหาเบื้องต้นได้
🎉

ช้อป Raspberry Pi / เข้าร่วม Community

หากคุณสนใจ Raspberry Pi, GPIO, LED หรืออุปกรณ์สำหรับโปรเจค IoT สามารถกดปุ่มด้านล่างนี้ได้เลย หรืออยากพูดคุยแลกเปลี่ยนความรู้เกี่ยวกับ Raspberry Pi ก็เข้าร่วม Community ของเราได้

เนื้อหาจัดทำโดย GlobalByte - ศูนย์รวมความรู้ด้าน Raspberry Pi และ IoT

แท็ก


Blog posts

© 2025 บริษัท โกลบอลโทรนิค อินเตอร์เทรด จํากัด, ขับเคลื่อนโดย Shopify

    • PayPal

    เข้าสู่ระบบ

    ลืมรหัสผ่านใช่ไหม?

    ยังไม่มีบัญชีใช่ไหม?
    สร้างบัญชี