用树莓派点亮华尔兹

引言 华尔兹属于摩登舞,华尔兹舞曲均是三拍,通常给人以优美抒情与轻快灵动的感觉。本文主要介绍如何使用树莓派控制双色LED灯按照华尔兹舞曲的节拍进行闪烁,一方面使读者对树莓派GPIO引脚控制有初步了解,另一方面也希望读者能够喜欢华尔兹与华尔兹舞曲。
一、华尔兹简介 华尔兹,英文名Waltz,是迄今为止历史最为悠久、生命力最强的自娱舞蹈,有“舞中之后”的美誉。华尔兹一词最早来源于德语“Walzl”,意为滚动,这一单词也恰如其分地描绘了华尔兹的主要特点,即在跳华尔兹的过程中舞者需要不停地旋转,因此华尔兹也被称为圆舞,进而华尔兹所使用的舞曲也被称为圆舞曲(为了便于阅读,下文中使用圆舞曲来指代华尔兹舞曲)。圆舞曲均是三拍,第一拍为重音,第二、三拍均为弱音,该节奏也就是我们常说的“嘭嚓嚓”。
华尔兹主要分为两类,一类是英国华尔兹,由于其舞步较为缓慢,因此也被称为“慢三”,跳舞时所使用的圆舞曲曲风较为优美抒情;另一类是维也纳华尔兹,舞步较快,所使用的圆舞曲曲风也相应较为轻快灵动。
华尔兹顽强的生命力一方面来源于其舞姿的优美,另一方面也来源于音乐对其产生的推动作用,世界著名音乐家小约翰·施特劳斯、柴可夫斯基、莫扎特、贝多芬、肖邦等都创作了许多不朽的圆舞曲作品。在众多圆舞曲作品中,或许最为耳熟能详的当属小约翰·施特劳斯所做的《蓝色多瑙河》,该乐曲与《拉德斯基进行曲》被作为维也纳新年音乐会的保留压轴曲目。
由于笔者本人也是音乐爱好者,因此在文末为读者列出本人比较喜欢的圆舞曲,希望能够增进读者对华尔兹与圆舞曲的兴趣。
二、前期准备 2.1 本文所需的硬件

● 双色LED灯
用树莓派点亮华尔兹
文章图片
图1 双色LED灯引脚 该双色LED灯可以发出红色和绿色两种光,不同颜色对应的引脚如图1所示。当对应引脚输入高电平时,LED灯就会发光。
● 母对母杜邦线
用树莓派点亮华尔兹
文章图片
图2 母对母杜邦线 ● 树莓派
用树莓派点亮华尔兹
文章图片
图3 树莓派 2.2 本文所需的软件
● Python3环境(大多数linux系统可能已经安装)
i. 从https://www.python.org/选择最新版本的python3文件。
ii. 在网页中找到Gzipped source tarball,点击下载,如图4所示。
用树莓派点亮华尔兹
文章图片
图4 下载python3源码 iii. 解压缩tgz文件:tar -zxvf Python- x.x.x.tgz
iv. 进入Python-3.7.4目录:cd Python- x.x.x
v. 分别运行如下命令进行安装:./configure --> make --> make install
vi. 如果安装成功,在终端输入python3会出现如图5所示内容。
用树莓派点亮华尔兹
文章图片
图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. 进入RPi.GPIO- x.x.x目录:cd RPi.GPIO- x.x.x
iv. 输入安装命令:sudo python setup.py install
命令行安装:
在终端输入命令:sudo pip install RPi.GPIO
2.3 预备知识

