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

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

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

使用GPIO Zero讓GPIO變得更容易

李中宏 ? 來(lái)源:DevicePlus ? 作者:DevicePlus ? 2023-03-01 10:51 ? 次閱讀

這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。

為兒童和年輕人開發(fā)的用于GPIO控制的簡(jiǎn)單Python庫(kù)

如果您有過(guò)為Raspberry Pi的GPIO 引腳編寫代碼的經(jīng)驗(yàn),那么估計(jì)您已經(jīng)使用過(guò)Python以及GPIO Zero模塊了,因?yàn)檫@是最簡(jiǎn)單的入門方式。
但是模塊的簡(jiǎn)單不意味著其缺乏靈活性和功能性。

GPIO Zero 完成所有工作細(xì)節(jié)的處理

GPIO Zero并不是之前Raspberry Pi上用于GPIO的Python模塊的替代品,而是構(gòu)建在那些模塊之上。
GPIO使用RPi.GPIO來(lái)進(jìn)行大多數(shù)操作,同時(shí)會(huì)混合使用PiGPIO和RPIO。

為什么不直接使用這些模塊?

因?yàn)镚PIO Zero已經(jīng)為您完成了很多工作細(xì)節(jié)的處理,您在項(xiàng)目中只需輸入幾行代碼就可以了。
來(lái)看一下這些代碼:
pir = MotionSensor(4)
pir.when_motion = myFunction
第一個(gè)指令表示引腳4上有一個(gè)運(yùn)動(dòng)傳感器,第二個(gè)指令設(shè)置了一個(gè)在傳感器產(chǎn)生脈沖信號(hào)時(shí)運(yùn)行的函數(shù)。真的很簡(jiǎn)單,對(duì)吧?

它是面向?qū)ο蟮?/p>

GPIO Zero通過(guò)為您可能連接到GPIO引腳的常見(jiàn)組件提供一系列配置好的類來(lái)進(jìn)行工作。您可以使用這些類來(lái)創(chuàng)建與連接到GPIO引腳的特定組件相關(guān)聯(lián)的對(duì)象。
您在剛開始最感興趣的類應(yīng)該是輸入類和輸出類,它們包括了一系列標(biāo)準(zhǔn)輸入和輸出組件。
除此之外還有其他多種類,比如用于將數(shù)據(jù)流式傳輸?shù)狡渌M件的SPI類,以及您可以用來(lái)創(chuàng)建自己的類的基類和通用類。暫時(shí)不用為這些類的使用擔(dān)心,目前您只要知道有這些類存在就可以了。

安裝和導(dǎo)入GPIO Zero

GPIO Zero已經(jīng)安裝在了標(biāo)準(zhǔn)Raspbian映像上。如果您使用的是Raspbian Lite,或者更特別的Linux,那么您需要對(duì)其進(jìn)行安裝。
您可以使用以下指令將整個(gè)模塊導(dǎo)入到Python中:
import gpiozero
然后,您可以通過(guò)在類前加上“gpiozero”來(lái)對(duì)其進(jìn)行引用,如下所示:
button = gpiozero.Button(11)
greenLED = gpiozero.LED(13)
pir = gpiozero.MotionSensor(15)
只導(dǎo)入您正在使用的特定組件所需要的類會(huì)更方便一些:
from gpiozero import Button, LED, MotionSensor
這樣,您就可以在不帶前綴的情況下對(duì)其進(jìn)行引用了,如下所示:
button = Button(11)
greenLED = LED(13)
pir = MotionSensor(15)
如此一來(lái),您的代碼就不會(huì)因?yàn)槿哂?a target="_blank">信息而變得雜亂無(wú)章,從而變得更具有可讀性。

使用GPIO Zero,通過(guò)按下按鈕播放聲音

讓我們通過(guò)將按鈕連接到GPIO引腳來(lái)嘗試在壓電蜂鳴器上播放一系列聲音,感受一下GPIO Zero的使用有多么簡(jiǎn)單。
為此,您將需要:

一個(gè)帶電源的Raspberry Pi以及一個(gè)安裝了Raspbian的SD pYYBAGPzHTCAPeTzAAAZXrMS0tI642.jpg
一個(gè)面包板

poYBAGPy0t6AI3TuAAAWaY2q8tc733.jpg

