第5章 用樹莓派點(diǎn)亮LED燈

?  用樹莓派點(diǎn)亮一個(gè)LED燈是非常簡單的事情,但卻非常重要,是利用GPIO控制外部硬件設(shè)備的基礎(chǔ),機(jī)器人的大部分功能都可以通過操縱GPIO來實(shí)現(xiàn)的。換句話說,能控制一個(gè)LED燈,就能讓機(jī)器人動(dòng)起來。本章將的主要內(nèi)容如下。

  • 搭建一個(gè)樹莓派多功能實(shí)驗(yàn)平臺的材料及其功能用途。
  • 樹莓派的GPIO引腳功能和基本用法。
  • 點(diǎn)亮一個(gè)LED燈的電路、程序設(shè)計(jì)思路和代碼。

5.1 搭建實(shí)驗(yàn)平臺

?  為便于后續(xù)的實(shí)驗(yàn),我們首先需要搭建一個(gè)多功能實(shí)驗(yàn)平臺(見圖5.1,含本章所需材料),各部件的功能用途如下。

圖 5.1 多功能實(shí)驗(yàn)平臺

  • 1:樹莓派3B+型主板(含電源)
    ?  一塊樹莓派3B+型主板(含電源),該主板應(yīng)配備有一張已經(jīng)安裝好Raspbian系統(tǒng)的MicroSD卡。

  • 2:面包板
    ?  實(shí)驗(yàn)過程中,面包板非常適用于電子電路的組裝和調(diào)試,各種電子元器件可以根據(jù)需要隨意插入或拔出,而無需焊接,節(jié)省了電路的組裝時(shí)間,而且元件可以重復(fù)使用。

  • 3:T型GPIO擴(kuò)展版
    ?  GPIO擴(kuò)展版上標(biāo)有GPIO引腳的功能,與面包板配合使用非常便于對GPIO進(jìn)行外接。

  • 4:40P排線
    ?  用于連接樹莓派與T型GPIO擴(kuò)展版,長度適中即可。

  • 5:實(shí)驗(yàn)平臺底座
    ?  使用一塊亞克力板作為實(shí)驗(yàn)平臺的底座,用于固定樹莓派主板和面包板,以便于實(shí)驗(yàn)操作,同時(shí)對樹莓派主板形成一定的保護(hù)。

  • 6:萬用表
    ?  在進(jìn)行GPIO硬件控制調(diào)試的時(shí)候,如果實(shí)驗(yàn)結(jié)果不是事先所預(yù)計(jì)的,那么我們可以使用萬用表對電路進(jìn)行簡單的測試,排查問題。

  • 7:LED燈
    ?  發(fā)光二極管LED是一種廉價(jià)和高效的光源,常在電路及儀器中作為指示燈,或者組成文字或數(shù)字顯示。LED燈非常便于顯示GPIO引腳的輸出狀態(tài),在開發(fā)樹莓派外部硬件控制程序時(shí),可以先使用LED燈確定GPIO引腳輸出正確后再連接要控制的硬件,避免由于GPIO輸出錯(cuò)誤而導(dǎo)致外部硬件損壞。本章我們需要用到到一個(gè)紅色的LED燈,需要注意的是LED較長的引腳為正極,較短的引腳為負(fù)極。

  • 8:電阻
    ?  實(shí)驗(yàn)過程中,請根據(jù)實(shí)際選擇必要的電阻,本章需要用到一個(gè)470Ω或1kΩ的電阻。

  • 9:杜邦線
    ?  用于連接各電子元件,無需焊接,本章僅需要用到兩根公對公的杜邦線。為便于識別,建議遵循有關(guān)規(guī)范,連接電源(GPIO引腳)的線采用紅色線連接,接地端使用黑色線連接。

5.2 GPIO引腳

