小型IoT端末開発キット「SensorTile.box」 をセンサ・アプリで使ってみた①　セットアップと使い方


STマイクロエレクトロニクスの[「SensorTile.box」（センサタイル・ボックス）](https://www.st.com/ja/evaluation-tools/steval-mksbox1v1.html)は、各種MEMSセンサを搭載したすぐに使えるIoT端末開発キットです。電池で動作し、温度や加速度などのデータを保存することができます。今回は、このSensorTile.boxをSTのセンサ･デバイス用の汎用スマートフォン・アプリ[「ST BLE Sensor」](https://www.st.com/ja/embedded-software/stblesensor.html)から操作して使ってみます。ST BLE Sensorは、ユーザ側でのカスタマイズが可能で、「データ収集＋機能ライブラリ」を設定することでより高度な情報を得ることができます。こちらの機能もあわせて試してみます。また、SensorTile.boxには機械学習コア内蔵のMEMSモーション･センサ[LSM6DSOX](https://www.st.com/ja/mems-and-sensors/lsm6dsox.html)が搭載されているため、機械学習を体験することもできます。
まずは、SensorTile.boxでどのようなデータ収集ができるか見てみましょう。

![1_Figure.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/b62ad8da-e5b4-775b-7d58-71a775705092.jpeg)


[LSM6DSOX](https://www.st.com/ja/mems-and-sensors/lsm6dsox.html): 機械学習コア内蔵の6軸MEMSモーション･センサ（3軸加速度 + 3軸ジャイロ）
MLC: Machine Learning Core
FSM: Finite State Machine

なお、SensorTile.boxを使用した関連記事として、以下を予定しています。

◆使ってみた編
①セットアップと使い方（この記事）
②[サンプル･アプリで試す](https://qiita.com/ykawano/items/b8a47a6ebf91cec22c2e)　（モーション･センサ）
③[アプリをカスタマイズしてみる](https://qiita.com/ykawano/items/e45390b235e9f54d4ea8)　（振動FFT　加速度センサ）
④[アプリをカスタマイズしてみる](https://qiita.com/ykawano/items/b302715ab3b7edee8036)　（音声FFT　マイクロフォン）

◆機械学習編
①[サンプル･データで試す　機械学習体験その１](https://qiita.com/ykawano/items/9a78b5e6781e81e75ed2)
②[サンプル･データで試す　機械学習体験その２](https://qiita.com/ykawano/items/fb3949fde6e7df8302d2)
③[データを集めて学習データを作成（学習作業）　機械学習体験その３](https://qiita.com/ykawano/items/d2c289e2b1d3cdb06734)
④[データを集めて学習データを作成（テスト）　機械学習体験その４](https://qiita.com/ykawano/items/741e92ebb8e4d0dd2dfc)

「使ってみた編」では、スマートフォン・アプリを使用した操作例を紹介するので、機械学習にはあまり直接関係しません。機械学習編では別のソフトウェア・ツールを使うので、「使ってみた編」と「機械学習編」は違う内容になります。すぐに機械学習の体験を始めたい場合、この記事「セットアップと使い方」で概要だけ学び、すぐに機械学習編へ読み進めるのがよいかもしれません。なお、記事は順次公開していく予定です。

SensorTile.boxは使い方レベルに応じて以下のようなトレーニング・ガイドラインを設けています。




|Entry Mode（初級）             |Expert Mode（中級）          |Pro Mode（上級）        |
|:-----------:|:---------:|:--------:|
|基本的なデータ収集のみ |収集データをカスタマイズ|GUIプログラミングで自由に設計|
|基本使用、サンプルアプリのみ|アプリのカスタマイズ、ファンクション機能追加|より複雑なセンシング設計|

[SensorTile.box: Part1 Entry mode（Youtube）](https://youtu.be/svbT6e0T5_A)
[SensorTile.box: Part2 Expert mode（Youtube）](https://youtu.be/A3lj1VXh9SM)
[SensorTile.box: Part3 Pro mode（Youtube）](https://youtu.be/_SHY-jzcRNY)

この記事シリーズは、YouTubeビデオで紹介されている内容と重なる点もありますが、全編を通じてEntry Mode（初級）およびExpert Mode（中級）までを紹介する予定です。Pro Modeでは、PC上のGUI（グラフィカル･ユーザ・インタフェース）ソフトウェア・ツールを使ってより詳細な設定や設計を行うことができますが、体験の範疇を超えてしまうためこの記事シリーズでは紹介しません。興味のある方はぜひチャレンジしてみてください。

## 1．ハードウェアの準備

【用意するもの】
- [STEVAL-MKSBOX1](https://www.st.com/ja/evaluation-tools/steval-mksbox1v1.html)：SensorTile.boxキット
- スマートフォン（当記事ではAndroidを使用します）
- パソコン
- USBケーブル（USB-Micro）
- ＋ドライバー

![3a_package.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/3110314e-d84e-847b-c2d8-b5be4552c15f.jpeg)


### 搭載されているセンサおよびマイコン

![3b_board_sensors.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/30e07533-1e1d-443e-bb28-eb020fc01f88.jpeg)



MEMS Sensors
6軸モーション･センサ（*1）[LSM6DSOX](https://www.st.com/ja/mems-and-sensors/lsm6dsox.html)
加速度センサ：[LIS2DW12](https://www.st.com/ja/mems-and-sensors/lis2dw12.html)
加速度センサ：[LIS3DHH](https://www.st.com/ja/mems-and-sensors/lis3dhh.html)
地磁気センサ：[LIS2MDL](https://www.st.com/ja/mems-and-sensors/lis2mdl.html)
マイクロフォン：[MP23ABS1](https://www.st.com/ja/mems-and-sensors/mp23abs1.html)
温湿度センサ：[HTS221](https://www.st.com/ja/mems-and-sensors/hts221.html)
温度センサ：[STTS751](https://www.st.com/ja/mems-and-sensors/stts751.html)
大気圧センサ：[LPS22HH](https://www.st.com/ja/mems-and-sensors/lps22hh.html)

*1：慣性計測ユニット: IMU（Inertial Measurement Unit、互いに補完する複数の異なるセンサを集積したユニット）。STでは加速度センサとジャイロ･センサを集積した製品群として、[iNEMO](https://www.st.com/content/st_com/ja/products/mems-and-sensors/inemo-inertial-modules.html)と呼んでいる。LSM6DSOXはiNEMOの中でもさらに機械学習コアを内蔵した製品。

マイコン： [STM32L4R9ZI](https://www.st.com/ja/microcontrollers-microprocessors/stm32l4r9zi.html)


## 2．ソフトウェアの準備


### ST BLE Sensorのインストール

（この記事ではAndroidスマートフォンを例に説明しますが、iPhoneでも同じアプリが用意されているため同様の操作で実行できます）
Google Playアプリにて“st ble”などで検索すると「ST BLE Sensor」というアプリが見つかるので、こちらをインストールしてください。STのセンサ・デモは、ほとんどこちらのアプリに対応しています。


ST BLE Sensor

![install_stble.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/9c8437bd-c991-983b-58d7-26a2b3c51982.jpeg)







### SensorTile.boxのセットアップ

まず、SensorTile.box内のバッテリを内部の基板にコネクタ接続接続します（出荷時の状態では接続されていません）。ネジ2か所を外して中の基板を取り出し、下図のように電源コネクタを取り付けてください。PWRボタンを2秒程度長押しすると起動します。同じくPWRボタンを6秒程度長押しするとオフします。ケースを取り付けてしまうとこのボタンにアクセスできませんが、長時間使用しないとスリープ･モードに入り、消費電流がきわめて小さいため、電源を入れた状態で放置していても問題ありません。PCなどにUSB接続するとスリープ・モードが解除されます。もしバッテリが無くなって電源オフ状態になっていた場合、再度ケースを開けた状態でUSB接続した後、PWRボタンを長押ししてください。

![5_batteryCon.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/0e9a5545-24fa-8113-258e-4f0bd7f95003.jpeg)


### ファームウェア・アップグレード（アップロード）

SensorTile.boxの電源が入った状態で、スマートフォンからST BLE Sensorを起動します。

![6a_stblesensro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/77c70bc6-167f-8068-c351-2a259bb40a3a.png)


開封後の最初の起動時（メイン･プログラムが空の状態）もしくはSensorTile.box用の新しいファームウェアが更新されていると、アップロードするように促されるので、ここで書き込み・更新しておきます。アップロード中は青色LEDがゆっくり点滅（約2秒間隔）し、20分程度で完了します。

![7a_start_new1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/10c847fb-8647-d3ac-14c4-f701860e92f8.jpeg)


アップロードが終了したら再度Bluetooth® Low Energy（LE）接続してください。
デフォルトでは環境センサ･アプリが起動します。

![7b_start_new2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/412f696e-9856-86e5-f5f8-212179a2ad7c.jpeg)






## 3．アプリの概要


ST BLE Sensorは、SnesorTile.boxと共に使う場合Bluetooth LE経由で随時ソフトウェアをアップロードすることで使用する機能を変更します。SensorTile.box上のソフトウェアでは、全ての機能が動いている状態ではなく、機能ごとに生成されたアプリをアップロードし、Flashメモリ上にそのファームウェアを書き込んだ後で使えるようになります。一度書き込みすれば、同じアプリであればその機能を継続して使用可能です。

現時点では、デフォルトで以下機能のサンプル･アプリが用意されています。


|カテゴリ　|サンプルアプリ             |機能          |使用センサ         |
|:---------:|:------------:|:---------:|:--------:|
|モーション系| Compass         | コンパス        |加速度、ジャイロ、地磁気       |
|モーション系| Level           |傾斜計       |加速度       |
|モーション系| Pedometer        | 歩数計        |加速度       |
|モーション系| Sensor Fusion - Quaternion        |クォータニオン       |加速度、ジャイロ、地磁気      |
|環境系| Data Recorder        |温湿度、大気圧       |温湿度、大気圧       |
|SDメモリ記録用| Data Recorder        |データ保存        |ALL      |
|AI & MLC| Baby crying detector |赤ちゃんの泣き声検知|マイクロフォン|
|AI & MLC|Human Activity recognition        |アクティビティ検知        |加速度     |
|AI & MLC|In-Vehicle Baby Alarm        |泣き声検知とアクティビティ検知のコンビネーション   |マイクロフォン、加速度    |
|応用| Vibration Monitor        |振動状態比較        |加速度       |


上記のサンプル･アプリ（Example Apps）を選択してSensorTile.boxへアップロードすればすぐに使用できます。この記事以降では、この中からいくつか使用例をピックアップして紹介していく予定です。

## 4．共通の使用方法

### アプリ選択

アプリを選択してアップロードする手順例です。（以下は、コンパス・アプリを選択した場合）
アプリを選んで、Bluetooth LEでファイルを送信して完了です。書き換えた後は再接続が必要です。


![10a_selectApp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/6c86da22-3c54-1d2f-03a2-a4eb7e3df9cc.jpeg)


### 操作

**Playボタン**が画面にある場合、クリックするとセンシングを開始し、グラフなどの形式でプロット表示が開始されます。再度クリックすると停止します。
表示ページが複数ある場合、左右スワイプで移動できます。

![10b_AppControl.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/44454e6e-dd25-c275-db2f-f7cf2027a710.jpeg)




### データの保存場所

アプリ名の横にBluetoothアイコンがあるものについては、スマートフォンへBluetooth LEデータ送信します。
アプリ名の横にSDカード・アイコンがあるものについては、本体内のSDカードにデータを保存します（8G ByteのSDカードが本体基板上スロットに挿入済み）。

![10c_logPlace.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/5d5009e8-03df-5986-eb21-f97c0bd41c6c.jpeg)



### データの保存方法　スマートフォン

最初に画面をスワイプして**Plot Data**のページに移動します。**センシング中**（**Playボタン**クリック）、右上の **“FD”** アイコン（フロッピーディスク・アイコン）をクリックすると、データ保存記録モードになります。この時アイコン表示は**”X”**状態に変化しますので、この”X”をクリックすると記録が終了します。“FD”アイコンのみをクリックしてもデータは正常に記録されないので、注意してください。スマートフォン内蔵ストレージ、STMicroelectronics\logsフォルダ以下にCSVファイルが保存されます。
記録終了後にMAILで送信するかどうか聞いてきますが、必要なければキャンセルしてください。


![10d_logSmartphone.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/0113eba4-5f8f-5f3a-f27f-93231ffdf422.jpeg)


なお、ここでログが記録されるのは表示中のデータだけではない場合があります。

### データの保存方法　SensorTile.box本体内SDカード

本体内のSDカードにデータを保存できるアプリには、画面右下にSDカードのアイコンが表示されています。こちらをクリックすることで記録開始 & 停止を行います。記録後、本体をパソコンにUSB接続するとUSBメモリとして認識されるので、コピーする場合はここから操作します（本体を開ける必要なし）。データログ･ファイルはルート･ディレクトリに直接格納されます。

![10e_logSD.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/d5a056b0-d833-7ac5-6037-86810cd82245.jpeg)




### セッティングその他
- Settings > Log settings > Log Storage


データの保存場所設定。ここで選択できる”Database”と”CSV FILE”（デフォルト）の違いが不明ですが、どちらを選択してもスマートフォン内フォルダにデータが保存されます。ただ、”CSV FILE”でないとログの日付が正しく記録されないので、デフォルト設定のままとします。”LogCat”を選択すると保存されないので、ご注意ください。

![10f_settings.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/e4e5fb2f-7990-318f-6443-fd86e5c28c26.jpeg)


- Settings > Log Settings > Clear log

ログクリア。すでに保存済みデータがあればここで削除できます。

- Settings > Log Settings > Export logs

メールで保存データを送信、google driveなどへ転送できます。




## 5．Example1：　Environmental （環境センサ）アプリ

### まずはデフォルトで使用

先ほども記載したように、初期設定直後は環境センサ･アプリが起動します。すでに何か別のアプリに変更している場合、Create a new ApplcationからEnvironmental→Barometerアプリをアップロードすることで再設定できます。
試しに温湿度・大気圧データを記録してみましょう。

![20_baro_log.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/49b47c93-5835-6b26-41fc-1faa11f5caa3.jpeg)


ログ記録終了後にスマートフォン内フォルダを見ると、以下のように温度 / 湿度 / 大気圧用にそれぞれ3種のcsvファイルができています。

場所：STMicroelectronics\logs

![21_baro_files.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/9b6170f2-2d9d-21f7-cc7e-b713ab719ad2.jpeg)


デフォルト設定だと1回/sのレートでログが記録され、温度 / 湿度 / 大気圧それぞれのログ･ファイルが作成されます。
温度ログ･データを見てみると、1秒に1回のログと予想していましたが1秒に3つも記録されています。これは、他のセンサ（湿度と大気圧）のログ記録タイミング時に重複して記録されてしまう仕様のようです。


温度データファイル例

![22a_baro_temp_1s_excel.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/8119b236-de71-4c18-826a-cfc92148ce4c.jpeg)



大気圧データファイル例

![22b_baro_pressure_1s_excel.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/17ed3da1-942b-4c98-95cb-6774ea4592a2.jpeg)


### 設定を変更してみる


ログ記録時間の間隔は、アプリの編集モードから変更可能です（アプリ動作中は変更できません）。最初のサンプル･アプリ選択ページから、Barometerの"Edit"に入り、以下のように各INPUTについてそれぞれ変更します。こちらは元のBarometerアプリの設定を一部変更するだけですが、念のため別のアプリ名として登録・保存します。
ここでは、30秒に1回の記録に変更し、編集したアプリ名は「Barometer30s」としておきます。


![23a_baro_edit1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/7e888ce9-8cdd-158e-de6e-41288cc7a9ef.jpeg)


ODR（Output Data Rate）のデフォルトは1Hz（1秒に1回）。"1Hz"のところをクリックすると0.0625Hz~8Hzの範囲で選択できますが、さらに遅くしたい場合はチェックボックスにチェックを入れて直接値を入力することもできます。ここでの入力値の単位はx秒/回。チェック後、"30"と入力。アプリ名「Barometer30s」を入力し、Finishクリックで完了。

![23b_baro_edit2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/7c6952ed-d4c2-aa69-7787-b51928f914d6.jpeg)



アプリをセーブ後、Bluetooth LEに再接続。**EXPERT VIEW**クリックでカスタム･アプリのページに入ると、さきほど作成したものがここに登録されているので、同じようにアップロードします。

![23c_baro_edit3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/5f90bb5f-dae1-0e2e-dc26-f7f4d4d5ca2b.jpeg)


設定変更後の温度データがこちらです。
予想通り30秒ごとに3つの連続データが残ってしまうので、実際にデータを利用する際には２つおきに抽出するなどの工夫が必要です。

![23d_baro_temp_30s_excel.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/4d25ae81-95b6-1920-7563-2f026e96dd34.jpeg)



### 関連ソースコードをチェック

公開されているSensorTile.box用の基本プロジェクトファイル[FP-SNS-STBOX1](https://www.st.com/ja/embedded-software/fp-sns-stbox1.html)から、関連するコード部分を以下に引用します。この中にいくつかのアプリケーションが入っており、ここで参照したのは **「BLESensors」** です。

![30_BLEsensors_source.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/9675f30f-69fe-2c29-9516-d23bd915bac8.jpeg)


FP-SNS-STBOX1>BLESensors自体は、今動かしているSensorTile.box内のコードそのものとは異なりますが、同じST BLE Sensorアプリを使ってセンサ･データを送信するアプリケーションなので機能的には同じです。見てみると、Bluetooth LE送信用に3種のデータ（温度 / 湿度 / 大気圧）を同じバッファに乗せて一緒に送られるようです。オリジナルのソースコードが確認できないので推測になりますが、（同じデータバッファ内容であるにも関わらず、）温度 / 湿度 / 大気圧それぞれデータを送信していると仮定すると３つの重複したログが生成されるのも納得です。
気になる方は確認してみてください。


```c:sensor.service.c
/**
 * @brief  Update Environmental characteristic value
 * @param  int32_t Press Pressure in mbar
 * @param  uint16_t Hum humidity RH (Relative Humidity) in thenths of %
 * @param  int16_t Temp Temperature in tenths of degree
 * @retval tBleStatus   Status
 */
tBleStatus Environmental_Update(int32_t Press,uint16_t Hum,int16_t Temp)
{
  tBleStatus ret;

  uint8_t buff[2+4/*Press*/+2/*Hum*/+2/*Temp*/];

  STORE_LE_16(buff  ,(HAL_GetTick()>>3));
  STORE_LE_32(buff+2,Press);
  STORE_LE_16(buff+6,Hum);
  STORE_LE_16(buff+8,Temp);

  ret = ACI_GATT_UPDATE_CHAR_VALUE(HWServW2STHandle, EnvironmentalCharHandle, 0, 10,buff);

  if (ret != BLE_STATUS_SUCCESS){
    if(W2ST_CHECK_CONNECTION(W2ST_CONNECT_STD_ERR)){
      BytesToWrite =sprintf((char *)BufferToWrite, "Error Updating Environmental Char\n");
      Stderr_Update(BufferToWrite,BytesToWrite);
    } else {
      STBOX1_PRINTF("Error Updating Environmental Char\r\n");
    }
  }
  return ret;
}
```


以上、この記事では基本的なアプリ操作を紹介しました。
長くなりましたので続きは次回へ。