BLEを使ってスマートフォンからLチカしてみよう
続いて、スマートフォンからBLEでLEDを制御するプログラムを試してみます。今回は簡単に試すために、公式のスケッチ例とBLE操作を提供しているスマートフォンアプリを使ってみましょう。
スマートフォンはAndroid/iOS端末を想定しています。お使いの端末に合わせて後述のアプリを用意してください。
ペリフェラルとセントラル
BLEで通信を行うデバイス(今回はGenuino 101とスマートフォン)は、ペリフェラルとセントラルという2つの役割に分担されます。ペリフェラルがBLEのサービスを提供し、セントラルがサービスを受けて操作を行います。
今回はGenuino 101をペリフェラル、スマートフォンをセントラルとして試してみましょう。
BLEにはサービスのより細かいデータを扱うプロファイル、サービス、キャラクタリスティックという概念がありますが、ここでは省略します。
プログラムの書き込み
Arduino IDEで、[ファイル]->[スケッチの例]->[CurieBLE]->[LED]を選択します。

/**/で囲まれている部分と//で始まる行はコメントで、それ以外の部分が実際に動かすプログラムです。
コードを読んでいくと、先ほどのLチカと同様、ledPinという定数に13を代入していることがわかりますね。

こちらもloop()関数内でLEDのオンオフの処理を記述しています。

switchCharacteristic.written()でBLEの入力を読み取り、switchCharacteristic.value()で値を取得しています。ここでは0以外の値を取得するとLEDをオンにする記述になっています。
Serial.println()はArduino IDEのシリアルモニタに値を表示する処理です。直接の動作には関係ありませんが、値の確認に利用しましょう。シリアルモニタは[ツール]->[シリアルモニタ]から表示できます。
スマートフォンとペアリング
ボードに給電を開始すると、自動的にBLE通信が開始されます。ボードのBLEをスマートフォンから検知しましょう。
BLEの検知には既存のアプリを使います。筆者は「LightBlue Explorer」というiOSアプリを利用しました(以下、このアプリの画面で説明します)。Android端末の方は公式サイトでも紹介されている「nRF Connect」がオススメです。また、スマートフォン端末のBluetooth通信はオンにしておきます。
取得できるBluetoothの一覧から、「Genuino 101-XXXX」(XXXXは端末ごとに固有)という通信を選択します。

値を送る
スマートフォンとGenuino 101が接続できたら、いよいよ値を送信してみます。「LightBlue Explorer」では「Write new value」から16進数の値を送れるようになっています。

「0」以外の値で処理が実行されるプログラムだったので、今回は「1」という値を送ってみます。
正しく値が送られると、LEDが光ります。

再度「0」を送ると、LEDが消えます。
Node.jsでもコーディング出来る
今回はArduino言語を使用しましたが、ArduinoのFirmataという汎用プロトコルと「Johnny-Five」というフレームワークを使って、Node.jsでもプログラムを書くことができます。JavaScriptを使えるとなると、Web系エンジニアの方にとってはぐっと障壁が下がりますね。
Johnny-Fiveでのプログラム方法を詳しく知りたい方は下記の記事を参考にしてください。
おわりに
通常の開発ボードの場合、デバイスをリモートで制御するためにはWi-FiモジュールやBLEモジュールを使って拡張する必要があります。サーバ側の設定やボード自体の接続も複雑で、初心者にとっては障壁が高いものです。
Genuino 101では、初期搭載のBLEを使って難しい処理や接続なしで手軽にリモート制御を試すことができました。今回はスマートフォンからの操作でしたが、PCや他のデバイスとペアリングすることもできます。いろいろなセンサーやモジュールと接続して、さまざまなハックに挑戦してみましょう!
購入はこちら
参考
Genuino 101とWebBluetoothを使ってブラウザからLチカする方法を解説した記事「話題のWebBluetoothでGenuinoをリモートコントロールしてみよう」をdotstudioにて公開しています。より詳細な使い方を知りたい方は是非ご覧ください。
