こんにちは、ENGかぴです。
トワイライトはWire(I2C通信)を使用することでSHT35から温湿度データを取得することができます。MWSTAGEではセンサーデバイスライブラリであるSHT3xクラスの関数をコールするだけでSHT35のデータを取得できます。
SHT3xクラスを使用して温湿度データを取得しMONOSTICKに無線通信して動作確認をしています。温湿度センサーはSHT35-DISモジュール(秋月電子)を使用しています。
SHT35-DISのデータを取得する
SHT35-DISはSENSIRION社の高精度温湿度センサーです。マイコンとの通信方式はI2Cであり測定レンジが-40℃から+125℃と広いのが特徴です。SHT35のコマンドの指定の方法やCRC8の計算方法については下記にまとめています。
PICマイコン(PIC16F1827)でSHT35のデータを取得
センサー・デバイス(SNS)のSHT3Xクラスを使用する
MWX Libraryのセンサーデバイス(SNS)においてSHT3x-温湿度センサー用のクラスが実装されています。関数の使用方法などの詳細はモノワイヤレス社のHPに公開されています。
モノワイヤレス社ーセンサー・デバイス(SNS) SHT3x-温湿度センサー
これらの関数を組み込むことで簡単にSHT35からデータを取得することができます。
PR:
わからないを放置せず、あなたにあったスキルを身に着けるコツを教える テックジムPython入門講座の申込
SHT35からデータを取得する
SHT3xクラスを使用するために専用のヘッダーとオブジェクトを宣言する必要があります。
#include <SNS_SHT3X>
SNS_SHT3X sns_sht3x;
void setup() {
Wire.begin(); //I2Cを有効にする
sns_sht3x.setup(0x45); //スレーブアドレスを指定する
}
SHT3xの通信方式はI2Cであるためsetup()関数を使用する前にWireを有効にする必要があります。setup()関数に引数を指定しない場合は初期値の0x44がスレーブアドレスとして指定されます。SHT35のスレーブアドレスを0x45する場合は引数に0x45を指定します。
//測定を開始する場合
sns_sht3x.begin();
//経過時間を通知(測定完了を通知しないセンサーの場合)
sns_sht3x.process_ev(20); //20ms経過を通知
測定を開始はbegin()関数を使用します。測定条件としてシングルショットモード(繰り返し精度レベル:高)・クロックストレッチ設定を無効とするコマンドコードである0x2400が送出されます。
測定完了をavailable()によって確認しますが、SHT3xクラスでは経過時間を通知しなければavaiable()がtrueにならないためprocess_ev()で時間経過を通知しています。SHT35の測定時間は数十msなので関数の発行から20ms後に測定完了を通知します。
if(sns_sht3x.available()){ //測定完了したか
getsensor.temp = sns_sht3x.get_temp_cent();
getsensor.humi = sns_sht3x.get_humid_per_dmil();
}
測定結果の取得は温度データの場合get_temp()関数、湿度データの場合get_humid()関数を使用します。100倍値を取得したい場合はget_temp_cent()及びget_humid_per_dmil()の関数を使用します。ZigBee通信する際は100倍値を送信した方がデータ量が少なくできるため有効です。
PR:わからないを放置せず、あなたにあったスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
SHT35で取得したデータを無線通信する例

トワイライトの低消費電流を活かすためにスリープしながらSHT35の測定を行います。センサー情報を取得しながら無線通信を行うサンプルアクトの公開されています。
モノワイヤレス社ーMWX Library Slp_Wk_and_Tx
Slp_Wk_and_txアクトの機能を引用しながらSHT35からデータを取得し無線通信を行います。手順は以下の通りです。
- スリープする
- ウェイクアップしたときSHT35測定を開始する(begin()関数)
- ナップ(100ms)する(ナップ中にSHT35の測定完了している)
- ウェイクアップする
- SHT35からデータを取得
- 測定結果を無線通信する
- 1に戻って繰り返す
2.のウェイクアップした瞬間にSHT35の測定コマンドを送出してナップすることでSHT35の測定時にトワイライトの消費電流を押さえることができます。SHT35の測定は数十msで完了するためナップからウェイクアップしたときにはデータを取得することができます。
if (!sns_sht3x.available()) {
sns_sht3x.process_ev(1);
//napにより100ms以上経過しているため1をセット0ではavailableとならない
}
動作確認
トワイライトのSHT3xクラスを使用して測定結果を無線通信で送信します。無線通信データの確認はMONOSTICKで行います。MONOSTICKを親機とし、子機でSHT35のデータを取得し無線通信します。
SHT35のデータ取得とは関係性はありませんが動作確認用にEEPROMを使用して子機の番号を変更できるようにしています。
動作確認用の回路

SHT35モジュールにはプルアップ抵抗が実装されているためプルアップ抵抗は必要ありません。スリープとナップを使用し消費電流を押さえながらSHT35のデータを取得して無線通信を行います。
SW1はEEPROMの動作確認用でlogical_idをランダム値を利用して書き換えするために使用します。SW1を長押しするとEEPROMにデータを書き込みます。
EEPROMにランダム値を書き込むとトワイライトをリスタートさせます。無線通信が開始するとMONOSTICK上に子機の番号を表示するためlogical_idが変更されていることが確認できます。
動作結果

子機はSHT35から取得した結果をシリアルモニタで表示しています。親機は子機の受信したデータを表示しています。5秒間スリープして測定する動作を繰り返しているため5秒おきに親機の表示が追加されています。
親機の179の表示は子機のlogical_idでありSW1を押してEEPROMの値が変更されると表示が変更されていることも確認できています。
ソースコード全体
ソースコードは記事作成時点において動作確認できていますが、使用しているライブラリの更新により動作が保証できなくなる可能性があります。また、ソースコードを使用したことによって生じた不利益などの一切の責任を負いかねます。参考資料としてお使いください。
リンクからZIPファイル形式のファイルをダウンロードし、任意の場所に展開していただくとテキストファイルが生成されます。
TWELITEのソースコードはMWSTAGEの環境でアクトのソースファイルにコピーすると使用できます。
関連リンク
トワイライトを太陽光パネルで動作させたことやMWSTAGEの環境でソフト開発して無線通信したことなどについてまとめています。
トワイライト(TWELITE)のソフト開発と無線通信でできること
PR:わからないを放置せず、あなたにあった最低限のスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
最後まで、読んでいただきありがとうございました。
available()内の処理で測定完了が確認できなかった点は少し残念ですが、未定義であるsns_stat()が実装されればこれらの問題は解決しそうです。