IoT向け小型センサ･ノード開発キット「STWIN.box 」を使ってセンサ･データ収集①　セットアップ & GUI操作

STマイクロエレクトロニクスのインダストリアルIoT向けワイヤレス･センサ･ノード用開発キット[「STWIN.box」（STEVAL-STWINBX1）](https://www.st.com/ja/evaluation-tools/steval-stwinbx1.html)を使って、センサ･データの収集（データ･ロギング）を試してみます。使用するソフトウェアは、データ収集用として用意されているFunction Pack[「FP-SNS-DATALOG2」](https://www.st.com/ja/embedded-software/fp-sns-datalog2.html)です。
STWIN.boxは、従来品である[「STWIN」（STEVAL-STWINKT1B）](https://www.st.com/ja/evaluation-tools/steval-stwinkt1b.html)の上位版です。STWINと同様に、予知保全や機械学習、産業機器用のデータ･センシングに利用できます。主な変更点としては、傾斜計向けの高精度加速度センサの追加や一部センサの変更の他、Wi-FiやNFCが追加されています。またプラスチックケースで基板全体をカバーすることで防塵対策されています。

![000_overview_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/30f1d64d-c85b-3d10-a53c-9c6593a85c9b.png)


操作方法についても、STWIN同様に大きく分けて2つ用意されています。データの保存先はPC内ストレージまたは、STWIN.box本体内のSDカードです。
+ PCへUSB経由保存（USBケーブル接続、コマンドやバッチファイルで操作）
+ 内蔵SDカードへ保存（スマートフォンとBluetooth LE接続または、本体スイッチによる操作）

<strong>FP-SNS-DATALOG2での追加機能: Python GUI</strong>

従来のファンクション･パックFP-SNS-DATALOG1では、データ取得やグラフプロット表示の際、主にPythonスクリプトをコマンド入力で操作していました。また、データのリアルタイム･プロット表示はできませんでした。FP-SNS-DATALOG2では、**GUI**で操作可能な **hsdatalog_gui.py** が追加され、この画面上で各センサのパラメータ設定やログスタート･停止の操作が行えます。またGUI画面上でグラフプロットのリアルタイム表示が可能です。前回のSTWIN記事の時と同じように今回もUSB接続による方法を実行してみますが、“2”で新しく追加されたGUIを使ってみます。

High Speed Datalog GUIコントロールウインドウ
![001_GUI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/9c29f069-8623-292d-b24e-903ffe4d9762.png "High Speed Datalog GUI")


参考資料
ユーザ･マニュアル: [UM3106](https://www.st.com/ja/embedded-software/fp-sns-datalog2.html#documentation)




- 関連記事

[IoT向け小型センサ･ノード開発キット「STWIN 」を使ってセンサ･データ収集①](https://qiita.com/ykawano/items/5131e3c37ff33324ab8c)
[IoT向け小型センサ･ノード開発キット「STWIN 」を使ってセンサ･データ収集②　スタンドアロンで実行](https://qiita.com/ykawano/items/84713da0bbb1bed77253)

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

【用意するもの】
- [STEVAL-STWINBX1](https://www.st.com/ja/evaluation-tools/steval-stwinbx1.html)：STWIN.box
- スマートフォン（本記事ではAndroidを使用）
- パソコン（本記事ではWindows PCを使用）
- [ST-LINK/V2](https://www.st.com/ja/development-tools/st-link-v2.html) または [STLINK-V3](https://www.st.com/ja/development-tools/stlink-v3minie.html) + 接続用USBケーブル（Mini / Micro / Type-C）
- キット本体用USB Tyep-Cケーブル
- ＋ドライバー

キット本体用のUSB Type-Cケーブルですが、最初、手元にあった格安品を使用したところエラーが多発しました。別のUSBケーブル（スマートフォン付属品）に変えたところ問題無かったので、ケーブル品質に左右される可能性があります（USB 1.x接続ですが、仕様と比較すると比較的高速（6Mbit/s）で通信しています）。

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

基板 表面
![100_STWINbox_board_up_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/9967ecef-d1a4-4ad8-f36f-476010843d04.png)

基板 裏面
![101_STWINbox_board_doown_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/1942c29e-9695-5a95-344a-c29223edc70c.png)




## 1-2．STWIN.boxのセットアップ

今回はテスト的に使用するので、カバーケースへの組み付けはしません。基板スペーサなどを利用しても良いでしょう。下側の土台ケースだけ使って仮止めする場合、6mm程度の短めの木ネジを用意してください（同梱されているネジは上側カバーと一緒に組付け用の長さになっているおり、少し長いため）。

![120_setup1_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/fac5e0f2-4d43-89bc-8d58-ca357592d25d.png)

![121_setup2_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/4c55db5c-11ac-8d31-4532-331e068309ce.png)




実使用時は、同梱されているリチウムイオン・バッテリをボード裏側のコネクタに接続し、上下ケース内に入れて同梱のネジで5ヵ所ネジ止めします。ケース内に取り付けた状態でSDカードの取り外しはできませんので注意してください（再度開封が必要）。なお、本記事内ではSDカードは使用しません。

# 2．ファームウェアの準備


## 2-1．STM32CubeProgrammerのインストール

※既にインストール済みであればスキップしてください。

初めてパソコンでSTM32マイコンの開発ボードを使用する場合、 **STM32CubeProgrammer** （旧ツール：ST Link Utility）をインストールしてCOMポート･ドライバなどを入れます。このツールはSTM32マイコンにファームウェア・プログラムを書き込む際に使う基本ツールです。

ダウンロードはこちらから：[STM32CubeProgrammer](https://www.st.com/ja/development-tools/stm32cubeprog.html)


![210_Programmer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/6ee8dd28-a4a0-6471-62bf-8b075be74a18.png)

## 2-2．動作用ファームウェアの入手（FP-SNS-DATALOG2）

続いて、デモ用プログラム･ファイルをダウンロードします。
ダウンロードはこちらから：[「FP-SNS-DATALOG2」](https://www.st.com/ja/embedded-software/fp-sns-datalog2.html)

ダウンロードしたファイルを解凍すると、そのまま統合開発環境用の作業フォルダができあがります。以下のフォルダに今回使用するデモ用プログラム･ファイル（バイナリ・ファイル）が用意されているので、まずはファイルを確認します。
ファイル保管場所（例）：Drive:\...\STM32CubeFunctionPack_DATALOG2_V1.2.0\Projects\STWIN.box\Applications\DATALOG2\Binary
ファイル名：DATALOG2_Release.bin


![220_BinaryFW.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/c818015a-20c7-f00b-e1b9-d581f0f404ad.png)

Project → STWIN.box用フォルダ下には以下3つのProjectフォルダが用意されていますが、今回はDATALOG2を使います。
+ DATALOG2（データロギング用）
+ UltrasoundFFT（超音波FFT用）
+ PDETECT（近接検知用）

## 2-3．STWIN.boxにファームウェアを書き込む

書き込み方法はいくつかあります。
STWIN.box含め、STM32マイコン･ベースの評価キットのファームウェアを書き換えるためには、基本的にST-LINKと呼ばれるデバッグ･ツールが必要です。前モデルのSTWINキットにはSTLINK-V3（STLINK-V3MINI / STLINK-V3MINIE）が同梱されていましたが、STWIN.boxキットには同梱されていません。持っていない場合、別途購入して用意してください。ST-LINKは何種類か存在しますが、「STLINK-V3xxx」を推奨します。

<ul>
<dt><a href="#書き込み方法-stlink-v3--stm32-nucleo-64ボード">①</a> <a href=https://www.st.com/ja/development-tools/stlink-v3minie.html>STLINK-V3</a>ツールもしくはNucleo-64ボードを利用して書き込み</dt>
<dd>最も標準的で簡単な方法です。</dd>
<dt><a href="#書き込み方法-st-linkv2">②</a> <a href=https://www.st.com/ja/development-tools/st-link-v2.html>ST-LINK/V2</a>ツールで書き込み</dt>
<dd>STM32CubeProgrammerを利用すれば、ST-LINK/V2でも書き込み可能です。</dd>
<dt><a href="#書き込み方法-dfuモード">③</a> STWIN.boxをDFUモード（USBモード）で起動し、USBで直接書き込み</dt>
<dd>デバッグ作業は出来ませんが、簡易的な書き込みとして利用できます。ST-LINKツール（上記方法①&②）を使う場合、基板上の専用コネクタに接続する必要があるためケースに入れた状態ではアクセスできません。基板をケースに入れてしまった後でファームウェアを変更したい場合、こちらの方法で書き換え可能です。</dd>
<dt>④ スマートフォンとBluetooth LEで接続後、FOTA（Firmware update Over The Air）で書き込み</dt>
<dd>スマートフォンから無線で書き換えることもできますが、ここでは省略します。</dd>
</ul>

ここでは、①STLINK-V3ツールを使った方法をメインに説明しますが、後半に②と③についても簡単に紹介します。

### 書き込み方法① STLINK-V3 / STM32 Nucleo-64ボード

#### 以下のいずれかを用意してパソコンと接続

+ <a href=https://www.st.com/ja/development-tools/stlink-v3mini.html>STLINK-V3MINI*</a>（Micro USB Type-B）
+ <a href=https://www.st.com/ja/development-tools/stlink-v3minie.html>STLINK-V3MINIE</a>（USB Type-C）
+ 標準的なSTM32 Nucleo-64ボード（どのSTM32マイコンでも可）

*生産終了のため、新規購入不可


ボード本体のUSB Type-Cコネクタから本体側への電源供給が必要なので、こちらは適当なUSB電源アダプタを利用します（同じパソコンへの接続でもOK）

- STLINK-V3VMINI使用時の接続
![230_STLINKV3_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/e21eeb57-4bef-d40d-f2aa-085d95eca70a.png)


標準的なSTM32マイコン･ボードであるSTM32 Nucleo-64ボードを持っている場合、キット付属の変換基板を使うことで同じようにアクセスできます。STM32 Nucleo-64ボードのST-LINK部分だけ利用するので、CN2ヘッダ･ピンにある2つのジャンパは外します（SWDライン（TMS, TCK）の切り替え）。

- STM32 Nucleo-64ボード使用時の接続
![232_STLINK_Nucleo_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/091a47e8-34a5-eae5-3cf5-d574538ce49e.png)


古いSTM32 Nucleo-64ボードでは正常に認識されない可能性があります。その場合はSTM32CubeProgrammerを利用してST-LINKのファームウェアをアップグレードしてみてください（アップグレード時はSTM32 Nucleo-64ボードのみPCと接続）

STM32CubeProgrammer → Firmware upgrade
![235_STLINK_FWupgrade_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/a8f6b084-5938-68cb-e07f-76a7ec55c0bc.png)


##### Debug Mode

*プログラム開発環境で実行する場合の注意事項です。通常使用の場合スキップしてください

STWIN.boxに搭載されているSTM32U5マイコンはDual Bank機能を備えているため、Option Byte > User Configuration > SWAP_BANK設定により、Flashエリア内BANKを切り替えることができます（BANK1 / BANK2）。STM32CubeIDEなどのプログラム開発環境上でDebug Modeから実行する場合には、BANK1にプログラムを置く必要があります。STM32CubeProgrammerツールのSWAP_BANK設定から、チェックが外れているかどうか確認してください（Unchekcedにセット）

![237_STLINK_OptionByte.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/4fe40110-2720-c3fa-d9f7-7c276038e3d9.png)

![238_STLINK_OptionByte_swapbank.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/646dcf9c-57bd-9f9e-debd-7e5a104ab46b.png)


#### ファームウェア書き込み

接続準備が完了したら、先ほど確認した「DATALOG2_Release.bin」というバイナリ・ファイルを、「STLINK_***」へドラッグ & ドロップ。これだけでSTM32 マイコンへのファームウェア書き込みは完了です。
「容量が足りなくて書き込めない」といったメッセージが出た場合、ST-LINK側のUSBコネクタを抜き差ししてみてください。

![240_Program_FW_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/cfc3a44a-7f75-2faa-2f84-f84f7077f9cb.png)


ST-LINK接続ケーブルを外して、本体のUSBコネクタとPCを接続した状態で再起動します（中央ボタンでリセット）。
緑LEDが約2秒周期で点滅した状態であれば正常です。
書き込みが終了したら<a href="#2-4pythonライブラリモジュールのインストールパソコン">2-4．Pythonライブラリモジュールのインストール</a>に進んでください。

### 書き込み方法② ST-LINK/V2

ST-LINK/V2でも書き込み可能ですが、ドラッグ & ドロップによるファイル書き込みができないため、STM32CubeProgrammerから直接操作します。

#### 以下をパソコンと接続

<a href=https://www.st.com/ja/development-tools/st-link-v2.html>ST-LINK/V2</a>（Mini USB Type-B）

同梱の変換基板を経由して、ST-LINK/V2と接続します。ボード本体のUSB Type-Cコネクタから本体側への電源供給が必要なので、こちらは適当なUSB電源アダプタを利用します（同じパソコンへの接続でもOK）

![250_STLINKV2_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/ba6c77d3-20fb-e09e-3915-36af7872740d.png)



#### STM32CubeProgrammerによるファームウェア書き込み

パソコンへの接続が完了したらSTM32CubeProgrammerを起動し、以下手順で書き込みします。なお、STM32CubeProgrammerはSTM32マイコン用の基本ツールなので、STLINK-V3なども共通で使えます。

![252_STLINKV2_CubeProg1_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/b08bb848-0e21-12e4-5f96-af165ef9ea56.png)


さきほど確認したバイナリ･ファイルをオープン
ファイル名：DATALOG2_Release.bin

![254_STLINKV2_CubeProg2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/798766d5-b7d7-ead7-81a3-3b5216c9bcc7.png)


Downloadボタンで書き込み実行

![256_STLINKV2_CubeProg3_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/be8b5739-1844-8966-197d-71e2d947376b.png)


書き込みが終了したら<a href="#2-4pythonライブラリモジュールのインストールパソコン">2-4．Pythonライブラリモジュールのインストール</a>に進んでください。

### 書き込み方法③ DFUモード

ST-LINKを使用せず、USBから直接書き込む方法です。最初にSTWIN.boxをDFUモードで起動させる必要があります。

#### パソコンと接続 ＆ DFUモード設定

パソコンとUSBケーブルで接続後、以下操作によりDFUモードで起動させます。

![260_DFUmode_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/24f77190-d665-6d39-8f46-849961918160.png)



#### ファームウェア書き込み

次にSTM32CubeProgrammerを起動し、“USB”を選択して“Connect”クリックします。その後の手順は②のST-LINK/V2と同じです。<a href="#stm32cubeprogrammerによるファームウェア書き込み">STM32CubeProgrammerによる書き込み方法</a>を参照ください。

![261_DFUmode_CubeProg1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/a7acaf5c-6c5f-f217-9ea8-6c1b8c110baa.png)


書き込み終了したら次に進みます。


## 2-4．Pythonライブラリ･モジュールのインストール（パソコン）

今回、GUI環境であるhsdatalog_gui.pyを実行しますが、このscriptを使うためには、別途pythonライブラリ･モジュールをパソコンにインストールする必要があります。

インストール用バッチファイルが用意されているので、コマンドプロンプト（ここではAnacondaプロンプト使用）から実行します。社内ネット環境などでproxyサーバが設定されている場合、そのhttp proxyを指定してインストールします。
バッチファイル場所:
D:\...\STM32CubeFunctionPack_DATALOG2_V1.2.0\Utilities\HSDPython_SDK


<details><summary>HSDPython_SDK_install.bat </summary>

```HSDPython_SDK_install.bat
@ECHO OFF
:: This batch file is used to install all Python packages needed to use the HSDPython_SDK and its examples
ECHO HSDPython_SDK Installer
ECHO.
ECHO [NOTE]: If you are using a proxy launch this script passing your proxy string as a parameter.
ECHO -- e.g.: HSDPython_SDK_install.bat http://usr_name:password@proxyserver_name:port#
ECHO.
set proxy_string=%1
:: Section 1: st_pnpl
ECHO ===========================================
ECHO installing st_pnpl...
ECHO ===========================================
if "%proxy_string%"=="" (python -m pip install st_pnpl\dist\st_pnpl-1.1.0-py3-none-any.whl) else (python -m pip install st_pnpl\dist\st_pnpl-1.1.0-py3-none-any.whl --proxy %proxy_string%) 
:: Section 2: st_dtdl_gui
ECHO ===========================================
ECHO installing st_dtdl_gui...
ECHO ===========================================
if "%proxy_string%"=="" (python -m pip install st_dtdl_gui\dist\st_dtdl_gui-1.1.0-py3-none-any.whl) else (python -m pip install st_dtdl_gui\dist\st_dtdl_gui-1.1.0-py3-none-any.whl --proxy %proxy_string%) 
:: Section 3: st_hsdatalog (GUI version)
ECHO ===========================================
ECHO installing st_hsdatalog (GUI version)...
ECHO ===========================================
if "%proxy_string%"=="" (python -m pip install st_hsdatalog\dist\GUI\st_hsdatalog-2.1.0-py3-none-any.whl) else (python -m pip install st_hsdatalog\dist\GUI\st_hsdatalog-2.1.0-py3-none-any.whl --proxy %proxy_string%) 
:: Section 4: asciimatics needed from hsdatalog_cli.py example script
ECHO ===========================================
ECHO installing asciimatics...
ECHO ===========================================
if "%proxy_string%"=="" (python -m pip install asciimatics) else (python -m pip install asciimatics --proxy %proxy_string%) 
PAUSE
```
</details>

実行例（http以下は環境依存）:
`(base) D:\...\Utilities\HSDPython_SDK>hsdpython_sdk_install.bat http://172.29.52.82:80`

以上で準備完了です。

Note:
- 標準Pythonインストール環境の場合（= Windowsコマンドプロンプトから実行）、実行前にWindowsの環境変数にpython.exeのPATHが設定されていることを確認してください。
- 標準Pythonのバージョンが3.13以上の場合、モジュールのインストール時にエラーになる可能性があります（FP-SNS-DATALOG2 v2.3.x内バッチファイルでは、Python 3.13.x環境でエラーとなる）。その場合、Python 3.10.x ~ 3.12.xを再インストールしてください。
- FP-SNS-DATALOG2ファームウェアのバージョンを更新する場合、上記のPythonライブラリ･モジュールも同じパッケージ（FP-SNS-DATALOG2内Utilities\HSDPython_SDKフォルダ）に入っているバージョンに合わせるようにしてください。この後実行するGUIが正常動作しない可能性があります。その場合、使用するバージョン内Utilitiesフォルダに入っているバッチファイルを実行して再インストールしてください。（例: V1.2.0 → V1.2.1への変更の際など）
- Anaconda環境の場合、上記ライブラリ･モジュールはこのような場所にインストールされます（いくつかのst_xxxxxxフォルダが作成されます）。
　（例）Drive:\ProgramFiles\anaconda3\Lib\site-packages

# 3．グラフ･プロット用GUIの操作

パソコンにSTWIN.boxを接続した状態で進めます。

## 3-1．hsdatalog_guiを実行

（2-4．Pythonライブラリ･モジュールのインストールから継続の場合、同じコマンドプロンプトで実行可能です）
Utilities下のHSDPython_SDK\examplesフォルダに移動し、 **hsdatalog_gui.py** を実行します。

`(base) D:\...\Utilities\HSDPython_SDK\examples>python hsdatalog_gui.py`

スタート画面が起動します。Connectをクリックするとメイン画面が表示されます。

![310_gui_start_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/6918273b-dd08-41a3-96fe-d5fe2abb5935.png)



メイン画面の左側は各センサの設定用です。
Start Logボタンをクリックするとログ開始します。右側はログ取得中リアルタイムにグラフ描画されます。Stop Logボタンをクリックで停止です。
このGUI上から操作する場合、ログ･データはSDカードではなく、PC内ストレージに保存されます。

![311_gui_main_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/73135dba-4746-aae7-3631-f14c1b203174.png)


各センサの下矢印をクリックするとパラメータを確認できます。変更できるパラメータに関してはプルダウン･メニューで選択、もしくは直接数値を入力できます。

![312_gui_sensor_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/d2f8eed3-5069-c1d0-82d5-10fe7dad37fd.png)


取得したデータは同じexampleフォルダ内に自動でフォルダが作成され、その中に保存されます。

## 3-2．プロット表示

ログ取得終了後、各センサ･データをPythonグラフ描画できます。これはFP-SNS-DATALOG1で用意されているPythonスクリプトと同じ機能です（hsdatalog_plot.py）。FP-SNS-DATALOG2では、この機能をGUIから呼び出せます。Plot the last acquisitionをクリックするとPythonグラフ･ウインドウが新たに開きます。デフォルトのallを選択した状態では全てのセンサ･データのグラフが表示されるため、限定したい場合はComponent Nameからセンサを指定します。

![320_gui_plot_select_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/b936902b-e677-454b-dffe-9120a31bf59b.png)


例）IIS3DWBのグラフ･プロット

<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/d5419a35-f27d-e89b-4bf2-e2fb23a982c0.png "321_gui_plot_sample.png">




## 3-3．その他

#### センサの選択

GUI起動時、デフォルトでは機械学習コア（MLC）以外の全センサがアクティブになっているので、PC内に保存されるデータ量が大きくなりがちです。特に音声データはサイズが大きくなります。特定のセンサ･データだけ記録したい場合、センサ左側のボタンをクリックすることでオン / オフできます（緑丸表示 = オン）

![330_gui_sensorSelect_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/767c96b2-2b9a-4dad-3bb2-71623b8a0f20.png)


#### オートモード

FP-SNS-DATALOG1ではSDカード内のConfigurationファイルに設定することでオートモードを利用できましたが、DATALO2ではGUI上から操作します。

![331_gui_automode_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/40cac772-0f8a-0541-019a-ebf35e4f287b.png)


以上、今回はSTWIN.boxを使ってデータ･ロギングをGUIで操作するツールを試してみました。

次の記事:
<a href=https://qiita.com/ykawano/items/fe09b2977ee42768246d>IoT向け小型センサ･ノード開発キット「STWIN.box 」を使ってセンサデータ収集② python scriptを試す</a>