
目錄
導入 RPi.GPIO 子產品:
引腳編号
設定channel
設定多個通道
擷取輸入
設定輸出
輸出到多個通道
清理
RPi 闆資訊和 RPi.GPIO 版本
導入 RPi.GPIO 子產品:
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
通過這種方式,您可以在腳本的其餘部分将其稱為 GPIO。
引腳編号
有兩種方法可以在 RPi.GPIO 中對 Raspberry Pi 上的 IO 引腳進行編号。首先是使用 BOARD 編号系統。這是指 Raspberry Pi 闆的 P1 接頭上的引腳編号。使用這種編号系統的優勢在于,無論 RPi 的電路闆版本如何,您的硬體都将始終工作。您無需更改代碼。
第二個編号系統是 BCM 編号。這是一種較低級别的工作方式 - 它指的是 Broadcom SOC 上的通道号。您必須始終使用圖表,說明哪個通道号連接配接到 RPi 闆上的哪個引腳。您的腳本可能會在 Raspberry Pi 闆的修訂之間中斷。
GPIO.setmode(GPIO.BOARD) # 或者 GPIO.setmode(GPIO.BCM)
要檢測已設定的引腳編号系統(例如,通過另一個 Python 子產品):
模式 = GPIO.getmode() 模式将為 GPIO.BOARD、GPIO.BCM 或無
警告
您的 Raspberry Pi 的 GPIO 上可能有多個腳本/電路。是以,如果 RPi.GPIO 檢測到引腳已配置為預設值(輸入)以外的内容,則在嘗試配置腳本時會收到警告。要禁用這些警告:
GPIO.setwarnings(False)
設定channel
您需要将您使用的每個通道設定為輸入或輸出。要将通道配置為輸入:
GPIO.setup(channel,GPIO.IN)
(其中通道是基于您指定的編号系統(BOARD 或 BCM)的通道号)。
要将通道設定為輸出:
GPIO.setup(channel,GPIO.OUT)
(其中通道是基于您指定的編号系統(BOARD 或 BCM)的通道号)。
您還可以為輸出通道指定初始值:
GPIO.setup(通道,GPIO.OUT,初始=GPIO.HIGH)
設定多個通道
您可以為每次通話設定多個頻道(從 0.5.8 版本開始)。例如:
chan_list = [11,12] # 添加任意數量的頻道!
# 你可以用元組代替,即:
# chan_list = (11,12)
GPIO.setup(chan_list, GPIO.OUT)
擷取輸入
要讀取 GPIO 引腳的值:
GPIO.input(channel)
(其中通道是基于您指定的編号系統(BOARD 或 BCM)的通道号)。這将傳回 0 / GPIO.LOW / False 或 1 / GPIO.HIGH / True。
設定輸出
設定 GPIO 引腳的輸出狀态:
GPIO.output(channel, state)
(其中通道是基于您指定的編号系統(BOARD 或 BCM)的通道号)。
狀态可以是 0 / GPIO.LOW / False 或 1 / GPIO.HIGH / True。
輸出到多個通道
您可以在同一個調用中輸出到多個通道(從 0.5.8 版本開始)。例如:
chan_list = [11,12] # 也适用于元組
GPIO.output(chan_list, GPIO.LOW) # 将所有設定為 GPIO.LOW
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW)) # 設定第一個 HIGH 和第二個 LOW
清理
在任何程式的最後,清理您可能使用過的任何資源都是一個好習慣。這與 RPi.GPIO 沒有什麼不同。通過将您使用過的所有通道傳回到輸入而不上拉/下拉,您可以通過短接引腳來避免意外損壞您的 RPi。請注意,這隻會清理腳本使用的 GPIO 通道。請注意,GPIO.cleanup() 還會清除正在使用的引腳編号系統。
在腳本結束時進行清理:
GPIO.cleanup()
當您的程式退出時,可能不想清理每個通道而留下一些設定。您可以清理單個頻道、頻道清單或頻道元組:
GPIO.cleanup(channel1)
GPIO.cleanup((channel1,channel2))
GPIO.cleanup([channel1,channel2])
RPi 闆資訊和 RPi.GPIO 版本
要發現有關您的 RPi 的資訊:
GPIO.RPI_INFO
要發現 Raspberry Pi 闆修訂版:
GPIO.RPI_INFO['P1_REVISION']
一個完整的例子
下面代碼控制蜂鳴器發出聲音,其中用到的PWM功能會在後面文章講解
import time
import random
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
# GPIO.setwarning(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(32, GPIO.OUT)
# use
p = GPIO.PWM(32, 300)
p.start(1)
# input('Press return to stop:') # use raw_input for Python 2
try:
while True:
for dc in range(0, 101, 5):
p.ChangeFrequency(random.randrange(300, 2000))
p.ChangeDutyCycle(dc)
time.sleep(0.5 * random.random())
except KeyboardInterrupt:
pass
p.stop()
GPIO.cleanup()