用樹莓派點(diǎn)亮華爾茲

引言


華爾茲屬于摩登舞,華爾茲舞曲均是三拍,通常給人以優(yōu)美抒情與輕快靈動(dòng)的感覺。本文主要介紹如何使用樹莓派控制雙色LED燈按照華爾茲舞曲的節(jié)拍進(jìn)行閃爍,一方面使讀者對(duì)樹莓派GPIO引腳控制有初步了解,另一方面也希望讀者能夠喜歡華爾茲與華爾茲舞曲。

一、華爾茲簡(jiǎn)介


華爾茲,英文名Waltz,是迄今為止歷史最為悠久、生命力最強(qiáng)的自娛舞蹈,有“舞中之后”的美譽(yù)。華爾茲一詞最早來源于德語“Walzl”,意為滾動(dòng),這一單詞也恰如其分地描繪了華爾茲的主要特點(diǎn),即在跳華爾茲的過程中舞者需要不停地旋轉(zhuǎn),因此華爾茲也被稱為圓舞,進(jìn)而華爾茲所使用的舞曲也被稱為圓舞曲(為了便于閱讀,下文中使用圓舞曲來指代華爾茲舞曲)。圓舞曲均是三拍,第一拍為重音,第二、三拍均為弱音,該節(jié)奏也就是我們常說的“嘭嚓嚓”。

華爾茲主要分為兩類,一類是英國華爾茲,由于其舞步較為緩慢,因此也被稱為“慢三”,跳舞時(shí)所使用的圓舞曲曲風(fēng)較為優(yōu)美抒情;另一類是維也納華爾茲,舞步較快,所使用的圓舞曲曲風(fēng)也相應(yīng)較為輕快靈動(dòng)。

華爾茲頑強(qiáng)的生命力一方面來源于其舞姿的優(yōu)美,另一方面也來源于音樂對(duì)其產(chǎn)生的推動(dòng)作用,世界著名音樂家小約翰·施特勞斯、柴可夫斯基、莫扎特、貝多芬、肖邦等都創(chuàng)作了許多不朽的圓舞曲作品。在眾多圓舞曲作品中,或許最為耳熟能詳?shù)漠?dāng)屬小約翰·施特勞斯所做的《藍(lán)色多瑙河》,該樂曲與《拉德斯基進(jìn)行曲》被作為維也納新年音樂會(huì)的保留壓軸曲目。

由于筆者本人也是音樂愛好者,因此在文末為讀者列出本人比較喜歡的圓舞曲,希望能夠增進(jìn)讀者對(duì)華爾茲與圓舞曲的興趣。

二、前期準(zhǔn)備


2.1 本文所需的硬件

●?雙色LED燈

圖1 雙色LED燈引腳

該雙色LED燈可以發(fā)出紅色和綠色兩種光,不同顏色對(duì)應(yīng)的引腳如圖1所示。當(dāng)對(duì)應(yīng)引腳輸入高電平時(shí),LED燈就會(huì)發(fā)光。

● 母對(duì)母杜邦線

圖2 母對(duì)母杜邦線

● 樹莓派

圖3 樹莓派

2.2 本文所需的軟件

● Python3環(huán)境(大多數(shù)linux系統(tǒng)可能已經(jīng)安裝)

i. 從https://www.python.org/選擇最新版本的python3文件。

ii. 在網(wǎng)頁中找到Gzipped source tarball,點(diǎn)擊下載,如圖4所示。

圖4 下載python3源碼

iii. 解壓縮tgz文件:tar -zxvf Python- x.x.x.tgz

iv. 進(jìn)入Python-3.7.4目錄:cd Python- x.x.x

v. 分別運(yùn)行如下命令進(jìn)行安裝:./configure --> make --> make install

vi. 如果安裝成功,在終端輸入python3會(huì)出現(xiàn)如圖5所示內(nèi)容。

圖5 python3安裝成功

● RPi.GPIO庫

源碼安裝:

i. 從https://pypi.org/project/RPi.GPIO/下載RPi.GPIO-x.x.x.tar.gz

ii. 解壓縮tar.gz文件:tar -zxvf RPi.GPIO- x.x.x.tar.gz

iii. 進(jìn)入RPi.GPIO- x.x.x目錄:cd RPi.GPIO- x.x.x

