Android + Bluetoothドングル + PIC24F
2011年5月7日
Tweet
@hrdakinori さんと言う方が、PIC24FとBluetoothドングルを使って、Androidからロボットやらラジコンやらを操作されています。
これはかなり凄いです。 何が凄いかと言うと、組み込み用のBluetoothモジュールでは無くて、PC用のUSBに接続するタイプのBluetoothドングルを使っている点です。
以前紹介した AndroidとArduinoの接続で使えそうなBluetoothモジュール などを使えば、わりと簡単にBluetooth通信は行えます。 しかし、どれも数千円という値段で、しかも技適に通っているモジュールは1つしかありませんでした。 PC用のBluetoothドングルが使えれば、低コストで技適の通ったBluetooth通信が実現出来ることになり、ホビーストとして凄く期待が高まります。
hrdakinoriさんのブログでは、ありがたいことにソースまで公開してくださっているので、さっそく僕も試してみました。 今回利用させて頂いたのは、PIC24FJ64GB002用のBluetooth stackのソースコード公開しました で紹介されているソースです。bluetoothでサーボモーターとLEDをコントロールできるシンプルなプログラムで、実験目的には最適です。
回路図
今回、テスト用に作った回路の配線はこんな感じです。
電源はBTドングルの動作に 5V が必要なので、USBから電源を取ってVINから流し込んでいます。 PICの動作電圧は2.0V~3.6Vの為、レギュレータ XC6202P332TB を使って 3.3V に落としています。
PICの動作クロックは、内蔵オシレータを使ってUSBクロックまで利用できるので、外付け発信器等はありません。
デバッグ情報がUARTで出力されるので、それをPCでモニターする為にレベルコンバータ ADM3202 を付けています。
USB-Aコネクタに、BTドングルを接続します。
LED3(11番ピン)には、サーボモーターを操作する為のPWM出力が行われるのですが、サーボモータを持っていないので代わりにLEDを付けています。
主な部品
PIC24FJ64GB002
PICと言えば秋月・・・と思いきや、秋月の通販では見あたらないので、日本橋・シリコンハウスで680円で購入しました。 高いです><
秋月さん、取り扱ってくれないかなぁ・・・
Bluetoothドングル
Planex BT-MicroEDR2X(Class 2) と Planex BT-MicroEDR1X(Class 1) の2つで試しました。 どちらも千円以下で購入できます。(2011年5月時点)
その他のBluetoothドングルでも動作するらしいですが、PICで扱えるBluetoothドングルは、HUB構造を持たない物と言う制約があるようです。(参考リンク)
3端子レギュレータ
XC6202P332TB 5Vから3.3Vに電圧を下げる電源IC
1パック2個で100円
RS232CインターフェースIC
たまたま、手持ちに ADM3202 が有ったので、これを利用。PICと電圧を合わせる為、3.3Vで動作するものが良い。1個200円
PICkit3
部品では無いのですが、必需品。 PICにプログラムを書く為の機械です。
秋月の4500円が一番安いかと思いきや、日本橋・マルツの店頭販売が最安でした。4410円。
手順
1.回路を組み立て
上記、回路図通りにブレッドボードにて配線していく。
2.ソースのコンパイル
hrdakinoriさんのプログラム は、ソースのみの配布となっています。
PICで動かす為にはコンパイルしてHEXファイルを作る必要があります。
コンパイルするために MPLAB IDE と MPLAB C Compiler for PIC24 MCUs が必要となります。
とくにはソースに手を加える必要は無く、そのままコンパイルします。
コンパイルする時に、最適化レベル(Optimization Level)を1にしておかないと、メモリが足りないと怒られて(´・ω・`)します。 これが分からなくて結構ハマった。
コンパイル後、Memory Usageを見るとメモリがギリギリなのが分かる。
3.PICへプログラムを書き込む
コンパイルして出来た .HEXファイル を、PICKit3を使ってPICに書き込む。
この時、初の通電となるので、配線確認は念入りに・・・
4.電源投入
USBから電源を取っているので、USBケーブルを接続すると電源ONとなる。
あらかじめ、ADM3202と接続したポートを、ターミナルソフトでオープンしておくと、初期化情報が読み取れる。
COMポートは 57600bps 8bit ストップ1 パリティ無し で接続。
5.Androidと接続
Androidからの接続に使ったのは、自作の Bluetooth Terminal と言うアプリ。
実はこれ Android1.6専用で、今時のAndroid端末だと動きません orz・・・HT03A必須!!
(そのことをきちんと明記してないせいで、アプリの評価が凄いことになってます・・・面倒なのでそのまま放置してるけど・・・)
※BluetoothTerminal、2.1以降対応版を公開しました。(2011/05/08)
Bluetoothドングルのデバイス名は PIC24F—*** となります。最後の***は、ドングルによって異なります。 たぶん、デバイスのアドレスの下8ビットの数字が入る感じだと思う(未確認)
ペアリングのPINは 1234 です。
画像では、アプリ内でペアリングを行ってますが、動作が怪しいので、端末の設定から行った方が無難。
注意点として、以前このBluetoothドングルを使ってPCとAndroidでペアリングを行った時の情報が端末に残ってたので、それを使って接続を行ったら、なぜか通信がうまく出来ませんでした。
一度ペアリングを解除して、あらためてペアリングを行うことで通信出来るようになりました。
6.コマンド送信
接続が出来れば、いよいよLEDをコントロールする為のコマンドを送信してみます。
コマンドは、テキスト3文字で構成されています。
| コマンド | 動作 |
| l11 | LED1点灯 |
| l10 | LED1消灯 |
| l21 | LED2点灯 |
| l20 | LED2消灯 |
| s** | PWMコントロール **は00~99の値 例) s00 とか s99 今回のテスト回路では、LED3の明るさが変化 |
BluetoothTerminalでは、送信が青文字、受信が赤文字で表示されます。 この画像はLED1を点灯させる l11 のコマンドを送信したもの。 コマンドを送信すると先頭1文字だけがエコーバックされて、残り2文字は文字化け状態で受信します。
右からLED1、LED2、LED3と並んでいます。一番左の大きなLEDは通電確認用のLEDで関係無し。
上の l11 コマンドで LED1が点灯したことを確認。
最後に
今回の実験で、僕でもBTドングルを使って通信出来ることが確認できました。 しかし、既にメモリがギリギリなので、このPIC一つで何か込み入った事をするには限界が近いように思います。 PIC24FJ256を使えば、メモリには余裕が出来そうですが、PIC24FJ256にはDIPパッケージが無いのでホビーでは使いづらいかも・・・と言うジレンマ。
いっそのこと、このPICにはBluetooth-UARTコンバーターに特化してもらって、本体のプログラムは他のCPUで作ると言うのでも良さそうかなと。 それだとしても、ざっくり2千円以下でBluetoothモジュールが出来てしまうので、格安だと思います。
問題は、USBの知識もBluetoothの知識も何も無い僕には、Bluetooth-UARTコンバーターのプログラムが書けないと言うことか・・・orz
誰か作ってくれないかなぁ・・・と独り言
何はともあれ、ソースを公開して下さっている @hrdakinoriさんには感謝致します。
ありがとうございました。
Category: Androidと電子工作
TrackBack URL :








教えて欲しい事があります。
上記の構成で下記の様なものに簡単に応用できるでしょうか?
HIDプロファイルで動作するBluetoothのキーボードデバイスとの通信。すなわちPICがマスター、キーボードがスレーブになります。
私はPICをスケジュールに問題を抱えている。ビルドは成功だった。しかし、私はPICをプログラムしようとすると、私は”、VDDCORE/ VCAPピンに適切な容量を確認してください。”エラーを取得しても、すべてが適切に行えばそう、あなたはどのようにこれを是正するために任意のヒントを得たか。
コメントありがとうございます。
翻訳機を使った文章でしょうか?
意味が良くわかりません。
ビルドが成功したけれど、エラーが出ているのですか?
Yeah, i tried to use the Google Translator… but it is useless.
What i am trying to say, is that i am having problem to program the PIC24FJ64GB002.
hrdakinori program build just fine, but when i try to program the pic, i get the error “ensure proper capacitance on VDDCORE/VCAP pin” since that you use pickit just like me, maybe you get this error too some time and got some tip to help me out fix it.
thanks
Me too,I use the Google Translator
I understand what you have a problem when writing the program to PIC device.
However, I have never encountered that problem.
So,I don’t know the error.
sorry,I can’t help you.
こんばんわ。とても興味深い内容でした!
ソースを見て教えてほしいことがあります。
Bluetoothのペアリング、ペアリングの解除
データの送信、受信はソースコードの関数でいうと
どのあたりになるのでしょうか?
私もBTドングルを使って面白いことをやりたいです~
コメントありがとうございます。
僕もMasayaさんと同じように、他の人がブログで公開しているのを見て、自分もやってみたいと思って実行してみた・・・と言うことをここに書いたつもりで、ソースの解説が出来るほどプログラムを理解しておりません。
残念ですが・・・
AndroidでYBR125のスピードメータ
マイコンで、YBR125のデジタルスピードメータを作っていたが・・・ LCDで表示するよりも液晶画面に表示する方がいいかなっと思って、Android携帯で表示することにしました。 使用する端末…