用树莓派点亮华尔兹

引言


华尔兹属于摩登舞,华尔兹舞曲均是三拍,通常给人以优美抒情与轻快灵动的感觉。本文主要介绍如何使用树莓派控制双色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 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容