พื้นฐานการใช้งาน GPIO ของ Raspberry Pi ด้วยภาษา Python กับ Module RPi.GPIO
เขียนเรื่อง Raspberry Pi เชื่อมต่อกับ WebSocket.asia ไปก่อนหน้านี้แล้ว ก็จะขอย้อนกลับมาเขียนเรื่องพื้นฐานการใช้งานกันบ้าง ว่าด้วยเรื่อง พื้นฐานการใช้งาน GPIO ของ Raspberry Pi Model B rev2.0 ด้วยภาษา Python กับ Module RPi.GPIO โดยมี Raspbian เป็น OS
ก่อนอื่นต้องทำการติดตั้ง RPi.GPIO ด้วยคำสั่ง
เมื่อเราจ่ายไฟให้ Raspberry Pi แล้ว จะมีไฟ 3.3V. ออกทางขาหมายเลข 1, 17 และ 5V. ออกทางขาหมายเลข 2, 4 โดยใช้ภาพนี้สำหรับเทียบหมายเลขขาของ GPIO
เราจะทดลองในส่วน Output ก่อนซึ่งส่วน Diagram ของวงจรที่จะทำการทดสอบเป็นดังนี้
ซึ่งเราจะใช้ขาหมายเลข 26 ในการทดลอง output โดยมีขาหมายเลข 25 เป็น Ground ซึ่งเมื่อต่อวงจรเสร็จอาจทดสอบได้ด้วยการใช้ไฟจากขาหมายเลข 1 ทดสอบดูก่อน
จากนั้นใช้โค้ด Python นี้สำหรับสดสอบ
จากนั้นทดสอบโปรแกรมด้วยการสั่งว่า
ถ้าไม่มีอะไรผิดพลาด LED ก็จะติด
คราวนี้จะดับอย่างไร? ก็ต้องแบบนี้ครับ
คราวนี้ก็เพิ่มลูกเล่นนิดหน่อย
แบบนี้ก็จะได้ไฟกระพริบ
ขอพักเรื่อง Output ไว้ก่อน มาลอง Input กันบ้าง ด้วย Diagram นี้
จากภาพ เราจะใช้ไฟ 3V. จากขาหมายเลข 1 ผ่าน R 100Kohm เข้าทางขาหมายเลข 23 และมี Switch ลง Ground ที่ขาหมายเลข 25
ในส่วนของโค้ด Python เป็นดังนี้
เมื่อรันโปรแกรม โปรแกรมวนลูปไปเรื่อยๆ หากมีไฟจ่ายผ่าน R เข้ามาก็จะไม่ทำอะไรจนกว่า Switch จะถูกกดทำให้ไม่มีไฟจ่ายให้ขาหมายเลข 23 ก็จะขึ้นข้อความว่า "IN"
อาจมีคนสงสัยเหมือนผมว่าทำไมเราไม่ทำตรงข้ามกัน คือ ต่อวงจรแบบจ่ายไปผ่าน Switch แล้วเขียนโปรแกรมว่า if gpio.input(pin) == True: เราสงสัยก็ต้องลอง
ก่อนอื่นต้องทำการติดตั้ง RPi.GPIO ด้วยคำสั่ง
1
2
3
| sudo apt - get update sudo apt - get install python - dev sudo apt - get install python - rpi.gpio |
ภาพหมายเลขขา GPIO ของ Raspberry Pi
เราจะทดลองในส่วน Output ก่อนซึ่งส่วน Diagram ของวงจรที่จะทำการทดสอบเป็นดังนี้
ภาพ Diagram ของวงจรที่ใช้ทดลอง
ซึ่งเราจะใช้ขาหมายเลข 26 ในการทดลอง output โดยมีขาหมายเลข 25 เป็น Ground ซึ่งเมื่อต่อวงจรเสร็จอาจทดสอบได้ด้วยการใช้ไฟจากขาหมายเลข 1 ทดสอบดูก่อน
จากนั้นใช้โค้ด Python นี้สำหรับสดสอบ
1
2
3
4
5
6
7
8
9
10
| #!/usr/bin/python #-*-coding: utf-8 -*- import RPi.GPIO as GPIO pin = 26 GPIO.setmode(GPIO.BOARD) GPIO.setup(pin, GPIO.OUT) GPIO.output(pin, True ) |
1
|
1
| sudo python ชื่อไฟล์.py |
ถ้าไม่มีอะไรผิดพลาด LED ก็จะติด
คราวนี้จะดับอย่างไร? ก็ต้องแบบนี้ครับ
1
2
3
4
5
6
7
8
9
10
| #!/usr/bin/python #-*-coding: utf-8 -*- import RPi.GPIO as GPIO pin = 26 GPIO.setmode(GPIO.BOARD) GPIO.setup(pin, GPIO.OUT) GPIO.output(pin, False ) |
1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #!/usr/bin/python #-*-coding: utf-8 -*- import RPi.GPIO as GPIO import time pin = 26 slp = 0.5 GPIO.setmode(GPIO.BOARD) GPIO.setup(pin, GPIO.OUT) while True : GPIO.output(pin, True ) time.sleep(slp) GPIO.output(pin, False ) time.sleep(slp) |
ขอพักเรื่อง Output ไว้ก่อน มาลอง Input กันบ้าง ด้วย Diagram นี้
ภาพ Diagram สำหรับการทดลอง Input
จากภาพ เราจะใช้ไฟ 3V. จากขาหมายเลข 1 ผ่าน R 100Kohm เข้าทางขาหมายเลข 23 และมี Switch ลง Ground ที่ขาหมายเลข 25
ในส่วนของโค้ด Python เป็นดังนี้
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #!/usr/bin/python #-*-coding: utf-8 -*- import RPi.GPIO as gpio pin = 23 gpio.setmode(gpio.BOARD) gpio.setup(pin, gpio.IN) while True : if gpio. input (pin) = = False : print ( "IN" ) while gpio. input (pin) = = False : pass |
อาจมีคนสงสัยเหมือนผมว่าทำไมเราไม่ทำตรงข้ามกัน คือ ต่อวงจรแบบจ่ายไปผ่าน Switch แล้วเขียนโปรแกรมว่า if gpio.input(pin) == True: เราสงสัยก็ต้องลอง
ภาพ Diagram สำหรับทดลอง Input
แล้วลองเปลี่ยน False เป็น True
เมื่อเรารันโปรแกรม จะเป็นว่ามีข้อความ "IN" ขึ้นเรื่อยๆ โดยที่เรายังไม่ได้กด Switch คงเป็นเพราะ GPIO มีความอ่อนไหวต่อสัญญาณอะไรบางอย่างจึงทำให้การต่อแบบนี้ไม่เสถียร ให้ใช้แบบก่อนหน้านี้ที่จ่ายไฟให้สม่ำเสมอและรอจังหวะที่มีการกด Switch ลง Ground
หากบทความมีข้อผิดพลาดประการใดต้องขอคำแนะนำด้วยนะครับ ขอให้สนุกครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น