如何使用Raspberry Pi设置登场音乐

在我年轻的时候,我最喜欢的摔跤手绝对是被称为“Heartbreak Kid”的Shawn Michaels。他是一个伟大的运动员和表演者,所做的一切都非常有趣。
从他进入大楼的那一刻开始,这首音乐响起:
这让我开始思考,如果Shawn Michaels可以以这种方式入场,为什么我不能?
是的,有了Raspberry Pi和Python chops,像我(或者您!)这样的家伙也许就可以拥有登场音乐了。

Raspberry Pi如何检测出您的登场?

这里有几种选择。
我们可以检测出您的手机是否连接到无线网络。这很有用,因为Raspberry Pi可以确认是否是您本人在进入(而非您的室友或家人)。
缺点是它对您的距离的测定不太精确。我的意思是,这是登场音乐,对吗?它应该在您进门时开始响起。
您也可以改用PIR运动传感器。这可以将音乐与入门动作精确匹配,不过这种方法无法对正在进入的人作出区分。
所以,我们可以将这两者结合起来。Raspberry Pi将会在您的手机连接到无线网络时检测出您已经到家,然后等待传感器来检测出您进入的确切时间。
如果您更倾向于使用其中的一种,可以直接去除掉其他部分。

使用Python Subprocess模块

本项目还会引入Python的subprocess模块。该模块在标准库中,您无需进行安装。
使用该模块,我们可以在Python内部运行shell命令。这非常方便。如果您已经知道这些命令行是如何执行操作的,只需直接运行该命令即可。
我们将使用的两个命令是mpg123和ping。
mpg123是一个用于播放mp3文件的命令行实用程序。我们需要安装mpg123。
您不需要安装ping,系统中已经有了。这是一个简单的工具,用于检查远程服务器或设备是否处于连通状态并作出响应。我们将使用它来检查您的手机是否连接到了您的无线网络。

所需组件

对于本项目,您将需要以下组件:

带有电源、无线网卡以及一个
SD 卡的
Raspberry Pi
raspberry pi
一个PIR运动传感器
(我使用的是XC-4444)
PIR motion sensor
Shawn Michaels所演唱的Sexy Boy高品质MP3文件(或者您也可以选择其他非常钟意的歌曲)
从Raspberry Pi播放音乐的某种方式。连接到HDMI端口的家庭娱乐系统是比较理想的

您还需要一部智能手机、一个无线家庭网络和3根公对母跳线。
确保您的手机设置为自动连接到您家里的无线网络,并且没有使用任何省电设置,以防手机在不使用时禁用无线网络。
这里我们假设您已经了解PIR运动传感器GPIO Zero库了。如果没有,请先查看这些相关介绍。您将从中了解该设备的工作原理,在本项目中我们将以大致相同的方式对其进行接线。
本项目用Raspberry Pi OS Buster进行了测试,但是旧版本的Raspbian应该也没问题。我们使用的Python模块和Linux命令都是存在已久的了。

设置Raspberry Pi

我们首先为这个项目创建一个目录,并进入该目录。打开终端并输入:
mkdir ~/entrancemusic
cd ~/entrancemusic
用一种您喜欢的方式将mp3文件复制到此目录中。
然后用以下命令更新您的系统并安装mpg123:
sudo apt update && sudo apt upgrade -y
sudo apt install mpg123

连接PIR运动传感器

这次我们不使用面包板。对于我们的项目来说,面包板将会产生阻碍。
拿起您的PIR运动传感器和跳线。将传感器的电源引脚连接到Raspberry Pi的5V电源引脚。然后将传感器的接地引脚连接到Raspberry Pi上的接地引脚。

然后将数字输出连接到一个GPIO引脚。我使用的是引脚24,因为它的位置比较方便。

这就是运动传感器的全部接线过程。将其摆放为面向您将要进入的门口。

为您的智能手机保留IP地址

