LoginSignup
6
6

More than 5 years have passed since last update.

Arduino の BLE で Lチカしてみる

Posted at

目的

 はじめて Arduino を触ったので、開発環境構築~動作まで記録します。BLE(Bluetooth Low Energy)経由で通信&Lチカしました。

準備

H/W

  • Genuino 101
    • BLE・加速度・ジャイロ付き
    • Genuino とは Arduino と会社が分裂してすったもんだで 2 ブランドできたようなので、同じものと覚えてよさそう
    • ¥4,980
  • LED
  • USB A-B ケーブル
    • なんで B なんだろう… Type-C かせめて Micro がいい…

S/W

  • 開発 PC(OS問わず)
    • Arduino IDE 1.8.1
      • Board Manager から Intel Curie Boards を Install しておく
  • 操作端末(Android / iOS)

実装

ブレッドボード図

 作図ソフトの Fritzing を使ってみたかっただけの図。
image

 Circuits というオンライン作図サービスもありました。

仕様

  • IN -> OUT
    • BLE:0 -> LED オフ
    • BLE:1 -> LED オン
    • BLE:n(n>1) -> LED n ミリ秒でチカチカ

ソース

 CurieBLE > LED のサンプルスケッチ があるのでソースを見なくたって実行できてしまうんだけれど、それだけじゃつまらないので写経して一部修正した。

#include <CurieBLE.h>
BLEPeripheral blePeripheral;
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // BLE LED Service
BLEUnsignedCharCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite); // カスタムUID

const int ledPin = 13; // 13ピンを設定
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  blePeripheral.setLocalName("helloBLE"); // ペリファラルにデバイス名(UUID)設定
  blePeripheral.setAdvertisedServiceUuid(ledService.uuid());
  blePeripheral.addAttribute(ledService);
  blePeripheral.addAttribute(switchCharacteristic);
  // set the initial value for the characeristic:
  switchCharacteristic.setValue(0);
  blePeripheral.begin(); //アドバタイジング開始
  Serial.println("BLE LED Peripheral");
}

void loop() {
  bool isBlink = false;
  int blinkDelayMilliSec = 1000;

  BLECentral central = blePeripheral.central(); //Listen
  if (central) { //セントラルに接続されたら
    Serial.print("Connected to central: ");
    Serial.println(central.address()); //MACアドレス表示

    while (central.connected()) { //セントラルが接続中なら
      // Characteristic書き込みで分岐
      if (switchCharacteristic.written()) {
        if(switchCharacteristic.value() == 1) {
          Serial.println(F("LED on"));
          digitalWrite(ledPin, HIGH); //HIGH = 5V = LEDオン
          isBlink = false;
        } else if(switchCharacteristic.value() > 1){
          Serial.println(F("LED blink"));\
          Serial.println(switchCharacteristic.value());
          blinkDelayMilliSec = switchCharacteristic.value();
          isBlink = true; //チカチカ
        } else { // 0 とかなら
          Serial.println("LED off");
          digitalWrite(ledPin, LOW); //LOW = 0V = LEDオフ
          isBlink = false;
        }
      }
      if (isBlink) { //チカチカ時
      Serial.println(F("LED blining"));
         digitalWrite(ledPin, HIGH);
         delay(blinkDelayMilliSec);
         digitalWrite(ledPin, LOW);
         delay(blinkDelayMilliSec);
      }
    }
    // セントラル切断
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}

結果

nRF Connect から接続して Write Value すると、、、

image

チカる!
2017-02-25_18_25_50.gif

楽しい!!!

参考リンク

Arduino - Genuino101CurieBLELED
Genuino 101 の BLE 機能を試す | Developers.IO
Genuino (Arduino) 101 で BLE 経由でLチカさせる - Qiita
BLEのデバッグツールまとめ - Qiita

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6