IoT向け小型センサ･ノード開発キット「STWIN 」を使ってセンサ･データ収集②　スタンドアロンで実行

STマイクロエレクトロニクスのインダストリアルIoT向けワイヤレス･センサノード用開発キット[「STWIN」（STEVAL-STWINKT1B）](https://www.st.com/ja/evaluation-tools/steval-stwinkt1b.html)を使って、センサ･データの収集（データ･ロギング）を試してみます。[前回記事](https://qiita.com/ykawano/items/5131e3c37ff33324ab8c)ではUSB接続にてパソコンからSTWINをコントロールしましたが、今回は、パソコンとケーブル接続せずにセンサ･ユニット単体設置状態（= スタンドアロン）で記録する方法をいくつか試してみます。実際の計測では、単体で使える方が便利なケースが多いため、ぜひ参考にしてみてください。
スタンドアロンでのデータ収集には、以下3つの操作方法があります。いずれも内蔵SDカードへデータを記録します。

1\. スマートフォンで操作: STBLESensorアプリから操作
2\. 本体スイッチ操作: Userスイッチで開始 & 停止
3\. 自動実行モード: パワーオンリセット後、自動で記録開始

![000_overview_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/5e917b4e-6773-d43e-b5ab-14bde37f1453.png)



参考資料: FP-SNS-DATALOG1用ユーザマニュアル[UM2688](https://www.st.com/ja/embedded-software/fp-sns-datalog1.html#documentation)

# 1．準備

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

+ STWIN本体のセットアップ
基本的なセットアップはUSB接続時と同じなので、[前回記事](https://qiita.com/ykawano/items/5131e3c37ff33324ab8c)を参考にしてください。ファームウェアも同じで、そのまま使えます。

【新たに用意するもの】
+ スマートフォン（Andriod / iOS）
+ SDカード
+ SDカード･リーダー（PCに接続できるようなもの）

フォーマット済み（FAT32）のSDカードをSTWIN本体横のスロットに差し込んでください。PC経由でファイルを出し入れするため、SDカード･リーダも必要です。

![100_SDcard&reader_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/394c0198-d304-a9c7-1978-e52de75fec91.png)


## 1-2．スマートフォンの準備

### アプリのインストール

[STBLESensor](https://www.st.com/ja/embedded-software/stblesensor.html)
スマートフォンから操作してSDカードにデータ保存する場合、STBLESensorアプリが必要になるので、こちらのアプリをインストールしておきます。既にインストール済みの場合はスキップしてください。ここではAndroid OSスマートフォンを使用しますが、iOS版でも同じアプリが用意されています。

![120_STBLEsensor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/1fbf763d-1b6d-6a0d-248e-882ba72382ce.png)


準備ができたら早速ログを試してみます。テストは、STWINを平置きにした状態で行いました。

# 2．データ･ロギング実行

スタンドアロン実行の場合、基本的に動作設定用ファイルをSDカード内に置いておく必要があります。ただし、スマートフォン操作とスイッチによる操作では、無くても操作可能です。最初は何も無い状態で進めます。
全ての操作方法における共通の注意事項として、STWINは電源オン状態でもSDカードの抜き差しは可能ですが、データ書き込み中（緑LED点滅時）の取り外しは禁止です。必ずオレンジLED点滅時に取り外してください。SDカードが正常に認識されている場合、オレンジLEDが1秒おきに点滅して動作ready状態を示します。なおSDカードが入っていない場合、より早い周期で点滅します（→この状態で進めてもログ記録できません）。



## 2-1．スマートフォンからの操作（Bluetooth接続）

まず、スマートフォンによる操作方法を試してみます。遠隔でスタート / ストップ操作させたい場合に使用します。

### スマートフォン接続 & 記録開始

STWINが電源オンであることを確認します。SDカードが正常に認識されている場合、オレンジLEDが1秒おきに点滅して動作ready状態を示します。この状態で一度本体のRESETボタン（黒）を押してください。
次にSTBLESensorアプリを開き、以下手順でSTWINを操作します。最初のセンサ設定ページでは、記録するセンサを選択できます（デフォルトでは全てのセンサがオンになっています）。ひとまずデフォルト設定でRUNタブページへ移動。後で何用のデータか判るように、記録タイトルおよび説明文をメモできます。今回は、“all sensors”、"tets1"と入力しておきました。

![210_STBLEsensor_setup_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/8f5ed9e5-4f97-fa85-67e3-77b656ee4a4d.png)


STARTクリックでログ開始です。終了するにはSTOPをクリックします。

![211_STBLEsensor_logstart_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/d04ee8c9-b0ba-c175-1a45-80a81dc6717b.png)


### データ･ファイル確認

SDカードをSTWINキット本体から取り出して、ファイルをパソコンで確認します。“STWIN_00001”フォルダが作成されており、その中に各センサのログデータが保存されていました。各データの内容確認方法については[前回記事](https://qiita.com/ykawano/private/5131e3c37ff33324ab8c)を参考にしてください。

![212_STBLE_data_all_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/bb2ebbf7-1325-b713-e5f2-89252e9e5573.png)


前回記事と同様にpythonでグラフ確認してみます。
Anacondaプロンプトを開き、hsdatalog_plot.pyスクリプトを実行します。ここではデータ･フォルダ（STWIN_xxxxx）をUtilities下のPython_SDKフォルダにコピーしてから実行しましたが、データ･フォルダ場所をフルpathで指定しても問題ありません。とりあえず加速度センサIIS3DWBを選択します。

Anacondaプロンプト
`(base) D:\...\Utilities\Python_SDK>python hsdatalog_plot.py STWIN_00001 -s IIS3DWB`

![215_STBLE_data_python.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/8e37c0c7-b894-a096-42b1-6d7e14110399.png)

以下のようなグラフが確認できました。

![216_STBLE_data_python_graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/ab6e5111-6336-3e2f-06db-76f2c56ec101.png)



#### その他関連ファイル

データ･フォルダ内には、データ･ファイルの他に以下2つのjsonファイルが作成されています。このフォルダに入っているデータについての設定情報を以下簡単に説明しますが、ここで詳しく知る必要はないのでスキップしてもOKです。
主に、STBLESensorアプリ内で設定した情報が含まれています。


##### AcquisitionInfo.json
STBLESensorで入力した記録タイトル･説明や、タグ情報などが入ってます。確認したかぎりログ開始時の日時はうまく記録されないようですが、終了日時は記録されています。

<details><summary>AcquisitionInfo.jsonの例</summary>

```AcquisitionInfo.json
{
    "Name": "all sensors",
    "Description": "test1",
    "UUIDAcquisition": "1ad87b6f-0ee4-473b-917e-812e07ce684c",
    "start_time": "",
    "end_time": "2023-06-08T12:41:05.196Z",
    "Tags": []
}
```
</details>

##### DeviceConfig.json（センサ設定用コンフィグ･ファイル）


今回はログ記録後のデータ･フォルダ内に自動で生成されていますが、このファイルは通常、SDカードのルートフォルダに事前に入れておいて、各センサのセッティング用に使います（*1）。
どのセンサを記録するかといった詳細は、STBLEsensorアプリのセンサ設定ページでも設定可能です。ただ、何度も同じ条件でデータを取る際、逐次アプリ上で設定するのは面倒です。（設定編集済みの）DeviceConfig.jsonファイルをルートフォルダに置いておくことで、起動時に自動で任意の設定にすることができます。なお、この方法は次に説明する本体スイッチ操作の他、全ての実行方法において有効です。

<details><summary>DeviceConfig.jsonの例 （IIS3DWBの部分まで 抜粋）</summary>

```DeviceConfig.json
{
    "UUIDAcquisition": "1d697eea-04ab-4b12-a835-a1412bd8356e",
    "JSONVersion": "1.1.0",
    "device": {
        "deviceInfo": {
            "serialNumber": "001D00045652500420303153",
            "alias": "STWIN_001",
            "partNumber": "STEVAL-STWINKT1B",
            "URL": "www.st.com\/stwin",
            "fwName": "FP-SNS-DATALOG1",
            "fwVersion": "1.2.0",
            "dataFileExt": ".dat",
            "dataFileFormat": "HSD_1.0.0",
            "nSensor": 9
        },
       "sensor": [
            {
                "id": 0,
                "name": "IIS3DWB",
                "sensorDescriptor": {
                    "subSensorDescriptor": [
                        {
                            "id": 0,
                            "sensorType": "ACC",
                            "dimensions": 3,
                            "dimensionsLabel": [
                                "x",
                                "y",
                                "z"
                            ],
                            "unit": "g",
                            "dataType": "int16_t",
                            "FS": [
                                2,
                                4,
                                8,
                                16
                            ],
                            "ODR": [
                                26667
                            ],
                            "samplesPerTs": {
                                "min": 0,
                                "max": 1000,
                                "dataType": "int16_t"
                            }
                        }
                    ]
                },
                "sensorStatus": {
                    "subSensorStatus": [
                        {
                            "ODR": 26667,
                            "ODRMeasured": 27584.74609,
                            "initialOffset": 0.277445,
                            "FS": 16,
                            "sensitivity": 0.000488,
                            "isActive": true,
                            "samplesPerTs": 1000,
                            "usbDataPacketSize": 3000,
                            "sdWriteBufferSize": 54272,
                            "wifiDataPacketSize": 0,
                            "comChannelNumber": -1,
                            "ucfLoaded": false
                        }
                    ]
                }
            },
```
</details>

（*1）: 
プロジェクト→Utilities下に **“STWIN_config_examples”** フォルダがあり、その中にいくつかサンプル用コンフィグ･ファイルが用意されています。
各jsonファイルの中身を見れば簡単に分かりますが、どのファイルもフォーマットは全て同じです。各センサの取り込みオン / オフについては、それぞれのオブジェクト内"isActive"キーで制御できます（true / false）。




## 2-2．本体スイッチ操作

### 準備

スマートフォンを使わなくても、STWIN本体だけでログ記録可能です。この場合基本的に、SDカードのルートフォルダにセンサ設定用コンフィグ･ファイルを入れておくと、スマートフォンと同じようにセンサの個別設定ができます。もしコンフィグ･ファイルがSDカード内に無い場合でも、デフォルト設定（ = 全センサ･データ取得）で実行するため、問題はありません。

ここでは例として、**加速度センサ**のデータのみ記録するようにします。今回は設定済みコンフィグ･ファイルのサンプルを使います。

FP-SNS-DATALOG1プロジェクト→Utilities下に **“STWIN_config_examples”** フォルダがあり、その中にいくつかサンプル用コンフィグ･ファイルが用意されています。“AccSensors”であれば加速度データの取得用、“AudioSensors”であればマイク音声データの取得用といったように、設定内容は各ファイル名から想像してください。
PC内のプロジェクト>Utilitiesフォルダから試行の度にコピーしても良いですが、利便性のため全コンフィグ･ファイルをフォルダごとコピーしておきました。このあたりは任意の手順でOKです。


![220_SWmode_config_example_copy_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/c6cad48f-fa52-4673-992a-342df140a4c8.png)


コピーしたSTWIN_config_examplesフォルダ内から **AccSensors.json** ファイルを選んで、ルートフォルダにコピーします。コピー後、**ファイル名を“DeviceConfig.json”に変更します。このファイル名でないと、設定ファイルとして認識されないため注意してください。**
コンフィグ･ファイルが認識されるためには、ルートフォルダに入れておく必要があります。

![222_SWmode_config_rename_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/94c85583-7d7f-897e-e4f4-25402da57095.png)


以上で準備完了です。

STWINが電源オンであることを確認します。SDカードが正常に認識されている場合、オレンジLEDが1秒おきに点滅して動作ready状態を示します。この状態で一度本体のRESETボタン（黒）を押してください。





### 記録開始

**userボタン** でログ記録を開始すると、**緑LEDが高速点滅状態** になります。もう一度userボタン押すとログ停止します。操作としては以上です。

![224_STWIN_switch_LED.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/7db2ee94-2f07-f1be-289e-332914342180.png)


なお、のちほど解説するexecution_config.jsonファイルを使えば、Userボタンでスタート後あらかじめ設定したシーケンスで記録したのち、自動でログ停止させるといった使い方もできます。

### データ･ファイル確認

SDカード内データをPCで確認します。新しく“STWIN_00002”フォルダが作成されており、その中に加速度センサのログデータが確認できました。

![225_SWmode_data_acc_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/10148386-0916-d314-d6f3-9a3bce9a9c00.png)



最後に自動実行モードを試してみます。

## 2-3． 自動実行モード

電源オン後、自動でログ開始する用途で使用します。この方法では実行用の設定ファイルが別途必要になります。

### 準備

センサ用コンフィグ･ファイルと同じ場所の、Utilities下の **“STWIN_config_examples”** 内に**execution_config.json** ファイルが入っています。 このファイルをルートフォルダにコピー後、必要に応じてキーの値を自動実行用に設定します。センサ設定用コンフィグ･ファイル（DeviceConfig.json）としては、2-2で設定した加速度用コンフィグをそのまま使いました。

![230_auto_execution_config_copy_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/941bc6d4-28fa-6e02-5c42-6777b5c1f51f.png)


**auto_mode**:
自動実行モードにする場合、**“true”** にセットします。なお“false”であれば自動実行しないので、スマートフォン操作モードなどと切り替えしたい場合、このexecution_config.jsonファイルをSDカード内に置いておいて、ここの値を変更してください。

**phase_iteration**:
execution_planに設定されているシーケンスを繰り返す回数です。最大10回まで指定できます。0は無限ループ設定となります。

**execution_plan**:
シーケンスの順序を設定できます。現時点ではdatalogとidleの2種のみなので、変更不要です。
timer_msキーについて、それぞれの値を変更することで時間を調整できます。単位はmsです。
ループ実行する場合、ここの合計時間を1ループとして繰り返すことになります。

デフォルト設定：自動実行=オン、データ記録: 15秒 & 停止: 10秒の繰り返し、無限ループ

```execution_config.json
{
	"info": {
		"version": "1",
		"auto_mode": true,
		"phases_iteration": 0,
		"start_delay_ms": 1000,
		"execution_plan": [
			"datalog",
			"idle"
		],

		"datalog": {
			"timer_ms": 15000
		},
		"idle": {
			"timer_ms": 10000
		}
	}
}
```

### 記録開始

STWINがすでに電源オンの場合、SDカード挿入後リセットボタンを押します。その後自動でログ記録が開始されます。
“10秒間記録 + 15秒間休止”のシーケンスをphases_iterationの数値回数分繰り返します。デフォルトでは無限ループ設定となっているので、延々と記録し続けます。
終了させる場合、データ記録以外の期間（緑LED = 消灯 & オレンジLED点滅中）にSDカードを取り外してください（記録中にSDカードを抜くとデータが壊れる可能性あります）。

### データ･ファイル確認

SDカード内ファイルを確認すると、スイッチ操作時と同じように新しく“STWIN_0000x”フォルダが作成され、加速度センサのデータが保存されていました。1ループごとに1フォルダ作られてそこにデータが保存されます。3ループ終了したところで一度SDカードを取り出して確認しました。

![231_auto_SDcard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/f7a74571-0c3f-310f-4251-6114ca803a46.png)


execution_config.jsonは自動実行操作時には必須ですが、他のスマートフォン操作時などではこのファイルは無くても問題ありません。ただし、execution_config.jsonがあればこの中のシーケンス設定を利用できます。他の操作モードでの記録の際にシーケンスを使いたい場合、"auto_mode"キーの値をfalseに設定（自動実行 = オフ）してください。


# 3. まとめ

スタンドアロンでログ記録するための方法は以下３つ

1\. スマートフォンで操作: STBLESensorアプリから操作
2\. 本体スイッチ操作: Userスイッチで開始 & 停止
3\. 自動実行モード: パワーオンリセット後、自動で記録開始

ログ記録の設定内容は以下2つのjsonファイルで設定可能。データ保存用SDカードのルートフォルダにこれらのファイルを入れておくことで、起動時に設定を読み込みます。

<dl>
<dt>DeviceConfig.json</dt>
<dd>各センサ設定用ファイル。センサのオン･オフ設定、ODR設定など。サンプルがUtilites>STWIN_config_examplesフォルダに入っているのでそれを使用もしくは編集して使います。スマートフォン操作の場合、STBLESensorから設定できるので無くてもよい。<dd>

<dt>execution_config.json</dt>
<dd>自動実行モードで使う時は必ず必要。自動実行のオンオフ設定の他、記録 & 休止時間および回数の設定が可能。Utilites>STWIN_config_examplesフォルダに入っているのでそれを編集して使います。スマートフォン操作やスイッチ操作の場合、auto_modeキーの値を"false"にしておきます。<dd>
</dl>