几乎所有家庭无线网络都使用DHCP来为所连接的新设备自动分配可用的IP地址。这很方便,因为它很可靠并且无需让您进行管理。
这也意味着特定设备的IP地址可能会不时发生更改。对于本项目,我们希望您的手机始终分配到同一个IP地址上,并且没有其他设备使用该地址。
大多数路由器为一个设备分配的IP地址至少会持续一天左右的时间。因此,如果您只打算执行本项目一次,那么可以愉快地继续进行,不必再为此困扰。
但是如果您想多次运行此脚本,那么您应该为您的设备保留一个IP地址。您可以通过登陆无线路由器的管理面板来执行此操作。不同的路由器对此的处理方式略有不同,但通常操作方式都比较容易。如果您遇到了困难,请使用搜索引擎查找您设备的手册。
我的手机保留的IP地址为192.168.0.5。您的IP地址可能会有所不同,只需按照说明对其进行替换即可。
当还有一点是—您是否有使用SSH通过本地网络访问Raspberry Pi的习惯?请也为其保留一个IP地址。如果它的IP地址是不会改变的,那就更方便了。

使用mpg123播放登场音乐

要从命令行使用mpg123,你只需要输入您要播放的mp3名称即可,如下所示:
mpg123 ‘Sexy Boy (Shawn Michaels).mp3’
从Python运行此命令也并不复杂。
首先,导入subprocess模块中的run函数。然后将以上命令行作为第一个参数传递给该函数,并将“shell=True”作为第二个参数,如下所示:
from subprocess import run
run(“mpg123 ~/entrancemusic/’Sexy Boy (Shawn Michaels).mp3′”, shell=True)

使用Ping检测您的手机是否已连接

您可以通过命令行ping您的手机,如下所示:
ping -c 192.168.0.5
请记得替换您手机的IP地址。我们添加“-c 1”来告诉ping只发送一次请求。如果我们不添加该内容,该命令将会被一直运行,直到被取消。
如果设备响应,ping将会返回成功。如果没有响应,将会返回一个错误代码。
理想情况下,我们可以用此错误代码来查看手机是否已经连接到网络。不幸的是,许多智能手机不会对请求发生响应。这就意味着无论您的手机是否连接到了网络,ping都会返回错误代码。
那么让我们来看看输出内容。如果没有设备在指定的IP地址上,那么输出中将包含语句“Destination Host Unreachabl(目标主机无法访问)”。
Python的subprocess模块包含Popen和PIPE对象,可以让我们对输出进行处理,如下所示:
subprocess import Popen, PIPE
p1 = Popen([“ping”, “-c”, “1”, “192.168.0.5”], stdout=PIPE)
stdout_value = p1.communicate()[0]
如果您想了解此代码中所运行的内容,请阅读此处。对于本项目来说,知道它运行了ping命令,然后将输出分配给了stdout_value就足够了。
我们可以使用它来编写一个循环程序,当“Destination Host Unreachable”没有出现在输出中时可进行中断。
while True:
p1 = Popen([“ping”, “-c”, “1”, “192.168.0.5”], stdout=PIPE)
stdout_value = p1.communicate()[0]
if b’Destination Host Unreachable’ not in stdout_value:
break
sl eep(2)
这个循环会一直运行到您的手机连接到网络为止。

将所有程序写到一个脚本中

