0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Raspberry Pi設(shè)置登場(chǎng)音樂(lè)

李玉鑫 ? 來(lái)源:DevicePlus ? 作者:DevicePlus ? 2023-03-01 10:21 ? 次閱讀

在我年輕的時(shí)候,我最喜歡的摔跤手絕對(duì)是被稱(chēng)為“Heartbreak Kid”的Shawn Michaels。他是一個(gè)偉大的運(yùn)動(dòng)員和表演者,所做的一切都非常有趣。
從他進(jìn)入大樓的那一刻開(kāi)始,這首音樂(lè)響起:
這讓我開(kāi)始思考,如果Shawn Michaels可以以這種方式入場(chǎng),為什么我不能?
是的,有了Raspberry PiPython chops,像我(或者您?。┻@樣的家伙也許就可以擁有登場(chǎng)音樂(lè)了。

Raspberry Pi如何檢測(cè)出您的登場(chǎng)?

這里有幾種選擇。
我們可以檢測(cè)出您的手機(jī)是否連接到無(wú)線(xiàn)網(wǎng)絡(luò)。這很有用,因?yàn)镽aspberry Pi可以確認(rèn)是否是您本人在進(jìn)入(而非您的室友或家人)。
缺點(diǎn)是它對(duì)您的距離的測(cè)定不太精確。我的意思是,這是登場(chǎng)音樂(lè),對(duì)嗎?它應(yīng)該在您進(jìn)門(mén)時(shí)開(kāi)始響起。
您也可以改用PIR運(yùn)動(dòng)傳感器。這可以將音樂(lè)與入門(mén)動(dòng)作精確匹配,不過(guò)這種方法無(wú)法對(duì)正在進(jìn)入的人作出區(qū)分。
所以,我們可以將這兩者結(jié)合起來(lái)。Raspberry Pi將會(huì)在您的手機(jī)連接到無(wú)線(xiàn)網(wǎng)絡(luò)時(shí)檢測(cè)出您已經(jīng)到家,然后等待傳感器來(lái)檢測(cè)出您進(jìn)入的確切時(shí)間。
如果您更傾向于使用其中的一種,可以直接去除掉其他部分。

使用Python Subprocess模塊

本項(xiàng)目還會(huì)引入Python的subprocess模塊。該模塊在標(biāo)準(zhǔn)庫(kù)中,您無(wú)需進(jìn)行安裝。
使用該模塊,我們可以在Python內(nèi)部運(yùn)行shell命令。這非常方便。如果您已經(jīng)知道這些命令行是如何執(zhí)行操作的,只需直接運(yùn)行該命令即可。
我們將使用的兩個(gè)命令是mpg123和ping。
mpg123是一個(gè)用于播放mp3文件的命令行實(shí)用程序。我們需要安裝mpg123。
您不需要安裝ping,系統(tǒng)中已經(jīng)有了。這是一個(gè)簡(jiǎn)單的工具,用于檢查遠(yuǎn)程服務(wù)器或設(shè)備是否處于連通狀態(tài)并作出響應(yīng)。我們將使用它來(lái)檢查您的手機(jī)是否連接到了您的無(wú)線(xiàn)網(wǎng)絡(luò)。

所需組件

對(duì)于本項(xiàng)目,您將需要以下組件:

帶有電源、無(wú)線(xiàn)網(wǎng)卡以及一個(gè)
SD 卡的
Raspberry Pi
pYYBAGPzHTCAPeTzAAAZXrMS0tI642.jpg
一個(gè)PIR運(yùn)動(dòng)傳感器
(我使用的是XC-4444)
pYYBAGPy0wyAUsVmAAATc_DD-1Q271.jpg
Shawn Michaels所演唱的Sexy Boy高品質(zhì)MP3文件(或者您也可以選擇其他非常鐘意的歌曲)
從Raspberry Pi播放音樂(lè)的某種方式。連接到HDMI端口的家庭娛樂(lè)系統(tǒng)是比較理想的

