這篇文章來源于DevicePlus.com英語網(wǎng)站的翻譯稿。
為兒童和年輕人開發(fā)的用于GPIO控制的簡(jiǎn)單Python庫
	如果您有過為Raspberry Pi的GPIO 引腳編寫代碼的經(jīng)驗(yàn),那么估計(jì)您已經(jīng)使用過Python以及GPIO Zero模塊了,因?yàn)檫@是最簡(jiǎn)單的入門方式。
	但是模塊的簡(jiǎn)單不意味著其缺乏靈活性和功能性。
GPIO Zero 完成所有工作細(xì)節(jié)的處理
	GPIO Zero并不是之前Raspberry Pi上用于GPIO的Python模塊的替代品,而是構(gòu)建在那些模塊之上。
	GPIO使用RPi.GPIO來進(jìn)行大多數(shù)操作,同時(shí)會(huì)混合使用PiGPIO和RPIO。
為什么不直接使用這些模塊?
	因?yàn)镚PIO Zero已經(jīng)為您完成了很多工作細(xì)節(jié)的處理,您在項(xiàng)目中只需輸入幾行代碼就可以了。
	來看一下這些代碼:
	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通過為您可能連接到GPIO引腳的常見組件提供一系列配置好的類來進(jìn)行工作。您可以使用這些類來創(chuàng)建與連接到GPIO引腳的特定組件相關(guān)聯(lián)的對(duì)象。
	您在剛開始最感興趣的類應(yīng)該是輸入類和輸出類,它們包括了一系列標(biāo)準(zhǔn)輸入和輸出組件。
	除此之外還有其他多種類,比如用于將數(shù)據(jù)流式傳輸?shù)狡渌M件的SPI類,以及您可以用來創(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
	然后,您可以通過在類前加上“gpiozero”來對(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)
	如此一來,您的代碼就不會(huì)因?yàn)槿哂嘈畔⒍兊秒s亂無章,從而變得更具有可讀性。
使用GPIO Zero,通過按下按鈕播放聲音
	讓我們通過將按鈕連接到GPIO引腳來嘗試在壓電蜂鳴器上播放一系列聲音,感受一下GPIO Zero的使用有多么簡(jiǎn)單。
	為此,您將需要:
| 一個(gè)帶電源的Raspberry Pi以及一個(gè)安裝了Raspbian的SD卡 | 
				![]()  | 
		
| 一個(gè)面包板 | 
	
| 一個(gè)GPIO擴(kuò)展板 | 
	
您還需要一個(gè)壓電蜂鳴器、下推式開關(guān)、幾根跨接電纜以及某種Raspberry Pi的輸入設(shè)備,例如SSH連接或者USB鍵盤和鼠標(biāo)。準(zhǔn)備好了嗎?讓我們開始吧!
連接壓電蜂鳴器
	如果您的GPIO擴(kuò)展板尚未連接到Raspberry Pi和面包板,請(qǐng)將它們連接在一起。然后將接地引腳連接到負(fù)電源軌。
	您的壓電蜂鳴器應(yīng)該有一根紅線和一根黑線。紅線連接到來自GPIO引腳的正電壓,黑線接地。
	
	
	我使用跨接電纜將蜂鳴器連接到面包板,您也可以直接將其插入。將蜂鳴器的黑色導(dǎo)線連接到負(fù)電源軌,紅色導(dǎo)線連接到面包板中間的某處。
	現(xiàn)在,將面包板的這一排連接到GPIO引腳。我使用的是引腳13。
	
讓這個(gè)小器件尖叫起來
	為此,需要打開Python解釋器。輸入:
	python3
	現(xiàn)在,我們需要為壓電蜂鳴器導(dǎo)入一個(gè)類,并使用它來創(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ù),這樣就可以避免播放過快而錯(cuò)過了某個(gè)聲音。
	from time import sleep
	現(xiàn)在讓我們來定義一個(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)
	接下來要做的就是使程序在按下按鈕時(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ù)生成的,其中引腳通過在啟動(dòng)和關(guān)閉之間快速轉(zhuǎn)換來模仿模擬電壓。GPIO Zero已經(jīng)完成了所有這些工作的預(yù)配置。
	當(dāng)您掌握了基本要領(lǐng)后,就可以開始嘗試進(jìn)行所有這些內(nèi)容了。
	與此同時(shí),敬請(qǐng)享受通過GPIO Zero構(gòu)建和學(xué)習(xí)項(xiàng)目的樂趣吧!
	
DevicePlus 編輯團(tuán)隊(duì)
設(shè)備升級(jí)版適用于所有熱愛電子和機(jī)電一體化的人。
	
	審核編輯黃宇
- 
                                GPIO
                                +關(guān)注
關(guān)注
16文章
1309瀏覽量
55548 
發(fā)布評(píng)論請(qǐng)先 登錄
【EK-RA6E2開發(fā)指南】GPIO使用
    
RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法
    
迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
    
迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗(yàn)
    
為什么GPIO配置總是出問題?
    
GPIO使用教程 GPIO接口應(yīng)用
GPIO模塊與其他外設(shè)的連接方法
GPIO錯(cuò)誤排查與解決
GPIO在嵌入式系統(tǒng)中的作用
GPIO在物聯(lián)網(wǎng)中的應(yīng)用
GPIO在樹莓派中的應(yīng)用
如何配置GPIO引腳
GPIO內(nèi)部電路的原理
    
STM32 GPIO的八種工作模式
    
          
        
        
使用GPIO Zero讓GPIO變得更容易
                
 
    
           
            
            
                
            
評(píng)論