Android + Bluetoothドングル + PIC24F

公開日: 電子工作 | , , ,

@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さんには感謝致します。
ありがとうございました。

 

関連記事

no image

PIC24FJ64GB002でADKを試す(その2)

 前回「PIC24FJ64GB002でADKを試す(その1)」では回路の説明までしたので、

記事を読む

S2 SoundIR analyzer

赤外線リモコン受信機(イヤホンジャック接続)のアプリ

 前回の赤外線リモコン受信機(イヤホンジャック接続)の回路 を使う為のAndroidア

記事を読む

no image

Android+Arduinoでリモコン4(Microbridge接続)

前回AndroidAccessory接続で作った赤外線学習リモコンを、今回はMicrobridge接

記事を読む

raspi-colortest

Raspbianの起動

Raspbianの起動画面をキャプチャしてみた。 SDカードにイメージを書き込んだままのデフォ

記事を読む

no image

米粒AVR(ATtiny10)

通称「米粒AVR」で知られるTiny10を使ってみたくて、秋月の通販で買ってみました。 超小型

記事を読む

thermometer

パソコンで温度計 #2

今回は温度表示とログ取りアプリを作ったので公開。 前回にArduino+STTS751で作った

記事を読む

米粒AVT(tiny10) リモコンレシーバー

米粒AVRでリモコン受信処理

  米粒AVR(Tiny10)で赤外線リモコンを受信して処理をするサンプルを作ってみまし

記事を読む

no image

S2 Resistor Color Code 公開しました。

このアプリは、抵抗のカラーコードから抵抗値を素早く見る為のAndroidアプリです。 4本帯と、5

記事を読む

no image

Softmodem Terminal 公開しました。

需要がどれほど有るのか疑問に思いつつ、以前のエントリ(AndroidでSoftModemを試してみた

記事を読む

Arduinoで温湿度計

Arduinoで温湿度計

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。 以前「パソコンで温度計」と言うもの

記事を読む

Comment (23件)

  1. Ryuji

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

  2. Russel Skyhighter

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

    1. 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

    1. 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ドングルを使って面白いことをやりたいです~

    1. Futaba

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

  5. ピンバック: Δ's Blog

  6. ぽんた

    こんにちは。
    組み込み用無線モジュールがとにかく高価なので、
    市販ドングルで安く技適対応の無線通信ができないかなと思っていたらその通りの記事があって嬉しいです。

    早速PIC24FJ64GB002+LBT-UAN01C1の基板を組んで、パソコンと接続して問題なく動作しました。(手持ちのPICKIT2がGBxxxに対応してないと分かり愕然としましたが・・・)

    今後はbtstackが主流になりそうなので、そちらのソースコードを基に同じことができることを確認したいです。

    ソースコードが理解できればですけどね(汗

    1. Futaba

      こんにちは。
      コメントありがとうございます。

      BTドングルが使えると安上がりで良いですよね。
      そういえば最近、いわたんさんのブログに気になる記事がアップされました。
      Arduino+USBホストシールドでBluetoothドングルを使う
      USBホストシールドが必要なので、安上がりにとは行きませんが、かなり気になってます。

      1. ぽんた

        こちらとしては、ランニングエレクトロニクスさんのSBDBTも気になります。小型マイコン基板って触れ込みですが事実上のBluetooth-UARTコンバータでしょうね。

        いずれにせよbtstackをもっと理解しないと使いこなせそうにありませんが、努力して使えるようになりたいです。

  7. bun

    >コマンドを送信すると先頭1文字だけがエコーバックされて、残り2文字は文字化け状態で受信します。

    エコーバックは
     l2cap_signal() で処理しているのでしょうか

    やりたいことなのですが、
     送られてきたコマンドに対して
     任意の処理をして結果を返信したいのです

    が、どうやるのか よく理解できてません
    何となくでもいいので教えて頂けませんか

    1. Futaba

      コメントありがとうございます。
      ごめんなさい、僕もよく理解できてませんので、分かりません・・・
      どなたか詳しい方お願いします。

  8. Matsuzaki

    電子工学を専門学校で学んでいるものですが・・・
    あなたのブログ拝見して自分も簡単な
    Bluetoothの通信を行いたいと思い、行ったのですが・・・。
    上手くペアリングできないのというか、スキャンの時点で
    デバイスが出てこないのですが・・・・
    もし、よろしければ教えてもらえないでしょうか。

    1. Futaba

      コメントありがとうございます。
      ごめんなさい、まず質問内容を書いてくれないと何を教えればいいのか良くわかりません。
      あと、僕みたいな素人にきくより、学校の先生に教えてもらったほうが早いと思いますが・・・

  9. Matsuzaki

    画像通りに回路を組んだのですが・・・・・
    アプリのほうは、hrdakinoriさんのDroid controlという
    アプリを使用して行っているのですが・・・・・
    アプリでスキャンを行った際にpicのデバイスが検出されないのですが・・・・・・
    原因に心あたりありませんでしょうか?

    1. Futaba

      ずいぶん、ざっくりとした質問ですね・・・・・
      だけど、これだけの情報だと、推測できる原因は山ほどありすぎて、ここには書ききれません・・・・・・・・・

      1. Matsuzaki

        まずスキャン以前の話なのですが・・・・・
        ブレッドボードの方の電源をいれた時に
        アダプタというのは、どういう動作を行うのでしょうか・・・?
        ペアリングする前の状態でなんですけども。

        1. Futaba

          このブログの記事を書いたのは1年以上も前のことで、よく覚えていないのですが、電源投入後はBTドングルが初期化され、ペアリングや接続の待機状態になると思います。

          ちなみに、本文中にも書いていますが、PICからはデバッグ情報が出力されています。
          これは、確認できていますか?
          まず、BTドングルの初期化が成功しているか失敗しているかを、デバッグ出力から確かめてみると良いと思います。
          何も出力が無い場合、PIC自体が正しく動いていないのだと思います。

          1. Matsuzaki

            一度,学院の方でブレッドボードではなく基板に実装してみればと指摘を頂き無事、アダプタのLEDが無事点滅し
            動作し始めました!!
            ご指導いただきありがとうございました!

  10. Arun

    Im Using your PIC24 bluetooth stack for testing purpose .

    I need to change my MAC ADDRESS of USB Bluetooth dongle.

    Where is the code corresponding to MAC address written ?

    I need to complete m project by end of this week

    Thanks in advance :)

  11. ピンバック: PIC24FJ64GB002+BSHSBD04BK(iBUFFALO) | Sahara's WebLog

Arduinoで温湿度データロガー
Arduinoで温湿度計 #2

今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを

Arduinoで温湿度計
Arduinoで温湿度計

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。 以前

SDカード・マイクロSDカード
ArduinoでSDカード

電子工作で大量のデータを保存する方法を調べていると、 Arduin

秋月電子 リアルタイムクロック(RTC)モジュール
秋月のリアルタイムクロック(RTC)モジュール

今回は秋月電子のI2C接続のリアルタイムクロック(RTC)モジュールを

秋月電子 キャラクタLCD
秋月の小型キャラクタLCD

今回秋月電子で売られている小型のキャラクター液晶2種を買ったので、

PAGE TOP ↑