您還需要一部智能手機(jī)、一個(gè)無(wú)線(xiàn)家庭網(wǎng)絡(luò)和3根公對(duì)母跳線(xiàn)。
確保您的手機(jī)設(shè)置為自動(dòng)連接到您家里的無(wú)線(xiàn)網(wǎng)絡(luò),并且沒(méi)有使用任何省電設(shè)置,以防手機(jī)在不使用時(shí)禁用無(wú)線(xiàn)網(wǎng)絡(luò)。
這里我們假設(shè)您已經(jīng)了解PIR運(yùn)動(dòng)傳感器和GPIO Zero庫(kù)了。如果沒(méi)有,請(qǐng)先查看這些相關(guān)介紹。您將從中了解該設(shè)備的工作原理,在本項(xiàng)目中我們將以大致相同的方式對(duì)其進(jìn)行接線(xiàn)。
本項(xiàng)目用Raspberry Pi OS Buster進(jìn)行了測(cè)試,但是舊版本的Raspbian應(yīng)該也沒(méi)問(wèn)題。我們使用的Python模塊和Linux命令都是存在已久的了。

設(shè)置Raspberry Pi

我們首先為這個(gè)項(xiàng)目創(chuàng)建一個(gè)目錄,并進(jìn)入該目錄。打開(kāi)終端并輸入:
mkdir ~/entrancemusic
cd ~/entrancemusic
用一種您喜歡的方式將mp3文件復(fù)制到此目錄中。
然后用以下命令更新您的系統(tǒng)并安裝mpg123:
sudo apt update && sudo apt upgrade -y
sudo apt install mpg123

連接PIR運(yùn)動(dòng)傳感器

這次我們不使用面包板。對(duì)于我們的項(xiàng)目來(lái)說(shuō),面包板將會(huì)產(chǎn)生阻礙。
拿起您的PIR運(yùn)動(dòng)傳感器和跳線(xiàn)。將傳感器的電源引腳連接到Raspberry Pi的5V電源引腳。然后將傳感器的接地引腳連接到Raspberry Pi上的接地引腳。
pYYBAGPzHTSAem2xAACyO406BEE370.png
然后將數(shù)字輸出連接到一個(gè)GPIO引腳。我使用的是引腳24,因?yàn)樗奈恢帽容^方便。
poYBAGPzHTaAe5KuAACtfy1Syjs205.png
這就是運(yùn)動(dòng)傳感器的全部接線(xiàn)過(guò)程。將其擺放為面向您將要進(jìn)入的門(mén)口。

為您的智能手機(jī)保留IP地址

幾乎所有家庭無(wú)線(xiàn)網(wǎng)絡(luò)都使用DHCP來(lái)為所連接的新設(shè)備自動(dòng)分配可用的IP地址。這很方便,因?yàn)樗芸煽坎⑶覠o(wú)需讓您進(jìn)行管理。
這也意味著特定設(shè)備的IP地址可能會(huì)不時(shí)發(fā)生更改。對(duì)于本項(xiàng)目,我們希望您的手機(jī)始終分配到同一個(gè)IP地址上,并且沒(méi)有其他設(shè)備使用該地址。
大多數(shù)路由器為一個(gè)設(shè)備分配的IP地址至少會(huì)持續(xù)一天左右的時(shí)間。因此,如果您只打算執(zhí)行本項(xiàng)目一次,那么可以愉快地繼續(xù)進(jìn)行,不必再為此困擾。
但是如果您想多次運(yùn)行此腳本,那么您應(yīng)該為您的設(shè)備保留一個(gè)IP地址。您可以通過(guò)登陸無(wú)線(xiàn)路由器的管理面板來(lái)執(zhí)行此操作。不同的路由器對(duì)此的處理方式略有不同,但通常操作方式都比較容易。如果您遇到了困難,請(qǐng)使用搜索引擎查找您設(shè)備的手冊(cè)。
我的手機(jī)保留的IP地址為192.168.0.5。您的IP地址可能會(huì)有所不同,只需按照說(shuō)明對(duì)其進(jìn)行替換即可。
當(dāng)還有一點(diǎn)是—您是否有使用SSH通過(guò)本地網(wǎng)絡(luò)訪(fǎng)問(wèn)Raspberry Pi的習(xí)慣?請(qǐng)也為其保留一個(gè)IP地址。如果它的IP地址是不會(huì)改變的,那就更方便了。

使用mpg123播放登場(chǎng)音樂(lè)

要從命令行使用mpg123,你只需要輸入您要播放的mp3名稱(chēng)即可,如下所示:
mpg123 ‘Sexy Boy (Shawn Michaels).mp3’
從Python運(yùn)行此命令也并不復(fù)雜。
首先,導(dǎo)入subprocess模塊中的run函數(shù)。然后將以上命令行作為第一個(gè)參數(shù)傳遞給該函數(shù),并將“shell=True”作為第二個(gè)參數(shù),如下所示:
from subprocess import run
run(“mpg123 ~/entrancemusic/’Sexy Boy (Shawn Michaels).mp3′”, shell=True)