?  前面我們講過,樹莓派與普通計(jì)算機(jī)最大的區(qū)別就在于它擁有若干個(gè)可編程的GPIO,可以用來控制外部設(shè)備、從外部設(shè)備獲取信息或是和硬件進(jìn)行數(shù)據(jù)交互等,因此了解各個(gè)GPIO引腳的功能和使用方法是非常重要的。樹莓派GPIO接口已發(fā)布了3個(gè)版本,原始的兩個(gè)版本僅有26個(gè)引腳,“+”型樹莓派版本有40個(gè)引腳,本章及后續(xù)章節(jié)我們將主要介紹“+”型樹莓派版本的GPIO。
?  樹莓派GPIO接口有BOARD、BCM和wiringPi三種編號方式,三種編碼方式的對應(yīng)關(guān)系如表5.1所示。

表 5.1 樹莓派40Pin引腳對照表

  • BOARD
    ?  BOARD編號方式是樹莓派主板上P1接頭上的的引腳號,從左到右,從上到下進(jìn)行編號,左邊為奇數(shù),右邊為偶數(shù),支持BOARD編號方式的庫主要有RPi.GPIO、WiringPi-Go。

  • BCM
    ?  BCM編號側(cè)重于CPU寄存器,是根據(jù)Broadcom SOC的GPIO寄存器編號的,支持的庫比較多,用的也比較多,是后續(xù)章節(jié)主要使用的編號方式。為便于使用BCM編號方式,建議采用類似“T型GPIO擴(kuò)展版”或“GPIO參考卡片”等配件,讓引腳功能一目了然。

  • wiringPi
    ?  wiringPi編號側(cè)重于實(shí)現(xiàn)邏輯,GPIO端口從0開始編號,WiringPi庫是支持wiringPi編號方式的最主要GPIO庫。

?  B+型樹莓派主板的40個(gè)引腳提供了17個(gè)GPIO專用接口,1個(gè)UART總線接口、1個(gè)SPI總線接口、1個(gè)I2C總線接口、2個(gè)5V電源接口、2個(gè)3.3V電源接口、8個(gè)地接口,使用的時(shí)候一定先要清楚選擇了那套編號方式,相應(yīng)的庫是否支持。

提示:

  • 通電后不要使用金屬物體(如螺絲刀等)接觸GPIO接口,或短接GPIO引腳。
  • 外接輸入輸出設(shè)備時(shí),要先仔細(xì)了解設(shè)備的額定功率(含電壓和電流),不要直接連接高功耗元件(如直流電機(jī)等),或輸出電壓超3.3V的設(shè)備。當(dāng)使用低功率LED時(shí),最好在LED的正極串聯(lián)一個(gè)限流電阻。
  • GPIO工作在3.3V邏輯電平上,0V表示邏輯0,3.3V則表示邏輯1。調(diào)試GPIO程序時(shí),可以使用萬用表測試GPIO引腳電壓,判斷輸出是否正確。
  • GPIO接口僅提供數(shù)字的輸入和輸出,當(dāng)需要用到模擬輸入時(shí),可以使用ADC芯片或采用電阻式傳感器來實(shí)現(xiàn)。

5.3 點(diǎn)亮LED燈

?  在前面的章節(jié)中,我們已經(jīng)介紹了大量的基礎(chǔ)理論,接下來我們將進(jìn)入實(shí)戰(zhàn),開始有趣的實(shí)驗(yàn)。本節(jié)將介紹如何使用樹莓派控制一個(gè)LED燈,您將看到一個(gè)LED燈在樹莓派的控制下不停的閃爍。

5.3.1 實(shí)驗(yàn)電路

?  本實(shí)驗(yàn)的電路原理圖如圖5.2所示,一個(gè)紅色發(fā)光二極管正極通過一個(gè)限流電阻串連到樹莓派的GPIO19上,負(fù)極則連接到樹莓派的GND上,從而形成一個(gè)完整的回路。

圖 5.2 樹莓派點(diǎn)亮LED電路圖

?  GPIO引腳的輸出電壓約為3.3V,高于LED上約1.7V的壓降,如果直接串聯(lián),會(huì)有一個(gè)非常大的電流通過LED,這個(gè)電流通常大到可以損壞LED,甚至供電設(shè)備。因此,需要在LED和電源(GPIO引腳)間串聯(lián)一個(gè)電阻限制電流,從而對LED和為其供電的GPIO引腳提供保護(hù)。不同廠家,不同顏色壓降略有區(qū)別,我們假設(shè)所用LED的壓降為1.8V,GPIO引腳的電流為3mA,限流電阻大小的計(jì)算方法如下:

