พื้นฐานการใช้งาน 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
ภาพหมายเลขขา GPIO ของ Raspberry Piเขียนเรื่อง Raspberry Pi เชื่อมต่อกับ WebSocket.asia ไปก่อนหน้านี้แล้ว ก็จะขอย้อนกลับมาเขียนเรื่องพื้นฐานการใช้งานกันบ้าง ว่าด้วยเรื่อง พื้นฐานการใช้งาน GPIO ของ Raspberry Pi Model B rev2.0 ด้วยภาษา Python กับ Module RPi.GPIO โดยมี Raspbian เป็น OS ก่อนอื่นต้องทำการติดตั้ง RPi.GPIO ด้วยคำสั่ง
sudo apt-get updatesudo apt-get install python-devsudo apt-get install python-rpi.gpioเมื่อเราจ่ายไฟให้ Raspberry Pi แล้ว จะมีไฟ 3.3V. ออกทางขาหมายเลข 1, 17 และ 5V. ออกทางขาหมายเลข 2, 4 โดยใช้ภาพนี้สำหรับเทียบหมายเลขขาของ GPIO
เราจะทดลองในส่วน Output ก่อนซึ่งส่วน Diagram ของวงจรที่จะทำการทดสอบเป็นดังนี้
ภาพ Diagram ของวงจรที่ใช้ทดลอง
ซึ่งเราจะใช้ขาหมายเลข 26 ในการทดลอง output โดยมีขาหมายเลข 25 เป็น Ground ซึ่งเมื่อต่อวงจรเสร็จอาจทดสอบได้ด้วยการใช้ไฟจากขาหมายเลข 1 ทดสอบดูก่อน จากนั้นใช้โค้ด Python นี้สำหรับทดสอบ
#!/usr/bin/python#-*-coding: utf-8 -*-import RPi.GPIO as GPIOpin = 26GPIO.setmode(GPIO.BOARD)GPIO.setup(pin, GPIO.OUT)GPIO.output(pin,True)
จากนั้นทดสอบโปรแกรมด้วยการสั่งว่าsudo python ชื่อไฟล์.py
ถ้าไม่มีอะไรผิดพลาด LED ก็จะติด คราวนี้จะดับอย่างไร? ก็ต้องแบบนี้ครับ
#!/usr/bin/python#-*-coding: utf-8 -*-import RPi.GPIO as GPIOpin = 26GPIO.setmode(GPIO.BOARD)GPIO.setup(pin, GPIO.OUT)GPIO.output(pin,False)
คราวนี้ก็เพิ่มลูกเล่นนิดหน่อย#!/usr/bin/python#-*-coding: utf-8 -*-import RPi.GPIO as GPIOimport timepin = 26slp = 0.5GPIO.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 เป็นดังนี้
#!/usr/bin/python#-*-coding: utf-8 -*-import RPi.GPIO as gpiopin = 23gpio.setmode(gpio.BOARD)gpio.setup(pin, gpio.IN)while True: if gpio.input(pin) == False: print ("IN") while gpio.input(pin) == False: pass
เมื่อรันโปรแกรม โปรแกรมวนลูปไปเรื่อยๆ หากมีไฟจ่ายผ่าน R เข้ามาก็จะไม่ทำอะไรจนกว่า Switch จะถูกกดทำให้ไม่มีไฟจ่ายให้ขาหมายเลข 23 ก็จะขึ้นข้อความว่า "IN" อาจมีคนสงสัยเหมือนผมว่าทำไมเราไม่ทำตรงข้ามกัน คือ ต่อวงจรแบบจ่ายไปผ่าน Switch แล้วเขียนโปรแกรมว่า if gpio.input(pin) == True: เราสงสัยก็ต้องลองภาพ Diagram สำหรับทดลอง Input
แล้วลองเปลี่ยน False เป็น True
เมื่อเรารันโปรแกรม จะเป็นว่ามีข้อความ "IN" ขึ้นเรื่อยๆ โดยที่เรายังไม่ได้กด Switch คงเป็นเพราะ GPIO มีความอ่อนไหวต่อสัญญาณอะไรบางอย่างจึงทำให้การต่อแบบนี้ไม่เสถียร ให้ใช้แบบก่อนหน้านี้ที่จ่ายไฟให้สม่ำเสมอและรอจังหวะที่มีการกด Switch ลง Ground
หากบทความมีข้อผิดพลาดประการใดต้องขอคำแนะนำด้วยนะครับ ขอให้สนุกครับ
Source:
http://blog.websocket.asia/p/gpio-raspberry-pi-python-module-rpigpio.html




เยี่ยมเลยครับ ผมกำลังเขียนตัวนี้เพื่อควบคุมปั้มน้ำด้วยโซล่าเซลส์อยู่ที่สวน ยังคิดไม่ออกครับ
ตอบลบ