2025年8月12日火曜日

DFPlayer で MP3 再生

 Raspberry Pi Pico Wは単体でも便利ですが、外部機器と音声や音楽をやりとりできると応用の幅がぐっと広がります。

そこで今回は「DFPlayer Mini」を使ったMP3再生について紹介します。

まずは、Pico WからDFPlayer Miniにコマンドを送り、保存されている音楽ファイルを再生・停止・音量調整などを操作する方法を実装してみましょう。

DFPlayer Miniとは?

DFPlayer MiniはマイクロSDカード内のMP3/WAVファイルを単体で再生できる小型モジュールです。Pico Wとはシリアル通信(UART)を使って接続し、簡単なコマンドで音楽の再生・停止・音量変更などを制御できます。

回路図


簡単なフォルダの構成

【フォルダ構成】
00 → 001.mp3
     002.mp3
コマンドをバイナリーデータで送るので

コマンド:<7E><FF><06><0F><00><00><01><EF>

【各部分の説明】
<0F>:< Specify playback of a folder( フォルダを指定して再生)

<17>:<7E><FF><06><17><00><00><01><EF>
          指定したフォルダー内のファイルを繰り返し再生する。

<16>:<7E><FF><06><16><00><00><01><EF>
          再生を停止する。

後ろから<00><01><EF>
00フォルダの1番目のデータとなるので、
【フォルダ00の1番目の音楽データを再生するプログラム】

from machine import Pin, UART
import time

# UART1_TX (GPIO4) と UART1_RX (GPIO5) の設定
uart = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5))

# DFPlayer Miniに送るコマンド
cmd_play = bytearray([0x7e, 0xff, 0x06, 0x0f, 0x00, 0x00, 0x01, 0xef])
cmd_volume = bytearray([0x7e, 0xff, 0x06, 0x06, 0x00, 0x01, 0x1e, 0xef])

def send_dfplayer_command(cmd):
    # DFPlayer Miniにコマンドを送信
    uart.write(cmd)
    print("DFPlayer Miniにコマンドを送信しました")

# 起動処理
print("起動中...")
time.sleep(0.5)  # DFPlayer Miniの起動待ち

# 音量を最大に設定(コメントアウトを外せば音量設定も可能)
# send_dfplayer_command(cmd_volume)

# 00-01.mp3を再生
send_dfplayer_command(cmd_play)

# 空のメインループ(MicroPythonでは通常使う必要はありませんが、長時間動作する場合は必要です)
while True:
    time.sleep(1)

処理の流れ

⚙️ UART初期化

GPIO4 を TX、GPIO5 を RX にして UART1(9600 bps)を開く。

📦 コマンド定義

 ・    cmd_play →  00-01.mp3 を再生する命令

 ・    cmd_volume → 音量を設定する命令

✉️ 送信用ラッパ関数 send_dfplayer_command()

引数のバイト列を DFPlayer Mini に書き込み、送信完了を表示。

🚀 起動メッセージ & ウェイト

「起動中…」を表示して 0.5 秒待ち、DFPlayer Mini の準備完了を待つ。

🔊 (任意)音量設定

コメントを外すと cmd_volume を送って最大音量にする。

🎵 再生コマンド送信

cmd_play を送って 00-01.mp3 を開始。

🔁 メインループ

1 秒ごとにスリープしながら無限ループ(将来の拡張用に常駐)。

コマンド一覧

DFPlayerのバイナリコマンド例と説明

コマンドフォーマット:
<7E><FF><06><Command><ACK><Parameter1><Parameter2><EF>

    7E: コマンドの開始バイト
    FF: 固定値(バージョン情報)
    06: データ長(コマンド、ACK、パラメータの合計)
    Command: コマンドコード
    ACK: 応答を要求するかどうか(00: 応答なし, 01: 応答あり)
    Parameter1, Parameter2: コマンドに応じた値
    EF: コマンドの終了バイト



1.フォルダを指定して再生

コマンド: <7E><FF><06><0F><00><01><01><EF>

説明:
・<0F>: フォルダ再生コマンド
・<01>: フォルダ番号
・<01>: ファイル番号

2.フォルダ内のファイルを繰り返し再生

コマンド: <7E><FF><06><17><00><00><01><EF>

説明:
<17>: フォルダ内の繰り返し再生コマンド

3.再生を停止

コマンド: <7E><FF><06><16><00><00><01><EF>

説明:
・<16>: 停止コマンド

4.音量を設定

コマンド: <7E><FF><06><06><00><00><1E><EF>

説明:
・<06>: 音量設定コマンド
・<1E>: 音量レベル(0~30)


5.次の曲を再生

コマンド: <7E><FF><06><01><00><00><00><EF>

説明:
・<01>: 次の曲コマンド

6.前の曲を再生

コマンド: <7E><FF><06><02><00><00><00><EF>

説明:
<02>: 前の曲コマンド

6.指定したトラックを再生

コマンド: <7E><FF><06><03><00><00><05><EF>

説明:
・<03>: トラック再生コマンド
・<05>: トラック番号


0 件のコメント:

コメントを投稿

Google Spread Sheetの利用

  以前に ESP32 で作っていたものを、Raspberry Pi Pico W + MicroPythonで再現してみました。 1.Googleスプレッドシートの設定 1.Google Drive → 右クリック → Google スプレッドシート 2.作成して共有をクリック