Seeed XIAO BLE nRF52840を試す

1. Seeed XIAO BLE nRF52840とは

BLEタイプのXIAO。
Seeed Studio XIAO nRF52840

2. Arduino開発環境

上記のSeeed Wikiにしたがってセットアップする。

2.1 ボードの追加
  • Arduino IDEの「ファイル」>「環境設定」>「追加のボードマネージャのURL」に下記URLを追加。
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
  • 「ツール」>「ボード」>「ボードマネージャ」で 「seeed nrf52」を検索。
  • 「Seeed nRF52 Boards」と「Seeed nRF52 mbed-enabled Boards」が見つかる。ここでは後者を選択。
  • ボードとシリアルポートを選択。

※ シリアルポートが認識しないときは、USBコネクタの横の小さなリセットボタン(RSTのシルクあり)をダブルクリックする。

2.2 ライブラリの追加
  • 「スケッチ」>「ライブラリをインクルード」>「ライブラリを管理」で「ArduinoBLE」を検索してインストール。
2.3 (捕捉) ボードとライブラリについて

ボードの選択が Seeed nRF52 Boards か Seeed nRF52 mbed-enabled Boards かで利用できるBLEライブラリが異なる。 Seeed nRF52 Boards では Adafruit Bluefruit nRF52 Libraries が、Seeed nRF52 mbed-enabled Boards では ArduinoBLE が利用できる。前者のほうがサンプルが豊富だが、ここではシンプルで分かりやすかった後者をまず使ってみる。

ボード BLEライブラリ
Seeed nRF52 Boards Adafruit Bluefruit nRF52 Libraries
Seeed nRF52 mbed-enabled Boards ArduinoBLE

3. Lチカ

3.1 オンボードのLED

基板上に3色LEDがある。

void setup() {
}
void loop() {
  digitalWrite(LEDB, HIGH);
  digitalWrite(LEDR, LOW);
  delay(500);
  digitalWrite(LEDR, HIGH);
  digitalWrite(LEDG, LOW);
  delay(500);
  digitalWrite(LEDG, HIGH);
  digitalWrite(LEDB, LOW);
  delay(500);
}
3.2 NeoPixel

NeoPixel(WS2812B)のドライブにはAdafruitのライブラリが利用できる。
「スケッチ」>「ライブラリをインクルード」>「ライブラリを管理」で「Adafruit NeoPixel」を検索してインストール。
下記は、D0ピンで12個のNeoPixelを制御するスケッチ。

#include <Adafruit_NeoPixel.h>
#define PIN D0 
#define NUMPIXELS 12

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
uint16_t colorH = 0; // 色相(HSVのH)

void setup() {
  pixels.begin(); 
}

void loop() {
  colorH = colorH + 1;
  for (int i = 0; i < NUMPIXELS; ++i) {
    // H(色相), S(彩度), V(明度)を制御
    pixels.setPixelColor(i, pixels.ColorHSV(colorH, 255, 255));
  }  
  pixels.show();
  delay(5);
}


4. BLE

4.1 スケッチ

BLEで基板上の赤色LEDをON/OFFするサンプルを試す。
「スケッチ例」>「ArduinoBLE」>「Peripheral」>「LED」を開く。
ただし、LEDのON/OFFが逆なので下記のように修正する。
また、ターミナルでシリアルポートを開かないと動作が始まらないことにも注意。

        if (switchCharacteristic.value()) { 
          Serial.println("LED on");
          digitalWrite(ledPin, LOW);     // LOWでON
        } else {
          Serial.println(F("LED off"));
          digitalWrite(ledPin, HIGH);    // HIGHでOFF
        }
4.2 スマホで動作確認

nRF ConnectやLightBlue等の汎用のBLEツールで動作確認する。ここではnRF Connectを使用した。
まずデバイスをスキャンする。このサンプルではデバイス名は「LED」と表示される。見つかったら接続する。

次にサービスを選択する。サービスのUUIDはスケッチの20行目で "19B10000-E8F2-537E-4F6C-D104768A1214" と定義している。表示名は「Unknown Service」となる。

するとキャラクタリスティックが表示される。キャラクタリスティックのUUIDはスケッチの23行目で "19B10001-E8F2-537E-4F6C-D104768A1214" と定義している。表示名は「Unknown Characteristick」となる。

「↑」のボタンを押すと Write value の画面になる。0x01 を SENDすると赤色LEDが点灯する。0x00 を SENDすると消灯する。またシリアルポートにもログが出力される。