[RPi]樹莓派GPIO入門之控制LED燈

本文部分資料及圖片來自網絡

一、所需材料

樹莓派4B、LED燈、麪包板、杜邦線、電阻、Python程序

二、認識硬件材料

這裏介紹下LED燈、麪包板、杜邦線、電阻

LED燈:LED燈引腳長的一端爲正極,短的一端爲負極。也可以仔細觀察燈珠內部的電極,較小的是正極,大的一端的是負極。

LED燈

 

麪包板:方便插線,不用手動接線,其特點是中間的插孔豎向是相通的,邊緣的插孔橫向是相通的。

麪包板

 

杜邦線:杜邦線可實現插針式的連接,不用焊接,方便實驗連通電路。杜邦線是分公母頭的,本實驗使用兩根公-母杜邦線,用於連接樹莓派的正負極

杜邦線

 

電阻:電阻沒啥介紹的,就是增加阻值,防止電源直接接到LED燈給燒了。但這裏要說下電阻的識別方法,沒錯,電阻是可以通過上面畫的線條來識別是多大電阻的,如下圖所示。

電阻阻值識別

電阻大小=第一段第二段第三段*乘數

 

注意:第一段第二段第三段,是放在一起組成一個三位數然後和乘數相乘

 

電阻

 

三、認識樹莓派的GPIO

本次實驗使用的樹莓派爲4B,因此這裏只介紹4B的GPIO引腳結構,其他版本和4B的引腳定義略有不同,請自行查閱。

說到GPIO,首先了解下什麼是GPIO,GPIO英語爲General-purpose Input/Output,是通用型輸入輸出的簡稱。GPIO的輸入輸出是可以用過讀取寄存器來確定引腳高低點位的,那麼解釋下什麼是輸入輸出,輸出就是控制引腳爲高電平或低電平,爲我們連接的設備進行供電或不供電,比如連接LED燈,可以設置引腳爲高電平爲其供電,燈就亮了;輸入就是獲取引腳的高低電平,判斷傳感器是否檢測到,比如紅外人體感應器,當感性到人體後會輸出高電平,我們讀到高電平則表示有人體。當然還有一些其他引腳,比如作爲串口的TX,RX等。

4B的GPIO是40針腳的,引腳定義如下圖所示。

GPIO引腳定義

 

樹莓派的GPIO在實際使用中,會看到3中命名方案,wiringPi、BOARD和BCM三種方式,使用時選擇其中一種即可,只要將針腳對應正確即可生效。其中wiringPi主要是用於C語言中wiringPi模塊的編碼,BOARD是樹莓派板子上的物理引腳的編碼,BCM就是BCM自己的編碼規則。注意在Python中不支持wiringPi的編碼規則,只能使用BOARD和BCM編碼方式。

四、直接點亮LED

沒看錯,這一步是點亮LED,但這裏所說的直接點亮是直接給LED供電讓其亮起來,因此連接的電路很簡單,將GPIO的3.3V引腳使用公母杜邦線連接到麪包板,在麪包板相通的一個孔插入電阻一端,電阻另一端查到麪包板的另一豎列的孔中,然後在該數列的其他孔位插入LED燈的正極,負極插入傍邊的空位,然後在該豎列的其他孔位使用公母杜邦線連接負極,LED燈即可點亮。

接線說明

樹莓派GPIO3.3v引腳→電阻→LED燈→負極(0v或GND)

成功點亮

 

 

五、瞭解Python操控GPIO

Python要控制GPIO需要使用RPI.GPIO模塊,如果安裝的是樹莓派官方完整的img系統,是自帶RPI.GPIO模塊的。要想驗證是否已安裝RPI.GPIO模塊,可進入python交互界面,導入該模塊,如果不報錯即爲已安裝。

那麼在進Python交互界面之前,是可以通過命令查看樹莓派輸出定義的,在終端使用“pinout”命令可查看當先樹莓派的硬件結構,如下圖所示。

 當然這個不是重點,只是爲了方便大家在忘記GPIO對應時可以用該命令查看,這裏的中間兩列就是BOARD編碼,兩邊的就是BCM編碼。

 

下面言歸正傳,使用Python控制GPIO,在終端輸入“python3”進入Python交互界面(這裏不介紹Python如何安裝了,如果是樹莓派官方系統是自帶Python2和Python3的,如果沒有安裝請自行尋找Python的安裝方法),然後輸入“import RPI.GPIO as GPIO”,回車後如果沒有報錯,則表示RPI.GPIO是已安裝的,如果報錯,則可能是沒有安裝RPI.GPIO或RPI.GPIO無法正常工作,這是需要重新安裝RPI.GPIO模塊,命令如下