使用Ping檢測(cè)您的手機(jī)是否已連接

您可以通過(guò)命令行ping您的手機(jī),如下所示:
ping -c 192.168.0.5
請(qǐng)記得替換您手機(jī)的IP地址。我們添加“-c 1”來(lái)告訴ping只發(fā)送一次請(qǐng)求。如果我們不添加該內(nèi)容,該命令將會(huì)被一直運(yùn)行,直到被取消。
如果設(shè)備響應(yīng),ping將會(huì)返回成功。如果沒(méi)有響應(yīng),將會(huì)返回一個(gè)錯(cuò)誤代碼。
理想情況下,我們可以用此錯(cuò)誤代碼來(lái)查看手機(jī)是否已經(jīng)連接到網(wǎng)絡(luò)。不幸的是,許多智能手機(jī)不會(huì)對(duì)請(qǐng)求發(fā)生響應(yīng)。這就意味著無(wú)論您的手機(jī)是否連接到了網(wǎng)絡(luò),ping都會(huì)返回錯(cuò)誤代碼。
那么讓我們來(lái)看看輸出內(nèi)容。如果沒(méi)有設(shè)備在指定的IP地址上,那么輸出中將包含語(yǔ)句“Destination Host Unreachabl(目標(biāo)主機(jī)無(wú)法訪(fǎng)問(wèn))”。
Python的subprocess模塊包含Popen和PIPE對(duì)象,可以讓我們對(duì)輸出進(jìn)行處理,如下所示:
subprocess import Popen, PIPE
p1 = Popen([“ping”, “-c”, “1”, “192.168.0.5”], stdout=PIPE)
stdout_value = p1.communicate()[0]
如果您想了解此代碼中所運(yùn)行的內(nèi)容,請(qǐng)閱讀此處。對(duì)于本項(xiàng)目來(lái)說(shuō),知道它運(yùn)行了ping命令,然后將輸出分配給了stdout_value就足夠了。
我們可以使用它來(lái)編寫(xiě)一個(gè)循環(huán)程序,當(dāng)“Destination Host Unreachable”沒(méi)有出現(xiàn)在輸出中時(shí)可進(jìn)行中斷。
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)
這個(gè)循環(huán)會(huì)一直運(yùn)行到您的手機(jī)連接到網(wǎng)絡(luò)為止。

將所有程序?qū)懙揭粋€(gè)腳本中

我們現(xiàn)在已經(jīng)具備了用于簡(jiǎn)單的登場(chǎng)音樂(lè)程序的所有代碼塊。輸入以下命令打開(kāi)一個(gè)新文件:
nano entrancemusic.py
然后輸入(或粘貼)以下內(nèi)容:
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.
如果您想在回家時(shí)安排登場(chǎng)音樂(lè),請(qǐng)?jiān)陔x開(kāi)家之前運(yùn)行此腳本,輸入:
python3 entrancemusic.py

微調(diào)

該腳本會(huì)像本文所述的那樣運(yùn)行,但是您可能會(huì)想要調(diào)試一些功能。
安排您的入場(chǎng)時(shí)間
您可能已經(jīng)注意到了,此腳本會(huì)在傳令傳感器感應(yīng)運(yùn)動(dòng)前休眠5秒鐘,這是為什么?

這是為了對(duì)時(shí)間進(jìn)行限制,從而防止其他人誤用了您的登場(chǎng)音樂(lè)。如果您將運(yùn)動(dòng)傳感器設(shè)置在了共享區(qū)域(例如客廳或大廳),這一點(diǎn)極為重要。
那么5秒鐘是正確的等待時(shí)間嗎?這取決于您的無(wú)線(xiàn)網(wǎng)絡(luò)范圍和家庭的布局。如果您的傳感器正對(duì)著前門(mén),您可能不希望有任何延遲。您可以進(jìn)行多次嘗試來(lái)找到合適的延遲時(shí)間。
圖片:Raspberry Pi

多晚才算太晚?

