MP3ボイスモジュールを使ってみます

〔マイコンのトップに戻る〕


最近、鳴り物を扱っていないなぁ〜、
ってんでぇ秋月通商の"MP3ボイスモジュール"チョットぉ鳴らして見ます。
なんでもぉ、8MBのメモリが積んであってPCにUSBで繋げればリムーバブルメディアとなり、
MP3/WAVファイルの読み書きが出来るらしい。
後はスピーカーを繋ぎマイコンからUART通信(9600bps)で制御するらしい。

DFROBOTの製品らしくこちらにマニュアルらしき物があるがぁ、コマンド仕様が良く分からない。
中華系の企業らしく、説明書が出てこない、あっても不親切で分かりにくい。
(でもぉ、安いしぃ、面白い製品があったりするのよねぇ)

ピン名称
機能

ONE
1系統シリアル制御端子
「同期要件が必要な為、オシロスコープを使用した正確な調整が必要です。
 まったくテストされていません。」とデータシートではなっている

DACR
右チャンネルのDACオーディオ出力

DACL
左チャンネルのDACオーディオ出力

SP-(SPK)
スピーカーの出力

SP+(SPK)
スピーカーの出力
BUSY
プレイ中はHIGHを出力、その他の状況ではLOWを出力

TX(T)
データ送信ポート MCUのRXと接続する

RX(R)
データ受信ポート MCUのTXと接続する

GND(-)
Ground

VCC(+)
電源 3.3V-5.0V、best at 4.2V (3.3VのIOポートレベル)

・(...)の名称はコネクターの所に書いて有るピン名称です。
・シリアルポートのTTLレベルは3.3Vです。
 5V MCUと接続する場合は、1KΩの抵抗を使用してください。
・他にPCと接続するマイクロUSB端子が有ります。

《コマンド》

メッセージフォーマット

[・・・・]内は全て1バイト
[開始コード][コマンドコード][データ長][データ1]---[データn][チェックサム]

開始コード  :0xAA
コマンドコード:0x01-0x26
データ長   :データの個数、コマンドにより変わる(値はHexで行う)
チェックサム :[開始コード]〜[データn]]までのバイトを合計した値の下位バイト

試したコマンドのみ紹介して置きます、その他はこちらを見て下さい。(試していないのも有りますが...)
それとぉ、ディレクトリを切り替えるコマンドが有る様なのでぇ色々試したのですがぁ上手く動作しない、
て言うか今一つやり方が解らない動くのぉって感じぃ、さすがchinaクオリティ。

Check Playback Status(01):演奏の状態を得ます
コマンド:[0xAA][0x01][0x00][0xAB]
戻り値 :[0xAA][0x01][0x01][Status][サム]
Status  00:停止 01:演奏中 02:一時停止

Play(02):現在のトラックを再生します
コマンド:[0xAA][0x02][0x00][0xAC]
戻り値 :無し
※ 以前に再生した曲が演奏されます、電源を"ON"時はトラック番号"01"が演奏されます。
※ 一時停止した曲の場合は、続きから演奏されます。

Pause(03):再生を一時停止します
コマンド:[0xAA][0x03][0x00][0xAD]
戻り値 :無し

Stop(04):再生を停止します
コマンド:[0xAA][0x04][0x00][0xAE]
戻り値 :無し

Specify song(07):指定した曲を演奏します
コマンド:[0xAA][0x07][0x02][Upper-Byte][Lower-Byte][サム]
戻り値 :無し
[Upper-Byte][Lower-Byte]はトラック番号です、1-65535が有効です。
例:AA 07 02 00 08 BB は現在のドライブの8番目のオーディオを再生します。
※ 再生中に次の曲を送信した場合は、再生中は停止し次の曲を再生します。
※ ディレクトリ名"ZH"の中にファイルを書き込みます、トラック番号(書き込んだ順番)で指定します、
  ファイル名は何でも動作する様です(但し8文字以内と思います)、
  もし、"10"と指定した場合はトラック番号"10"番目の曲が演奏されます。

Volume control(13):ボリュームの制御をします
コマンド:[0xAA][0x13][0x01][Volume][サム]
戻り値 :無し
Volume  音量設定値は、0x00-0x1E
音量:0から30までの合計31のレベルがあり、電源投入時のデフォルトレベルはレベル20です。

Set up loop back mode(18):再生時のモードを指定します
コマンド:[0xAA][0x18][0x01][loop mode][サム]
戻り値 :無し
loop mode
 00:全ての曲を順番に再生し、最初の曲にループバックする
 01:現在の曲の再生を連続して繰り返す、曲はループバックする
 02:現在の曲を1回再生して停止します(デフォルト)
 03:全ての曲をランダムに再生します
 04:サブディレクトリを含まずに、現在のディレクトリ内の全ての曲を順次再生し、ループバックする
 05:現在のディレクトリ内の全ての曲をランダムに再生します
 06:全てのサブディレクトリを除く、現在のディレクトリ内の全ての曲を順次再生します
 07:ストレージ上の全ての曲を順次再生してから停止する

