上一篇文章向大家介紹樹莓派的硬件部分、安裝操作系統及基礎設置。這篇文章將介紹樹莓派的強大的開發功能口——GPIO,以及利用GPIO口點亮雙色LED燈(樹莓派的第一個基本實驗)。具有一定的參考價值,需要的朋友可以參考一下。
一、從了解GPIO開始
GPIO全稱:通用型輸入輸出端口(General-purpose input/output),其引腳能夠供使用者自由的進行使用,可以對其進行輸入,也可以讀取其數據進行數據輸出,這些引腳的輸入或輸出都會關聯到某個寄存器,寄存器的值控制引腳的電平高低。
樹莓派引腳分類
- 電源引腳:5v,3.3v,GND(Ground)。
- 常規GPIO控制引腳:可以通過編寫程序控制這些引腳的高低電平。
- 特殊GPIO通訊引腳: SPI通訊,12C通訊,TxD/RxD串口通訊。
樹莓派引腳編碼 - 功能物理引腳:這種編碼方式是按照樹莓派主板上引腳排針編號。分別對應1~40號排針。從左到右,從上到下:左邊奇數,右邊偶數。
- BCM:這種方式是參考 Broadcom SOC的通道編號側重CPU寄存器。使用Python控制樹莓派引腳時,使用的是WiringPi編碼。
- WiringPi編碼:WiringPi編碼,把擴展GPIO端口從0開始編碼。使用 C語言控制樹莓派引腳時,使用的是WiringPi編碼。
窗口查看引腳編號
1、在終端輸入指令:pinout
2、使用樹莓派輸入gpio readall命令查看pin狀態
- 輸入以下命令安裝Git:
sudo apt install git-core
- 輸入以下命令,將 WiringPi 文件下載到樹莓派系統的當前目錄。
sudo git clone https://github.com/WiringPi/WiringPi
- 耐心等待其安裝完成。下載完成后,我們可以在當前目錄下看到一個WiringPi文件夾。如下所示。
- 輸入以下命令進入 WiringPi 文件夾目錄。
cd WiringPi/
- 輸入以下命令安裝 WiringPi。
sudo ./build
- 耐心等待它的安裝完成。當我們看到下面的界面沒有任何錯誤時,就意味著安裝完成了。
- 輸入以下命令查看gpio的版本。
gpio -v
- 最后,我們可以查看樹莓派各個管腳的狀態,輸入指令:
gpio readall
使用RPi.GPIO模塊
RPi.GPIO是Python的一個模塊,樹莓派默認已經安裝了該模塊。本節詳細介紹如何使用Python的RPi.GPIO模塊控制GPIO。
1、導入RPi.GPIO模塊
import RPi.GPIO as GPIO
2、設置指定模式(強制)管腳編號
GPIO.setmode(GPIO.BOARD) #物理引腳編碼
GPIO.setmode(GPIO.BCM) #BCM編碼
3、設置禁用警告
如果GRIO檢測到一個引腳已經被設置成了非默認值,可以使用setwarnings()關閉警告信息。
GPIO.setwarnings(False)
4、設置引腳輸入和輸出
要將通道配置為輸入:
GPIO.setup(channel, GPIO.IN)
要將通道設置為輸出,請調用:
GPIO.setup(channel, GPIO.OUT)
為輸出通道指定一個初始值:
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
將通道設置為輸出時,同時設置多個通道:
channels = [18, 12, 13]
GPIO.setup(channels, GPIO.OUT)
要讀取通道的值:
GPIO.input(channel) #返回 GPIO.LOW 或 GPIO.HIGH。
要設置配置為輸出的引腳的值:
GPIO.output(channel, state)
其中狀態可以是 GPIO.LOW 或 GPIO.HIGH。
還可以輸出到通道列表或元組:
channels = [18, 12, 13]
GPIO.output(channels, GPIO.HIGH) # or GPIO.LOW
GPIO.output(channel, (GPIO.LOW, GPIO.HIGH, GPIO.HIGH))
5、清理所有使用的通道
在程序結束時,最好清理通道,以便將所有引腳設置為默認狀態。
GPIO.cleanup()
二、實驗——樹莓派GPIO口控制雙色LED燈
1、簡介
雙色LED燈(雙基色 LED燈),是指模塊只能顯示2種顏色,一般是紅色和綠色,可以有三種狀態:滅、顏色1亮、顏色2亮;根據顏色組合的不同,分為紅藍雙色,黃藍雙色,紅綠雙色等等。雙色 LED常于指示狀態:比如紅色表示設備異常,綠色表示正常。
2、組件
1、樹莓派主板*1
2、樹莓派電源*1
3、40P軟排線*1
4、雙色LED模塊*1
5、面包板*1
6、杜邦線、跳線若干
3、實驗原理
將引腳S(綠色)和中間管腳R(紅色)連接到樹莓派的GPO 接口上,對樹莓派進行編程控制,將LED的顏色從紅色變為綠色,然后使用PWM混合其他顏色。
該模塊的原理圖如下所示:
4、實驗步驟
連接電路。將樹莓派通過T型轉接板連接到面包板,樹莓派GPIO 11即T型轉接板GPIO 17,“紅白線”連接雙色LED模塊R端子;樹莓派GPIO 12 即T型轉接板GPIO 18,“綠白線”連接雙色LED模塊G端子;樹莓派GND即T型轉接板GND,“黑線”連接雙色LED模塊GND端子。
樹莓派 | 面包板 | 雙色LED模塊 |
---|---|---|
GPIO1 | GPIO18 | G(S) |
GPIO0 | GPIO17 | R(中間) |
GND | GND | GND |
5、代碼實現
WM的頻率:P決定了輸出的數字信號on (1) 和 off(0 )的切換速度,頻率越高,切換就越快。
占空比:指一串理想脈沖序列中,正脈沖的持續時間與脈沖總周期的比值,用來調節燈的亮度。
import RPi.GPIO as GPIO
import time
colors = [0xFF00, 0x00FF, 0x0FF0, 0xF00F]
makerobo_pins = (11, 12) # PIN管腳字典
GPIO.setmode(GPIO.BOARD) # 采用實際的物理管腳給GPIO口
GPIO.setwarnings(False) # 去除GPIO口警告
GPIO.setup(makerobo_pins, GPIO.OUT) # 設置Pin模式為輸出模式
GPIO.output(makerobo_pins, GPIO.LOW) # 設置Pin管腳為低電平(0V)關閉LED
p_R = GPIO.PWM(makerobo_pins[0], 2000) # 設置頻率為2KHz
p_G = GPIO.PWM(makerobo_pins[1], 2000) # 設置頻率為2KHz
# 初始化占空比為0(led關閉)
p_R.start(0)
p_G.start(0)
def makerobo_pwm_map(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
def makerobo_set_Color(col): # 例如:col = 0x1122
R_val = col > > 8
G_val = col & 0x00FF
# 把0-255的范圍同比例縮小到0-100之間
R_val = makerobo_pwm_map(R_val, 0, 255, 0, 100)
G_val = makerobo_pwm_map(G_val, 0, 255, 0, 100)
p_R.ChangeDutyCycle(R_val) # 改變占空比
p_G.ChangeDutyCycle(G_val) # 改變占空比
# 調用循環函數
def makerobo_loop():
while True:
for col in colors:
makerobo_set_Color(col)
time.sleep(0.5)
# 釋放資源
def makerobo_destroy():
p_G.stop()
p_R.stop()
GPIO.output(makerobo_pins, GPIO.LOW) # 關閉所有LED
GPIO.cleanup() # 釋放資源
# 程序入口
if __name__ == "__main__":
try:
makerobo_loop() # 調用循環函數
except KeyboardInterrupt: # 當按下Ctrl+C時,將執行destroy()子程序。
makerobo_destroy() # 釋放資源