0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MicroPythonを使ってみる(その3:mp3ファイル再生)

Posted at

DFPlayer miniを使ってmp3ファイルを再生

秋月電子などで売られているDFPlayer miniをMicroPythonを使って制御する。

DFPlayer mini

DFPlayer miniは、YX5200-24SSというmp3ファイルをデコードするチップ、8002というアンプ、マイクロSDスロットなどを搭載しており、マイコンなしでもmp3ファイルの再生が可能である。が、ここでは、ESP32を使ってmp3ファイルを再生する。Wikiにあり。データシートもそこからたどれる。

Micropythonソースコード

だいたいこの手のものは、githubなどを探せば見つかる。いくつか見つけたが、ここにあるものを利用した。

解説

UART

マイコンからはUART経由で制御を行う。用いるESP32には3つのUARTがある。MicroPython的には、UART0、UART1、UART2である。そのうち1つ(UART0)はPCとの接続用(USB経由)に使われており利用不可。UART1またはUART2とが使える。ハードウェアシリアルとしては、UART1ではTX=10/RX=9(GPIO番号)、UART2ではTX=17/RX=16となっているが、使用したESP32用Micropython Firmwareでは、ハードウェアシリアルを使うことができなかった。詳細は調査していないが、無理やりセットしてもリセットがかかってしまう。今回は、ソフトウェアシリアルを使うことにし、

  • TX = 4
  • RX = 2
    と設定した。

SDカードのフォルダ及びファイルの構成

DFPlayer miniにて、mp3ファイルをSDカードに置く構成については、このサイトの”Modes of Operation”の説明がわかりやすい。今回は、mp3というフォルダーを作り、その配下に、再生する順に0001.mp3、0002.mp3、0003.mp3、、、のようにファイルを置く。

ソースコード

ライブラリ(dfplayermini.py)

まずはコアであるdfplayermini.pyの補足説明。

class Player:
    def __init__(self, pin_TX, pin_RX):
        self.uart = UART(1, 9600, tx=pin_TX, rx=pin_RX)
        self.cmd(0x3F)  # send initialization parametres
        self._fadeout_timer = Timer(-1)

        self._volume = 15
        self._max_volume = 15
        self._fadeout_speed = 0
  • ここでは、UART1を利用。UART2を使いたいときは”2”を指定する。
  • ボーレートは9600bps固定。
  • max_volumeは0-30まで指定可能。

このファイルに記載されているコマンドについては、YX5200-24SSデータシートを参照するとよい。

再生サンプルコード

こちらの簡略版である。

from dfplayermini import Player
from time import sleep
import sys

music = Player(pin_TX=4, pin_RX=2)

sleep(1)
music.volume(10)
sleep(1)
music.play(2)
sleep(10)

music.play(6)
sleep(30)

sys.exit()

実験

下記写真の中央に位置するのが、DFPlayer miniである。

結果的には動作したのであるが、コマンド設定(含む音声再生)前に、ある程度Sleepを入れないと動作しないことがしばしば発生。Pythonはインタープリターなので、対話形式でコードを入力したときは、ほぼ問題なく設定および再生ができていた。また、ハードウェア不良らしき状況もあった(DFPlayer miniの電源入れ直しが必要だったこともあり)。上記ライブラリ内にある、module_reset()なども試すとよいかと思われる。個体の問題なのか、YX5200-24SSの制御の仕方が不適切なのか、詳細は未調査。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?