DFPlayer MiniをPB-1000から制御したい
最近、DFPlayer MiniというMP3再生用のモジュールがあるのを知り、年末年始でいじってました。 このモジュール、何が良いかというと、操作コマンドをUARTで行えるので、制御のハードルが比較的低いことがあります。
これを、ポケコンとかMSX0とかのデバイスから制御できないか・・・?ということで、本記事はポケコンでの接続についてです。
接続の仕組み
PB-1000は単体ではRS-232C(いわゆるUART)通信はできませんが、オプションのFA-7/MD-100を接続するとRS-232C通信ができるようになります。
BASICでもおなじみのOPEN
,PRINT#
,INPUT#
などでRS-232Cへの入出力が可能です。
取り急ぎ、クエリーコマンド(DFPlayer Mini側から応答を受け取るコマンド)の制御はちょっと難しそうなので、いったん、コマンド送信オンリーでやってみました。
制御コマンドの仕様等については、こちらにあるデータシートPDFを参考にしています。
通常のコマンドは、
7E,FF,06,[コマンド番号],00,[パラメータ上位],[パラメータ下位],EF
というフォーマットなので、これを種類に応じてひたすらPRINT#
文でRS-232Cに出力していきます。
回路について
適当なユニバーサル基板をつかって、やっつけで配線してみました。
- DSub25ピンコネクタは、ジェンダーチェンジャー(オス-オス)しかたまたま手元になかったので、それを使っています。
- 電源はPB-1000/FA-7側から取れるような気もするのですが、とりあえずADM3202とDFPlayerMiniが3.3V駆動なので、1.2Vの単4電池3本で電源共有して駆動しています。
- オペアンプは知識がほとんどゼロなので見様見真似でつけてみました。DFPlayerMiniはDAC出力があって、それをイヤホンに直接繋いでも聴くことは全然できるのですが、やっぱりオペアンプを通したほうが音は良くなるような気がするので、入れてみております。
- 写真ではイヤフォンジャックを左下に配置してしまったのですが、FA-7/MD-100のACアダプタープラグと干渉してしまうので、オペアンプと配置を入れ替えるなどしたほうが良いでしょう。写真ではピンソケットをイヤフォンジャックの下に入れ、持ち上げるようにして無理やり配置しています。
主な部品
- DSub25ピンコネクタ(オス)
- DCジャックDIP化キット(秋月電子)
- イヤフォンジャックDIP化キット(秋月電子)
- オペアンプ(AD8506)実装モジュール(秋月電子)
- RS232Cレベルコンバータ ADM3202
- DFPlayer Mini互換機
接続について
中の人は回路図が書けないので、主要な部品どうしの接続だけ記載しますね。
DSub25ピン←→ーADM3202
DSub25ピン | ←→ | ADM3202 |
---|---|---|
2ピン(TX) | ←→ | 13ピン(R1_IN) |
3ピン(RX) | ←→ | 14ピン(T1_OUT) |
ADM3202←→DFPlayer Mini
ADM3202 | ←→ | DFPlayer Mini |
---|---|---|
12ピン(R1_OUT) | ←→ | 2ピン(RX) |
11ピン(T1_IN) | ←→ | 3ピン(TX) |
DFPlayer Mini←→AD8506
DFPlayer Mini | ←→ | AD8506 |
---|---|---|
4ピン(DAC_R) | ←→ | 5ピン(B+) |
5ピン(DAC_L) | ←→ | 3ピン(A+) |
AD8506←→イヤフォンジャック
AD8506 | ←→ | イヤフォン |
---|---|---|
1ピン(OUTA) | ←→ | L |
7ピン(OUTB) | ←→ | R |
AD8506の抵抗器
接続箇所 | 抵抗器 |
---|---|
A+/B+への入力 | :510Ω |
OUTA〜A-/OUTB〜B- | :10kΩ |
OUTA/OUTBからの出力 | :1kΩ |
その他
- VCC/GNDは電源からよしなに接続してください。
- ADM3202のコンデンサは1μFのものを使いました。
PB-1000の実装
起動すると自動的に1曲目の演奏を開始します。
操作は以下のとおりです。
キー操作 | 内容 |
---|---|
P または [PLAY]タッチ | :再生 |
スペースキー または [PAUSE]タッチ | :一時停止・再開 |
( または [PREV]タッチ | :前の曲へ |
) または [NEXT]タッチ | :次の曲へ |
+ | :ボリュームアップ |
- | :ボリュームダウン |
プログラムは以下のとおりです。
1 'DFPLAYER MINI CONTROLLER
1000 CLS
1010 TR=1:'TRACK NO
1020 VO=15:'VOLUME
1030 PF$=CHR$(&H7E)+CHR$(&HFF)+CHR$(&H06)
1040 ZR$=CHR$(&H00)
1050 SF$=CHR$(&HEF)
1060 ST=1:'STATUS 0:PAUSE 1:PLAY
1070 RT=0
1500 OPEN "COM0:7,N,8,1,N,N,N,N,N" FOR OUTPUT AS #1
2000 'INITIAL SETUP
2100 'RESET MODULE
2110 PRINT#1,PF$+CHR$(&H0C)+ZR$+ZR$+ZR$+SF$;
2120 FOR I=1 TO 300:NEXT I
2200 'VOLUME SET
2210 PRINT#1,PF$+CHR$(&H06)+ZR$+ZR$+CHR$(VO)+SF$;
2300 'PLAYBACK 1ST TRACK
2310 PRINT#1,PF$+CHR$(&H03)+ZR$+ZR$+CHR$(TR)+SF$;
3000 'TITLE
3010 LOCATE 0,0
3020 PRINT"-=< DFPlayer Mini Controller >=-";
3030 LOCATE 0,1
3040 PRINT"[ PLAY ][PAUSE ][ PREV ][ NEXT ]";
3100 'TRACK AND VOLUME
3110 LOCATE 0,3
3120 PRINT "TRACK:";TR;" VOLUME";VO;
3200 'ANIMATION
3205 IF ST=0 THEN 4000
3210 LOCATE RT+16,2
3220 PRINT " ";
3230 RT=RT+1:IF RT>15 THEN RT=0
3240 LOCATE RT+16,2
3250 PRINT ")";
4000 'SELECT OPERATION
4100 K$=INKEY$
4105 IF K$="" THEN 3100
4110 IF K$=CHR$(244) OR K$="P" THEN LOCATE 0,2:PRINT "PLAY ";:PRINT#1,PF$+CHR$(&H0D)+ZR$+ZR$+ZR$+SF$;:ST=1
4120 IF K$=CHR$(245) OR K$=" " THEN GOSUB 5000
4130 IF (K$=CHR$(246) OR K$="(") AND TR>1 THEN LOCATE 0,2:PRINT "PREV ";:PRINT#1,PF$+CHR$(&H02)+ZR$+ZR$+CHR$(TR)+SF$;:TR=TR-1
4140 IF K$=CHR$(247) OR K$=")" THEN LOCATE 0,2:PRINT "NEXT ";:PRINT#1,PF$+CHR$(&H01)+ZR$+ZR$+CHR$(TR)+SF$;:TR=TR+1
4150 IF K$="+" AND VO<30 THEN LOCATE 0,2:PRINT "VOLUP ";:PRINT#1,PF$+CHR$(&H04)+ZR$+ZR$+ZR$+SF$;:VO=VO+1
4160 IF K$="-" AND VO>0 THEN LOCATE 0,2:PRINT "VOLDN ";:PRINT#1,PF$+CHR$(&H05)+ZR$+ZR$+ZR$+SF$;:VO=VO-1
4200 GOTO 3100
5000 'PAUSE OPERATION
5100 IF ST=1 THEN LOCATE 0,2:PRINT "PAUSE ";:PRINT#1,PF$+CHR$(&H0E)+ZR$+ZR$+ZR$+SF$;:ST=0:RETURN
5110 IF ST=0 THEN LOCATE 0,2:PRINT "RESUME ";:PRINT#1,PF$+CHR$(&H0D)+ZR$+ZR$+ZR$+SF$;:ST=1:RETURN
5200 RETURN
ファイルはGitHubでも公開しています。 https://github.com/MobileFF/msx0_sample/tree/main/I2C_to_UART
おことわり
本記事で使用しているDFPlayer Miniは正規品ではなく互換品のため、プログラムで想定している挙動が、正規品とは異なっている可能性があります。あしからずご了承ください。 ちなみに中の人が入手した互換品はAmazonで5個セット1,399円のものです。
コメント
コメントを投稿