Si7021温湿度センサ

 今回使用した温湿度センサは「Si7021搭載 温湿度センサモジュール」です。一般的にセンサには、アナログ値を出力するアナログセンサと、デジタルデータを出力するデジタルセンサの2種類あります。M5Stackに搭載されているESP32には、ADコンバータがあるため、アナログセンサでも構わないのですが、デジタルデータに変換する際に補正をかける必要があり面倒なので、今回はあらかじめデジタルデータを出力するSi7021温湿度センサを使っていきます。他のデジタル温湿度センサとしては「BME280搭載 温湿度・気圧モジュール」等がありますが、今回は比較的センサへのアクセス方法が簡単なSi7021を使っていこうと思います。

Si7021温湿度センサ

センサとマイコンの通信方式

 デジタルセンサとマイコンとの通信には、I2C通信とSPI通信の2つの方式がよく使われます。
 I2C通信では、コマンド(センサデータの読み出し)を発行して通信を主導する「マスタデバイス」とそのコマンドに応答する(センサデータを渡す)「スレーブデバイス」の2つを使用して通信を行います。マイコンとセンサをつなぐ場合、マイコンがマスタデバイス、センサがスレーブデバイスとなります。マスタデバイスとスレーブデバイスの間には、SDA(シリアルデータ)とSCL(シリアルクロック)と呼ばれる2本の信号線があります。
 SPI通信にもマスタデバイスとスレーブデバイスがコマンドとデータをやり取りします。I2Cと異なるのは信号線が3本あることで、それぞれMISO(Master In Slave Out)、MOSI(Master Out Slave In)、SCK(シリアルクロック)と呼ばれます。SPI通信はI2C通信よりも高速な通信が可能となりますが、スレーブデバイスが複数になるにつれ、回路が複雑になることが欠点です。
 今回使用するSi7021はI2C通信でマイコンと通信を行います

回路の組み立て

 M5StackとSi7021センサの接続は以下のようになります。またSi7021は、モジュール上にプルアップ抵抗がついているので、外付けのプルアップ抵抗は必要ありません。

M5StackSi7021
3V3+(3.3V)
G-(GND)
21(SDA)DA(SDA)
22(SCL)CL(SCL)
M5StackとSi7021の接続

ライブラリのインストール

 Si7021をM5Stackで動作させるためには、センサモジュールを開発したAdafruit社が提供しているライブラリをインストールすると便利です。Platform IOの「Libraries」で検索欄から「adafruit si7021」と入力すると下記に示す「Adafruit Si7021 Library by Adafruit」が出でくるのでクリックし、「Add to project」で自分で作成したプロジェクトにインストールすることができます。

サンプルコード

 M5Stackで実際にセンサから温湿度データを取るためのサンプルコードを下記に記載しました。通常、I2Cでセンサと通信するには、Arduinoの「Wire」というライブラリを使いますが、先程インストールした「Adafruit Si7021 Library」の中には、Wireの代わりにセンサとのアクセスが簡単になるライブラリが含まれているため、Wireライブラリをインクルードする必要はありません。

#include <M5Stack.h>
#include "Adafruit_Si7021.h"

Adafruit_Si7021 sensor = Adafruit_Si7021();

void setup() {
  M5.begin();

  if(!sensor.begin()){
    Serial.println("Did not find Si7021 sensor!");
    while(true){
      delay(0);
    }
  }
  M5.Lcd.setTextSize(3);
  // put your setup code here, to run once:

}

void loop() {
  float temp = sensor.readTemperature();
  float humid = sensor.readHumidity();

  M5.Lcd.setCursor(40,80);
  M5.Lcd.print("Temp: ");
  M5.Lcd.print(temp, 1);
  M5.Lcd.print("'C");
  M5.Lcd.setCursor(40,140);
  M5.Lcd.print("Humid: ");
  M5.Lcd.print(humid,1);
  M5.Lcd.print("%");
  delay(1000);
  // put your main code here, to run repeatedly:

}

出力結果

 上記サンプルコードを実行すると以下のような結果になります。

M5Stackで温湿度を取得してみてのまとめ

 今回はIoTデバイス制作の前段階として、M5Stackで温湿度を取得してみました。Si7021温湿度センサは、デジタルセンサでプルアップ抵抗内蔵型の比較的簡便な温湿度センサであり、I2C通信でM5Stackとやり取りが可能なセンサでした。次は、この取得した温湿度データをクラウドに送ってデータを可視化させるための前段階として、M5StackでWebサーバーを動かしてみようと思います。