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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用樹莓派GPIO口點亮雙色LED燈

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

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

一、從了解GPIO開始

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

樹莓派引腳分類

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

圖片

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

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

圖片

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

圖片

圖片

  • 耐心等待它的安裝完成。當我們看到下面的界面沒有任何錯誤時,就意味著安裝完成了。
  • 輸入以下命令查看gpio的版本。
gpio -v

圖片

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

圖片

使用RPi.GPIO模塊

RPi.GPIO是Python的一個模塊,樹莓派默認已經安裝了該模塊。本節(jié)詳細介紹如何使用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)

其中狀態(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、清理所有使用的通道

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

GPIO.cleanup()

二、實驗——樹莓派GPIO口控制雙色LED燈

1、簡介

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

圖片

2、組件

1、樹莓派主板*1

2、樹莓派電源*1

3、40P軟排線*1

4、雙色LED模塊*1

5、面包板*1

6、杜邦線、跳線若干

3、實驗原理

將引腳S(綠色)和中間管腳R(紅色)連接到樹莓派的GPO 接口上,對樹莓派進行編程控制,將LED的顏色從紅色變?yōu)榫G色,然后使用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、代碼實現(xiàn)

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

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

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)     # 改變占空比


# 調用循環(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)    # 關閉所有LED
    GPIO.cleanup()                          # 釋放資源


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

    關注

    22

    文章

    1592

    瀏覽量

    108106
  • 操作系統(tǒng)

    關注

    37

    文章

    6847

    瀏覽量

    123424
  • 串口通訊
    +關注

    關注

    1

    文章

    260

    瀏覽量

    24971
  • GPIO
    +關注

    關注

    16

    文章

    1206

    瀏覽量

    52173
  • 樹莓派
    +關注

    關注

    117

    文章

    1709

    瀏覽量

    105716
收藏 人收藏

    評論

    相關推薦

    基于51單片機通過GPIO點亮LED

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

    樹莓2控制一個LED

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

    【MaaXBoard開發(fā)板試用體驗】九終于通過GPIO點亮LED

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

    樹莓如何點亮一個LED?

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

    樹莓GPIO有哪些電氣特性

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

    如何利用stm32的GPIO點亮一個LED

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

    LED實驗的相關資料下載

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

    樹莓gpio接口及編程方法

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

    樹莓gpio有什么用_怎么用

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

    STM32的GPIO輸出編程實例之點亮LED

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

    樹莓GPIO入門07-利用聲音傳感器制作聲控

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

    樹莓教程1_點亮第一個led

    ,不知不覺中,我們已經成為了人們口中常常提到的“一大師?”。今天,我們來學習樹莓的使用,依舊從點燈開始,用點燈的方式一步步點亮我們的世界。?實驗原理同過
    發(fā)表于 04-02 14:45 ?1813次閱讀

    關閉樹莓電源LED,禁用wifi、藍牙

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

    樹莓zero不亮_關閉樹莓的電源、狀態(tài)、網指示

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

    基于樹莓點亮RGB三基色LED

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