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

引言


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

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


華爾茲狡汉,英文名Waltz,是迄今為止歷史最為悠久闽颇、生命力最強(qiáng)的自?shī)饰璧付艽鳎小拔柚兄蟆钡拿雷u(yù)。華爾茲一詞最早來(lái)源于德語(yǔ)“Walzl”兵多,意為滾動(dòng)尖啡,這一單詞也恰如其分地描繪了華爾茲的主要特點(diǎn),即在跳華爾茲的過(guò)程中舞者需要不停地旋轉(zhuǎn)剩膘,因此華爾茲也被稱為圓舞衅斩,進(jìn)而華爾茲所使用的舞曲也被稱為圓舞曲(為了便于閱讀,下文中使用圓舞曲來(lái)指代華爾茲舞曲)怠褐。圓舞曲均是三拍畏梆,第一拍為重音,第二、三拍均為弱音具温,該節(jié)奏也就是我們常說(shuō)的“嘭嚓嚓”蚕涤。

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

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

由于筆者本人也是音樂(lè)愛(ài)好者,因此在文末為讀者列出本人比較喜歡的圓舞曲忿族,希望能夠增進(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)頁(yè)中找到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庫(kù)

源碼安裝:

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開(kāi)始編號(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開(kāi)始按順序編號(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í)挣柬,可以用來(lái)讀取元器件發(fā)送的數(shù)據(jù),當(dāng)設(shè)置為輸出模式時(shí)睛挚,可以輸出3.3V的高電壓與0V低電壓邪蛔。

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


3.1 硬件接線方法

在實(shí)現(xiàn)過(guò)程中扎狱,我們同樣采用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 程序代碼說(shuō)明

#!/usr/bin/env python

# encoding: utf-8

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

import RPi.GPIOasGPIO

import time

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

GPIO.setmode(GPIO.BOARD)

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

pin_red =11

pin_green =13

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

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

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

說(shuō)明:分別將紅色與綠色對(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)

說(shuō)明:定義雙色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)

說(shuō)明:定義圓舞曲節(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é)奏相吻合蒂窒。此外,也可以通過(guò)改變r(jià)ange()函數(shù)中的參數(shù)來(lái)改變閃爍節(jié)拍的個(gè)數(shù)荞怒。

waltz()

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

GPIO.cleanup()

說(shuō)明:釋放該程序代碼所使用的引腳,并清除引腳編碼規(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:筆者自己也是樹莓派愛(ài)好者纬凤,會(huì)在公眾號(hào)“樹莓派對(duì)rasparty”中持續(xù)更新樹莓派相關(guān)的文章,歡迎關(guān)注交流撩嚼!

公眾號(hào)樹莓派對(duì)rasparty?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末停士,一起剝皮案震驚了整個(gè)濱河市挖帘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恋技,老刑警劉巖拇舀,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蜻底,居然都是意外死亡骄崩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門薄辅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)要拂,“玉大人,你說(shuō)我怎么就攤上這事站楚⊥讯瑁” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵窿春,是天一觀的道長(zhǎng)拉一。 經(jīng)常有香客問(wèn)我,道長(zhǎng)旧乞,這世上最難降的妖魔是什么蔚润? 我笑而不...
    開(kāi)封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮尺栖,結(jié)果婚禮上嫡纠,老公的妹妹穿的比我還像新娘。我一直安慰自己决瞳,他們只是感情好货徙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著皮胡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赏迟。 梳的紋絲不亂的頭發(fā)上屡贺,一...
    開(kāi)封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音锌杀,去河邊找鬼甩栈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛糕再,可吹牛的內(nèi)容都是我干的量没。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼突想,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼殴蹄!你這毒婦竟也來(lái)了究抓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤袭灯,失蹤者是張志新(化名)和其女友劉穎刺下,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稽荧,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡橘茉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姨丈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畅卓。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蟋恬,靈堂內(nèi)的尸體忽然破棺而出髓介,到底是詐尸還是另有隱情,我是刑警寧澤筋现,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布唐础,位于F島的核電站,受9級(jí)特大地震影響矾飞,放射性物質(zhì)發(fā)生泄漏一膨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一洒沦、第九天 我趴在偏房一處隱蔽的房頂上張望豹绪。 院中可真熱鬧,春花似錦申眼、人聲如沸瞒津。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巷蚪。三九已至,卻和暖如春濒翻,著一層夾襖步出監(jiān)牢的瞬間屁柏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工有送, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淌喻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓雀摘,卻偏偏與公主長(zhǎng)得像裸删,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阵赠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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