Android + Bluetoothドングル + PIC24F
公開日:
電子工作 | Android, Bluetooth, PIC, PIC24FJ64GB002
@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さんには感謝致します。
ありがとうございました。
関連記事
-
-
Arduino + USBホストシールド で ADK を試す(その3)
「Arduino + USBホストシールド で ADK を試す(その1)」では、Android上のア
-
-
Raspberry Pi インターネット接続
Raspberry Piをインターネットに接続してみた。 有線で接続(Ethern
-
-
Bimeji Client for Arduino
前回紹介したWimeji Client for Arduinoの最後で予告していた、Wimeji c
-
-
ArduinoでSDカード
電子工作で大量のデータを保存する方法を調べていると、 Arduinoでも比較的簡単にSDカードを
-
-
PIC24FJ64GB002でADKを試す(その1)
先日、MicrochipからPIC向けのAndroid Open Accessoryのライブラリが公
-
-
AndroidでSoftModemを試してみた
今回、ここで言うSoftModemとは、携帯電話のオーディオ端子(イヤホン・マイク端子)を利用し
-
-
Android + Arduino でリモコン2 (softmodem接続)
以前、LAN接続のリモコン Android + Arduino でリモコン と言うものを作ったのです
-
-
米粒AVRで温度計(STTS751使用)
前回までに紹介したI2CライブラリとLCDライブラリを使って作る、温度計のサンプルです。 温度
-
-
Raspberry Piのスクリーンショット
ブログで使う用に、Raspberry Piのスクリーンショットを撮りたいと思った時、
-
-
Softmodem Terminal 公開しました。
需要がどれほど有るのか疑問に思いつつ、以前のエントリ(AndroidでSoftModemを試してみた
Comment (23件)
教えて欲しい事があります。
上記の構成で下記の様なものに簡単に応用できるでしょうか?
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さんと同じように、他の人がブログで公開しているのを見て、自分もやってみたいと思って実行してみた・・・と言うことをここに書いたつもりで、ソースの解説が出来るほどプログラムを理解しておりません。
残念ですが・・・
ピンバック: Δ's Blog
こんにちは。
組み込み用無線モジュールがとにかく高価なので、
市販ドングルで安く技適対応の無線通信ができないかなと思っていたらその通りの記事があって嬉しいです。
早速PIC24FJ64GB002+LBT-UAN01C1の基板を組んで、パソコンと接続して問題なく動作しました。(手持ちのPICKIT2がGBxxxに対応してないと分かり愕然としましたが・・・)
今後はbtstackが主流になりそうなので、そちらのソースコードを基に同じことができることを確認したいです。
ソースコードが理解できればですけどね(汗
こんにちは。
コメントありがとうございます。
BTドングルが使えると安上がりで良いですよね。
そういえば最近、いわたんさんのブログに気になる記事がアップされました。
Arduino+USBホストシールドでBluetoothドングルを使う
USBホストシールドが必要なので、安上がりにとは行きませんが、かなり気になってます。
こちらとしては、ランニングエレクトロニクスさんのSBDBTも気になります。小型マイコン基板って触れ込みですが事実上のBluetooth-UARTコンバータでしょうね。
いずれにせよbtstackをもっと理解しないと使いこなせそうにありませんが、努力して使えるようになりたいです。
ランニングエレクトロニクスさんのSBDBT、初めて知りました。
凄く気になります!
〆(・ω・。)メモメモ
http://runningele.cart.fc2.com/ca1/2/p-r1-s/
>コマンドを送信すると先頭1文字だけがエコーバックされて、残り2文字は文字化け状態で受信します。
エコーバックは
l2cap_signal() で処理しているのでしょうか
やりたいことなのですが、
送られてきたコマンドに対して
任意の処理をして結果を返信したいのです
が、どうやるのか よく理解できてません
何となくでもいいので教えて頂けませんか
コメントありがとうございます。
ごめんなさい、僕もよく理解できてませんので、分かりません・・・
どなたか詳しい方お願いします。
電子工学を専門学校で学んでいるものですが・・・
あなたのブログ拝見して自分も簡単な
Bluetoothの通信を行いたいと思い、行ったのですが・・・。
上手くペアリングできないのというか、スキャンの時点で
デバイスが出てこないのですが・・・・
もし、よろしければ教えてもらえないでしょうか。
コメントありがとうございます。
ごめんなさい、まず質問内容を書いてくれないと何を教えればいいのか良くわかりません。
あと、僕みたいな素人にきくより、学校の先生に教えてもらったほうが早いと思いますが・・・
画像通りに回路を組んだのですが・・・・・
アプリのほうは、hrdakinoriさんのDroid controlという
アプリを使用して行っているのですが・・・・・
アプリでスキャンを行った際にpicのデバイスが検出されないのですが・・・・・・
原因に心あたりありませんでしょうか?
ずいぶん、ざっくりとした質問ですね・・・・・
だけど、これだけの情報だと、推測できる原因は山ほどありすぎて、ここには書ききれません・・・・・・・・・
まずスキャン以前の話なのですが・・・・・
ブレッドボードの方の電源をいれた時に
アダプタというのは、どういう動作を行うのでしょうか・・・?
ペアリングする前の状態でなんですけども。
このブログの記事を書いたのは1年以上も前のことで、よく覚えていないのですが、電源投入後はBTドングルが初期化され、ペアリングや接続の待機状態になると思います。
ちなみに、本文中にも書いていますが、PICからはデバッグ情報が出力されています。
これは、確認できていますか?
まず、BTドングルの初期化が成功しているか失敗しているかを、デバッグ出力から確かめてみると良いと思います。
何も出力が無い場合、PIC自体が正しく動いていないのだと思います。
一度,学院の方でブレッドボードではなく基板に実装してみればと指摘を頂き無事、アダプタのLEDが無事点滅し
動作し始めました!!
ご指導いただきありがとうございました!
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 🙂
ピンバック: PIC24FJ64GB002+BSHSBD04BK(iBUFFALO) | Sahara's WebLog