樹莓派GPIO口的使用


 

樹莓派的優勢在於Liunx操作系統加GPIO口,其中IO口時物聯網組成中不可缺少的,高低電平的控制是很有必要的存在,再加有python的支持,玩轉GPIO相對就容易多了

 

管腳編號

BCM: 編號側重 CPU 寄存器,根據 BCM2835 的 GPIO 寄存器編號。

wpi: 編號側重實現邏輯,把擴展 GPIO 端口從 0 開始編號,這種編號方便編程。正如下圖 WiringPi 欄。

引腳物理編號排序:方形焊接口為1腳,兩兩為序,先短后長

  配置GIPO為輸出

1、首先對 RPi.GPIO 進行設置

 

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD) #物理引腳編碼

GPIO.setup(12, GPIO.OUT)

2、設置某個輸出針腳狀態為高電平:

 

GPIO.output(12, GPIO.HIGH)

# 或者

GPIO.output(12, 1)

# 或者

GPIO.output(12, True)

3、設置某個輸出針腳狀態為低電平:

 

GPIO.output(12, GPIO.LOW)

# 或者

GPIO.output(12, 0)

# 或者

GPIO.output(12, False)

 

4、程序結束后進行清理

 

GPIO.cleanup()

注意,您可以讀取使用 input() 函數設置的輸出通道的當前狀態。例如對輸出進行切換:

 

GPIO.output(12, not GPIO.input(12))#輸出電平取反

 

 配置GIPO為輸入:

1、首先對 RPi.GPIO 進行設置:

 

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)#物理引腳編碼

GPIO.setup(12, GPIO.IN)

2、判斷輸入電平狀態:

  GPIO.input(12)#返回0/GPIO.LOW/False/1/GPIO.HIGH/True


3
、上下拉配置:

 

GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)//上拉

  # 或者

GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)//下拉

4、輪詢檢測:

 

while GPIO.input(12) == GPIO.LOW:

time.sleep(0.01)

 5、邊緣檢測1: GPIO.RISING(上升)、GPIO.FALLING(下降)、GPIO.BOTH(兩者均可)

 

#在規定時間內等待電平變化,占用主線程

channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)

if channel is None:    #無變化

    print('Timeout occurred')

else:     #上升沿變化

    print('Edge detected on channel', channel)

6、邊緣檢測2:

 

#程序運行周期內,捕捉和處理都是獨立線程,不占用主線程,推薦

def my_callback_one(channel):#channel傳遞的值為引腳編號

    print('Callback one')

 

def my_callback_two(channel):

    print('Callback two')

 

GPIO.add_event_detect(channel, GPIO.RISING)

GPIO.add_event_callback(channel, my_callback_one)

GPIO.add_event_callback(channel, my_callback_two)

7、程序結束后進行清理

  GPIO.cleanup()  #釋放引腳

 

 配置GIPO的PWM輸出:

1、首先對 RPi.GPIO 進行設置:

 

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)

GPIO.setup(12, GPIO.OUT)#輸出

p = GPIO.PWM(12, 50)     #創建一個 PWM 實例:通道,頻率(一般為50HZ,可為100HZ)

 2、啟用 PWM:

  p.start(dc)   # dc 代表占空比(范圍:(熄滅)0.0 <= dc >= 100.0(最亮))

 3、更改頻率:

  p.ChangeFrequency(freq)   # freq 為設置的新頻率,單位為 Hz

4、更改占空比:

  p.ChangeDutyCycle(dc)  # 范圍:0.0 <= dc >= 100.0

 5、停止PWM:

 

p.stop() #停止 PWM

GPIO.cleanup()#釋放

一次性設置多個引腳

 

 

chan_list = [11,12]

GPIO.output(chan_list, GPIO.LOW)

GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW))  

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM