『BASIC!』というAndroid端末上で動くBASICで、Android端末とmbedをBluetooth SPPで接続する実験をしましたので、その手順をまとめてみました。
ちなみに、Android端末で使える『BASIC!』の機能はこんな感じ。
Graphics (with Multi-touch),
Build User Interfaces with HTML and JavaScript,
SQL,
GPS,
Device Sensors,
Music Play,
Text to Speech,
Voice Recognition,
Sound Pools,
Audio Recording,
Tone Generation,
Camera,
Data Structures such as:Array/List/Stack/Bundle
Internet Browsing,
Text and Byte file I/O,
Encryption,
User defined functions,
FTP Client,
TCP/IP Client and Server Sockets,
Bluetooth,
Send and Receive SMS Messages,
Send Emails,
Make a phone call,
Superuser access
この記事は、ある程度Androidやmbedの経験がある方を対象にしていますので、ツール類の操作方法の細かい説明は省略しています。
1.必要なもの
・mbed側
(1)mbed NXP LPC1768
(2)「StarBoard Orange」 または、「USBコネクタ(Aタイプ メス )」 または 「うおーるぼっと」
StarBoard Orangeではなく、USBコネクタ(Aタイプ メス )だけでも良いです。こちらで詳細に解説されていますので参考にしてください。
(3)BTstack
mbedでBluetoothを使えるようにするライブラリです。
詳細はこちら。
mbed側の動作確認をするのに便利です。
(5)USB Bluetoothドングル
私が動作確認したのはこれです。
iBUFFALO Bluetooth4.0+EDR/LE対応 USBアダプタ ブラック BSHSBD08BK
・Android端末側
(1)Android端末
私が動作確認したのは以下の二つです。
・Google Nexus 7
・acer ICONIA TAB A500
(2)『BASIC!』
Android端末上で動くBASICです。
ここに解説記事があります。
2.mbed側の準備
(1)”Windows serial port driver”をインストールし、シリアル端末が使えるようにしておきます。
mbedが出力するログが見れるので、あると便利です。
(2)BTstackのインポート
BTstackをコンパイラにインポートします。
(3)コンパイル&ダウンロード
コンパイルしてmbedにダウンロードしておきます。
3.Android端末側の準備
『BASIC!』を端末にインストールしておきます。
数多くの「アクセス許可」を求めてきますので、自己責任でどうぞ。
4.接続実験
ペアリング、SPP接続する前に、Android端末のBluetoothをONし、”検出可能”にしておきます。
・Nexus 7のとき
・ICONIA TAB A500のとき
(1)まずAndroid端末とmbedをペアリングします。
Bluetoothの設定で”デバイスの検索”を選択し、検出されたmbedを選択します。
パスキーを聞かれてきたときは”0000”です。
(2)つぎに『BASIC!』を起動します。
(3)メニューボタンを押して”LOAD”を選択します。
(4)"Sample_Programs(d)"ディレクトリの中の、”f35_bluetooth.bas”を選択します。
(5)メニューから”RUN”を選択します。
(6)mbedをリセットし、少し待ちます。
(7)画面上の”Connect to listener”を選択すると、接続先を聞いてくるので、先ほどペアリングした”mbed”を指定します。
(8)パスキーを聞いてくるので”0000”を入力します。
(9)mbedとの接続がうまくいけば”Connected”という表示が出ます。
(10)続けて画面にタッチすると、この画面が表示されるので”Send”を選択します。
(11)キー入力のダイアログが出るので、何か入力してOKを選択します。
(12)接続がうまく行っていれば、送信したものがmbedからエコーバックされてきます。
5.応用例
mbedのプログラムBTstackの"spp_demo.cpp"に手を加えて色々動かしてみました。
改造したのは、"packet_handler"関数の最後の方、このloopbackしている部分。
---------------------------------------------------------------------
case RFCOMM_DATA_PACKET:
// loopback
if (rfcomm_channel_id) {
err = rfcomm_send_internal(rfcomm_channel_id, packet, size);
if (err) {
log_info("rfcomm_send_internal -> error %d", err);
}
}
led3 = !led3;
break;
---------------------------------------------------------------------
BASICの方は、”f35_bluetooth.bas”を改造。
(1)『BASIC!』で、mbed + RCサーボモータを動かしてみた。
動画はこちら。
BASIC! for Androidで、Android端末とmbedをBluetoothSPPで接続してみた
(2)『BASIC!』で、mbed + うおーるぼっと を動かしてみた。
動画はこちら。
BASIC! for Androidで、うおーるぼっとをBluetoothSPP接続で操縦
(その2)へ、つづく
関連する記事
・『BASIC!』でAndroid端末とmbedをBluetooth SPPで接続する実験(その2)
・Android端末とmbedをBluetooth SPPで接続する実験(BTstack編)
・Android端末とmbedをBluetooth SPPで接続する実験(myBlueUSB編)
参考リンク
・BASIC! for Android (マニュアルはここからダウンロードできる)
記事、(その2)を追加しましたので、そちらをご覧ください。
spp_demo.cppをいじると色々動かせるとのことですが
具体的にどのようにいじるとモータを動かしたりできるのでしょうか
Androidからのコマンドをもとにモータを動かせるようにしたいと思い色々試しているのですがうまくいきません
ご教示いただけたらと思います
よろしくお願いします