目的
はじめて 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 しておく
-
Arduino IDE 1.8.1
- 操作端末(Android / iOS)
-
nRF Connect for Mobile
- Bluetooth デバイスに接続したりするもの
-
nRF Connect for Mobile
実装
ブレッドボード図
作図ソフトの Fritzing を使ってみたかっただけの図。
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 すると、、、
楽しい!!!
参考リンク
Arduino - Genuino101CurieBLELED
Genuino 101 の BLE 機能を試す | Developers.IO
Genuino (Arduino) 101 で BLE 経由でLチカさせる - Qiita
BLEのデバッグツールまとめ - Qiita