我们现在已经具备了用于简单的登场音乐程序的所有代码块。输入以下命令打开一个新文件:
nano entrancemusic.py
然后输入(或粘贴)以下内容:
from time import sl eep
from signal import pause
from subprocess import run, Popen, PIPE
from gpiozero import MotionSensor
sl eep(600) # This gives you 10 minutes to leave your home
pir = MotionSensor(24)
while True:
p1 = Popen([“ping”, “-c”, “1”, “192.168.0.5”], stdout=PIPE)
stdout_value = p1.communicate()[0]
if b’Destination Host Unreachable’ not in stdout_value:
break
sl eep(2)
sl eep(5)
pir.wait_for_motion()
run(“mpg123 ~/entrancemusic/’Sexy Boy (Shawn Michaels).mp3′”,
Save and exit nano.
如果您想在回家时安排登场音乐,请在离开家之前运行此脚本,输入:
python3 entrancemusic.py

微调

该脚本会像本文所述的那样运行,但是您可能会想要调试一些功能。
安排您的入场时间
您可能已经注意到了,此脚本会在传令传感器感应运动前休眠5秒钟,这是为什么?

这是为了对时间进行限制,从而防止其他人误用了您的登场音乐。如果您将运动传感器设置在了共享区域(例如客厅或大厅),这一点极为重要。
那么5秒钟是正确的等待时间吗?这取决于您的无线网络范围和家庭的布局。如果您的传感器正对着前门,您可能不希望有任何延迟。您可以进行多次尝试来找到合适的延迟时间。
图片:Raspberry Pi

多晚才算太晚?

如果您要去吃晚饭或去酒吧,很晚回家,这时候用Shawn Michaels的动感音乐吵醒大家怎么办?如果您完全沉迷于自己的角色扮演中,那么这将会是一个刺激竞争对手并且建立主导地位的绝佳机会。
至于我?我不愿意在晚上十点之后播放嘈杂的音乐。
我们可以使用time模块中的localtime()函数来检查时间。可以通过将脚本中的第一行更改为以下内容来导入该函数:
from time import sl eep, localtime
然后我们可以通过以下比较来检查时间是否在上午9点到晚上10点之间:
9 < localtime().tm_hour < 22
接下来,我们只需要将mpg123命令放置在if语句中即可。
if 9 < localtime().tm_hour < 22:
run(“mpg123 ~/entrancemusic/’Sexy Boy (Shawn Michaels).mp3′”, shell=True)
您可以根据自己的情况来调整设备的工作时间。

平凡客厅的隆重登场

世界上很少有人能够称为职业摔跤手。多亏了Python和Raspberry Pi,您也可以享受到隆重登场的感觉了。
您会对此做出进一步调整吗?请在评论中留下您的想法!

DevicePlus 编辑团队
DevicePlus 编辑团队
设备升级版适用于所有热爱电子和机电一体化的人。

Related post

  1. DIY Raspberry Pi 无人机:机械构造–第一部分(续)

  2. smart picture frame

    使用Raspberry Pi 3自制智能相框和日历—第二部分

  3. raspberry pi

    如何将Raspberry Pi用作Web服务器?

  4. Raspberry Pi Home Media Storage

    将Raspberry Pi设置为家庭媒体服务器

  5. Raspberry pi quadcopter

    基于Raspberry Pi的DIY无人机第3部分–FPV设置指南

  6. 通过Twython在Raspberry Pi上发推文!(第2部分)

  7. 用于Raspberry Pi的Sense HAT扩展板——Sense HAT模拟器

  8. bme280

    利用AE-BME280和Raspberry Pi读取温度、湿度和压力值

  9. raspberry pi motion control lamp

    如何用Raspberry Pi制作动作控制感应灯

TECH INFO

基础知识

  • SiC功率元器件
  • Si功率元器件
  • 热设计
  • 仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


PICK UP!

  1. 以纳米级输出电容实现稳定控制的Nano Cap™技术:无需输出电容器的线性稳压器
  2. 刘铭
  3. ROHM开发出业界先进的第4代低导通电阻SiC MOSFET:支持xEV/EV主机逆变器和电池提高电压
  4. “第三代 行驶中无线供电轮毂电机”开发成功:超小型SiC模块 助力实现无需担心充电的EV
  5. arduino explorer rover
  6. 作为车载用二次电源而开发的同步整流降压型DC/DC转换器 : 车载设备中二次电源的优点
  7. 模块配置
PAGE TOP