Arduino101(Genuino101)の内蔵Bluetooth LEを使ってみる(LED点滅)

Pocket

 Arduino 101 (Genuino 101)の内蔵Bluetooth LE(Bluetooth Low Energy 以下BLE)を使用して、自作AndroidアプリからLEDを無線制御をしてみたいと思います。

 

 今回、スマホアプリは自作、Arduino側のスケッチは公式ホームページで公開されているCurieチュートリアルのスケッチを少し変更して試してます。

 

▼早速ですが確認動画です▼

 LED直差しでよくないですが、とりあえず少し確認しただけですので・・・・。

 作成記事は以下。

 

Bluetooth LE通信のAndroidアプリ作成

 スマホ側アプリはMIT Inventor2を使用して作成したいと思います。公式な環境では未だBLE用コンポーネントがありませんが、テスト環境ではBLEコンポーネントが公開されています。今回はそちらを使用してます。

 

 ▼今回作成したアプリ▼
082_arduinoBLE_04
 ◇アプリ概要

  1. アプリ起動:BLEデバイスを検索。リストへ格納。
  2. Connectボタン:BLEデバイスを選択してArduinoと無線接続します。
  3. Disconnectボタン:Arduinoとの無線接続を切断します。
  4. LED Onボタン:「1」を送信します。
  5. LED Offボタン:「0」を送信します。
  6. 画面下はデバック目的のテキスト表示です。

 

 ◇ブロック図

・ArduinoとのBluetooth LE接続、切断

 アプリを起動するとBLEデバイスをスキャン、見つかるとリストへ格納します。Connectボタン(ListPicker)をクリックするとデバイスリスト表示して、選択した機器のBLE接続を開始します。
080_arduinoBLE_01
 後半はデバック目的のテキスト表示です。無くても問題ありません。

 

 

 Arduino101のMACアドレスは筐体裏面のQRコード下に記載があります。ListPickerを使用せずに直接MACアドレスから接続することもできます。
081_arduinoBLE_01
 その時はListPickerではなくButtonを使用。直接MACアドレスを入力して接続することもできます。MACアドレスは2桁ずつコロン区切りで指定します。こちらの方がアプリ操作が簡素にはなります。

 

 

 Arduino101との接続が完了したらテキスト表示します。
082_arduinoBLE_01
 これもデバック目的のためなので、無くてもO.Kです。

<スポンサーリンク>

 

 

 Disconnectボタンをクリックすると切断します。
082_arduinoBLE_02

 

Bluetooth LEとArduino101/Genuino101との接続、切断は以上です。

 

・LEDのOn/Off 情報の送信

LED On/Offボタンをクリックするとそれぞれ「1」「0」を送信するブロックです。
082_arduinoBLE_05
 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のおかげで中身をあまり知らなくても割と簡単に実装できました。今後もいろいろなものの制御、またモニタリングをスマホで試してみたいと思います。

 

Pocket

<スポンサーリンク>


この投稿へのコメント

  1. ふうりん said on 2016-12-05 at 06:30

    androidstudio版はないのですか?

    • imo said on 2016-12-05 at 12:47

      ふうりんさん こんにちは。
      これくらいのアプリであればinventorを使用した方がはるかに簡単に組めるため、studioでは作っておりません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL