こないだ、ふと思いついちゃったので、ArduinoとC-LCD
に移植してみた。
昨日届いた、DFplayer。ちょっとだけ鳴らしてみようと
思ったのが運のつき。なんか、色々はまりどころが
あった。一応動いたけど。
こんな風に、ブレッドボード2個使ってみた。
配線した後の状態は写真取り忘れた。
3.3V版の「あちゃんでいいの」を使って、3.3V I/Oで
動かす。ソフトウェアシリアルのTXとRXを繋ぐだけで
簡単に制御できるだろうと思ったんだけど、いくつか
はまる。
あまりまとまってないけど、備忘録としてまとめて
おくことに。単なる走り書き。
(その1)電源
3.2~5Vで動くはずなんだけど、電源が安定してないと
だめみたい。
電源が安定しないと、突如、初期値(最大音量)で
バリバリとノイズが出る。これはちょっとこまる。
電源を選ぶみたい。別途5V使って電源を供給。
(その2)ファイル名、ディレクトリ名
情報を色々あさっていると、SDカードに「/mp3」って
ディレクトリ作って、そこにmp3を入れること、とか、
そこに入れるファイルのファイル名は、頭4桁が0000
から始まる通番を含むファイル名であること、とか
条件があるらしい。
え?普通のmp3ファイルを放り込んだSDカードを
そのまま再生できないの?と、戸惑う。
とりあえずそういう風にファイル名を変えて、サンプル
プログラム動かしてみた。
このあたりの点についてはまた後ほど。
(その3)制御コードまわり
制御コードは、バイナリ数バイトの簡単なものでは
あるんだけど、さらに、簡単に扱えるライブラリも
あるので、そっちを使って簡単に済ますという目論み。
…だったんだけど、まぁ、サンプルはひとまず動いた。
動いたけど、なんかが微妙におかしい。なにがおかしい
のかを色々実験して確認してみる。
ArduinoのTXだけじゃなくRXも繋いでいることから、
なにか変な事起きるときに、それに関する情報でも
吐き出してないかなぁ?と思って、シリアルモニタ
で眺めてみる。
なんかでてきた。調べてみたら、
http://www.picaxe.com/docs/spe033.pdf
このpdfの5ページ目に、戻りのコードが書かれてて、
それによると、
「7E FF 06 3D 00 00 01 xx xx EF」
は、SDカードのトラックが終了したよ、1曲目だよ、
みたいな感じらしいんだけど、意味がよくわからない。
普通に1曲再生終わったときには、こういうコードは
返ってこないんだけど、曲が途中で勝手に終わって
次の曲に飛んじゃうときにだけ、このコードが吐かれる。
PDFによると、そういう時は1曲戻すコマンドを打て、
という感じに掛かれているんだけど、なんでそんな
変な処理してるの?意味が解らん。
んで、仕方ないので、そういう処理を、シリアルモニタ
通じて手で行ってみると…タイミングが微妙。信号を
受け取ってすぐに1曲戻すと、さらに前の曲に戻っちゃう
みたい。
そもそも、エラーがでる原因の曲と、エラーが出る
タイミングの曲が一致してない場合があったりして、
単純には上手くいかないみたいだなぁ。
あと、色々弄っててわかったこと。
一つは、/mp3ディレクトリじゃなくても、再生はできる
ってこと。ファイル名の先頭4桁が通番になってなくても、
自動的に検索されて、再生はできた。
できるんだけど、多分、「直接曲番指定で再生」する
ことはできないっぽい。
この、ディレクトリ名とかファイル名の通番とかをルール
通りにしないといけないよ、っていうのは、「効果音」
とかを再生する場合に使うモードみたい。
んでさらに、普通のmp3プレイヤー的な用途にも使える
ようにできているみたいだなぁ。
ライブラリを使うと、
mp3_play ();
って風に、引数なしで呼び出すと、とりあえず頭の1曲が
再生されるみたい。
mp3_play (1);
みたいに番号を指定すると、その局番から再生するみたい。
その番号が、例の4桁と。
これじゃない場合は、曲の番号がどうカウントされるのかは
よくわからない。(内部仕様は見えないし、どこかに書いて
あるわけじゃないみたい)
あと、busy端子を使わないといけないみたい。1曲再生
すると、再生終わったところでbusy信号がHIGHになる
ので、それを読み取って、「次」の曲を再生するコマンド
入れてやらないといけないみたい。
mp3_next ();
っていう関数を使えばいいみたい。
あと、相変わらず、初期状態のボリュームがでかい。
電源オン時に、ボリューム設定は最大みたいなので、
ちゃんと絞らないとビビる。
あと、コマンドを打つにしても、マイコン側
(Arduino側)で、現在の状態が再生中なのか、
停止中のなのか、みたいなステータス管理をして
おかないと、ちゃんと処理できない。
(ステータス読み出し関数とか使ってもできる
のかなぁ?)
その他、細かいところが色々あって、いわゆるmp3
プレイヤーとして使うには、その辺をちゃんと処理
してやらないとだめみたい。
ちょっと弄っただけで簡単にすますってわけには
いかなかった。
それ以外に判ったこと。アナログ出力2ch分は、アンプ
を通して鳴らすためのもの。
内蔵の3Wアンプは1CHだけで、でも、音声信号は左右とも
混ざってる。なので、ちょっと鳴らすだけなら、アンプ
出力端子使って、簡単に済ます事ができる。
まぁ、ライブラリ使ってコマンド流して制御するのは
簡単なんだけど、曲が途中で終わって次に行っちゃう
っていうのを何とかしないと、mp3プレイヤーとして
使うのに支障があるなぁ。
https://github.com/DFRobot/DFPlayer-Mini-mp3/blob/master/DFPlayer_Mini_Mp3/examples/DFPlayer_sample/DFPlayer_sample.ino
ここに、色々使える関数名がヘッダに書かれてる。
もうちっと弄ってみたりして、癖をつかまないと
いかんかな。
もうちょっと情報仕入れようとおもったんだけど、
DFrobotのサイト、証明書の有効期限が切れてて、
接続できないんだよな。
なんかあの、中国のあやしい認証局を無効にするとか
なんとかっていうあの話かな?
https://twitter.com/mo_t_on/status/894208986999685120
セミファイナルの次はこれだったのか。
|