如果您要去吃晚飯或去酒吧,很晚回家,這時(shí)候用Shawn Michaels的動(dòng)感音樂(lè)吵醒大家怎么辦?如果您完全沉迷于自己的角色扮演中,那么這將會(huì)是一個(gè)刺激競(jìng)爭(zhēng)對(duì)手并且建立主導(dǎo)地位的絕佳機(jī)會(huì)。
至于我?我不愿意在晚上十點(diǎn)之后播放嘈雜的音樂(lè)。
我們可以使用time模塊中的localtime()函數(shù)來(lái)檢查時(shí)間??梢酝ㄟ^(guò)將腳本中的第一行更改為以下內(nèi)容來(lái)導(dǎo)入該函數(shù):
from time import sl eep, localtime
然后我們可以通過(guò)以下比較來(lái)檢查時(shí)間是否在上午9點(diǎn)到晚上10點(diǎn)之間:
9 < localtime().tm_hour < 22
接下來(lái),我們只需要將mpg123命令放置在if語(yǔ)句中即可。
if 9 < localtime().tm_hour < 22:
run(“mpg123 ~/entrancemusic/’Sexy Boy (Shawn Michaels).mp3′”, shell=True)
您可以根據(jù)自己的情況來(lái)調(diào)整設(shè)備的工作時(shí)間。

平凡客廳的隆重登場(chǎng)

世界上很少有人能夠稱(chēng)為職業(yè)摔跤手。多虧了Python和Raspberry Pi,您也可以享受到隆重登場(chǎng)的感覺(jué)了。
您會(huì)對(duì)此做出進(jìn)一步調(diào)整嗎?請(qǐng)?jiān)谠u(píng)論中留下您的想法!

pYYBAGPbhjqAbi1JAAAGd6_rQT0867.png

DevicePlus 編輯團(tuán)隊(duì)

設(shè)備升級(jí)版適用于所有熱愛(ài)電子和機(jī)電一體化的人。

