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, หรือภาษาอื่นๆ
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:
💡 เคล็ดลับการเลือก 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:
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)
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:
โค้ดพื้นฐาน - เปิด LED:
โค้ดกระพริบ LED (Blink):
โค้ด PWM - ปรับความสว่าง LED:
โค้ดควบคุมหลาย LED:
💡 อธิบายโค้ด:
- 🔧 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:
โปรเจคขั้นสูง
เมื่อเข้าใจพื้นฐานแล้ว ลองทำโปรเจคขั้นสูงเหล่านี้:
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:
ตัวอย่างโค้ด LED + Button:
🎯 เคล็ดลับโปรเจคขั้นสูง:
- 🚦 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
5. Error: This channel is already in use
💡 Tips & Best Practices:
- 🧹 GPIO.cleanup() - เรียกทุกครั้งก่อนจบโปรแกรม
- ⚡ ใช้ Resistor 220Ω - ปลอดภัยกับ LED ทุกสี
- 🔌 ปิดเครื่องก่อนต่อ - ป้องกัน Short Circuit
- 📝 Comment โค้ด - อธิบายว่า Pin ไหนต่ออะไร
- 🧪 ทดสอบทีละขั้น - เริ่มจาก LED 1 ดวงก่อน
- 🛡️ ใช้ try-except - จัดการ Ctrl+C และ Error
คำสั่งที่มีประโยชน์:
สรุป
การควบคุม 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 ของเราได้