iv. 輸入安裝命令:sudo python setup.py install

命令行安裝:

在終端輸入命令:sudo pip install RPi.GPIO

2.3 預(yù)備知識(shí)

● GPIO引腳介紹

GPIO是General Purpose Input & Output的縮寫,意思為通用輸入輸出,是樹莓派連接并控制其他元器件的接口,GPIO在樹莓派的位置如圖6所示。從圖中也可以看出樹莓派一共有40個(gè)GPIO引腳,分別從1~40開始編號(hào),1號(hào)與2號(hào)引腳位于左側(cè),上面一排的引腳均為偶數(shù),下面一排的引腳均為奇數(shù)。

圖6 GPIO介紹

各個(gè)GPIO引腳的功能可以在樹莓派終端中輸入命令gpio readall進(jìn)行查看,具體功能如圖7所示。從圖中可以看出GPIO引腳有三種編號(hào)規(guī)則,分別是Board、BCM與wPi。Board編號(hào)對(duì)應(yīng)于圖7的Physical列表,這種編號(hào)方式與樹莓派物理引腳編號(hào)方式一致,使用Board編號(hào)的好處是不用擔(dān)心因?yàn)闃漭傻纳?jí)而導(dǎo)致程序代碼中引腳編號(hào)使用錯(cuò)誤,代碼的通用性更強(qiáng)。BCM編號(hào)與輸入輸出功能引腳在CPU中所對(duì)應(yīng)的寄存器編號(hào)一致,該編號(hào)方式與底層硬件更為貼近,但對(duì)于不同版本的樹莓派,BCM編號(hào)均不同,代碼難以通用。wPi編號(hào)則將輸入輸出功能的引腳從0開始按順序編號(hào),便于編程。

圖7 GPIO引腳功能

這里我們采用Board編號(hào)對(duì)GPIO引腳功能進(jìn)行簡(jiǎn)要介紹。例如1號(hào)引腳功能是輸出3.3V的電壓;2號(hào)引腳功能是輸出5V的電壓;6號(hào)引腳功能是接地,電壓為0V;7號(hào)引腳是輸入輸出引腳,當(dāng)該引腳設(shè)置為輸入模式時(shí),可以用來讀取元器件發(fā)送的數(shù)據(jù),當(dāng)設(shè)置為輸出模式時(shí),可以輸出3.3V的高電壓與0V低電壓。

三、樹莓派實(shí)現(xiàn)方法


3.1 硬件接線方法

在實(shí)現(xiàn)過程中,我們同樣采用Board編號(hào)規(guī)則,接線方法如圖8所示,該圖中分別把GND、紅色燈與綠色燈接到9號(hào)、11號(hào)與13號(hào)引腳(注意接線順序要對(duì)應(yīng),接線時(shí)樹莓派要斷電)。

圖8 硬件接線方法

3.2 程序代碼

#!/usr/bin/env python

# encoding: utf-8

import?RPi.GPIO?as?GPIO

import?time

GPIO.setmode(GPIO.BOARD)

pin_red =?11

pin_green =?13

GPIO.setup(pin_red, GPIO.OUT,?initial?= GPIO.LOW)

GPIO.setup(pin_green, GPIO.OUT,?initial?= GPIO.LOW)

def?led(pin):

????GPIO.output(pin, GPIO.HIGH)

time.sleep(1)

????GPIO.output(pin, GPIO.LOW)

time.sleep(0.5)

def?waltz():

? ? for?i?in?list(range(12)):

? ? if?i %?3?==?0:

????????led(pin_red)

? ? else:

????????led(pin_green)

waltz()

GPIO.cleanup()

3.2 程序代碼說明

#!/usr/bin/env python

# encoding: utf-8

說明:#!/usr/bin/env python表示調(diào)用系統(tǒng)環(huán)境變量中Python解釋器,# encoding: utf-8表示采用utf-8的格式對(duì)代碼進(jìn)行編碼。

import RPi.GPIOasGPIO

import time

說明:使用RPi.GPIO與time模塊,這兩個(gè)模塊中包含我們所需要調(diào)用的函數(shù)。由于RPi.GPIO名稱過長(zhǎng),這里使用GPIO替代。

