This site is described in Japanese.

Android + Bluetoothドングル + PIC24F

2011年5月7日 このエントリをはてなブックマークに登録

@hrdakinori さんと言う方が、PIC24FとBluetoothドングルを使って、Androidからロボットやらラジコンやらを操作されています。

これはかなり凄いです。 何が凄いかと言うと、組み込み用のBluetoothモジュールでは無くて、PC用のUSBに接続するタイプのBluetoothドングルを使っている点です。

以前紹介した AndroidとArduinoの接続で使えそうなBluetoothモジュール などを使えば、わりと簡単にBluetooth通信は行えます。 しかし、どれも数千円という値段で、しかも技適に通っているモジュールは1つしかありませんでした。 PC用のBluetoothドングルが使えれば、低コストで技適の通ったBluetooth通信が実現出来ることになり、ホビーストとして凄く期待が高まります。

hrdakinoriさんのブログでは、ありがたいことにソースまで公開してくださっているので、さっそく僕も試してみました。 今回利用させて頂いたのは、PIC24FJ64GB002用のBluetooth stackのソースコード公開しました で紹介されているソースです。bluetoothでサーボモーターとLEDをコントロールできるシンプルなプログラムで、実験目的には最適です。

bt-droid-test

 

回路図

bt-droid-test
(2011/08/21修正)

今回、テスト用に作った回路の配線はこんな感じです。

電源は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 IDEMPLAB C Compiler for PIC24 MCUs が必要となります。

とくにはソースに手を加える必要は無く、そのままコンパイルします。

コンパイルする時に、最適化レベル(Optimization Level)を1にしておかないと、メモリが足りないと怒られて(´・ω・`)します。 これが分からなくて結構ハマった。

コンパイル後、Memory Usageを見るとメモリがギリギリなのが分かる。

bt-droid-memory-usage

3.PICへプログラムを書き込む

コンパイルして出来た .HEXファイル を、PICKit3を使ってPICに書き込む。
この時、初の通電となるので、配線確認は念入りに・・・

PICKit3
 

4.電源投入

USBから電源を取っているので、USBケーブルを接続すると電源ONとなる。

あらかじめ、ADM3202と接続したポートを、ターミナルソフトでオープンしておくと、初期化情報が読み取れる。

bt-droid-debug-monitor

COMポートは 57600bps 8bit ストップ1 パリティ無し で接続。

5.Androidと接続

Androidからの接続に使ったのは、自作の Bluetooth Terminal と言うアプリ。
実はこれ Android1.6専用で、今時のAndroid端末だと動きません orz・・・HT03A必須!!
(そのことをきちんと明記してないせいで、アプリの評価が凄いことになってます・・・面倒なのでそのまま放置してるけど・・・)

※BluetoothTerminal、2.1以降対応版を公開しました。(2011/05/08)

Bluetoothドングルのデバイス名は PIC24F—*** となります。最後の***は、ドングルによって異なります。 たぶん、デバイスのアドレスの下8ビットの数字が入る感じだと思う(未確認)

bt-droid-pairing

ペアリングのPINは 1234 です。
画像では、アプリ内でペアリングを行ってますが、動作が怪しいので、端末の設定から行った方が無難。

注意点として、以前このBluetoothドングルを使ってPCとAndroidでペアリングを行った時の情報が端末に残ってたので、それを使って接続を行ったら、なぜか通信がうまく出来ませんでした。
一度ペアリングを解除して、あらためてペアリングを行うことで通信出来るようになりました。

6.コマンド送信

接続が出来れば、いよいよLEDをコントロールする為のコマンドを送信してみます。
コマンドは、テキスト3文字で構成されています。

コマンド 動作
l11 LED1点灯
l10 LED1消灯
l21 LED2点灯
l20 LED2消灯
s** PWMコントロール
**は00~99の値 例) s00 とか s99
今回のテスト回路では、LED3の明るさが変化

 

bt-term

BluetoothTerminalでは、送信が青文字、受信が赤文字で表示されます。 この画像はLED1を点灯させる l11 のコマンドを送信したもの。 コマンドを送信すると先頭1文字だけがエコーバックされて、残り2文字は文字化け状態で受信します。

bt-droid-led1

右から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と電子工作

Tags: , ,

TrackBack URL :

Similar Posts / 関連する投稿

8 Comments / コメント

  1. Ryuji より:

    教えて欲しい事があります。
    上記の構成で下記の様なものに簡単に応用できるでしょうか?
    HIDプロファイルで動作するBluetoothのキーボードデバイスとの通信。すなわちPICがマスター、キーボードがスレーブになります。

  2. Russel Skyhighter より:

    私はPICをスケジュールに問題を抱えている。ビルドは成功だった。しかし、私はPICをプログラムしようとすると、私は”、VDDCORE/ VCAPピンに適切な​​容量を確認してください。”エラーを取得しても、すべてが適切に行えばそう、あなたはどのようにこれを是正するために任意のヒントを得たか。

    • Futaba より:

      コメントありがとうございます。
      翻訳機を使った文章でしょうか?
      意味が良くわかりません。
      ビルドが成功したけれど、エラーが出ているのですか?

  3. Russel Skyhighter より:

    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

    • Futaba より:

      Me too,I use the Google Translator :D

      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.

  4. Masaya より:

    こんばんわ。とても興味深い内容でした!
    ソースを見て教えてほしいことがあります。

    Bluetoothのペアリング、ペアリングの解除
    データの送信、受信はソースコードの関数でいうと
    どのあたりになるのでしょうか?

    私もBTドングルを使って面白いことをやりたいです~

    • Futaba より:

      コメントありがとうございます。
      僕もMasayaさんと同じように、他の人がブログで公開しているのを見て、自分もやってみたいと思って実行してみた・・・と言うことをここに書いたつもりで、ソースの解説が出来るほどプログラムを理解しておりません。
      残念ですが・・・

  5. Δ's Blog より:

    AndroidでYBR125のスピードメータ

    マイコンで、YBR125のデジタルスピードメータを作っていたが・・・ LCDで表示するよりも液晶画面に表示する方がいいかなっと思って、Android携帯で表示することにしました。 使用する端末…

Leave a Reply / コメントをどうぞ

(required)

(required),(Hidden)

Do you want to show your avatar?


Pages / 固定ページ

Category / カテゴリー

Recent Entries / 最近の投稿

Recent Comments / 最近のコメント

Tags / タグクラウド

おすすめのAndroid本