M5StickCでSHT31センサーを使う。

スイッチサイエンスからM5StickCが販売された。ディスプレーや各種センサー等が内蔵され何かと便利そうだったので購入。

M5StickC
M5StickC

なによりこのサイズ感がとても良いのだが何か実験するにも必要なものが一通り用意されており必要十分と言った感じがするし価格的にもお買い得感はあるのでこれはちょ~お勧めかもしれない。

とりあえず、製造元の製品ドキュメントを参考にArduinoをセットアップしサンプルを実行してみたところ、M5StickCライブラリがコンパイルエラーになりサンプルが何も実行できなかったりする...しょうがないのでライブラリのエラー箇所を適当に修正し、なんとかサンプルは実行できるようにはなったが、M5StickCライブラリ大丈夫なのか?とその品質を疑ってしまった。まぁ、ないよりはあったほうが良いことは確かなのではあるが...(-_-;)

次にSHT31センサーライブラリを探してみた。
GROVE - 温湿度センサ(SHT31) v1.0
GROVE – 温湿度センサ(SHT31) v1.0

GROVEや秋月電子のライブラリを見つけたが、とりあえずGROVEのSHT31ライブラリのコードを調べてみることに...
その結果、温度と湿度の両方を同時取得できるのにそれぞれ2回も通信しないといけないことや温湿度データ取得に50ms以上かかるというのは疑問符が残る。秋月電子のほうは温湿度データの同時取得に関しては問題ないが温湿度データ取得に300ms以上かかるのが痛い。

ということでGROVEのライブラリを参考に改良してみた。

改良点は、

・ArduinoのWireライブラリの互換ライブラリ対応
・I2C活線抜去対応
・計測待ち時間の除去。
・非力CPU対応(データ型をfloat型からuint16_t型へ変更。小数部対応のためデータは16倍した値を返す)

などであるが、ほぼ全てを書き換えてしまったのでGROVEのものとは全く別物となってしまった感がある。

【サンプル・スケッチ実行中の様子】

【更新情報】
2020-02-20
・ライセンス変更。
・よりシンプルなコードに改良。
・begin()内で行っていたWireの初期化を削除。Wireの初期化はアプリ側で行うこと。

2019-06-25
・温度データ型が符号なしになっていた点を修正。
・begin()の引数にI2Cクロック指定を追加。規定値は400KHzとした。
・read()の呼び出しタイミングの制約を無くした。
・handle()呼び出しタイミングによっては温度データ取得に失敗する点を修正。

2019-06-20
handle()のデータ取得タイミングを改良。

2019-06-18
begin()の引数に温湿度データ取得間隔ms(省略値は1000ms)を追加。
getTempratureC()をtempratureC()に名前変更。
getTempratureF()をtempratureF()に名前変更。
getHumidity()をhumidity()に名前変更。
read(), error()メソッドを追加。
handle()をよりシンプルなコードにするため温湿度データ取得タイミングを変更。
非同期取得(測定待ち時間なし)はhandle()、即時取得(測定待ち時間有り)はread()を使う。

【サンプル・スケッチ】

【SHT3Xライブラリ】