STマイクロエレクトロニクスのインダストリアルIoT向けワイヤレス・センサ・ノード用開発キット「STWIN」(STEVAL-STWINKT1B)を使って、センサデータの収集(データロギング)を試してみます。使用するソフトウェアは、データ収集用として用意されているFunction Pack「FP-SNS-DATALOG1」です。STWINは産業設備機器用のデータ・センシングに向いてますが、汎用的なデータ収集にも利用できます。STWINに搭載されているセンサは主に、加速度センサ、ジャイロセンサ、温湿度センサ、大気圧センサ、音響センサ(マイク)などです。今回は、有線(USBケーブル)接続にて行います。
また、機械学習用のデータ収集としても使えます。既に作成済みのucfファイル(Unico Configuration File *1)があればそれを読み込むことで機械学習判定もできます。
参考資料
ユーザ・マニュアル: UM2688(FP-SNS-DATALOG1のページ→ドキュメントより)
*1: センサ内レジスタに書き込む、ディシジョン・ツリー情報を含むコンフィギュレーション・ファイル。Unico-GUIツールで生成できます。
本シリーズ「IoT向け小型センサ・ノード開発キット「STWIN 」を使ってセンサデータ収集」の関連記事はこちら
① セットアップ
② スタンドアロンで実行
③ Configファイル
データ収集用のファームウェア(Function Pack)は現時点で以下4種類の評価ボード向けに用意されています。FP-SNS-DATALOGには“1”と“2”の2種類ありますが、“2”はOSの変更やAIとの連携のしやすさが付加されている程度で、基本的なセンサ・ロギング機能としてはほぼ同じです。またPCからコントロールする際に、“1”、“2”両方ともPythonスクリプトによるコマンド操作(CUI)が基本ですが、“2”はこれに加えてGUIでの操作が可能になっています。
Function Pack名 | センシング | Note | 評価ボード |
---|---|---|---|
FP-SNS-DATALOG1 | 加速度、地磁気、温湿度、音 | STEVAL-STWINKT1B(STWIN) STEVAL-MKSBOX1V1(SenosrTile.box) |
|
FP-SNS-DATALOG2 | 加速度、地磁気、温湿度、音 | AzureOS AI連携 GUI操作 |
STEVAL-STWINBX1(STWIN.box) STEVAL-MKSBOXPRO(SensorTile.box Pro) |
その他関連Function Pack(予知保全ソフトウェア)
FP-IND-PREDMNT1
STWINを初めて使う方は、最初にこちら記事情報を参考にしてセットアップしてください。
IoT向け小型センサ・ノード開発キット「STWIN」が予知保全に使える!? スマホ編
→ 「1.ハードウェアの準備」
その他参考動画(Youtube):
STM32CubeProgrammer を使用して STWIN で FP-SNS-DATALOG1 ファームウェアをプログラムする方法
STWIN platform for AI and industrial IoT
1.ハードウェアの準備
【用意するもの】
- STWINスタータキット:STEVAL-STWINKT1B
- USBケーブルx2(USB-Micro)
- パソコン (Windows7/10)
STWINに搭載されているセンサ
6軸モーション・センサ(*1): ISM330DHCX
加速度センサ: IIS3DWB
加速度センサ: IIS2DH
地磁気センサ: IIS2MDC
マイクロフォン(アナログ *2): IMP23ABSU
マイクロフォン(デジタル *2): IMP34DT05
温湿度センサ: HTS221
温度センサ: STTS751
大気圧センサ: LPS22HH
“I”ではじまるMEMSセンサ型番は、インダストリアル・グレードに対応する産業機器向け製品となっています(10年間 長期供給保証)。
* 1:慣性計測ユニット
IMU(Inertial Measurement Unit、互いに補完する複数の異なるセンサを集積したユニット)。STでは加速度センサ、ジャイロ・センサ、地磁気センサを集積した製品群として、iNEMOと呼んでいます。ISM330DHCXはiNEMOの中でもさらに機械学習コアを内蔵した、“加速度センサ + ジャイロセンサ”(3 + 3 = 6軸)搭載の、産業機器グレード製品。
* 2:アナログ / デジタル・マイク
MEMSマイクのタイプには“デジタル”と“アナログ”がありますが、これはインタフェースの違い(デジタル出力 or アナログ出力)で基本的に中身の構造は同じです。STWIN内には両方のマイクが搭載されています。また、アナログマイクであるIMP23ABSUの方は60Khz程度までの音声周波数を取り込めるので、超音波帯域のデータ収集用途に適しています。
搭載マイコン: STM32L4R9ZI
2.ファームウェアの準備
最初に、パソコンにSTM32CubeProgrammerがインストールされていることを確認ください。
動作用ファームウェアの入手(FP-SNS-DATALOG1)
プログラム・ファイルが入っているProjectファイルをダウンロードします。
ダウンロードはこちらから:FP-SNS-DATALOG1
ダウンロードしたファイルを解凍すると、そのまま統合開発環境用の作業フォルダができあがります。“Projects”フォルダから下っていくと今回使用するデモ用プログラム・ファイル(バイナリ・ファイル)が用意されているので、まずはファイルを確認します。
ファイル保管場所(例):
Drive:...\STM32CubeFunctionPack_DATALOG1_V1.4.0\Projects\STM32L4R9ZI-STWIN\Applications\HSDatalog\Binary
ファイル名: HSDatalog.bin
STWINにファームウェアを書き込み(パソコンと接続)
書き込み時のパソコンとの接続方法はこちらを参考にしてください。
IoT向け小型センサ・ノード開発キット「STWIN」が予知保全に使える!? スマホ編
→「STWINにファームウェアを書き込むための準備(パソコンと接続)」
準備完了しましたら、先ほど確認した「HSDatalog.bin」というバイナリ・ファイルを、この「STLINK_V3M」へドラッグ&ドロップ。これだけでSTM32 マイコンへのファームウェア書き込みは完了です。
「容量が足りなくて書き込めない」といったメッセージが出た場合、STLINK側のUSBコネクタを抜き差ししてみてください。
PC側の準備
ログ開始・終了の操作はWindowsのコマンドプロンプトから行います。またデータ確認の際、Python実行環境が必要になりますので、もし無い場合は、Anacondaなどをインストールしておいてください。
Anaconda
3.動作確認
FP-SNS-DATALOG1では大きく分けて2つの操作方法が用意されています。データの保存先としてはPC内か、STWIN本体内のSDカードになります。冒頭に述べたように、今回の記事ではUSB接続による方法を実行してみます。USBケーブル経由で、PC内ストレージにデータ保存します。
- PCへUSB経由保存(USBケーブル接続。コマンドやバッチファイルで操作)
- 内蔵SDカードへ保存(BLE接続、或いは本体スイッチによる操作)
3-1.セットアップ
そのままでもデータは取れますが、今回は模型用モーターを置いた台に設置してみました。モーターが回ると振動してSTWINに伝わる仕掛けになってます。振動や音データをログするイメージです。
3-2.コマンド実行
ダウンロードしたプロジェクトファイルにはいくつかツールが含まれています(→Utilitiesフォルダ)。データ取得用コマンドは、Windowsのコマンドプロンプトから入力します。
PCに接続後、コマンドプロンプトウインドウを開き、Utilities下の cli_example フォルダに移動します。
(例)
Drive:...\STM32CubeFunctionPack_DATALOG1_V1.4.0\Utilities\cli_example
操作はコマンドラインからバッチファイルを実行 (USB_DataLog_Run.bat) して進めます。
どのセンサデータを取り込むかなどの設定情報は、ファイル内で指定するjsonファイルで設定します。デフォルトでは“DeviceConfig.json”ファイルが指定されてますが、この.jsonファイル名を変更したり、パラメータを書きかえることでユーザ独自の設定を反映させることができます。DeviceConfig.jsonの内容や、その他exampleとして用意されているjsonファイル内容については、次回記事で解説します。
-tでデータ取得時間のタイムアウトを指定できます(単位: 秒。デフォルト = 100秒)。直接コマンド(cli_example.exe)を打ち込んでもOKですが、このバッチファイルをダブルクリックした方が楽です。
REM Welcome to HS_DataLog Command Line Interface example
REM Usage: cli_example.exe [-COMMAND [ARGS]]
REM Commands:
REM -h Show this help
REM -f <filename>: Device Configuration file (JSON)
REM -u <filename>: UCF Configuration file for MLC
REM -t <seconds>: Duration of the current acquisition (seconds)
set PATH=%PATH%;.\bin\
cli_example.exe -f ..\STWIN_config_examples\DeviceConfig.json -t 100
pause
デフォルト設定(DeviceConfig.json)でアクティブになっている(= “true”設定)センサは以下7つです。
- IIS3SWB = true(加速度)
- HTS221_Humid = true(湿度)
- IIS2MDC = true(地磁気)
- ISM330DHCX_GYRO = true(ジャイロ)
- LPS22HH_Press = true(大気圧)
- IMP23ABSU = true(音響)
- STTS751 = true(温度)
以下センサは“false”設定のため、非アクティブになっています。
HTS221_Temp = false
IIS2DH = false
IMP34DT05 = false
ISM330DHCX_ACC = false
ISM330DHCX_MLC = false
LPS22HH_Temp = false
DeviceConfig.jsonは、Utilitiesフォルダ下のSTWIN_config_examplesに入ってます。その他センサ設定用ファイルもここにあります。
このまま実行し、デフォルトのコンフィグ(DeviceConfig.json)を使ってデータ取得してみます。データ取得中、モータのスイッチをオンにして振動させた状態にします。10数秒程度経過したのち、ESCキーで終了。
cli_exampleフォルダ下に日付時間名フォルダが自動生成され、そこにセンサ・データが保存されました。
センザ名ごとに***.datというファイルが作られています。.DATファイルはRawデータの為そのままだと読むのは難しいので、変換作業が必要になります。
今回取得したのは16秒間弱のデータでしたが、データサイズの大きいものだとIMP23ABSU(アナログマイク)で約6MByte、IIS3DWB(加速度センサ ワイドバンド)で約2.5MByteでした。
それぞれのサンプリング・レート設定は192KHz、26.6KHzと高速なので、短時間でもデータ量はそこそこのサイズになります。STM32L4+はUSB FS(フルスピード)までのサポートで、HS(ハイスピード)には対応していませんが、十分データを取り込めています。ちなみに一番遅いSTTS751(温度センサ)は4Hzなので、400Byte程度でした。
3-3.データの確認
データ変換
.DATファイルをcsvフォーマットに変換するために、今回はpython scriptを使います(→Utilities\Python_SDKフォルダ内)。
pythonコマンドラインから、***.DATファイルが入ったフォルダを指定してpython scriptを実行します。
→_Exportedフォルダが作成され、そこにまとめてcsvファイル変換後のデータが保存されます。
データフォルダは通常cli_exampleフォルダ下に作られているので、path指定が必要です。面倒であれば作業フォルダであるPython_SDKフォルダにデータフォルダをコピーして進めると良いです。
コマンド: python hsdatalog_data_export.py [データフォルダ名] -s all
“s”スイッチの後に“all”指定することで全センサデータを変換します。
hsdatalog_data_export.pyのhelp
(base) D:\_MySTM32Cube3\STM32CubeFP_DATALOG1_V1.4.0\Utilities\Python_SDK>python hsdatalog_data_export.py -h
Usage: hsdatalog_data_export.py [OPTIONS] ACQ_FOLDER
Options:
-o, --output_folder TEXT Output folder (this will be created if it
doesn't exist)
-f, --file_format [CSV|TSV] Exported file format
-s, --sensor_name TEXT Sensor Name - use "all" to extract all active
sensors data, otherwise select a specific
sensor by name
-ss, --sample_start INTEGER Sample Start - Data conversion will start from
this sample
-se, --sample_end INTEGER Sample End - Data conversion will end up in
this sample
-r, --raw_data Uses Raw data (not multiplied by sensitivity)
-l, --labeled Includes annotations taken during acquisition
(if any) in the exported data
-d, --debug [DEBUG] Check for corrupted data and timestamps
-h, --help Show this message and exit.
-> Script execution examples:
python hsdatalog_data_export.py ..\STWIN_acquisition_examples\STWIN_00001
python hsdatalog_data_export.py ..\STWIN_acquisition_examples\STWIN_00001 -s all
python hsdatalog_data_export.py ..\STWIN_acquisition_examples\STWIN_00001 -s HTS221 -f TSV -r
python hsdatalog_data_export.py ..\STWIN_acquisition_examples\STWIN_00001 -o ..\STWIN_acquisition_examples\EXPORTED_DATA_FOLDER
エクセルで開いて確認
試しにIIS3DWB_ACC 加速度センサのファイルをエクセルで開いてみます。最初の500ポイント分のグラフを作成すると右図のようになりました。今回の16秒間分のデータでも約42万8千行ありましたので、開く際注意してください(エクセルの最大表示行数は約100万行)。
Python scriptでグラフ確認
グラフだけさくっと見たい場合のPython scriptも用意されています。同じくPython_SDKフォルダに入っているグラフ作成用のhsdatalog_plot.pyを実行します。pythonコマンドラインから、以下コマンドを入力。まずはIIS3DWBセンサだけ確認してみます。
コマンド: python hsdatalog_plot.py [データフォルダ名] -s IIS3DWB
“s”スイッチの後にセンサ名を指定することで該当データのグラフを表示します。"all"指定すると全データのグラフを一度に表示します。
hsdatalog_plot.pyのhelp
(base) D:\_MySTM32Cube3\STM32CubeFP_DATALOG1_V1.4.0\Utilities\Python_SDK>python hsdatalog_plot.py -h
Usage: hsdatalog_plot.py [OPTIONS] ACQ_FOLDER
Options:
-s, --sensor_name TEXT Sensor Name - use "all" to plot all active
sensors data, otherwise select a specific
sensor by name
-ss, --sample_start INTEGER Sample Start - Data plot will start from this
sample
-se, --sample_end INTEGER Sample End - Data plot will end up in this
sample
-r, --raw_data Uses Raw data (not multiplied by sensitivity)
-l, --labeled Plot data including information about
annotations taken during acquisition (if any)
-p, --subplots Multiple subplot for multi-dimensional sensors
-d, --debug [DEBUG] Check for corrupted data and timestamps
-h, --help Show this message and exit.
--help Show this message and exit.
-> Script execution examples:
python hsdatalog_plot.py ..\STWIN_acquisition_examples\STWIN_00001
python hsdatalog_plot.py ..\STWIN_acquisition_examples\STWIN_00001 -s all
python hsdatalog_plot.py ..\STWIN_acquisition_examples\STWIN_00002 -s IIS3DWB -ss 7 -se 13579
python hsdatalog_plot.py ..\STWIN_acquisition_examples\STWIN_00002 -s all -l
python hsdatalog_plot.py ..\STWIN_acquisition_examples\STWIN_00002 -l -p -r
以下のようなグラフウインドウが自動で開きます。ルーペアイコンもしくは十字矢印アイコンクリック後、画面内でのマウス操作でグラフの拡大や移動ができます。フロッピーディスク・アイコンをクリックで画像セーブできます。
例1: IIS3DWB 加速度センサ
アイコン | 機能 |
---|---|
ホーム | 最初の表示に戻す |
← / → | UNDO / Forward View |
十字矢印 | グラフ画面内を左ドラッグで表示範囲移動 |
ルーペ | グラフ画面内を左ドラッグで拡大範囲指定 → 拡大表示 |
コントロール | ウインドウ内グラフサイズ調整(境界線位置) |
グラフオプション | グラフ表示範囲 ・ スケーリング ・ 色などの変更(拡大 ・ Linear/Log) |
フロッピーディスク | 画像セーブ(.pdf/.jpeg/.pngなど) |
今回取得したデータのうち、マイクデータをエクセルで開くと最大表示行数の仕様によりデータ全てを見ることはできませんでした(IMP23ABSU_MIC.csv → 300万行以上)。python scriptを使うと問題なく表示できます。マウス操作以外に、オプション(Figure options)による数値入力でもグラフ表示範囲を変更できます。
例2: IMP23ABSU マイクロフォン
表示設定 X-Aix: Min=1, Max=1.001(→ 1秒~1.001秒間を表示)
以上、今回はデータの取得と中身の確認までできました。続きは次回へ。