Seeed StudioのXIAO nRF52840 Senseを手に入れましたので、まずはIMUとマイクを使ってみました。
ラインナップや環境構築についてはこちらをご覧ください。
XIAO nRF52840 Sense 主要スペック
1. 基本ハードウェア仕様
| 項目 | 内容 |
|---|---|
| プロセッサ | Nordic nRF52840 (ARM® Cortex™-M4F @64MHz) |
| ワイヤレス通信 | Bluetooth 5.0, Zigbee, Thread, ANT, NFC(要別売アンテナ) |
| メモリ | 1MB Flash / 256KB RAM |
| ストレージ | 2MB QSPI Flash (オンボード) |
| インターフェース | 1x UART, 1x I2C, 1x SPI, 1x NFC, 11x GPIO(PWM), 6x ADC |
| ボタン | 1x リセットボタン |
| LED | 1x 充電状態LED, 1x RGB LED |
2. 内蔵センサー(Senseモデルのみ)
| センサー種別 | 型番 / 詳細 |
|---|---|
| 6軸IMU (慣性計測装置) | LSM6DS3TR-C (3軸加速度 + 3軸ジャイロ) |
| デジタルマイク | PDMマイク (音声入力・騒音検知) |
3. 電源・物理仕様
| 項目 | 内容 |
|---|---|
| 動作電圧 | 3.3V |
| 入力電圧 (USB) | 5V |
| 入力電圧 (BAT) | 3.7V (リチウムポリマー電池対応) |
| 充電電流 | 50mA / 100mA (デフォルト50mA) |
| 待機消費電力 | < 5μA |
| サイズ | 21mm x 17.5mm x 3.5mm |

4.ピン配置
UART、I2C、SPIのペリフェラルが1つずつ載ってます。UARTはPCとのシリアル通信用に使われてますので、UARTのセンサーを使う際はご注意ください。
環境構築
環境はArduino IDEです。詳しくはこちら→Getting Started with Seeed Studio XIAO nRF52840 Series | Seeed Studio Wiki
1. ボードマネージャURLの登録
Arduino IDEの [基本設定] (Preferences) を開き、「追加のボードマネージャのURL」に以下のURLを貼り付けます。
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
2. ボードパッケージのインストール
[ツール] > [ボード] > [ボードマネージャ] を開き、「Seeed nRF52」 で検索。
- Seeed nRF52 Boards をインストールします。
- ※インストールには数分かかる場合があります。
3. ボードとポートの選択
XIAOをPCに接続し、以下の設定を選択すれば完了です。
- ボード:
Seeed XIAO nRF52840 Sense - シリアルポート: 認識されたポート(COMx や /dev/cu.xxx)
オレンジ色のLEDが点滅し、認識されるようになります。
サンプルコード
IMUとマイクを使ったコード例です。
#include <LSM6DS3.h> #include <Wire.h> #include <PDM.h> // IMUのインスタンス作成 (I2C) LSM6DS3 myIMU(I2C_MODE, 0x6A); // PDMマイクの設定 short sampleBuffer[256]; volatile int samplesRead; void setup() { Serial.begin(115200); while (!Serial); // 1. IMUの初期化 if (myIMU.begin() != 0) { Serial.println("IMU error"); } else { Serial.println("IMU OK!"); } // 2. PDMマイクの初期化 PDM.onReceive(onPDMdata); if (!PDM.begin(1, 16000)) { // モノラル, 16kHz Serial.println("PDM error"); } } void loop() { // --- IMUデータの読み取り --- Serial.print("Accel [G]: "); Serial.print(myIMU.readFloatAccelX(), 2); Serial.print(", "); Serial.print(myIMU.readFloatAccelY(), 2); Serial.print(", "); Serial.print(myIMU.readFloatAccelZ(), 2); // --- マイクデータの読み取り (音量の簡易計算) --- int maxAmplitude = 0; if (samplesRead) { for (int i = 0; i < samplesRead; i++) { if (abs(sampleBuffer[i]) > maxAmplitude) { maxAmplitude = abs(sampleBuffer[i]); } } samplesRead = 0; } Serial.print(" | Mic Max: "); Serial.println(maxAmplitude); delay(200); // 読みやすさのために少し待機 } // PDMデータ受信時のコールバック関数 void onPDMdata() { int bytesAvailable = PDM.available(); PDM.read(sampleBuffer, bytesAvailable); samplesRead = bytesAvailable / 2; }
動作画面

いい感じに動いています。Z軸が1.01くらいあるのは重力加速度です。
マイクの感度も良好で、多少周りが騒がしくても動作するんじゃないかという印象。
まとめ
このサイズで色々センサが入ってるの、使いやすくていいですね。
TinyMLやBLEも使っていきたいです。使ったらブログに書く予定ですので是非!

