[今更誰得][ポケコン] カシオのポケコンPB-1000からMP3プレイヤー(DFPlayer Mini)を制御する #カシオ #ポケコン 1月 08, 2024 リンクを取得 Facebook Twitter Pinterest メール 他のアプリ ## 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側から応答を受け取るコマンド)の制御はちょっと難しそうなので、いったん、コマンド送信オンリーでやってみました。 制御コマンドの仕様等については、[こちら](https://github.com/DFRobot/DFRobotDFPlayerMini/tree/master/doc)にあるデータシート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\]タッチ | :次の曲へ | | \+ | :ボリュームアップ | | \- | :ボリュームダウン | プログラムは以下のとおりです。 ```BASIC 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](https://github.com/MobileFF/msx0_sample/tree/main/I2C_to_UART) ## おことわり 本記事で使用しているDFPlayer Miniは正規品ではなく互換品のため、プログラムで想定している挙動が、正規品とは異なっている可能性があります。あしからずご了承ください。 ちなみに中の人が入手した互換品は[Amazonで5個セット1,399円のもの](https://amzn.to/47r4oxP)です。 コメント
コメント
コメントを投稿