審核編輯黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2541

    文章

    49961

    瀏覽量

    747507
  • Raspberry Pi
    +關(guān)注

    關(guān)注

    1

    文章

    554

    瀏覽量

    22128
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    名單公布!樹(shù)莓派5(Raspberry Pi 5)開(kāi)發(fā)板免費(fèi)試用?。?!

    名單公布: jinsheng、華仔stm32 樹(shù)莓派5(Raspberry Pi 5)新主板采用2.4GHz四核64位Arm Cortex-A76處理器,擁有512KB的L2緩存和2MB的共享L3
    發(fā)表于 06-27 15:40

    震驚!居然有人給 Raspberry Pi 5 做 X 射線(xiàn)!

    ? Jeff Geerling 會(huì)做一些莫名其妙的怪事,比如用信鴿來(lái)對(duì)抗網(wǎng)速,不過(guò)這也是我們喜歡他視頻的原因。最近,杰夫?qū)?Raspberry Pi 5 進(jìn)行了 X 光透視,揭示了
    的頭像 發(fā)表于 01-10 16:42 ?369次閱讀
    震驚!居然有人給 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 做 X 射線(xiàn)!

    搭載 樹(shù)莓派5 Raspberry Pi 5 全新的HMI發(fā)布!

    多年來(lái),上海晶珩不斷推陳出新,在成功推出一系列基于 Raspberry Pi CM4 的平板電腦后,現(xiàn)推出了首個(gè)搭載 Raspberry Pi 5 的平板電腦系列HMI3010。其中,
    的頭像 發(fā)表于 12-28 11:33 ?686次閱讀
    搭載 樹(shù)莓派5 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 全新的HMI發(fā)布!

    基于Raspberry Pi 5的蜂窩物聯(lián)網(wǎng)項(xiàng)目

    今天小拜年給大家?guī)?lái)的是來(lái)自美國(guó)的Maker Rob Lauer的基于樹(shù)莓派5的蜂窩網(wǎng)絡(luò)項(xiàng)目,了解如何為新的 Raspberry Pi 5 單板計(jì)算機(jī)添加低帶寬蜂窩連接。
    的頭像 發(fā)表于 12-25 10:55 ?1052次閱讀
    基于<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5的蜂窩物聯(lián)網(wǎng)項(xiàng)目

    RP2040和Raspberry Pi的區(qū)別

    作為 Raspberry Pi 基金會(huì)推出的首款微控制器產(chǎn)品,RP2040 標(biāo)志著以單板計(jì)算機(jī) (SBC) 而聞名的 Raspberry Pi 基金會(huì)的新方向。RP2040 將
    的頭像 發(fā)表于 11-16 17:37 ?779次閱讀
    RP2040和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的區(qū)別

    Banana Pi BPI-M6(Raspberry Pi 5 替代品)初始設(shè)置及固件燒錄

    Banana Pi BPI-M6(Raspberry Pi 5 替代品)初始設(shè)置及固件燒錄
    的頭像 發(fā)表于 11-09 09:24 ?964次閱讀
    Banana <b class='flag-5'>Pi</b> BPI-M6(<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 替代品)初始<b class='flag-5'>設(shè)置</b>及固件燒錄

    Banana Pi BPI-M6開(kāi)源硬件開(kāi)發(fā)板介紹以及與 Raspberry Pi 5 的比較

    Banana Pi BPI-M6開(kāi)源硬件開(kāi)發(fā)板介紹以及與 Raspberry Pi 5 的比較
    的頭像 發(fā)表于 11-09 09:22 ?576次閱讀
    Banana <b class='flag-5'>Pi</b> BPI-M6開(kāi)源硬件開(kāi)發(fā)板介紹以及與 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 的比較

    raspberry pi 0應(yīng)多少伏供電?

    raspberry pi 0 5V 2A供電板太熱,5V 1A可以嗎
    發(fā)表于 11-07 06:52

    貿(mào)澤成為Raspberry Pi的原廠(chǎng)授權(quán)代理商

    Pi新品。貿(mào)澤供應(yīng)直接來(lái)自Raspberry Pi的單板計(jì)算機(jī) (SBC)、嵌入式設(shè)備和外設(shè)的完整產(chǎn)品系列,并提供源自制造商的完整可追溯性/原廠(chǎng)認(rèn)證。 ? 貿(mào)澤電子亞太區(qū)市場(chǎng)及商務(wù)拓展副總裁田吉平女士
    發(fā)表于 10-19 15:17 ?431次閱讀

    加熱和冷卻樹(shù)莓派5(Raspberry Pi5)這是真嘞?

    每當(dāng)發(fā)布新一代的樹(shù)莓派(Raspberry Pi)時(shí),熱控制問(wèn)題都會(huì)引發(fā)廣泛討論。人們都在思考是否有必要采取措施以控制熱量,以及如果需要,如何最有效地實(shí)現(xiàn)。而這一次,隨著樹(shù)莓派5(Raspberry
    的頭像 發(fā)表于 10-13 14:41 ?783次閱讀
    加熱和冷卻樹(shù)莓派5(<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>5)這是真嘞?

    Raspberry Pi 5 將于 10 月底推出,開(kāi)源硬件社區(qū)又熱鬧了

    Raspberry Pi 5 將于 10 月底推出。4GB 型號(hào)的售價(jià)為 60 美元,8GB 版本的售價(jià)為 80 美元,幾乎該平臺(tái)的各個(gè)方面都進(jìn)行了升級(jí),提供了不折不扣的用戶(hù)體驗(yàn)。Raspberry
    的頭像 發(fā)表于 10-10 09:18 ?465次閱讀
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 將于 10 月底推出,開(kāi)源硬件社區(qū)又熱鬧了

    Raspberry Pi 3 官方套件入門(mén)指南

    Raspberry Pi 3套件介紹Raspberry Pi 3套件安裝Raspberry Pi
    發(fā)表于 10-09 07:53

    【樹(shù)莓派Pi5】樹(shù)莓派 Raspberry Pi 5 正式發(fā)布!

    這款 Pi 5從英國(guó)樹(shù)莓派總部跨洋而來(lái),作為樹(shù)莓派的官方代理商,上海晶珩EDATEC榮幸地在首發(fā)時(shí)刻,率先揭開(kāi)了 Pi 5 的神秘面紗: Raspberry Pi 5:矚目新生!超越了
    的頭像 發(fā)表于 09-28 17:30 ?1767次閱讀
    【樹(shù)莓派<b class='flag-5'>Pi</b>5】樹(shù)莓派 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 正式發(fā)布!

    完整版Raspberry Pi樹(shù)莓派電路圖

    完整版Raspberry Pi樹(shù)莓派電路圖大全
    發(fā)表于 09-25 08:00

    Raspberry Pi樹(shù)莓派4 Model B產(chǎn)品介紹

    免費(fèi)分享Raspberry Pi樹(shù)莓派 4 Model B產(chǎn)品簡(jiǎn)介、機(jī)械制圖、示意圖
    發(fā)表于 09-25 07:49