1. 程式人生 > >Python自動化編程-樹莓派GPIO編程(二)

Python自動化編程-樹莓派GPIO編程(二)

兩種 安裝 some 分享 拓撲 監聽 導入 說明 true

樹莓派我們編程一般都直接用高效的python,針對於GPIO編程,python也是有這一方面的庫的,這裏最有名也是最常用的就是RPI.GPIO了。這個庫是專門為樹莓派GPIO編程所設計的,利用它你可以愉快的像Arduino那樣輕松控制GPIO管腳。

安裝:

    sudo apt-get -y python-pip #安裝pip

    sudo pip install rpi.gpio #安裝RPI.GPIO


安裝完成後在實際運用的時候,我們也會像arduino那樣去設置輸入輸出,設置高低電平,獲取針腳值等等,那下面我就把整理的內容函數都貼出來。

在這說一下管腳,拿到樹莓派之後你會發現板子上有兩排管腳,這對應這什麽呢?請看下圖:

技術分享圖片



(管腳對應)

當然如果說你的版本不同可能會略有差別,你同樣可以使用gpio readall命令來打印出所有管腳:

技術分享圖片



(打印管腳)

好,做完上面的拓撲,我們來講一下關於GPIO編程的一些常用函數。

    1.導入庫:

    import RPi.GPIO as GPIO

    2.設置引腳模式:

    GPIO.setmode(GPIO.BMC/BOARD) #BMC或者BOARD模式

    3.設置引腳為輸入:

    GPIO.setup(pin,GPIO.IN)

    4.設置引腳為輸出:

    GPIO.setup(pin,GPIO.OUT)

    5.設置初始化高電平:

    GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH)

    6.設置初始化為低電平:

    GPIO.setup(pin,GPIO.OUT,initial=GPIO.LOW)


當然python的好處是可以創建一個列表,然後將列表帶入函數中,使其一次性執行多個針腳的輸入輸出,如:

    PinList=[pin1,pin2,pin3]

    GPIO.setup(PinList,GPIO.IN)

通過創建一個列表將列表中加入引腳的定義,實現多引腳同時設定為輸入。

讀取輸入值:

GPIO.input(pinx) #input()方法可以讀取pinx引腳的值

當然前提是你的引腳接了一些傳感器,比如溫度傳感器,光線傳感器等等。

上下拉:

先說什麽是上下拉

上拉和下拉是指GPIO輸出高電位(上拉)還是低電位(下拉)。上拉就是輸入高電平,然後接一個上拉電阻(起保護作用),知道上拉就表示該端口在默認情況下輸入為高電平。下拉就是輸入低電平,然後接一個下拉電阻。


我們在做管腳的上下拉時,在電路設計上一般都是加上下拉電阻,但在樹莓派身上如何不改變電路通過python去控制呢?

在python的GPIO初始化上可以用GPIO.setup(pinx,GPIO.IN,pull_up_down=GPIO.PUD_UP/GPIO.DOWN)來控制上下拉。

設置中斷:

設置終端通常有兩種方法,一種是wait_for_edge(),另一種為add_event_detect(),我們下面來介紹一下這兩個中斷。

1.wait_for_edge():用於檢測到邊沿之前阻止程序運行

舉個例子:

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

    if channel is None:

    print(Timeout occurred)

    else:

    print(Edge detected on channel, channel)

延時5秒,如果超時,程序繼續執行,如果沒有超時將繼續等待。

2.add_event_detect():對一個引腳進行監聽,一旦引腳輸入發生了改變,調用event_detected()函數會返回True

舉個例子:

    GPIO.add_event_detect(channel, GPIO.RISING)

    do_something()

    if GPIO.event_detected(channel):

    print(Button pressed‘)

add_event_detect()多用於循環狀態,並且它不會錯過循環中輸入狀態的改變,多用在PyQt上。

PWM脈沖調節:

PWM這個多用在控制電機上,特別是對我們做樹莓派小車對小車的控制上有很大的幫助。

我們用一個實例去說明:

    Pwm=GPIO.PWM(pin,frequence) #創建PWM實例

    Pwm.start(dc) #啟動PWM dc值(0.0<dc<100.0)

    Pwm.ChangeFrequency(freq) #改變PWM頻率

    Pwm.ChangeDutyCycle(dc) # 改變PWM的占空比0.0<=dc <=100.

    Pwm.stop() #停止PWM

後面我們在說幾個常用的函數,比如輸出、等待,並寫一個控制小燈閃爍的Demo

GPIO口輸出值:

GPIO.output(pinx,1/0)

1對應GPIO.HIGH(高電平)0對應GPIO.LOW(低電平)

延時函數:

time.sleep(秒數)

此函數為time庫裏面的,你要想使用必須在之前import time

今天暫且介紹這麽多,我們下面寫一個控制LED小燈閃爍的實例:

    import RPi.GPIO as GPIO //引入函數庫

    import time

    RPi.GPIO.setmode(GPIO.BOARD) //設置引腳編號規則

    RPi.GPIO.setup(11, RPi.GPIO.OUT) //將11號引腳設置成輸出模式

    while True

    GPIO.output(channel, 1) //將引腳的狀態設置為高電平,此時LED亮了

    time.sleep(1) //程序休眠1秒鐘,讓LED亮1秒

    GPIO.output(channel, 0) //將引腳狀態設置為低電平,此時LED滅了

    time.sleep(1) //程序休眠1秒鐘,讓LED滅1秒




Python自動化編程-樹莓派GPIO編程(二)