0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用樹(shù)莓派GPIO口點(diǎn)亮雙色LED燈

CHANBAEK ? 來(lái)源:容里與良鹿 ? 作者:張凱 ? 2023-07-04 11:34 ? 次閱讀

上一篇文章向大家介紹樹(shù)莓派硬件部分、安裝操作系統(tǒng)及基礎(chǔ)設(shè)置。這篇文章將介紹樹(shù)莓派的強(qiáng)大的開(kāi)發(fā)功能口——GPIO,以及利用GPIO口點(diǎn)亮雙色LED燈(樹(shù)莓派的第一個(gè)基本實(shí)驗(yàn))。具有一定的參考價(jià)值,需要的朋友可以參考一下。

一、從了解GPIO開(kāi)始

GPIO全稱:通用型輸入輸出端口(General-purpose input/output),其引腳能夠供使用者自由的進(jìn)行使用,可以對(duì)其進(jìn)行輸入,也可以讀取其數(shù)據(jù)進(jìn)行數(shù)據(jù)輸出,這些引腳的輸入或輸出都會(huì)關(guān)聯(lián)到某個(gè)寄存器,寄存器的值控制引腳的電平高低。

樹(shù)莓派引腳分類

  • 電源引腳:5v,3.3v,GND(Ground)。
  • 常規(guī)GPIO控制引腳:可以通過(guò)編寫(xiě)程序控制這些引腳的高低電平。
  • 特殊GPIO通訊引腳: SPI通訊,12C通訊,TxD/RxD串口通訊。
    樹(shù)莓派引腳編碼
  • 功能物理引腳:這種編碼方式是按照樹(shù)莓派主板上引腳排針編號(hào)。分別對(duì)應(yīng)1~40號(hào)排針。從左到右,從上到下:左邊奇數(shù),右邊偶數(shù)。
  • BCM:這種方式是參考 Broadcom SOC的通道編號(hào)側(cè)重CPU寄存器。使用Python控制樹(shù)莓派引腳時(shí),使用的是WiringPi編碼。
  • WiringPi編碼:WiringPi編碼,把擴(kuò)展GPIO端口從0開(kāi)始編碼。使用 C語(yǔ)言控制樹(shù)莓派引腳時(shí),使用的是WiringPi編碼。
    圖片
    窗口查看引腳編號(hào)
    1、在終端輸入指令:
    pinout
    

圖片

2、使用樹(shù)莓派輸入gpio readall命令查看pin狀態(tài)

  • 輸入以下命令安裝Git:
sudo apt install git-core
  • 輸入以下命令,將 WiringPi 文件下載到樹(shù)莓派系統(tǒng)的當(dāng)前目錄。
sudo git clone https://github.com/WiringPi/WiringPi
  • 耐心等待其安裝完成。下載完成后,我們可以在當(dāng)前目錄下看到一個(gè)WiringPi文件夾。如下所示。

圖片

  • 輸入以下命令進(jìn)入 WiringPi 文件夾目錄。
cd WiringPi/
  • 輸入以下命令安裝 WiringPi。
sudo ./build

圖片

圖片

  • 耐心等待它的安裝完成。當(dāng)我們看到下面的界面沒(méi)有任何錯(cuò)誤時(shí),就意味著安裝完成了。
  • 輸入以下命令查看gpio的版本。
gpio -v

圖片

  • 最后,我們可以查看樹(shù)莓派各個(gè)管腳的狀態(tài),輸入指令:
gpio readall

圖片

使用RPi.GPIO模塊

RPi.GPIO是Python的一個(gè)模塊,樹(shù)莓派默認(rèn)已經(jīng)安裝了該模塊。本節(jié)詳細(xì)介紹如何使用Python的RPi.GPIO模塊控制GPIO。

1、導(dǎo)入RPi.GPIO模塊

import RPi.GPIO as GPIO

2、設(shè)置指定模式(強(qiáng)制)管腳編號(hào)

