Bluetooth接続のワイヤレスオーディオは、有線に比べて音質面には難があると言われますが、ポータブルでの実用性を考えると手に持った操作端末から線が延びないという点は非常に魅力的です。
とするとやはり課題になるのは無線がゆえに自作のハードルが高いように思われること。そこで、今回はMicrochip社のBM62/BM64という自作Bluetoothオーディオのハードルを大きく下げてくれるモジュールの使い方を紹介します。
入手方法
比較的簡単な配線でBluetoothオーディオを実現できるモジュールにはBM62、BM64、そして少し古いですがRN52があります。RN52だけはマルツパーツで販売されているようですが、基本的にはどれも海外通販に頼ることになります。
ただし、無線モジュールというだけあって国外には送れないなどとの表記があることもあります。よく確認しましょう。DigikryではBM62、BM64共に入手することができました。
機能
BM62の機能は以下のような特徴があります。
・SBCまたは設定によりAACコーデック対応
・20bitDAコンバータ
・カップリングレス16Ωイヤホン出力
・再生/停止ボタン
・曲送りボタン
・曲戻しボタン
・16段階デジタルアッテネータ
・リチウムイオンバッテリー充電器
・16bitADコンバータ
・UART(シリアル)有線通信機能
apt-Xコーデックには対応していませんが、マイクを取り付けることができます。また、BM64ではこれに加えて以下の機能が追加されます。
・USB接続機能
・24bit96kHz I2S出力
UARTまたはシリアルで接続し、専用ソフトで内部を書き換えることで、AACコーデック対応、アッテネータ設定、マイク増幅度設定、イコライザ、I2S設定などを行うことができます。データシートを見るにBM64ではUSB-シリアル変換をすることなく直接USBで書き込めるようです(未確認)。
実装
このモジュールは1.2mmピッチで直接ユニバーサル基板に実装することはできません。細い銅線とベーク板などがあれば手配線も可能ですが、電子工作工房では変換基板を作ってみました。
Bluetoothを使うのが初めてだったため、古いぶん使用例があるRN52の変換基板も作りました。
試験回路
一通りの機能を使ってみたかったため回路図はこのようになりました。
リチウム電池はBAT_INとGNDの間に繋げばADAP_INの電圧に応じて勝手に充電、切り替えをしてくれるようです。
ブレッドボードの配線はタクトスイッチが無かったため、電源スイッチ以外はジャンパ線をGNDに触れさせてスイッチとしました。
SWボタンを長押ししてスイッチを入れるとペアリング待ちになります。特に問題なく図1の回路図で動作しました。プルアップ抵抗もいらずスイッチとイヤホンジャックをつければBluetoothで自作オーディオを楽しむことができます。5V電源は今回LODを使いましたが、USB電源からの給電を前提としているものと思われます。
BM62/BM64のページから専用ソフトウエアをダウンロードして内部の設定を変更できますが、初期状態でそれなりに使える設定になっていますので普通に電子工作するぶんには変更は不要だと思います。
注意
BM62/BM64のリチウムイオンバッテリー充電器は初期状態で170mAの4.2V充電を行います。リチウムイオン電池は基本最大で1C充電ですので、モジュールを使った工作にリチウムイオン電池を組み込む時は必ず170mAh以上のリチウム電池を使ってください。
追記
その後、色々と判明したことなど。
・BM62/BM64モジュールの電源(MFB)が入っていないとLi-po充電器が動作しない(ような気がする…不確定)。普通に充電できる。
・Li-po充電器はある充電モードが一定時間続くと止まる(protect time)。具体的には定電流充電モードが3時間で止まってしまうため、デフォルト設定では千石の860mAh以上のバッテリーは満充電できない(protect timeの解釈が合ってるかわからないため未確定)。
・BM64のUSB機能は未実装のようです。BM64を使う意味はI2Sだけに…(2019/2/23)
どこのサイトで買いましたか?
よろしければ教えていただいたのですが
コメントありがとうございます。BM62,BM64,RN52すべてDigikeyで入手しました。
このチップに自分が書いたソースコードを乗っけることは可能ですか?
コメントありがとうございます。ソースコードは乗りませんが、専用ソフトで設定を編集してシリアルでEEPROMに書き込むことができます。マイコンなどでEEPROMを直接編集することもできるようです。詳しくはBM64の公式ページで配布されているアプリケーションノートをお読みください。
Bm62/64のデータシートをチェックしたところ、I2sのサポートはBM64のみです。本記事ではBM62の特徴としてI2Sサポートについて触れていますが、正確にはBM64の特徴になると思います。
コメントありがとうございます。
USB接続機能もBM64の特徴となっていることが明記されておりますのでご確認ください。
マルツがDigikeyに対応したので,マルツで購入できるみたいです.
ttps://www.marutsu.co.jp/
BLEチップについて無知なので教えてください。
マイクで拾った音をスマホに飛ばして、スマホ側で音を聞いたり、録音したりしたいのですが、BM62モジュールだけで
それができますか?MCU(BLEチップ制御ファーム)が必要になるんですか?
コメントありがとうございます。
BM62にマイク回路を接続すれば、そのマイクで音を拾うことができます(iphone SEのボイスメモで動作確認)。
モジュール自体にマイクは内蔵されていません。コネクタに結線して外部マイクと接続するか、マイクの回路を組む必要があります。
また、BM62は外部にMCUを必要としません。
詳しい回路はデータシートを読むか、夏までに公開予定の作品記事を参考にしていただければと思います。
ご教授ありがとうございました。
重ねて質問になりますが、MCU必要なしとは、GUIツールを使って設定するから必要ないということですか?
お返事遅くなりました。
おそらくおっしゃっている通りで合っていると思います。
MCU必要なしは、BM62の”外部”にMCU…マイコンが必要ない、C言語等の知識がなくても設定ができるという意味です。
ご自身で基板を作る場合はGUIツールでの書き込みができるようシリアルポートと3個のスイッチを実装することをおすすめいたします。
BM62のデータシートをよく読みこんだら、おっしゃる通り(スイッチ3個とシリアルポート実装)でできそうでした。
ご返信ありがとうございました。
完成ブログを楽しみにしておます。
初めましてsekiと申します。BM62を初めて使用しました。図1の回路図でPWRスイッチだけ付けて配線したのですが、電源スイッチを長押ししてもLED1、LED2共に点灯しません。正常動作の場合、LEDはどのように点灯するのでしょうか?
seki様。初めまして。2ヵ月近くお返事できず申し訳ありません。
スイッチを入れた時、LEDは2種類同時に2回ほど点滅します。
回路を見られないため想像で原因を挙げていくしかできませんが、確認するとすれば
1. 2つのGND(23ピンと37ピン)両方をGNDに落としているか?
2. LEDの極性が逆ではないか?
3. MFBスイッチのもう片方はSYS_PWRに繋がっているか?
4. モジュールを焼いていないか?(270℃の温調こてでつけないと焼けます。320℃で焼きました)
辺りでしょうか。
sekiでございます。質問のご回答ありがとうございました。またご質問がありましてメールしました。現在、BM62の評価ボードBM-62-EVBで試験を行っているのですが、UI TOOLとDSP TOOLで設定したファイルをMPET TOOLでipfファイルにしてEEPROM TOOLで書き込みをしようとしたら、「IC/Module Identify」をクリックすると「Unkown Version」と表示してWriteをクリックしてもエラーが出て書き込みできませんでした。一応ユーザーガイドを見ながら行ったのですが。何かアドバイスございますでしょうか?
seki様。評価ボードは触ったことがないので、もう試されていることを書くかもしれませんが…。
1. 評価ボードのユーザーガイドP18および手順の各所に示されているDIPスイッチの確認
WriteEEPROMモードでEEPROMを書き換えます。
WriteFlashモードはファームウェアを書き換える時に使います。
2. 接続手順は「バッテリーを含めた全電源を外す」→「DIPスイッチを操作する」→「シリアル(USB)と接続する」の順番で行っているか。
3. COMポートの番号はあっているか。ポート番号を確認するデバイスマネージャの表示方法は検索すればすぐ出てきます。
4. ファームウェアをアップデートしてみる。
思いつく限りでこのぐらいです。お役に立てずすみません。
sekiでございます。ご回答ありがとうございます。UI Toolの設定を書き込むことができました。書き込みができなかった原因は相田様ご指摘の2番、接続手順でした。お恥ずかしい限りです。
初めまして泉と申します。失礼いたします。
突然に不躾で幼稚なご質問で申し訳ありません。ご教示いただけたら幸いです。
おはずかしながら、BM62の設定をシリアルで変更したいのですが困っています。
評価ボードは持っていませんが、電子工作はできます。
常時ADAP_INに5Vを供給してバッテリーを使用しないので、バッテリー検知をしないとか、
デバイス名を変更したりとか、HeadsetではなくSpeakerにしたりなど設定を変更したと考えています。
PCからUSBでシリアル通信をする環境はありますが5Vです。
①BM62のシリアルポートは、通常のIOポートと同じく3.3Vですか。
②上記のような設定をするには、どのツールを使えばよいですか。
UI Tool かと見受けましたが、書込をどうしたらいいかわからなかったので・・・
ご迷惑でしたら、削除してくださって構いません。
BM62を使っていらっしゃる方が他にいなかったもので、ついコメントしてしまいました。
失礼いたしました。
泉 様。お返事遅れて申し訳ありません。
バッテリーを接続していると書き込みできないので…
1. BM62のシリアルポートは3.3Vと接続して大丈夫です。私は秋月のFT321モジュールを使いました。
2. UIToolとDSPToolでファイルを作成→MPETでファイルを変換→BM62側のピンを設定→EEPROM_Toolで書き込み
評価ボードのユーザーガイドがわかりやすいと思います。
sekiでございます。またご質問させていただきました。BM62とスマートフォンをペアリングして音楽を聴いている最中に着信があった時、その電話に出ると相手の声がスピーカーから聞こえるのですが、こちらの話が相手に聞こえないようなのですが、BM62にマイクを接続しないと通話ができないのでしょうか?
seki様 そういう仕様みたいです。私も明確な解決策は出せていません。
たぶんプロファイルの問題なのでUIToolからHFP/HSPのチェックを外すと何かが変わるかもしれません。
BM62の機能のボタン入力はandroidの、
KeyEventクラスの定義であってますか?
ちなみに、BM62の機能にあるボタンの値は
以下のとうりです。
再生/停止ボタン> KECODE_MEDIA_PLAY_PAUSE >値=85
曲送りボタン > KECODE_MEDIA_NEXT >値=87
曲戻しボタン > KECODE_MEDIA_REWIND >値=89
さらに、質問ですがBM62はボタンの割り当てを変更する事は出来ますか?
そして、そのボタンはandroid側で「長押し」を認識させる事は出来ますか?
(大抵のオーディオモジュールはボリュームの調整ボタンしか
長押しを認識しないので困ってます。)
私は今、androidのIPトランシーバーアプリの「zello」に使う
ハンドマイクに使用するBTモジュール探しで迷ってます。
判る範囲で回答をお願いします。
遠藤 様 わかる範囲でお答えします。
クラス定義とボタンの値
>私にはわかりません。BM62/64と通信して得られた値であれば正しいと思います。
ボタンの割り当て、長押し
>UITool→Buttom Setupで割り当て、長押し、同時押しを変更することができます。
>長押しと短く押したので別の機能を割り当てればAndroidには別の値が送られると思います。
>Long Press Rpeat Maskという機能(おそらく音量ボタンの長押しと同じ)は電源以外の全てのボタンに割り当てられます。
Androidプログラム関係はわからないので、このような回答でよろしいでしょうか