Raspberry Pi GPIO引腳介紹

近年來,Raspberry Pi因其可以用作可用於媒體和復古視頻遊戲的廉價、相容的Linux機器以及網路設備而備受喜愛。多年來,一些業餘愛好者一直以這些方式來使用他們的Pi,但是有些人並不清楚設備側面的引腳到底是做什麼的。
其實,正是這些引腳發揮著Pi的真實功用。它們可以控制家居設備、機器、新的發明,甚至機器人。那麼,為什麼這麼多人都對這些引腳不甚瞭解呢?

Raspberry Pi & Breadboard

這些引腳的實際作用是什麼?

這40個(或26個,取決於您的Pi型號)引腳是所謂的“GPIO介面”的一部分。在這些介面中,有四種主要的引腳:

電源: 提供3.3V和5V的直流電源
接地(GND): 連接到地端,以閉合電路
DNC: 代表“不連接”,所以可以忽略
GPIO: 可以設置為發送或接收控制電壓

GPIO代表“通用輸入/輸出”,正是這些引腳讓Raspberry Pi發揮了其功效。因為這些引腳沒有特定的功能,所以可以設置為某個專用功能,例如控制信號。

Raspberry Pi pins

設置為輸出的GPIO引腳可以提供3.3V(高電平信號)或0V(低電平信號)的電壓。當設置為輸入時,該引腳可以讀取相同數值的電壓。

GPIO引腳不能提供過多電源

需要謹記的很重要的一點是GPIO引腳(以及3.3V電源引腳)是用於控制其他元件並與之通信的。

您可以從組合的3.3V引腳中獲取約51mA的電流,但是在連接的時候需要小心;如果您試圖讓電路從這些3.3V引腳獲取過大的電流,這可能會燒壞整個電路板。

而5V電源引腳則可以為您獲取電源提供的所有電流,其中要減去Raspberry Pi本身使用的電源。

將GPIO引腳連接到麵包板

當您第一次使用這些GPIO引腳時,最好使用一個麵包板。這樣的話可以在不進行焊接的情況下構建電路並對其進行修改。

如果您以前從來沒有使用過麵包板,請通過以下視頻瞭解其基礎知識:

GPIO擴展板也會起到很大的作用,可以通過引線將其連接到GPIO介面,並將引腳直接放置在麵包板上,這些引腳帶有明確的標記。

不過這需要一些空間:麵包板每側需要20行。一個小的板子幾乎就只有20行!有多餘的40行左右的麵包板可以為初學者提供充足的空間。

具有特殊用途的GPIO引腳

每個GPIO引腳都可以設置為用於發送和接收高電平和低電平信號。有些引腳也會有一些特殊用途。
我們不會在這裡進行深入探究,只需要瞭解大概就好。

硬體PWM

GPIO引腳輸出3.3V或0V:一個高電平信號或低電平信號。脈寬調製或PWM,是一種通過快速打開和關閉引腳來類比介於兩者之間電壓的方法。

這不是真正的類比信號,但是可以用於調暗LED光線之類的功能。它的閃爍速度要大於您的視覺敏感頻率,所以您看到的只是燈光變暗了而已。

您可以使用低通濾波器將PWM平滑為類比信號。如果您對音質不是很挑剔的話,可將其用於模擬音訊,比如用於門鈴或者玩具就不錯。

您可以使用軟體通過任意GPIO引腳生成PWM信號,但是作業系統會將其與其他任務並行處理,所以該信號可能會發生振動。

GPIO引腳18和19上有可用的硬體PWM。硬體PWM和耳機插孔使用相同的電路,所以不能同時使用。

串列匯流排引腳

當您查看下面的圖表時(被稱作Raspberry Pi“引腳圖”),您會看到一些引腳是I2C、 SPI以及UART串列。這些是可用於與其他元件之間進行資料發送和接收的串列匯流排協定。

您可以將這些與模擬轉換器或DAC結合使用,以輸出類比信號。如果想要高品質的音訊或者想要控制許多元件,這種方式可能比使用PWM方式更可取。

上拉和下拉電阻

通常,您會希望Raspberry Pi GPIO引腳可以讀取按鈕或者開關的位置。這通過接線可以很容易實現,因為接線之後,被連接於控制電壓以讀取高電平信號或接地以讀取低電平信號的電路將會閉合。

問題是當這個電路斷路而沒有任何信號連接到引腳時,它可能會返回任何值,這被稱為“浮動”,是完全沒有任何作用的。

您可以使用“上拉”或“下拉”電阻來防止浮動。

