04_BLE_LED
BLEでLEDを操作する
スマートフォンから送った「ON」「OFF」でLEDを操作します。
準備する
CherryIoTとモジュールを接続する
CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。
LEDモジュール
接続先:A
nRF Connectを使用する
nRF Connectを初めて使用する方は、「01_BLE_client」をご確認ください。
サンプルコード
GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。
GitHubからコードを読み込んでいます...プログラムを書き込む
上のサンプルコードをコピーし、Arduino IDEに貼りつけます。
ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。
初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。
動作確認
nRF Connectで確認する
1CherryIoTに接続する
nRF Connectを起動し、「My BLE Device」の右側にある「CONNECT」をタップします。

2Digitalを開く
「My BLE Device」タブの「CLIENT」→「Environmental Sensing」にある「Digital」で、書き込み(WRITE)アイコンをタップします。

3書き込む値の形式を選ぶ
「Write value」画面で値の形式を選択します。

4TEXT (UTF-8)を選ぶ
値の形式から「TEXT (UTF-8)」を選択します。

5ONを送信する
入力欄に半角大文字で「ON」と入力し、「SEND」をタップします。

6LEDの点灯を確認する
「ON」が送信されると本体LEDが点灯します。同じ手順で「OFF」を送信すると消灯します。

nRF Connectアプリから「ON」「OFF」を送ると、LEDが点灯・消灯するなら成功です。
動作中、シリアルモニターにはnRF Connectアプリから受信した「ON」または「OFF」が表示されます。
Arduino IDEの画面右上にあるアイコンをクリックすると、 画面下にシリアルモニターが表示されます。

コードの解説
BLEで受信した文字列を判定し、結果をLEDの出力へ反映します。
GitHubからコードを読み込んでいます...const int ledPin = 3;コネクタAのLEDに対応するGPIO3を、定数ledPinへ保存します。
bool bleOn = false;BLEから受信したLED状態を記録し、最初はOFFにします。
class MyCallbacks : public BLECharacteristicCallbacks {BLEへ値が書き込まれたときの処理を行うクラスを作ります。
String rxValue = pCharacteristic->getValue().c_str();スマートフォンから書き込まれた文字列を受け取ります。
if (rxValue.equals("ON")) {受信した文字が「ON」かを判定します。
bleOn = true;受信した文字が「ON」のときは、LEDの状態をONとして記録します。
} else if (rxValue.equals("OFF")) {最初のifの条件を満たさず、受信した文字が「OFF」のとき、次の処理を実行します。
bleOn = false;LEDの状態をOFFとして記録します。
Serial.println(rxValue);受信した文字列をシリアルモニターに表示します。
Serial.begin(115200);シリアルモニターへ受信した文字列を表示するため、通信速度を115200bpsに設定します。
pCharacteristic = pService->createCharacteristic(サービスの中に、読み取り・書き込みができるキャラクタリスティックを作ります。READはスマートフォンが値を取得する操作、WRITEはスマートフォンから値を送る操作です。
pCharacteristic->setCallbacks(new MyCallbacks());BLEへ値が書き込まれたときにMyCallbacksを実行するよう設定します。
pAdvertising->start();スマートフォンから見つけられるようアドバタイズを開始します。
digitalWrite(ledPin, bleOn ? HIGH : LOW);bleOnの状態に合わせて、コネクタAのLEDを点灯または消灯します。
delay(500);次のLED更新まで500ミリ秒待ちます。