注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!
4.1.2 ミュージックプレイヤー¶
はじめに¶
プロジェクト 3.1.3 オーディオモジュール では、スピーカーで曲を再生しました。今回は、音楽の再生/一時停止と音量を制御するための3つのボタンを追加します。
必要な部品¶
このプロジェクトで必要なコンポーネントは以下の通りです。
一式をまとめて購入するのが便利です。リンクはこちら:
名前 |
このキットのアイテム |
リンク |
---|---|---|
Raphael Kit |
337 |
以下のリンクから個別に購入することもできます。
コンポーネントの紹介 |
購入リンク |
---|---|
- |
|
回路図¶
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
ピン11 |
0 |
17 |
GPIO18 |
ピン12 |
1 |
18 |
GPIO27 |
ピン13 |
2 |
27 |
実験手順¶
ステップ1: 回路を組み立てる。
上記の図に従って回路を組み立てたら、Raspberry Piの3.5mmオーディオジャックにオーディオケーブルを挿入します。
ステップ2: コードのフォルダに移動する。
cd ~/raphael-kit/python/
ステップ3: 実行する。
python3 4.1.2_MusicPlayer.py
コードが実行された後、Raspberry Piは ~/raphael-kit/music
ディレクトリ内の my_music.mp3
ファイルを再生します。
ボタン1で音楽を一時停止/再生します。
ボタン2で音量を下げます。
ボタン3で音量を上げます。
他の音楽ファイルをRaspberry Piにアップロードしたい場合は、 Filezilla Software を参照してください。
コード
注釈
以下のコードは 修正/リセット/コピー/実行/停止 が可能です。ただし、それに先立って、 raphael-kit/python
のようなソースコードのパスに移動する必要があります。コードを修正した後、直接実行して効果を確認することができます。
from pygame import mixer
import RPi.GPIO as GPIO
import time
import os
user = os.getlogin()
user_home = os.path.expanduser(f'~{user}')
BtnPin1 = 18
BtnPin2 = 17
BtnPin3 = 27
volume = 0.7
status = False
upPressed = False
downPressed = False
playPressed = False
def setup():
mixer.init()
GPIO.setmode(GPIO.BCM)
GPIO.setup(BtnPin1, GPIO.IN, GPIO.PUD_UP)
GPIO.setup(BtnPin2, GPIO.IN, GPIO.PUD_UP)
GPIO.setup(BtnPin3, GPIO.IN, GPIO.PUD_UP)
def clip(x,min,max):
if x < min:
return min
elif x > max:
return max
return x
def play(pin):
global playPressed
playPressed = True
def volDown(pin):
global downPressed
downPressed = True
def volUp(pin):
global upPressed
upPressed = True
def main():
global volume, status
global downPressed, upPressed, playPressed
mixer.music.load(f'{user_home}/raphael-kit/music/my_music.mp3')
mixer.music.set_volume(volume)
mixer.music.play()
GPIO.add_event_detect(BtnPin1, GPIO.FALLING, callback=play)
GPIO.add_event_detect(BtnPin2, GPIO.FALLING, callback=volDown)
GPIO.add_event_detect(BtnPin3, GPIO.FALLING, callback=volUp)
while True:
if upPressed:
volume = volume + 0.1
upPressed = False
if downPressed:
volume = volume - 0.1
downPressed = False
if playPressed:
if status:
mixer.music.pause()
status = not status
else:
mixer.music.unpause()
status = not status
playPressed = False
time.sleep(0.5)
volume = clip(volume,0.2,1)
mixer.music.set_volume(volume)
time.sleep(0.1)
def destroy():
# Release resource
GPIO.cleanup()
mixer.music.stop()
# If run this script directly, do:
if __name__ == '__main__':
setup()
try:
main()
# When 'Ctrl+C' is pressed, the program
# destroy() will be executed.
except KeyboardInterrupt:
destroy()
コードの説明
from pygame import mixer
mixer.init()
pygame
ライブラリの Mixer
メソッドをインポートし、メソッドを初期化します。
BtnPin1 = 18
BtnPin2 = 17
BtnPin3 = 27
volume = 0.7
三つのボタンのピンポートを定義し、初期音量を0.7に設定します。
upPressed = False
downPressed = False
playPressed = False
upPressed
、 downPressed
、 playPressed
はすべて割り込みフラグであり、 True
の場合に対応するタスクが実行されます。
def clip(x,min,max):
if x < min:
return min
elif x > max:
return max
return x
clip()
関数は、入力パラメータの上限と下限を設定するために使用されます。
GPIO.add_event_detect(BtnPin1, GPIO.FALLING, callback=play)
GPIO.add_event_detect(BtnPin2, GPIO.FALLING, callback=volDown)
GPIO.add_event_detect(BtnPin3, GPIO.FALLING, callback=volUp)
BtnPin1
、 BtnPin2
、 BtnPin3
のキー検出イベントを設定します。
BtnPin1
が押された場合、割り込み関数play()
が実行されます。BtnPin2
が押された場合、割り込み関数volDown()
が実行されます。BtnPin3
が押された場合、割り込み関数volUp()
が実行されます。