將一個上拉電阻連接到您的控制電壓,當沒有其他任何連接時,引腳將讀取高電平信號。將一個下拉電阻接地,引腳將讀取低電平信號。使用任何一個都會為您提供您的開關或按鈕的相反值。
您不需要將這些電阻連接到電路中。它們已經內置在Raspberry Pi中,您可以通過軟體控制它們。

使用軟體控制GPIO引腳

控制GPIO引腳的最簡單方法之一是使用Python中的GPIO Zero庫。如果您以前寫過Python代碼,這對您來說將會很容易上手。

如果這是您第一次使用Python,您可能需要先學習一些介紹性的教程。如果您不打算學習這些教程,也可以直接使用下面的指令,但是您可能會理解不了。“用Python將枯燥的工作自動化(utomate the Boring Stuff With Python)”的網路版本是個不錯的選擇,而且是免費的。

GPIO Zero是默認安裝在Raspbia Desktop映射上的。如果您使用的是Raspbian Lite或其他作業系統,那麼可能需要另行安裝。

讓我們使用它來開啟燈光

現在,讓我們來試試打開LED吧!這麼簡單的工作其實不需要使用電腦,但我們將在GPIO引腳中加入Raspberry Pi。

為此,您將需要:

一個帶電源的Raspberry Pi以及一個安裝了Raspbian的SD卡
一個麵包板
一個GPIO擴展板 (可選,但是推薦使用)
一個LED

您還會需要一些通用設備,例如:

• 電阻值在220Ω~1000Ω之間的電阻
• 一個USB鍵盤,或者SSH連接:可以讓您輸入指令的設備
• 跨接電纜或電線
• 一個下推按鈕

連接電源軌

如果您使用的是擴展板,請將其連接到Raspberry Pi和麵包板上。然後將3.3V電源引腳連接到穿過麵包板底部的正電源軌,並將接地引腳連接到負電源軌。

連接並測試按鈕

現在將您的按鈕添加到麵包板的中間。將按鈕的一個引腳連接到一個Raspberry Pi GPIO引腳。我用的是13,因為這是我的幸運數字。
然後,將按鈕對角相對的引腳連接到負電源軌。當您按下此按鈕時,電路將會閉合。

最後,我們需要讓Pi注意這個引腳,所以我們需要打開Python解譯器。在命令列中輸入:

python3

然後在解譯器中輸入:

from gpiozero import Button

如果您收到一條消息說“ImportError”,就檢查一下字母的大小寫是否正確。如果顯示“ModuleNotFoundError”,則需要安裝GPIO Zero。

如果沒有以上情況發生,那麼就可以將引腳指定給按鈕了:

button = Button(13)

這個Button類負責分配上拉電阻。現在讓我們通過輸入以下指令來測試其是否有效:

while True:
if button.is_pressed:
print(‘Sweet, the button works!’)
break

Python對縮進很敏感,所以一定要對空格嚴加控制。然後再次按下Enter鍵運行迴圈代碼。

這個迴圈代碼會一直運行,直到有人按下按鈕。這時候按下按鈕,應該會產生一條說明按鈕有效的消息。這就意味著您已經成功構建了一個可以向您的Raspberry Pi發送消息的簡單電路。太棒了!
如果沒有產生這個結果,請檢查所有連接是否正確,然後重試。

連接並測試LED

LED中的D代表“二極體”,也就是說LED只能往一個方嚮導通。
您會注意到LED有一個引腳稍長:這將會被連接到正極。在本項目中,正極就是GPIO引腳。我使用的是引腳26,沒有什麼特別的原因。
將LED放在麵包板上,確保LED的引腳之間在水準方向有間隔,以避免短路。現在將正極引腳連接到您的GPIO引腳。
LED應與電阻串聯,所以將電阻的一端連接到LED的短引腳上,另一端連接到負電源軌上。電阻沒有方向性,可以與任意端連接。

現在讓我們告訴Raspberry Pi發生了什麼。類型:鏡像 Pi & Breadboard
from gpiozero import LED
led = LED(26)

如果一切連接正確,您將能夠使用以下指令打開和關閉LED:

led.on()
led.off()

使用按鈕控制LED

現在已經完成了連接,並且經檢查一切正常,輸入:

button.when_pressed = led.on

然後按下按鈕。LED應亮起並保持亮起的狀態。現在輸入:

button.when_released = led.off

再次按下按鈕。鬆開按鈕後LED應關閉。

恭喜!您已經實現了GPIO引腳的使用!

雖然這些原理看起來很簡單,但是它們可以作為基礎來構建數千個現目,甚至可以構建您自己的項目。請注意安全,謹慎操作,但是最重要的一點是,一定要玩得開心!