樹莓派 GPIO 控制輸出的入門應該都是從控制 LED 燈開始的吧。
樹莓派版本:Model 3B+
樹莓派系統:Raspbian Stretch with desktop and recommended software,April 2019
連接裝置
准備一個 LED 燈,兩個兩頭都為母的杜邦線。對照下圖連接樹莓派和 LED 燈,要求一個是地線(GND)連接燈的負極,一個有 GPIO + BCM 編號連接正極。我選擇了 pin 號為 6 和 12 的兩個引腳。你也可以選擇別的,記得將之后的代碼中 BCM 編號修改正確
在斷電狀態下連接。連接好的如下圖,我的 LED 燈有正負極的提示,圖中所示紅色箭頭指向的是正極,藍色箭頭是負極。如果你的 LED 燈是最簡單的那種,長引腳就是正極,短的負極。
樹莓派開機。
安裝 RPI.GPIO
我裝的樹莓派系統已經滿足所需要的環境,不需要額外下載。
你可以測試是否已經有該模塊,在終端打開 Python3,然后嘗試導入庫: import RPi.GPIO as GPIO 。如果沒有出現error,就表示已經有了,可以直接跳到下一步。
如果出現錯誤,則執行以下命令:
sudo apt-get update sudo apt-get install python3-rpi.gpio
測試 GPIO
按下圖所示依次輸入命令,觀察。
GPIO.setmode() 有兩種參數可以選擇:可以使用 GPIO.BOARD 選項告訴庫根據 GPIO 接口的引腳號引用信號,或者使用 Broadcom 芯片的信號編號( GPIO.setmode(GPIO.BCM) )。
在選擇了模式之后,需要確定在程序中使用哪一個 GPIO 信號以及將家門用來作為輸入還是輸出:GPIO.setup(channel, direction)。我給的例子里是 GPIO.setup(18, GPIO.OUT) 。
后面兩個命令控制燈的開關: GPIO.output(18, GPIO.HIGH) 和 GPIO.output(18, GPIO.LOW) 。
GPIO.cleanup() 用於重置 GPIO 接口,它把所有的 GPIO 引腳設置為低電平狀態,所以沒有多余的信號出現在界面上。在不使用改函數的情況下,如果試圖配置一個已分配信號值的 GPIO 信號引腳,那么 RPi.GPIO 模塊會產生一條警告信息。
閃爍 LED
然后我在樹莓派上編寫了下面這個代碼讓 LED 燈閃爍五次,保存在 Desktop,命名為 led.py。
#!/usr/bin/python3 import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) GPIO.output(18, GPIO.LOW) blinks = 0 print('開始閃爍') while (blinks < 5): GPIO.output(18, GPIO.HIGH) time.sleep(1.0) GPIO.output(18, GPIO.LOW) time.sleep(1.0) blinks = blinks + 1 GPIO.output(18, GPIO.LOW) GPIO.cleanup() print('結束閃爍')
演示結果:
也可以以通過 PWM 信號來達到讓燈閃爍的效果。
#!/usr/bin/python3 import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) blink = GPIO.PWM(18, 1) try: blink.start(50) while True: pass except KeyboardInterrupt: blink.stop() GPIO.cleanup()
start() 方法指定了占空比(從 1 到 100)。在開始 PWM 信號后,程序就可以解放出來做其他事情了。GPIO 18 會持續發送 PWM 信號,直到停止它。 blink = GPIO.PWM(18, 1) 指定了 PWM 信號以 1HZ 的頻率發送,燈 1 秒閃爍一次。按 Control + C 中止閃爍。
參考資料
《樹莓派Python編程 入門與實戰(第2版)》,人民郵電出版社