使用されている湿度センサー「Sensirion SHT21」は、温度とthe 湿度の2種類のデータが取得できます。

SensorTagの 湿度センサーへのデータアクセス

ハンドルを用いたSensorTagの 湿度センサー「Sensirion SHT21」(U6)への問い合わせは、次のテーブルに従います。

SensorTagの湿度センサー(U6)への問い合わせ
Type UUID Handle Read/Write Format
<Data> F000AA21 * 0×38 Read/Notify TempLSB TempMSB HumLSB HumMSB (4 bytes)
<Data Notification> 0×39 R/W 2 bytes
<Configuration> F000AA22 * 0×3c R/W 1 byte

湿度センサーデータの湿度への変換式

Tempは温度で、Humは湿度を示します。
湿度センサー「Sensirion SHT21」から入力したデータ(Handle:0x38)は、二つの符号なし2バイト整数で示します。次の計算式により湿度と温度に変換します。h1,2は温度データで、h3,4は湿度データを示します。

次に湿度に変換する計算式を示します。計算した結果は0-100の間の値を取ります。100以上の値を取る場合は、その値は無視します。

湿度センサー変換式

次に温度に変換する計算式を示します。単位は「°C」となります。

温度データへの変換式

湿度センサーデータ変換のプログラム

上記の湿度センサーの変換式をjava言語とc言語でコード化した例を示します。

java言語で記述すると次のようになります。

	/* Conversion algorithm, temperature */

	private double calcHumTmp(int rawT)
	{
	  double v;

	  //-- calculate temperature [deg C] --
	  v = -46.85 + 175.72/65536 *(double)rawT;

	  return v;
	}

	/*  Conversion algorithm, humidity */

	private double  calcHumRel(int rawH)
	{
	  double v;

	  rawH &= ~0x0003; // clear bits [1..0] (status bits)
	  //-- calculate relative humidity [%RH] --
	  v = -6.0 + 125.0/65536 * (double)rawH; // RH= -6 + 125 * SRH/2^16

	  return v;
	}

C言語で記述すると次のようになります。

/* Conversion algorithm, temperature */

double calcHumTmp(uint16 rawT)
{
  double v;

  //-- calculate temperature [deg C] --
  v = -46.85 + 175.72/65536 *(double)(qint16)rawT;

  return v;
}

/*  Conversion algorithm, humidity */

double calcHumRel(uint16 rawH)
{
  double v;

  rawH &= ~0x0003; // clear bits [1..0] (status bits)
  //-- calculate relative humidity [%RH] --
  v = -6.0 + 125.0/65536 * (double)rawH; // RH= -6 + 125 * SRH/2^16

  return v;
}