一個(gè)GPIO擴(kuò)展板

poYBAGPzHXeARu3AAAApSEMweUA937.jpg

您還需要一個(gè)壓電蜂鳴器、下推式開關(guān)、幾根跨接電纜以及某種Raspberry Pi的輸入設(shè)備,例如SSH連接或者USB鍵盤和鼠標(biāo)。準(zhǔn)備好了嗎?讓我們開始吧!

連接壓電蜂鳴器

如果您的GPIO擴(kuò)展板尚未連接到Raspberry Pi和面包板,請(qǐng)將它們連接在一起。然后將接地引腳連接到負(fù)電源軌。
您的壓電蜂鳴器應(yīng)該有一根紅線和一根黑線。紅線連接到來(lái)自GPIO引腳的正電壓,黑線接地。

poYBAGPzHYWAPsplAACRmxEckW8987.jpg


我使用跨接電纜將蜂鳴器連接到面包板,您也可以直接將其插入。將蜂鳴器的黑色導(dǎo)線連接到負(fù)電源軌,紅色導(dǎo)線連接到面包板中間的某處。
現(xiàn)在,將面包板的這一排連接到GPIO引腳。我使用的是引腳13。

pYYBAGPzHYiAXPgtAAFCNLisIO0755.jpg

讓這個(gè)小器件尖叫起來(lái)

為此,需要打開Python解釋器。輸入:
python3
現(xiàn)在,我們需要為壓電蜂鳴器導(dǎo)入一個(gè)類,并使用它來(lái)創(chuàng)建一個(gè)對(duì)象。實(shí)際上有兩個(gè)類:Buzzer,只發(fā)出簡(jiǎn)單的嗶嗶聲;以及TonalBuzzer,可以讓您改變音調(diào)。
我們將要播放幾種不同的音調(diào),因此需要導(dǎo)入TonalBuzzer并將其設(shè)置為引腳13。
from gpiozero import TonalBuzzer
piezo = TonalBuzzer(13)
如果所有連接都正確,當(dāng)您輸入以下內(nèi)容時(shí)將會(huì)發(fā)出尖銳的聲音:
piezo.play(‘A4’)
并且在您停止程序之前將會(huì)持續(xù)下去,停止程序的代碼為:
piezo.stop()
您也可以播放其他音調(diào)的聲音!請(qǐng)嘗試以下指令:
piezo.play(‘C4’)
piezo.play(‘D4’)
piezo.play(‘E4’)

編寫播放一系列聲音的程序

現(xiàn)在讓我們把所有的指令放入同一個(gè)函數(shù)中,從而實(shí)現(xiàn)以不同的音調(diào)發(fā)出嗶嗶聲。我們將在一開始從time模塊中導(dǎo)入sleep函數(shù),這樣就可以避免播放過(guò)快而錯(cuò)過(guò)了某個(gè)聲音。
from time import sleep
現(xiàn)在讓我們來(lái)定義一個(gè)簡(jiǎn)單的函數(shù),該函數(shù)的功能是播放特定音調(diào)的蜂鳴聲一秒鐘。請(qǐng)記住Python對(duì)縮進(jìn)很敏感。
def playTone(pitch):
piezo.play(pitch)
sleep(1)
piezo.stop()
再次按回車鍵,讓Python知道您已經(jīng)完成了函數(shù)的編寫。檢查一下是否工作正常也是個(gè)不錯(cuò)的主意。
playTone(‘A4’)
playTone(‘C4’)
每個(gè)指令運(yùn)行后應(yīng)會(huì)各自發(fā)出不同音調(diào)的嗶嗶聲。如果不是的話,請(qǐng)檢查輸入的內(nèi)容是否正確。
現(xiàn)在我們可以定義另外一個(gè)便捷的函數(shù),該函數(shù)的功能是以不同的音調(diào)播放三次嗶嗶聲。
def playTones():
playTone(‘A4’)
playTone(‘D4’)
playTone(‘E4’)
再次按下回車鍵完成該函數(shù),然后檢查是否工作正常。
playTones()
一切正常嗎?太棒了。

與按鈕連接

