Arduino 101 (Genuino 101)の内蔵Bluetooth LE(Bluetooth Low Energy 以下BLE)を使用して、自作AndroidアプリからLEDを無線制御をしてみたいと思います。
今回、スマホアプリは自作、Arduino側のスケッチは公式ホームページで公開されているCurieチュートリアルのスケッチを少し変更して試してます。
▼早速ですが確認動画です▼
LED直差しでよくないですが、とりあえず少し確認しただけですので・・・・。
作成記事は以下。
Bluetooth LE通信のAndroidアプリ作成
スマホ側アプリはMIT Inventor2を使用して作成したいと思います。公式な環境では未だBLE用コンポーネントがありませんが、テスト環境ではBLEコンポーネントが公開されています。今回はそちらを使用してます。
▼今回作成したアプリ▼
◇アプリ概要
- アプリ起動:BLEデバイスを検索。リストへ格納。
- Connectボタン:BLEデバイスを選択してArduinoと無線接続します。
- Disconnectボタン:Arduinoとの無線接続を切断します。
- LED Onボタン:「1」を送信します。
- LED Offボタン:「0」を送信します。
- 画面下はデバック目的のテキスト表示です。
◇ブロック図
・ArduinoとのBluetooth LE接続、切断
アプリを起動するとBLEデバイスをスキャン、見つかるとリストへ格納します。Connectボタン(ListPicker)をクリックするとデバイスリスト表示して、選択した機器のBLE接続を開始します。
後半はデバック目的のテキスト表示です。無くても問題ありません。
Arduino101のMACアドレスは筐体裏面のQRコード下に記載があります。ListPickerを使用せずに直接MACアドレスから接続することもできます。
その時はListPickerではなくButtonを使用。直接MACアドレスを入力して接続することもできます。MACアドレスは2桁ずつコロン区切りで指定します。こちらの方がアプリ操作が簡素にはなります。
Arduino101との接続が完了したらテキスト表示します。
これもデバック目的のためなので、無くてもO.Kです。
Disconnectボタンをクリックすると切断します。
Bluetooth LEとArduino101/Genuino101との接続、切断は以上です。
・LEDのOn/Off 情報の送信
LED On/Offボタンをクリックするとそれぞれ「1」「0」を送信するブロックです。
service と characteristic の uuid は後述する Arduino 側スケッチのuuidと合わせます。ボタンがクリックされたらcharacteristicへ文字列を格納します。ほんとは int や byte を送信したかったのですが何故かうまく通信できなかったので string を使用してます。
これでAndroid(スマホ)側のアプリ作成は完了です。BLE対応のスマホへインストールしておきます。
Arduino 101(Genuino 101)側スケッチ
基本的にはArduino101公式ページのCurieチュートリアルにあるスケッチをほぼそのまま使用してます。
BLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214"); BLEUnsignedCharCharacteristic switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);
service と characteristicのuuidを設定します。ここで記述したuuidをそのままスマホアプリ側で使用します。
LED制御の実装部分です。
if (switchCharacteristic.written()) { if (switchCharacteristic.value() == 49) { // any value other than 0 Serial.println("LED on"); Serial.println(switchCharacteristic.value()); digitalWrite(13, HIGH); // will turn the LED on } else { // a 0 value Serial.println(F("LED off")); Serial.println(switchCharacteristic.value()); digitalWrite(13, LOW); // will turn the LED off
受信した値「1」はASCⅡコードで「49」のため、「== 49」を追加してます。後はデバック目的で受信データそのものをSerial.printlnしてます。それ以外はチュートリアルのスケッチのままでArduinoへ書き込んでます。
以上の内容で記事冒頭の動画のようなLED制御ができます。敷居の高いBluetooth LEですが、ArduinoライブラリとInventor2のおかげで中身をあまり知らなくても割と簡単に実装できました。今後もいろいろなものの制御、またモニタリングをスマホで試してみたいと思います。
コメント
androidstudio版はないのですか?
ふうりんさん こんにちは。
これくらいのアプリであればinventorを使用した方がはるかに簡単に組めるため、studioでは作っておりません。