NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Genuino101の使い方(BluetoothLE編)

イメージ 1
 
 Genuino101Lチカに引き続き、今回はBLE機能を使ってみました!
 最近のタブレットスマホ(iOSAndroid)はBLE機能に標準で対応しており、iPadminiのBLE通信でGenuino101のオンボードLEDをON・OFFしてみました!

1. BLEとは?

 BLE(Bluetooth Low Energy、ブルートゥース・ロー・エネルギー)とは、2010年7月に発表されたBluetooth 4.0規格の一部です。
 近距離無線通信技術Bluetoothの拡張仕様の一つで極低電力で通信が可能となっており、対応チップは従来の1/3程度の電力で動作することができます。
 その為ボタン電池一つで数年稼働することができるとされており、各種のセンサーや体に身につけるIoT分野での利用が見込まれています。
 また免許なく使える2.4GHz帯の電波を用いており、最大1Mbpsの通信が可能です。

1.1 IoTとは?
 最近話題のIoT(アイオーティー、Internet of Things、モノのインターネット)とは、パソコンやプリンター等のIT関連機器とは異なり、従来はインターネットに接続されることが無かったモノをインターネットに接続する事を言います。

1.2 無線通信規格の色々
 参考に無線通信には「Wi-Fi」・「Bluetooth」・「ZigBee」等、表1に示す様な各種規格が有り、それぞれの特徴に応じて使い分けられています。
 今回使用するBLEはIoT時代を意識した規格でBluetoothとは言いますがZigBee寄りの規格です
※規格同士の熱いせめぎ合いを感じます
 
表1:主な無線通信規格と性能
  ZigBee Bluetooth Wi-Fi
読み ジグビー ブルートゥース ワイファイ
IEEE規格名 IEEE802.15.4 IEEE 802.15.1 IEEE 802.11ac
帯域 2.4GHz 2.4GHz 5GHz
通信距離 数百m~数km程度 数mから数十m程度 数m~数百m程度
同時使用可ch数 16ch 79ch 実質3ch(11ch)
通信速度 最大250kbps 最大24Mbps 最大6.9Gbps
電力消費 極小(1.5μA~30mA)
※2016.09.06 NOBのArduino日記!調べ

2. 接続

 Genuino101のD4ピンにプッシュボタンを接続しD4がHighかLowかを読み取ることでプッシュボタンが押された(3.3VでHigh)か押されていないか(0VでLow)を確認します。
 10kΩの抵抗を使用していますが、これはプッシュボタンが押されていない限りD4のレベルを低く保つ為のプルダウン抵抗です。
 Fritzingで作成した回路図を図1に、実際に配線した物を図2に示します。
イメージ 2
図1:実験回路図
 
イメージ 3
図2:実際の回路図

3. プログラム

 Curie BLEライブラリを使用してGenuino101をスマートフォンタブレットに接続します。
 プログラムは以下の通りです。
 このプログラムをGenuino101で実行することで、図2プッシュボタンを使用すると、ピン13のオンボードLEDをオン/オフすることができます。またスマートフォンからも同じ操作を実行でき、スマートフォンはLEDの状態(ONかOFFか)を読み取ることができます。
 この双方向通信は、BLE中央(iPadmini)と周辺機器(Genuino101)の間で行われます。
#include <CurieBLE.h>
const int ledPin = 13; // ledPinをオンボードLEDに設定する
const int buttonPin = 4; // buttonPinをデジタルピン4に設定する

BLEPeripheral blePeripheral; // 周辺インスタンスを作成する
BLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214"); // サービスを作成する

// スイッチ特性を作成し、リモートデバイスに読み書きを許可する
BLECharCharacteristic ledCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);
// ボタン特性を作成し、リモートデバイスが通知を受け取れるようにする
BLECharCharacteristic buttonCharacteristic("19B10012-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify); // リモートデバイスが通知を受け取れるようにする

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); // ピン13のLEDを出力として使用する
  pinMode(buttonPin, INPUT); // ボタンのピン4を入力として使用する

  // 周辺機器のローカル名を設定する
  blePeripheral.setLocalName("ButtonLED");

  //この周辺機器がアドバタイズ(経路広告)するサービスのUUIDを設定する
  blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

  // サービスと特性を追加する
  blePeripheral.addAttribute(ledService);
  blePeripheral.addAttribute(ledCharacteristic);
  blePeripheral.addAttribute(buttonCharacteristic);
  ledCharacteristic.setValue(0);
  buttonCharacteristic.setValue(0);

  // サービスを開始する
  blePeripheral.begin();
  Serial.println("Bluetooth device active, waiting for connections...");
}