剩下的工作就是連接一個(gè)按鈕并進(jìn)行編程,以使其能夠控制聲音的播放。
將按鈕放置在面包板上,并跨越中心溝槽。
然后使用跨接電纜將按鈕的一個(gè)角連接到負(fù)電源軌,對(duì)角線相對(duì)的角連接到GPIO引腳,我使用的是引腳12。
現(xiàn)在,我們導(dǎo)入GPIO Zero中的Button類,并將其設(shè)置為引腳12:
from gpiozero import Button
button = Button(12)
接下來(lái)要做的就是使程序在按下按鈕時(shí)運(yùn)行我們的函數(shù)。
button.when_pressed = playTones
現(xiàn)在按下按鈕。如果所有操作正確,此時(shí)將會(huì)播放聲音。
GPIO Zero 讓一切變得簡(jiǎn)單
是不是很簡(jiǎn)單?我們只用了三行代碼就配置了按鈕。
雖然表面看上去很簡(jiǎn)單,但其實(shí)其中涉及了很多內(nèi)容:上拉和下拉電阻以及高電平有效和低電平有效信號(hào)。不同的音調(diào)是使用一種被稱為“脈沖寬度調(diào)制”的技術(shù)生成的,其中引腳通過(guò)在啟動(dòng)和關(guān)閉之間快速轉(zhuǎn)換來(lái)模仿模擬電壓。GPIO Zero已經(jīng)完成了所有這些工作的預(yù)配置。
當(dāng)您掌握了基本要領(lǐng)后,就可以開始嘗試進(jìn)行所有這些內(nèi)容了。
與此同時(shí),敬請(qǐng)享受通過(guò)GPIO Zero構(gòu)建和學(xué)習(xí)項(xiàng)目的樂(lè)趣吧!

pYYBAGPbhjqAbi1JAAAGd6_rQT0867.png

DevicePlus 編輯團(tuán)隊(duì)

設(shè)備升級(jí)版適用于所有熱愛(ài)電子和機(jī)電一體化的人。


