###前提・実現したいこと
mbedでGrove MP3モジュール v2へシリアル通信をして、
mp3を再生したいと思ってプログラミングをしているのですが、どのように信号を送ればいいのかわかりません。
そのモジュールに使われているMP3チップはKT403Aという名前で、
マニュアルや、個人のサイトを見てみましたが、わかりませんでした。
「7E FF 06 0F 00 63 FF EF」と送るとSDカード内の「255(適当な名前)」というファイル名の音声ファイルが再生されるようなのですが…
c++
1#include "mbed.h" 2 3Serial mp3(USBTX, USBRX); 4int main() { 5 mp3.baud(9600); 6 mp3.printf("ここに数字か何かを入れるのだろうけども、書式がわからない"); 7}
###補足
- シリアル通信の書式についていろいろ調べてみましたが、全て文字の送り方でした…
- モジュール自体はArduino用のようですが、秋月の店員さん曰く使えるそうです。ケーブルの配線はちゃんとしました。
###更新 17/07/03
コードはμvisionで書いており、通信にはTera Termを使っています
以下のコードで行ってみましたが音声が再生されず、~
と出てきます。なぜでしょうか。検索してもわかりませんでした。検索の方法が悪かったのかもしれませんが…
なお、以下のコードは、コマンド0F(フォルダーとトラック番号を指定して再生)で、01フォルダの01ファイルを再生しようとしています。
c++
1#include "mbed.h" 2#include "stdint.h" 3Serial mp3(P1_7, P1_6);//P1_7はtx,P1_6rxです。 4int main() { 5 int idx; 6 mp3.baud(9600); 7 uint8_t send_data[] = {0x7E, 0xFF, 0x06, 0x0f, 0x00, 0x01, 0x01, 0xEF}; 8 for(idx = 0; idx < sizeof(send_data); idx++) { 9 mp3.putc(send_data[idx]); 10 } 11 12}
###更新 17/07/03 20:59
配線はTX同士、RX同士でつないでます。もしやそこがダメだったのでしょうか。
同じ名前同士でつないでおけばいいかなと思ってました。
雄と雌的な接続の考え方の方だったならばつなぎ替えます。こんな間違いをやらかすぐらいには初心者です。
マイコンは仕様的にピン接続?につないでいるときはUSB側とは不通になるそうなのですけども…詳しくは知りません。
###更新 17/07/03 22:03
TXをRXにRXをTXに接続しました。前回よりノイズが減ったように感じられますが、相変わらず~
と出てきます。
###更新 17/07/10 15:43
nullbot氏の提言を試すため教授にmbed互換基盤の仕様を聞いたところ、
「シリアルで送るとPCにもモジュールにも信号が行く」とのことなのでモジュールはどうやら信号を受信できているようです。しかしそうなるとどうして再生されないのか…
###更新 17/07/18 00:42
ozwk氏の案
MP3モジュールのTxはどこにも結線せず
MP3モジュールのRxはmbedのTxに結線
を試してみましたが変化はありませんでした。
あと、
MP3モジュールのリセットをmbedの適当なGPIOに接続し、
mbedのプログラムでMP3モジュールにコマンド送る前にMP3モジュールのリセットかけて
適当な時間待ってからコマンド送信するように変更
の方はモジュールのリセット部分がどこか掴めず試せずにいます。
モジュールの生存確認を友人氏のmbedを借りて行いました。両方とも同じコードで同じ反応。
これは生か死か。
再生デバイスの選択コマンドも使ってみましたが音沙汰なし。
c++
1#include "mbed.h" 2#include "stdint.h" 3Serial mp3(P1_7, P1_6); 4int main() { 5 int idx; 6 mp3.baud(9600); 7 uint8_t set_device[] = {0x7E, 0xFF, 0x06, 0x09, 0x00, 0x00, 0x02, 0xEF};//準備 8 uint8_t set_music[] = {0x7E, 0xFF, 0x06, 0x0f, 0x00, 0x01, 0x01, 0xEF};//再生 9 wait(1); 10 for(idx = 0; idx <sizeof(set_device); idx++) { 11 mp3.putc(set_device[idx]); 12 } 13 wait(1); 14 for(idx = 0; idx <sizeof(set_music); idx++) { 15 mp3.putc(set_music[idx]); 16 } 17 18}
###17/07/18 補足
MP3のサンプリングレートが対応ということはないと思います。
・ファイルシステム:FAT16/FAT32
・オーディオフォーマット:MP3、WAV、WMA
・SDカード最大対応容量:32GB
・サンプルレート(KHz):8/11.025/12/16/22.05/24/32/44.1/48
これだけの幅ならまず外れないと思いますし...
mbed←→MP3モジュール のケーブルをもう一度点検しましたが、やはり間違っていません。過去の間違い(TXRX)は修正済みです。
###17/08/04 追記
MP3モジュールへのシリアル通信ですけども実はこれ大学のロボット製作チャレンジで音声を流したく質問した物なのです。しかしそれの期限がもう過ぎてしまったのでこれはあきらめて音声再生無しで実装しました。
期限までに実装できずに終わってしまったのですが、この質問はどうしておけばいいでしょうかね?
後日頑張って解決するまで取っておくか、それとも…
なお、ozwkさんの助言
電源5Vにしてみるとか
ソフトウェアシリアルのライブラリ使ってMP3モジュールと通信するとか
は後日試行の予定です。
###17/08/04 追記2
電圧足りてないぞこれ。今の今まで気付かなんだ。もしや…このせいでは。
要5.0VDC
出3.3VDC
別電源から引っ張ってくるか...?
ほかの出力端子3.3VDCと直列につないで6.6VDCにして抵抗噛まして5VDCにするって邪道ですかね
###17/09/18 終焉
皆様お久しぶりです。マシンが手元にある環境に戻ってまいりましたので、さっそくモジュールの電源の5V化を行いました。
無事鳴りました。
mbed本体とつなぐケーブルの電源部を切り、別途用意した5V電源(単3エネループx4直列)につないで、
「更新 17/07/03」のコードを実行したところ、何事もなかったように鳴りました。
助言をいただいた皆様本当にありがとうございました。今度からはしっかりと抜かりなく仕様書を読みます。
20/10/29 追記
ラズパイ経由で改めてこのモジュールを使用しようと思ったので、古くなったリンクの更新とともに参考サイト追加
http://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/MP3module/MP3module.html
回答3件
あなたの回答
tips
プレビュー