Posted at

Arduino の BLE で Lチカしてみる

More than 1 year has passed since last update.


目的

 はじめて 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