02_BLE_SW
スイッチの状態をBLEで送信する
スイッチのON・OFFをスマートフォンへBLEで送信します。
準備する
CherryIoTとモジュールを接続する
CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。
スイッチモジュール
接続先: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」をタップします。

2スイッチの状態を受信する
「My BLE Device」タブの「CLIENT」→「Environmental Sensing」にある「Digital」で「↓↓↓(NOTIFY)」アイコンをタップします。

3表示を確認する
スイッチを離していると「Not Pushed」、押すと「Pushed」と表示されます。

4スイッチを押す
スイッチを押したときに、表示が「Pushed」へ変わることを確認します。

スイッチの操作に合わせて、nRF Connectアプリに「Pushed」または「Not Pushed」が表示されるなら成功です。
動作中、シリアルモニターにはスイッチの状態に合わせて「Pushed」または「Not Pushed」と表示されます。
Arduino IDEの画面右上にあるアイコンをクリックすると、 画面下にシリアルモニターが表示されます。

コードの解説
スイッチの状態を文字列へ変換し、BLEキャラクタリスティックの通知として送ります。
GitHubからコードを読み込んでいます...Serial.begin(115200);シリアルモニターへ文字や測定値を表示するため、通信速度を115200bpsに設定します。
pinMode(swPin, INPUT);スイッチ端子を「入力」に設定します。
BLEDevice::init("My BLE Device");CherryIoTをBLE機器として初期化します。
pCharacteristic = pService->createCharacteristic(サービスの中に、読み取り・書き込み・通知・指示ができるキャラクタリスティックを作ります。READはスマートフォンが値を取得する操作、WRITEはスマートフォンから値を送る操作、NOTIFYはCherryIoT側から値の変化を自動送信する仕組み、INDICATEはスマートフォン側の受信確認を伴って値を送信する仕組みです。
BLEDevice::startAdvertising();スマートフォンから見つけられるようアドバタイズを開始します。
if (digitalRead(swPin) == HIGH) {スイッチが押されているかを確認します。
Serial.println("Pushed");スイッチが押されているときは、シリアルモニターに「Pushed」と表示します。
pCharacteristic->setValue("Pushed");送信する値を「Pushed」に設定します。
} else {ifの条件(スイッチが押されている)を満たさないとき、次の処理を実行します。
Serial.println("Not Pushed");スイッチを離しているときは、シリアルモニターに「Not Pushed」と表示します。
pCharacteristic->setValue("Not Pushed");BLEで送信する値を「Not Pushed」に設定します。
pCharacteristic->notify();設定したスイッチ状態を、接続中のスマートフォンへ通知します。通知を有効にした端末には、毎回読み取り操作をしなくても値の変化が送られます。
delay(500);次の読み取りと通知まで500ミリ秒待ちます。