02_BLE_SW

スイッチの状態をBLEで送信する

スイッチのON・OFFをスマートフォンへBLEで送信します。

スイッチモジュールBLE通信
1

準備する

CherryIoTとモジュールを接続する

CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。

スイッチモジュール

スイッチモジュール

接続先:A

nRF Connectを使用する

nRF Connectを初めて使用する方は、「01_BLE_client」をご確認ください。

2

サンプルコード

GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。

02_BLE_SW.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

上のサンプルコードをコピーし、Arduino IDEに貼りつけます。

ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。

初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。

4

動作確認

nRF Connectで確認する

1CherryIoTに接続する

nRF Connectを起動し、「My BLE Device」の右側にある「CONNECT」をタップします。

nRF Connectの一覧に表示されたMy BLE Device

2スイッチの状態を受信する

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

nRF ConnectでDigitalの通知を有効にする画面

3表示を確認する

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

nRF ConnectにNot Pushedと表示された画面

4スイッチを押す

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

nRF ConnectにPushedと表示された画面

スイッチの操作に合わせて、nRF Connectアプリに「Pushed」または「Not Pushed」が表示されるなら成功です。

動作中、シリアルモニターにはスイッチの状態に合わせて「Pushed」または「Not Pushed」と表示されます。

Arduino IDEの画面右上にあるアイコンをクリックすると、 画面下にシリアルモニターが表示されます。

Arduino IDEでシリアルモニターを表示する場所
5

コードの解説

スイッチの状態を文字列へ変換し、BLEキャラクタリスティックの通知として送ります。

02_BLE_SW.ino
GitHubで開く
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ミリ秒待ちます。