void loop() {
  // 周辺機器とポーリング(競合の回避・送受信の準備・処理の同期等)する
  blePeripheral.poll();

  // 現在のボタンが接続されたピンの状態を読み込む
  char buttonValue = digitalRead(buttonPin);

  // 最後の読み取り以降に値が変更されているか確認する
  boolean buttonChanged = (buttonCharacteristic.value() != buttonValue);

  if (buttonChanged) {
    // ボタン状態の変更、特性の更新
    ledCharacteristic.setValue(buttonValue);
    buttonCharacteristic.setValue(buttonValue);
  }

  if (ledCharacteristic.written() || buttonChanged) {
    // LEDを更新する。特性またはボタン状態に書き込まれたいずれかの値が変更された
    if (ledCharacteristic.value()) {
      Serial.println("LED on");
      digitalWrite(ledPin, HIGH);
    } else {
      Serial.println("LED off");
      digitalWrite(ledPin, LOW);
    }
  }
}
イメージ 1
図1:プログラム例

 

※CurieBLE.hは、101ボードのBLEモジュールのすべてのパラメータ、機能、および機能にアクセスできるライブラリです。 Bluetooth Low Energyでは、この規格をサポートするスマートフォンタブレット、および周辺機器に接続して通信することができます。

4. 実験!

 iOSアプリの「nRF Connect」を使ってGenuino101のオンボードLEDをON・OFF実験をしてみました。
nRF Connectは、Bluetooth low energy(BLE)(Bluetooth SmartまたはBluetooth 4.0.0以降)デバイスをスキャンして探索し、それらと通信することを可能にする強力な汎用ツールです。またAndroid用ではnRF Master Control Panel(BLE)が有ります。

4.1 nRF ConnectのインストールとBLEの接続
 iOSアプリに「nRF Connect」と言う物が有りましたのでインストールしました。
 インストール完了後nRF Connect」を起動しBLEのSCANを実行します。
 図3の様に「ButtonLE」と言う名前が表示されるので、右の「CONNECT」ボタンを押すと「Unknown Service」「UUID 19B10010-E8F2-537E-4F6C-D104768A1214」と表示されますのでこれをタップします。
イメージ 5
図3:BLE接続
 
4.2 Genuino101からiPadminiへの通知を許可
 2行目の「Unknown Service」をタップし、右端の小さなアイコン(複数の下矢印を持つアイコン)をタップすると図4の様に「X」が付き、Genuino101からの通知が有効になります。
 これにより、Genuino101に接続したプッシュボタンを押しているのか離しているのかをiPadminiの画面上で確認する事が出来る様になります。
イメージ 6
図4:通知を許可
4.3 iPadminiからGenuino101を操作してLEDを点灯する
 図5の様に一行目の「Unknow Characteristics」の右側に2つの矢印アイコンがあります。下向きの矢印は読み取りを意味し、上向の矢印は書き込みを意味します。
 上向きの矢印をタップして「Write value」ポップアップを開き、”0x”(HEXフォーマット)右入力欄に「01」と入力し右下の「SEND」を押すとGenuino101のオンボードLEDが点灯します。
イメージ 7
図5:LEDを点灯
4.4 iPadminiからGenuino101を操作してLEDを消灯する
 図6の様に一行目「Unknow Characteristics」右側の上向きの矢印をタップして「Write value」ポップアップを開き、”0x”右入力欄に「00」と入力し右下の「SEND」を押すとGenuino101のオンボードLEDが消灯します。
イメージ 8
図6:LEDを消灯
 
4.5 実験!
 実際に実験している所の写真です。
 Genuino101のオンボードLED(左上の黄色っぽいLED)が、ブレッドボード上のボタンを押せば押せば光り、離すと消えます。
 次にiPadminiでiOSアプリ「nRF Connect」を使って図5,6の操作をする事でBLEを使ったワイヤレススイッチによるLチカが出来ました!
イメージ 4
図7:BLEによるLチカの実験!

5. まとめ

 超簡単無線マイコンTWE-LITE DIP」に比べると設定がややこしいですが、これが出来ればスマホ(タブレット)でスマートにArduino(Genuino)を制御出来ちゃいます
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【Genuino101の使い方!】目次に戻る