WRX micro:bitを車両で使う その14 Bluetoothでスマホから操作(データ受信)を行う

2020年1月23日micro:bit, 社外部品・DIY

micro:bitには無線通信機能としてBluetooth(BLE)と単純なチャンネル方式の2つがあります。チャンネル方式についてはこれまでに既に試していて、Bluetoothについてもスマホ用のコンパニオンアプリを使用してプログラムの書き込み(ダウンロード)は行っています。今回はスマホからmicro:bitに文字や数値を送信出来るアプリを使用して、実際にmicro:bitで受信出来るのか試してみます。

スポンサーリンク

micro:bitのチャンネル方式による無線機能と、Bluetoothによるコンパニオンアプリを使用したプログラムの書き込みについてはそれぞれ下記記事を見て下さい。

Bluetoothによる接続

micro:bitのBluetooth接続は、先のコンパニオンアプリによるプログラムの書き込みの他、Microsot MakeCodeで予め用意されているサービス(ブロック)を利用して、スマホやPCとのデータ通信も可能になっています。例えばmicro:bit本体に搭載されている各センサーの値を送信して、そのデータをスマホやPC内で利用する事も可能です。ただしスマホやPC側では別途アプリを使用したり、場合によっては自分でプログラム(Web Bluetooth等)を作成する必要もあります(※1)。

従ってmicro:bitからデータを「送信」する場合は、スマホやPC側の知識もある程度必要になってくるので、ここではスマホからmicro:bitでデータを「受信」する場合に限っています。スマホから文字や数値だけを送信する簡単なアプリも幾つか公開されているので(Android)、例えばロボットカーの操作をスマホから行う事も可能になります。

利用するアプリ

スマホ側では「micro:bit Numeric(GooglePlay)」というアプリを利用する事にしました。このアプリは画面上の0~9、A、Bの各ボタンを押すとmicro:bitにその内容を送信します。各ボタンはロボットカーなどで利用する際にも分かり易いデザインになっています。

micro:bitのプログラム

micro:bitのプログラム内でBluetooth機能を使用する場合は、最初に拡張機能からBluetooth機能を追加する必要がありますが、無線機能との排他使用になっています。これはmicro:bitのメモリー量による為の様です。

Bluetooth機能を追加する際には、上記の様に無線機能が削除される旨が表示されます。

Bluetooth機能を追加すると上記の様にBluetoothに関するブロックが追加されます。

拡張機能からさらに「devices」を追加すると「Bluetooth接続機器」としてスマホに対しての機能ブロックが追加されます。先に「devices」を追加すると「Bluetooth機能」も一緒に追加されます。ただしスマホに対しての機能ブロックを使用する場合は※1の通り、スマホ側でも対応する様にする必要があります。今回は「devices」は追加しません。

受信した内容を表示する

上記は「micro:bit Numeric」アプリから送信した内容をmicro:bitのLEDに表示するプログラムです。とても簡単ですが、接続切断時のLEDアイコン表示も本来は必要ありません。

1点注意点があり、Microsot MakeCodeの右上にある歯車マークから「プロジェクトの設定」を選択し、「No Pairing~」をONにします。ONにするとその下の「JustWorks~」はOFFになります。これによってスマホからmicro:bitに接続した際に、ペアリング操作が不要になります。

一番下の「Passkey pairing~」を選択すると、接続の際に6桁のパスキー入力が必要になります。パスキーを利用する方法は、先のコンパニオンアプリを使用したプログラムの書き込みについての記事で扱っています。

スマホと接続する

スマホのBluetoothをONにして「micro:bit Numeric」アプリを立ち上げます。一番下にある「Connect」ボタンをタップします。

Bluetoothがスキャンされ、micro:bitが表示されるのでこれをタップします。

micro:bitと接続すると「Connect」ボタンは「Disconnect」ボタンになります。またmicro:bit側では「チェックマーク」が表示されます(再度「Disconnect」ボタンで切断すると「×」マーク)。

以降はスマホのアプリ側で0~9、A、Bをそれぞれタップすればmicro:bitに送信され、micro:bit側のLEDにもその内容が表示されます。

「Connect」ボタンの上にある「Text」はチェックを外すと数値として送信されます。micro:bit側は文字列で受信しているので、通常はチェックを入れておきます。「Newline」はチェックを入れると送信するデータの最後に「改行」コードを付けて送信します。micro:bit側ではデータ受信を「改行」で見ているので「Newline」のチェックも入れておきます。「Zero」はチェックを入れると送信するデータに「0」を付けます。例えば「1」をタップすると「10」というデータを送信する事になるので、ロボットカーなどを操作する際にアプリのボタンが足りない場合の回避方法に利用出来ます。

これでスマホからmicro:bitにデータを送信する事が出来るので、ロボットカーの操作などにも応用出来ます。ただしセット品で販売されているロボットカーなどでは、操作用アプリも公開されている場合があるので、先にそちらを確認する方が良いと思います。

注記

私の場合、現在使用しているAndroid9のスマホではmicro:bitとの接続が出来ません。古いAndroid4.4のスマホでも最初は接続出来ない現象がありましたが、何度か接続を試すと繋がる様になりました。繋がらない場合は先のMicrosot MakeCodeでのプロジェクト設定で、ペアリング操作のOFFも今一度確認して下さい。

またBluetooth機能を使用していると、micro:bitのLEDに困り顔のアイコンに続いて「020」と表示される事があります。これはmicro:bitのメモリー不足を示すエラーです。私の場合はBluetooth機能とサーボモーター(PCA9685)の機能を同時に使用するプログラムを作成してmicro:bitに転送した所、メモリー不足のエラーが出てしまいました。Bluetooth機能はかなり限定的にしか使用出来ない印象です。

micro:bitからデータを送信する(おまけ)

※1でmicro:bitからデータを送信してスマホやPC内で利用するには、場合によっては自分でプログラム等を作成する必要があるとしましたが、これはあくまでスマホやPC側でさらに付加機能を付ける場合です。単純にmicro:bitから送信されるデータを表示するだけであれば、スマホ用に公開されているアプリのみで行えます。

ここで利用するアプリは「micro:bit Numeric」と同じ製作者による「micro:bit UART Terminal(GooglePlay)」です。詳しい説明は省きますが、micro:bitと接続すると画面上にmicro:bitから受信したデータが表示されます。また画面下部の入力欄から任意のデータも送信出来ます。

上記のプログラムは最初のプログラムにA・Bボタンの機能を追加しています。Aボタンを押す毎にmicro:bitのピッチ角度を1回送信し、Bボタンを押している間はロール角度を送信し続けます。

アプリ上ではmicro:bitのAボタンでピッチ角度が1行表示され、Bボタンではロール角度が複数行連続で表示されます。

「micro:bit」関連記事

以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。

その他

FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。

注記

    • このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
    • 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
    • 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
    • micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
    • BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。