審核編輯黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52102
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GPIO內(nèi)部電路的原理

    前言 筆者近日在B站刷到了一個(gè)視頻,使我對(duì)GPIO的I/O口內(nèi)部基本結(jié)構(gòu)以及工作原理有了恍然大明白的理解,現(xiàn)在對(duì)此做一個(gè)總結(jié),并為大家推薦該視頻Keysking 【STM32】GPIO內(nèi)部電路
    的頭像 發(fā)表于 11-20 09:24 ?308次閱讀
    <b class='flag-5'>GPIO</b>內(nèi)部電路的原理

    STM32 GPIO的八種工作模式

    GPIO (general purpose input output)是通用輸入輸出端口的簡(jiǎn)稱,簡(jiǎn)單來(lái)說(shuō)就是軟件可控制的引腳,STM32芯片的GPIO引腳與外部設(shè)備連接起來(lái),從而實(shí)現(xiàn)與外部通訊、控制以及數(shù)據(jù)采集的功能。
    的頭像 發(fā)表于 11-06 09:40 ?616次閱讀
    STM32 <b class='flag-5'>GPIO</b>的八種工作模式

    SOC GPIO操作

    sapphire Soc提供了兩個(gè)GPIO組每組有4個(gè)GPIO,定義為GPIO[3:0],其中只有GPIO[1:0]可以支持中斷。中斷在程序中打開了
    的頭像 發(fā)表于 11-01 11:06 ?144次閱讀

    樹莓派gpio有什么用,樹莓派gpio接口及編程方法

    一、樹莓派GPIO的用途 樹莓派(Raspberry Pi)是一款小巧、功能強(qiáng)大的單板計(jì)算機(jī),廣泛應(yīng)用于編程教育、物聯(lián)網(wǎng)項(xiàng)目、家庭媒體中心等領(lǐng)域。GPIO(General Purpose Input
    的頭像 發(fā)表于 10-22 18:09 ?865次閱讀

    gpio接口是干什么的 gpio四種輸入輸出模式怎么選擇

    GPIO接口的作用 GPIO(General Purpose Input/Output)接口,即通用輸入輸出接口,是一種用于連接和控制各種外部設(shè)備的數(shù)字接口。它由一組引腳組成,可以通過(guò)編程的方式控制
    的頭像 發(fā)表于 10-06 16:07 ?2764次閱讀

    TPS6598x GPIO事件

    電子發(fā)燒友網(wǎng)站提供《TPS6598x GPIO事件.pdf》資料免費(fèi)下載
    發(fā)表于 09-30 10:32 ?0次下載
    TPS6598x <b class='flag-5'>GPIO</b>事件

    TPS65987D GPIO事件

    電子發(fā)燒友網(wǎng)站提供《TPS65987D GPIO事件.pdf》資料免費(fèi)下載
    發(fā)表于 09-23 11:09 ?0次下載
    TPS65987D <b class='flag-5'>GPIO</b>事件

    GPIO轉(zhuǎn)換電壓

    電子發(fā)燒友網(wǎng)站提供《為GPIO轉(zhuǎn)換電壓.pdf》資料免費(fèi)下載
    發(fā)表于 09-21 11:05 ?0次下載
    為<b class='flag-5'>GPIO</b>轉(zhuǎn)換電壓

    GPIO靜電放電防護(hù)方案

    GPIO靜電放電防護(hù)方案 方案簡(jiǎn)介 GPIO的全稱是General Purpose Input Output (通用輸入/輸出端口),簡(jiǎn)稱為GPIO或總線擴(kuò)展器,是一種在微控制器、微處理器、以及
    的頭像 發(fā)表于 09-19 17:02 ?354次閱讀
    <b class='flag-5'>GPIO</b>靜電放電防護(hù)方案

    GPIO引腳提供ESD保護(hù)

    電子發(fā)燒友網(wǎng)站提供《為GPIO引腳提供ESD保護(hù).pdf》資料免費(fèi)下載
    發(fā)表于 08-28 11:01 ?0次下載
    為<b class='flag-5'>GPIO</b>引腳提供ESD保護(hù)

    STM32 GPIO八種模式及工作原理詳解

    一. 前言 ??GPIO全稱General Purpose Input Output,是微控制數(shù)字輸入/輸出的基本模塊,可以實(shí)現(xiàn)微控制器與外部環(huán)境的數(shù)字進(jìn)行交換。借助GPIO微控制器可以實(shí)現(xiàn)對(duì)外
    的頭像 發(fā)表于 07-22 09:32 ?6400次閱讀
    STM32 <b class='flag-5'>GPIO</b>八種模式及工作原理詳解

    快速搞懂GPIO控制器的六種模式

    在嵌入式系統(tǒng)和單片機(jī)開發(fā)中,GPIO(通用輸入輸出)控制器是一個(gè)非常重要的組件。GPIO引腳的靈活性使它們能夠執(zhí)行多種功能,從簡(jiǎn)單的輸入輸出到復(fù)雜的通信任務(wù)。為了幫助大家快速了解和掌握GPIO控制器
    的頭像 發(fā)表于 05-18 08:04 ?1504次閱讀
    快速搞懂<b class='flag-5'>GPIO</b>控制器的六種模式

    什么是GPIO?GPIO組成原理

    GPIO全拼叫General Purpose Input Output(通用輸入輸出)簡(jiǎn)稱IO口也叫總線擴(kuò)展器,GPIO口是由引腳,功能寄存器組成,不同的架構(gòu)中的GPIO封裝不同,所使用的引腳數(shù)與寄存器數(shù)不同,具體可以參考芯片手
    發(fā)表于 04-28 12:30 ?6983次閱讀
    什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>組成原理

    MCU啟動(dòng)失敗竟因GPIO先上電?

    由于 RT1060 上 GPIO_AD_Bx 和 GPIO_Bx 兩組 PAD 供電均來(lái)自于 NVCC_GPIO,當(dāng)其中任何一個(gè) GPIO 有電壓時(shí),均可能會(huì)漏電到 NVCC_
    發(fā)表于 03-28 10:32 ?784次閱讀
    MCU啟動(dòng)失敗竟因<b class='flag-5'>GPIO</b>先上電?

    深入理解GPIO原理和運(yùn)用

    GPIO允許我們的單片機(jī)與外部世界進(jìn)行通信,它是我們控制外部設(shè)備和接收外部信號(hào)的接口。
    的頭像 發(fā)表于 02-19 16:12 ?1912次閱讀
    深入理解<b class='flag-5'>GPIO</b>原理和運(yùn)用