2023/12/03更新:電源管理ICが変更されたM5Stack Core2 "V1.1"が発売されました。本記事で紹介するコードはV1.1に対応しておりません。コードをアップロードすると再起動を繰り返す状態となり、ジャンパーワイヤーを使用した復旧作業が必要となりますので、V1.1には本コードをアップロードしないでください。
この記事では超音波風速計ULSA M5Bに「SDカードログ機能」を追加するM5Stack Core2用のArduinoデモスケッチをご紹介します。
ULSA M5BにはM5Stack Core2を直接スタッキングすることができ、M5StackをプログラミングすることによってmicroSDカード(M5Stack社は16GB以下を推奨)に測定値を記録することが可能になります。測定データはCSV形式でSDカードのルート直下に保存されます。
Index
microSDカードの選定
M5Stack社ではM5Stack Core2の適用microSDカードについて、16GB以下と指定しています。ネット上には32GBのSDカードでも問題なく使用できたというレビューがありますが、不安な場合は16GB以下のmicroSDカードを用意ください。
また、SDカードはFAT32でフォーマットしてください。
タイムスタンプの付与(Wi-FiでNTPサーバーに接続する)
SDカードログ機能を実装する上で考慮する必要があるのは、「測定データに対してどうやってタイムスタンプを与えるか」というものです。測定データに時刻情報がなければ、データを保存できたとしても、「いつ変化」があったのか突き合わせることが難しくなります。時刻情報をスタンドアローンで取得する方法には、GNSS(全地球航法衛星システム)やJJY(標準電波)などの追加ハードウェアが必要なものがありますが、今回はM5StackのWi-Fi接続機能を使用してNTP(Network Time Protocol)サーバーから時刻同期を行うようにします。
M5StackでWi-Fi(2.4GHz)アクセスポイントに接続するには
M5StackでWi-Fiアクセスポイントに接続するには何らかの方法でWi-FiのSSIDとパスワードを転送する必要があります。指定方法はいくつかありますが、今回はArduino Web EditorのSecretタブ機能を利用して、アクセスポイントの情報をM5Stackに転送します。
Secretタブはプログラム中で書かれた変数の中身を隠蔽することができる機能で、特にArduinoスケッチを多人数にシェアしつつ、ユーザー個別の環境に合わせて特定の情報入力(例:Wi-Fi接続情報やAPI keyなど)を簡単に行わせたい場面で活用できる機能です。個別環境で秘密情報を記入したとしても、その人以外は情報を閲覧できないようになっています。
今回はWi-Fi接続のためにSSIDとパスワードを転送する必要があるので、ArduinoスケッチをM5Stackに書き込む前にSecretタブに移動し、既存のWi-FiアクセスポイントのSSIDとパスワードを記入します。
![](https://strvsn.net/wp-instl/wp-content/uploads/2023/05/image-1.png)
なお、M5Stackは2.4GHzのアクセスポイントのみに対応しており、5GHzには対応していません。このほか、2.4GHz/5GHzの共用SSIDの場合でも正しく接続できない可能性があります。Wi-Fiルーターの設定を確認し適切なSSIDを指定してください。
スマートフォンのテザリングも利用可能です(iOSで確認済み)。既存のWi-Fiアクセスポイントが利用できない場合に使用することができます。
(2023/08/08 追記)
iPhoneでテザリングを使用する場合は、互換性を優先を「オン」にしてください。2.4GHz帯のみのアクセスポイントが作成されます。
![](https://strvsn.net/wp-instl/wp-content/uploads/2023/08/IMG_4780-733x1024.png)
Wi-Fiに接続できない場合
計測するフィールドでWi-Fiに接続できない場合でも、一度Wi-Fiに接続し、NTPサーバーから時刻同期を行っていれば、M5Stackに内蔵されたRTC(Real-Time Clock)の時刻情報を使用してタイムスタンプが計測データに付与されます。RTCにはバックアップ電池が接続されており、一定期間日時を保持することが可能です。
ただし、時刻精度については内蔵RTCのクロック精度に依存し徐々にずれていきますので(一般的には月差十数秒~数分程度)、計測の前に予めNTPサーバー経由で時刻同期しておくことをおすすめします。
Arduinoスケッチ
SDログ機能を追加したArduinoスケッチを以下にシェアします。"OPEN CODE"からインポートしてください。
なお、このArduinoスケッチは以下の記事で紹介したデモファーム用のArduinoスケッチをベースにSDカードロギング機能を追加改修したものになります。
書き込みにはブラウザ上で完結するArduino Web Editorを推奨します。書き込み方法の詳細については以下の記事を参考にしてください。
埋め込みブロックが機能していない場合は以下のリンクからアクセスしてください
ULSA_M5B_SD_Sample_020
【注意】長時間計測時の電源接続について
長時間計測を行う場合にUSBケーブルを接続してM5Stackに給電しながら計測を行う事ができますが、このときの給電はM5StackのUSB TypeC端子経由ではなく、ULSA M5B本体のmicroUSB端子から行う様にしてください。M5Stack充電動作時にパワーマネジメントICが発する電源ノイズが、ULSAの計測動作に影響を与えることを確認しており、間違った過大な風速を出力する可能性があります。また、M5Stack側にUSBケーブルが接続された状態は空力的にも推奨できませんので、microB端子から給電を行うようにしてください。
注意・免責事項
- 使用される開発環境やハードウェアのバージョン等の様々な要因により、意図した通りに動作しない場合があります。
特にM5Stackの開発環境はバージョンアップの速度が早く、ファームウェアの組み合わせによって動作が異なることがよくあります。記事でご紹介している内容・開発環境に沿って開発いただくことで動作トラブルを減らすことができます。 - 本記事で紹介するスケッチ(ソースコード)はあくまで参考であり、動作保証はできませんのでご了承ください。またスケッチを利用したことに関連して生じたいかなるトラブル・損害・損失に対してストラトビジョンは一切の責任を負いません。
- 本製品によって生ずるいかなるトラブル・損害・損失に対してストラトビジョンは一切の責任を負いません。
- ULSAで取得したデータを「気象観測値」として外部に公開すると気象業務法に抵触するおそれがあります。気象観測業務ではない用途や私的な用途に限ったデータの活用をお願いします。