GPIO.setmode(GPIO.BOARD)  #物理引腳編碼
GPIO.setmode(GPIO.BCM)    #BCM編碼

3、設(shè)置禁用警告

如果GRIO檢測(cè)到一個(gè)引腳已經(jīng)被設(shè)置成了非默認(rèn)值,可以使用setwarnings()關(guān)閉警告信息。

GPIO.setwarnings(False)

4、設(shè)置引腳輸入和輸出

要將通道配置為輸入:

GPIO.setup(channel, GPIO.IN)
要將通道設(shè)置為輸出,請(qǐng)調(diào)用:
GPIO.setup(channel, GPIO.OUT)

為輸出通道指定一個(gè)初始值:

GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

將通道設(shè)置為輸出時(shí),同時(shí)設(shè)置多個(gè)通道:

channels = [18, 12, 13]
GPIO.setup(channels, GPIO.OUT)

要讀取通道的值:

GPIO.input(channel)  #返回 GPIO.LOW 或 GPIO.HIGH。

要設(shè)置配置為輸出的引腳的值:

GPIO.output(channel, state)

其中狀態(tài)可以是 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、清理所有使用的通道

在程序結(jié)束時(shí),最好清理通道,以便將所有引腳設(shè)置為默認(rèn)狀態(tài)。

GPIO.cleanup()

二、實(shí)驗(yàn)——樹(shù)莓派GPIO口控制雙色LED燈

1、簡(jiǎn)介

雙色LED燈(雙基色 LED燈),是指模塊只能顯示2種顏色,一般是紅色和綠色,可以有三種狀態(tài):滅、顏色1亮、顏色2亮;根據(jù)顏色組合的不同,分為紅藍(lán)雙色,黃藍(lán)雙色,紅綠雙色等等。雙色 LED常于指示狀態(tài):比如紅色表示設(shè)備異常,綠色表示正常。

圖片

2、組件

1、樹(shù)莓派主板*1

2、樹(shù)莓派電源*1

3、40P軟排線*1

4、雙色LED模塊*1

5、面包板*1

6、杜邦線、跳線若干

3、實(shí)驗(yàn)原理

將引腳S(綠色)和中間管腳R(紅色)連接到樹(shù)莓派的GPO 接口上,對(duì)樹(shù)莓派進(jìn)行編程控制,將LED的顏色從紅色變?yōu)榫G色,然后使用PWM混合其他顏色。

該模塊的原理圖如下所示:

圖片

4、實(shí)驗(yàn)步驟

連接電路。將樹(shù)莓派通過(guò)T型轉(zhuǎn)接板連接到面包板,樹(shù)莓派GPIO 11即T型轉(zhuǎn)接板GPIO 17,“紅白線”連接雙色LED模塊R端子;樹(shù)莓派GPIO 12 即T型轉(zhuǎn)接板GPIO 18,“綠白線”連接雙色LED模塊G端子;樹(shù)莓派GND即T型轉(zhuǎn)接板GND,“黑線”連接雙色LED模塊GND端子。

樹(shù)莓派 面包板 雙色LED模塊
GPIO1 GPIO18 G(S)
GPIO0 GPIO17 R(中間)
GND GND GND

圖片

圖片

5、代碼實(shí)現(xiàn)

WM的頻率:P決定了輸出的數(shù)字信號(hào)on (1) 和 off(0 )的切換速度,頻率越高,切換就越快。

占空比:指一串理想脈沖序列中,正脈沖的持續(xù)時(shí)間與脈沖總周期的比值,用來(lái)調(diào)節(jié)燈的亮度。

import RPi.GPIO as GPIO
import time


colors = [0xFF00, 0x00FF, 0x0FF0, 0xF00F]
makerobo_pins = (11, 12)  # PIN管腳字典


GPIO.setmode(GPIO.BOARD)     # 采用實(shí)際的物理管腳給GPIO口
GPIO.setwarnings(False)      # 去除GPIO口警告
GPIO.setup(makerobo_pins, GPIO.OUT)   # 設(shè)置Pin模式為輸出模式
GPIO.output(makerobo_pins, GPIO.LOW)  # 設(shè)置Pin管腳為低電平(0V)關(guān)閉LED