Set up number of repeated loops(19):何回曲を繰り返すかの回数を設定
コマンド:[0xAA][0x19][0x02][Upper-Byte][Lower-Byte][サム]
戻り値 :無し
[Upper-Byte][Lower-Byte]は繰り返す回数を指定します。
※ このコマンドは、ループ モードが[00][01][04]のみ効果が有ります。
※ 回数値の"0"指定はデフォルトでおそらくずっと永遠に繰り返すと思います。

EQ setting(1A):イコライザーを選択します
コマンド:[0xAA][0x1A][0x01][EQ][サム]
戻り値 :無し
EQ    00:NORMAL(デフォルト) 01:POP 02:ROCK 03:JAZZ 04:CLASSIC

Set up channel(1D):チャンネルを選択します(未実験)
コマンド:[0xAA][0x1D][0x01][channel][サム]
戻り値 :無し
channel
 00:MP3チャンネルで再生、DAC出力MP3音楽(MP3チャンネル)
 01:P26とP27からのDAC出力オーディオ(AUXチャンネル)
 02:AUXとMP3チャンネルが同時に開き、DAC出力はMP3オーディオとP26とP27の入力
 (デフォルトは"00"、SPKとDACの出力切り替えだろうか?今一つ不明)
※ DAC接続が出来る機器を持っていないのでDAC実験は行っていません。

《ファイルについて》

ZH”と言う名前の新しいディレクトリを作成し、
コンポジット再生用の全てのオーディオファイルをその中に格納する必要があります。
(予めにサンプルファイルが書き込まれています)
そして「ファイル名として2桁を使用する事をお勧めします。
    例えば、01.mp3、02.mp3、2つのアルファベット、又は1つの漢字を使用できます。 」
とデータシートに書いて有るが、試した所ファイル名は何でも再生するがぁ、
結局指定するのはトラック番号順(ファイルを書き込んだ順)なのです。
サブディレクトリはコマンドで指定できそうなので行って見たが動作させられなかった。

《回路について》


実態配線図
回路電源は、5.0Vで行っています。
UARTのみ配線なのでぇシンプルですね。
スピーカーの配線は何方側でも構いません。
このモジュールには赤いLEDが付いています、
PCに接続で点灯します、曲を演奏時に点灯もします。
又、BUSY端子にLEDを接続した場合も、曲を演奏時に点灯します。


《ダウンロードファイルについて》

↓ここからサンプルプログラムソースファイルをダウンロードして下さい。
VoiceM.zip

プログラムソースをダウンロードしたら、MPLAB Xにてプロジェクトを作成します。
以下のファイルをプロジェクトディレクトリにコピーしてプロジェクトに取込んで下さい。
次にコンパイルPIC書き込みを実行して下さい。
MPLAB(R) XC8 C Compiler Version 1.32コンパイラを使用しています。

ダウンロードファイルを解凍すると下記の様なファイル構成です。
VoiceM.c・・・・・・・・・ 本体のサンプルプログラムソースファイル
skDFRVoiceM.c・・・ DFROBOTのUART MP3ボイスモジュール用関数ライブラリ
skDFRVoiceM.h・・・ DFROBOTのUART MP3ボイスモジュール用関数ライブラリのヘッダファイル
skUARTlib.c・・・・・・ USART関数ライブラリ
skUARTlib.h・・・・・・ USART通信を行う関数のヘッダーファイル

VoiceM.c

システムクロックは16MHzとしています。
トラック番号"01"を1回再生するだけのプログラムです。

skDFRVoice.c
skDFRVoice.h

DFROBOTのUART MP3ボイスモジュールを操作する為の関数ライブラリです。
コマンドはいっぱい有るのですがぁ一部のみ関数にしました。
関数の一覧のみ記述していきます、後はソースファイルを見ましょう。
 DFRVM_Send    - モジュールにコマンドを送信する処理
 DFRVM_SetDefault  - モジュールのデフォルト値設定を行う処理
 DFRVM_Status    - モジュールの現在の状態を得る処理
 DFRVM_Play     - 曲の再生を行う処理
 DFRVM_Pause    - 曲の再生を一時停止させる処理
 DFRVM_Stop    - 曲の再生を止める処理
 DFRVM_SpecifyPlay - 曲を指定して再生する処理
 DFRVM_SetVolume  - ボリュームを設定する処理
 DFRVM_UpVolume  - ボリュームを上げる(+1)処理
 DFRVM_DownVolume - ボリュームを下げる(-1)処理
 DFRVM_SetLoopMode - 曲のループバックモードを設定する処理
 DFRVM_SetLoopSu  - 曲の繰り返す回数を設定する処理
 DFRVM_SetEQ    - イコライザーを設定する処理

skUARTlib.c
skUARTlib.h

この内容は”FT232RL使用によりUSBをシリアル変換してマイコンと繋ぎます”を参照下さい。

《その他》

実験風景 写真はボケ気味です。

モジュールをPCのUSBに挿すのですが、
USBポートによってはエラーが出て
利用出来ない場所が存在します。
さすがchinaクオリティ。

4P側のコネクターケーブルは
付いて来るのですが、
2P側は付いて来ない、付けて欲しい。

aitendoのこちらは32MBの容量です。

次回は"DFROBOTのDFPlayer mini"を
いじって見ようと思います。





【きむ茶工房ガレージハウス】
Copyright (C) 2006-2019 Shigehiro Kimura All Rights Reserved.