# 安裝rpi.gpio,我這裏使用的是python3,Python2的去掉pip後的3即可

# sudo pip3 install rpi.gpio

# 卸載rpi.gpio,這裏提卸載是爲了RPI.GPIO無法正常工作時,先卸載再安裝

# sudo pip3 uninstall rpi.gpio

使用Python控制GPIO的幾個主要操作:

  1. 導入RPi.GPIO模塊 import RPi.GPIO as GPIO
  2. 設置引腳編碼模式 GPIO.setmode(GPIO.BOARD)/GPIO.setmode(GPIO.BCM)
  3. 設置引腳的操作模式(即輸出還是輸入) GPIO.setup(2, GPIO.OUT)/GPIO.setup(2, GPIO.IN)
  4. 設置引腳的高低電平 GPIO.output(2, GPIO.HIGH)/GPIO.output(2, GPIO.LOW)

六、使用Python控制LED燈

現在要是用Python控制LED燈的話,要將引腳的連接位置改動下才能使用,硬件連接要按以下方式連接

樹莓派GPIO引腳→電阻→LED燈→負極(0v或GND)

連接好後,可以直接打開終端程序,按以下命令一行行輸入,即可看到效果

$python3 
>>> import RPi.GPIO as GPIO 
>>> GPIO.setmode(GPIO.BOARD) # 設置編碼模式 
>>> GPIO.setup(3,GPIO.OUT) # 將通道(即引腳)3設置爲輸出模式,此時LED燈爲熄滅狀態 
>>> GPIO.output(3,GPIO.HIGH) # 將通道3操作爲高電平,此時LED燈爲點亮狀態 
>>> GPIO.output(3,GPIO.LOW) # 將通道3操作爲低電平,此時LED燈爲熄滅狀態 
>>> GPIO.cleanup() # 重置所有通道的模式,傳入通道的話,只重置輸入的通道

 

七、控制LED燈閃爍

之前只是簡單的將燈點亮,如果我們要想讓燈閃爍怎麼做呢,可以通過高低電平來控制,當然肯定不能在交互界面實現了,手動輸入太慢了,我們要建立一個led.py文件,在文件中實現控制LED燈的閃爍,文件內容如下:

# coding:utf-8 
import RPi.GPIO as GPIO 

GPIO.setmode(GPIO.BOARD) 
GPIO.setup(10, GPIO.OUT) # 這裏使用的是10引腳,請根據自己使用的引腳編號修改 
n = 0 # 用於控制閃爍次數 
while n < 30: 
    GPIO.output(10, GPIO.HIGH) 
    GPIO.output(10, GPIO.LOW) 
    n += 1 
print('end')

在終端使用下面命令可以執行該文件

>>>python3 led.py

也許你會發現,當文件執行完後,燈不僅沒亮,還報了個警告,如下圖

 沒事不要着急,這個警告是因爲咱們控制通道的頻率太高了,該通道響應不過來了,因此,我們需要在每次操作高低電平的語句後面加上延時,這個需要導入time模塊,這個是Python自帶的,下面將上面led.py文件代碼進行下修改

# coding:utf-8 
import RPi.GPIO as GPIO 
import time 

GPIO.setmode(GPIO.BOARD) 
GPIO.setup(10, GPIO.OUT) # 這裏使用的是10引腳,請根據自己使用的引腳編號修改 
n = 0 # 用於控制閃爍次數 
while n < 30: 
    GPIO.output(10, GPIO.HIGH) 
    time.sleep(0.05) 
    GPIO.output(10, GPIO.LOW) 
    time.sleep(0.05) 
    n += 1 
print('end')

 這是再執行文件,發現燈可以閃爍了,其實我們目的就已經達到了,但是同時發現那個警告還是存在的,有強迫症的人看到這個警告就會不爽了,總以爲是報錯。其實仔細讀下那個警告,就會發現,其實警告中已經提示我們如何關閉它了,就是用GPIO.setwarnings(False)來禁止其輸出,下面在修改下led.py的代碼,如下

# coding:utf-8 
import RPi.GPIO as GPIO 
import time 

GPIO.setmode(GPIO.BOARD) 
GPIO.setwarnings(False) 
GPIO.setup(10, GPIO.OUT) # 這裏使用的是10引腳,請根據自己使用的引腳編號修改 
n = 0 # 用於控制閃爍次數 
while n < 30: 
    GPIO.output(10, GPIO.HIGH) 
    time.sleep(0.05) 
    GPIO.output(10, GPIO.LOW) 
    time.sleep(0.05) 
    n += 1 
print('end')

 

這時我們在運行,發現警告已經沒有了,燈也開始閃爍了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章