R = ( 3.3V - 1.8V ) / 3mA = 500Ω  

?  因此,我們選擇使用一個(gè)1kΩ的電阻。該電路的最終實(shí)物連線圖如圖5.3所示。

圖 5.3 電路實(shí)物連接圖

提示:

  • 除了使用以上的方法計(jì)算限流電阻的值,您還可以訪問類似實(shí)用工具大全http://tool.520101.com/網(wǎng)站,使用網(wǎng)站提供的LED限流電阻計(jì)算器進(jìn)行計(jì)算。實(shí)際上,這個(gè)網(wǎng)站還提供了不少實(shí)用的電子電路計(jì)算工具,非常有助于我們后續(xù)章節(jié)的學(xué)習(xí)。
  • 限流電阻的阻值不應(yīng)太小,也不能太大。太小,則起不到限流的作用;太大,則LED的亮度會(huì)比較暗。
  • 為保障樹莓派主板和電子元件的安全,連線工作應(yīng)在為斷電的情況下進(jìn)行,并在確定線路連接無誤后再通電。

5.3.2 程序思路

?  程序的基本設(shè)計(jì)思路如下:

BEGIN  
    引入GPIO庫  
    引入time庫  
    將GPIO19設(shè)置為輸出模式  
    DO FOREVER  
        點(diǎn)亮LED
        等待1秒鐘
        熄滅LED
        等待1秒鐘
    ENDO
    清理釋放GPIO資源
END

5.3.3 程序代碼

?  Python操作GPIO需要用到RPi.GPIO庫,Raspbian系統(tǒng)默認(rèn)未安裝這個(gè)庫,所以請先使用XShell遠(yuǎn)程登錄樹莓派運(yùn)行以下命令安裝RPi.GPIO庫。

sudo apt install python3-rpi.gpio  

?  RPi.GPIO庫安裝完畢后,按照第4章介紹的方法新建一個(gè)項(xiàng)目,然后輸入以下代碼并運(yùn)行,運(yùn)行效果如圖5.4所示。程序的詳細(xì)說明見注釋,這里我們使用了try: Finally: 結(jié)構(gòu)捕捉異常,確保當(dāng)我們中斷程序時(shí)(如使用Ctrl+C或者操作系統(tǒng)提供的方法),GPIO.cleanup()函數(shù)能被執(zhí)行,以清理釋放GPIO資源。在Pycharm下運(yùn)行程序時(shí),點(diǎn)擊工具欄上的Stop按鈕也可以中斷程序。

import RPi.GPIO as GPIO                 # 引入GPIO模塊  
import time                             # 引入time模塊  

GPIO.setmode(GPIO.BCM)                  # 使用BCM編號方式  

GPIO.setup(19, GPIO.OUT)                # 將GPIO19設(shè)置為輸出模式  

if __name__ == '__main__':
    try:
        while True:                     # 無限循環(huán)  
            GPIO.output(19, True)       # 將GPIO19設(shè)置為高電平,點(diǎn)亮LED  
            time.sleep(1)               # 等待1秒鐘  
            GPIO.output(19, False)      # 將GPIO19設(shè)置為低電平,熄滅LED  
            time.sleep(1)               # 等待1秒鐘  
    finally:
        GPIO.cleanup()                  # 清理釋放GPIO資源,將GPIO復(fù)位  
圖 5.4 實(shí)驗(yàn)運(yùn)行效果

5.4 本章小結(jié)

?  本章首先介紹搭建一個(gè)樹莓派多功能實(shí)驗(yàn)平臺所需的材料及其功能用途,然后詳細(xì)介紹了樹莓派GPIO引腳的三種編號方式、功能和使用注意事項(xiàng),最后介紹用樹莓派點(diǎn)亮一個(gè)LED燈的電路、程序設(shè)計(jì)思路和代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容