【用树莓派点亮华尔兹】● GPIO引脚介绍
GPIO是General Purpose Input & Output的缩写,意思为通用输入输出,是树莓派连接并控制其他元器件的接口,GPIO在树莓派的位置如图6所示。从图中也可以看出树莓派一共有40个GPIO引脚,分别从1~40开始编号,1号与2号引脚位于左侧,上面一排的引脚均为偶数,下面一排的引脚均为奇数。
用树莓派点亮华尔兹
文章图片
图6 GPIO介绍 各个GPIO引脚的功能可以在树莓派终端中输入命令gpio readall进行查看,具体功能如图7所示。从图中可以看出GPIO引脚有三种编号规则,分别是Board、BCM与wPi。Board编号对应于图7的Physical列表,这种编号方式与树莓派物理引脚编号方式一致,使用Board编号的好处是不用担心因为树莓派的升级而导致程序代码中引脚编号使用错误,代码的通用性更强。BCM编号与输入输出功能引脚在CPU中所对应的寄存器编号一致,该编号方式与底层硬件更为贴近,但对于不同版本的树莓派,BCM编号均不同,代码难以通用。wPi编号则将输入输出功能的引脚从0开始按顺序编号,便于编程。
用树莓派点亮华尔兹
文章图片
图7 GPIO引脚功能 这里我们采用Board编号对GPIO引脚功能进行简要介绍。例如1号引脚功能是输出3.3V的电压;2号引脚功能是输出5V的电压;6号引脚功能是接地,电压为0V;7号引脚是输入输出引脚,当该引脚设置为输入模式时,可以用来读取元器件发送的数据,当设置为输出模式时,可以输出3.3V的高电压与0V低电压。
三、树莓派实现方法
3.1 硬件接线方法
在实现过程中,我们同样采用Board编号规则,接线方法如图8所示,该图中分别把GND、红色灯与绿色灯接到9号、11号与13号引脚(注意接线顺序要对应,接线时树莓派要断电)。
用树莓派点亮华尔兹
文章图片
图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表示调用系统环境变量中Python解释器,# encoding: utf-8表示采用utf-8的格式对代码进行编码。
import RPi.GPIOasGPIO
import time
说明:使用RPi.GPIO与time模块,这两个模块中包含我们所需要调用的函数。由于RPi.GPIO名称过长,这里使用GPIO替代。
GPIO.setmode(GPIO.BOARD)
说明:如前文所述,树莓派GPIO引脚共有三种编号规则,这里我们指定采用Board规则来进行引脚编号。
pin_red =11
pin_green =13
说明:由于我们将双色LED灯的红色与绿色分别接入到树莓派的11号与13号引脚,因此为了便于记忆与编程,我们分别用pin_red与pin_green来存储引脚编号。
GPIO.setup(pin_red, GPIO.OUT,initial= GPIO.LOW)
GPIO.setup(pin_green, GPIO.OUT,initial= GPIO.LOW)
说明:分别将红色与绿色对应的引脚设置为输出状态,且初始输出电压均为0V低电压。
def led(pin):
GPIO.output(pin, GPIO.HIGH)
time.sleep(1)
GPIO.output(pin, GPIO.LOW)
time.sleep(0.5)
说明:定义双色LED灯闪烁函数,函数的参数是引脚编号,函数的功能是首先让引脚输出高电平,并持续1秒,随后让引脚输出低电平,并持续0.5秒。由于双色LED灯是高电平发光,因此该函数可以让LED先发光1秒,再中断0.5秒。
def waltz():
for i in list(range(12)):
if i %3==0:
led(pin_red)
else:
led(pin_green)
说明:定义圆舞曲节拍闪烁函数,由于圆舞曲是三拍,因此我们让变量i对3取模,当取模运算结果为0时,控制双色LED灯发出红光,当取模运算结果不为0时,控制双色LED灯发出绿光。由此双色LED灯可以按照“红-绿-绿”的模式进行闪烁,与圆舞曲“嘭嚓嚓”的节奏相吻合。此外,也可以通过改变range()函数中的参数来改变闪烁节拍的个数。
waltz()
说明:调用waltz()函数控制LED灯进行闪烁。
GPIO.cleanup()
说明:释放该程序代码所使用的引脚,并清除引脚编码规则。
圆舞曲推荐列表
《蓝色多瑙河》小约翰·施特劳斯
《春之声圆舞曲》小约翰·施特劳斯
《维也纳森林的故事》小约翰·施特劳斯
《皇帝圆舞曲》小约翰·施特劳斯
《邀舞》卡尔·玛里亚·恩斯特·冯·韦伯
《Dernier Vol》Rapha?l Beau
《Midnight Waltz》Adam Hurst
《人生的旋转木马》久石让(出自《哈尔的移动城堡》)
《永远同在(いつも何度でも)》久石让(出自《千与千寻》)
《千与千寻》久石让(出自《千与千寻》)
《向日葵之家园舞曲》久石让(出自《悬崖上的金鱼姬》)
《杜鹃圆舞曲》约翰·埃曼努埃尔·约纳森
《舒伯特小夜曲》舒伯特
《降E大调华丽圆舞曲(Waltz No.1 in E flat, Op.18Grande valse brillante)》肖邦
ps:笔者自己也是树莓派爱好者,会在公众号“树莓派对rasparty”中持续更新树莓派相关的文章,欢迎关注交流!
用树莓派点亮华尔兹
文章图片
公众号树莓派对rasparty

    推荐阅读