p_R = GPIO.PWM(makerobo_pins[0], 2000)  # 設(shè)置頻率為2KHz
p_G = GPIO.PWM(makerobo_pins[1], 2000)  # 設(shè)置頻率為2KHz


# 初始化占空比為0(led關(guān)閉)
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)     # 改變占空比


# 調(diào)用循環(huán)函數(shù)
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)    # 關(guān)閉所有LED
    GPIO.cleanup()                          # 釋放資源


# 程序入口
if __name__ == "__main__":
    try:
        makerobo_loop()       # 調(diào)用循環(huán)函數(shù)
    except KeyboardInterrupt:  # 當(dāng)按下Ctrl+C時(shí),將執(zhí)行destroy()子程序。
        makerobo_destroy()    # 釋放資源
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1592

    瀏覽量

    107670
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6620

    瀏覽量

    123044
  • 串口通訊
    +關(guān)注

    關(guān)注

    1

    文章

    257

    瀏覽量

    24788
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1184

    瀏覽量

    51749
  • 樹(shù)莓派
    +關(guān)注

    關(guān)注

    116

    文章

    1684

    瀏覽量

    105402
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于51單片機(jī)通過(guò)GPIO點(diǎn)亮LED

    在之前的教程中,我們成功搭建了開(kāi)發(fā)環(huán)境,初步對(duì)開(kāi)發(fā)板的GPIO有了一定的了解,在本教程中,我們將帶領(lǐng)大家制作第一個(gè)工程,就是通過(guò)GPIO來(lái)點(diǎn)亮
    發(fā)表于 07-17 14:18 ?5219次閱讀
    基于51單片機(jī)通過(guò)<b class='flag-5'>GPIO</b><b class='flag-5'>口</b><b class='flag-5'>點(diǎn)亮</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    樹(shù)莓2控制一個(gè)LED

    ` 本帖最后由 348081236 于 2016-1-19 16:57 編輯 這個(gè)教程教你怎樣用樹(shù)莓控制一個(gè)LED。這是比較基礎(chǔ)、簡(jiǎn)單、適合新手的。先從一個(gè)
    發(fā)表于 01-19 16:55

    【MaaXBoard開(kāi)發(fā)板試用體驗(yàn)】九終于通過(guò)GPIO點(diǎn)亮LED!

    `折騰了一周,終于用GPIO點(diǎn)亮LED了,拍照留念下!說(shuō)說(shuō)GPIO,以為和 樹(shù)莓
    發(fā)表于 10-31 21:57

    樹(shù)莓如何點(diǎn)亮一個(gè)LED?

    本章將簡(jiǎn)介在樹(shù)莓派上面通過(guò)shell,sysfs,bcm2835,wiringPi,python等不同的編程方式點(diǎn)亮一個(gè)LED。
    發(fā)表于 11-05 07:04

    樹(shù)莓GPIO有哪些電氣特性

    GPIO是如何去定義的?樹(shù)莓GPIO有哪些電氣特性?
    發(fā)表于 11-08 07:30

    如何利用stm32的GPIO點(diǎn)亮一個(gè)LED

    stm32的GPIO的基本結(jié)構(gòu)是怎樣構(gòu)成的?stm32的GPIO的工作模式有哪幾種呢?如何利用stm32的GPIO
    發(fā)表于 12-15 07:04

    LED實(shí)驗(yàn)的相關(guān)資料下載

    樹(shù)莓LED實(shí)驗(yàn)簡(jiǎn)介一、實(shí)驗(yàn)效果二、組件三、實(shí)驗(yàn)原理四、實(shí)驗(yàn)步驟五、代碼實(shí)現(xiàn)簡(jiǎn)介
    發(fā)表于 01-05 07:12

    樹(shù)莓gpio接口及編程方法

    樹(shù)莓現(xiàn)在越來(lái)越火,網(wǎng)上樹(shù)莓的資料也越來(lái)越多。樹(shù)莓源自英國(guó),國(guó)外嵌入式開(kāi)源領(lǐng)域具有良好的分享
    發(fā)表于 11-22 11:54 ?6.5w次閱讀

    樹(shù)莓gpio有什么用_怎么用

    樹(shù)莓現(xiàn)在越來(lái)越火,網(wǎng)上樹(shù)莓的資料也越來(lái)越多。樹(shù)莓源自英國(guó),國(guó)外嵌入式開(kāi)源領(lǐng)域具有良好的分享
    發(fā)表于 12-06 09:05 ?1.6w次閱讀

    STM32的GPIO輸出編程實(shí)例之點(diǎn)亮LED

    本實(shí)驗(yàn)通過(guò)STM32的三個(gè)GPIO驅(qū)動(dòng)三LED的三個(gè)通道,將GPIO設(shè)置為推挽輸出模式,采用灌電流的方式與
    的頭像 發(fā)表于 02-07 11:14 ?2.8w次閱讀
    STM32的<b class='flag-5'>GPIO</b>輸出編程實(shí)例之<b class='flag-5'>點(diǎn)亮</b>三<b class='flag-5'>色</b><b class='flag-5'>LED</b>

    樹(shù)莓GPIO入門(mén)07-利用聲音傳感器制作聲控

    本文我們用聲音傳感器來(lái)制作一個(gè)簡(jiǎn)易的聲控。最終效果樹(shù)莓GPIO入門(mén)07-利用聲音傳感器制作聲控視頻演示:硬件面包板杜邦
    發(fā)表于 04-02 14:41 ?2000次閱讀

    樹(shù)莓教程1_點(diǎn)亮第一個(gè)led

    ,不知不覺(jué)中,我們已經(jīng)成為了人們口中常常提到的“一大師?”。今天,我們來(lái)學(xué)習(xí)樹(shù)莓的使用,依舊從點(diǎn)燈開(kāi)始,用點(diǎn)燈的方式一步步點(diǎn)亮我們的世界。?實(shí)驗(yàn)原理同過(guò)
    發(fā)表于 04-02 14:45 ?1724次閱讀

    關(guān)閉樹(shù)莓電源LED,禁用wifi、藍(lán)牙

    在關(guān)閉樹(shù)莓的電源指示和狀態(tài)指示中,對(duì)關(guān)閉樹(shù)莓指示
    發(fā)表于 01-06 11:55 ?3次下載
    關(guān)閉<b class='flag-5'>樹(shù)莓</b><b class='flag-5'>派</b>電源<b class='flag-5'>LED</b><b class='flag-5'>燈</b>,禁用wifi、藍(lán)牙

    樹(shù)莓zero不亮_關(guān)閉樹(shù)莓的電源、狀態(tài)、網(wǎng)指示

    關(guān)閉樹(shù)莓的指示我有幾個(gè)樹(shù)莓放在房間內(nèi),每天晚上都看到指示的閃光,感覺(jué)有
    發(fā)表于 01-11 09:28 ?9次下載
    <b class='flag-5'>樹(shù)莓</b><b class='flag-5'>派</b>zero不亮_關(guān)閉<b class='flag-5'>樹(shù)莓</b><b class='flag-5'>派</b>的電源、狀態(tài)、網(wǎng)<b class='flag-5'>口</b>指示<b class='flag-5'>燈</b>

    基于樹(shù)莓點(diǎn)亮RGB三基色LED

    上一篇實(shí)現(xiàn)了樹(shù)莓的第一個(gè)基礎(chǔ)實(shí)驗(yàn)——點(diǎn)亮LED
    的頭像 發(fā)表于 07-04 11:34 ?1878次閱讀
    基于<b class='flag-5'>樹(shù)莓</b><b class='flag-5'>派</b><b class='flag-5'>點(diǎn)亮</b>RGB三基色<b class='flag-5'>LED</b><b class='flag-5'>燈</b>