GPIO.setmode(GPIO.BOARD)

說明:如前文所述,樹莓派GPIO引腳共有三種編號(hào)規(guī)則,這里我們指定采用Board規(guī)則來進(jìn)行引腳編號(hào)。

pin_red =11

pin_green =13

說明:由于我們將雙色LED燈的紅色與綠色分別接入到樹莓派的11號(hào)與13號(hào)引腳,因此為了便于記憶與編程,我們分別用pin_red與pin_green來存儲(chǔ)引腳編號(hào)。

GPIO.setup(pin_red, GPIO.OUT,initial= GPIO.LOW)

GPIO.setup(pin_green, GPIO.OUT,initial= GPIO.LOW)

說明:分別將紅色與綠色對(duì)應(yīng)的引腳設(shè)置為輸出狀態(tài),且初始輸出電壓均為0V低電壓。

def led(pin):

????GPIO.output(pin, GPIO.HIGH)

????time.sleep(1)

????GPIO.output(pin, GPIO.LOW)

????time.sleep(0.5)

說明:定義雙色LED燈閃爍函數(shù),函數(shù)的參數(shù)是引腳編號(hào),函數(shù)的功能是首先讓引腳輸出高電平,并持續(xù)1秒,隨后讓引腳輸出低電平,并持續(xù)0.5秒。由于雙色LED燈是高電平發(fā)光,因此該函數(shù)可以讓LED先發(fā)光1秒,再中斷0.5秒。

def waltz():

????for i in list(range(12)):

????if i %3==0:

????????led(pin_red)

????else:

????????led(pin_green)

說明:定義圓舞曲節(jié)拍閃爍函數(shù),由于圓舞曲是三拍,因此我們讓變量i對(duì)3取模,當(dāng)取模運(yùn)算結(jié)果為0時(shí),控制雙色LED燈發(fā)出紅光,當(dāng)取模運(yùn)算結(jié)果不為0時(shí),控制雙色LED燈發(fā)出綠光。由此雙色LED燈可以按照“紅-綠-綠”的模式進(jìn)行閃爍,與圓舞曲“嘭嚓嚓”的節(jié)奏相吻合。此外,也可以通過改變r(jià)ange()函數(shù)中的參數(shù)來改變閃爍節(jié)拍的個(gè)數(shù)。

waltz()

說明:調(diào)用waltz()函數(shù)控制LED燈進(jìn)行閃爍。

GPIO.cleanup()

說明:釋放該程序代碼所使用的引腳,并清除引腳編碼規(guī)則。

圓舞曲推薦列表?

《藍(lán)色多瑙河》小約翰·施特勞斯?

《春之聲圓舞曲》小約翰·施特勞斯

《維也納森林的故事》小約翰·施特勞斯

《皇帝圓舞曲》小約翰·施特勞斯?

《邀舞》卡爾·瑪里亞·恩斯特·馮·韋伯?

《Dernier Vol》Rapha?l Beau?

《Midnight Waltz》Adam Hurst?

《人生的旋轉(zhuǎn)木馬》久石讓(出自《哈爾的移動(dòng)城堡》)?

《永遠(yuǎn)同在(いつも何度でも)》久石讓(出自《千與千尋》)?

《千與千尋》久石讓(出自《千與千尋》)?

《向日葵之家園舞曲》久石讓(出自《懸崖上的金魚姬》)?

《杜鵑圓舞曲》約翰·埃曼努埃爾·約納森?

《舒伯特小夜曲》舒伯特?

《降E大調(diào)華麗圓舞曲(Waltz No.1 in E flat, Op.18Grande valse brillante)》肖邦


ps:筆者自己也是樹莓派愛好者,會(huì)在公眾號(hào)“樹莓派對(duì)rasparty”中持續(xù)更新樹莓派相關(guān)的文章,歡迎關(guān)注交流!

公眾號(hào)樹莓派對(duì)rasparty?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,791評(píng)論 6 545
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,795評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,943評(píng)論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,057評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,773評(píng)論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,106評(píng)論 1 330
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,082評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,282評(píng)論 0 291
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,793評(píng)論 1 338
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,507評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,741評(píng)論 1 375
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,220評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,929評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,325評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,661評(píng)論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,482評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,702評(píng)論 2 380

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