ショップ

製品概要

DHT11やDHT22などの気温・湿度センサーのメーカーのASAIRの製品で、I2CインターフェースでMCUに接続して使用します。

私自身は温度・湿度センサーとして、BOSCHのBME280を主に使用していましたが、半導体不足で大幅に値段が高騰したり、廉価版のBMP280では湿度が測れなかったりでいろいろと困りました。そのような際に、AHT21のようなコスト的にも魅力的な選択肢が増えることはとても助かります。

仕様

AHT20の改良型で、以下のような仕様です。

  • 動作電圧:2.0V-5.5V
  • 気温計測範囲:-40~+120°C (確度(accuracy) ±0.3°C)
  • 湿度計測範囲:0~100%RH (確度(accuracy) ±2%)
  • インターフェース:I2C
  • 製品紹介:https://www.aosong.com/en/products-60.html

I2Cに接続するセンサー類は3.3V仕様のものが多いのですが、5Vでも動作するAHT21は、Arduino UNOなどでも使用できるので重宝しそうです。

ライブラリ等

インターネット上で検索すると、AHT21用のいくつかのライブラリが既に提供されているようですが、Arduino IDEのライブラリマネージャで検索すると、現時点ではAHT21用のライブラリは見つかりませんが、AHT20用のものはいくつかあるようです。

AHT20とAHT21のデータシートを見比べてみると、ざっと見たところでは、I2Cインターフェースのプロトコルや、温度や湿度の算出式は共通の様です。そこで、ライブラリマネージャで手軽に導入できるAHT20用のライブラリで、AHT21が使用できるか確認してみました。

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

ライブラリマネージャの検索フィルタに[AHT2] を入力して絞り込むと、AHT20用のライブラリが3個ほど列挙されます。ここでは、[Adafruit AHTX0 by Adafruit] とタイトルが付けられているライブラリのインストールボタンを選択してインストールします。

基本的なライブラリの他に、スケッチ例などで使用するOLEDディスプレイ用などのライブラリのインストールも含めて行うか聞いてくると思いますが、すべてインストールしておくとよいでしょう。

ライブラリの基本的な使い方は、スケッチ例の [adafruit_aht_test] を見ると簡単にわかります。

スケッチ例

AHT21で計測した気温と湿度をOLEDディスプレイに表示するスケッチを示します。

スケッチで利用したのはAHT20用のライブラリですので、もう少し確認と検証をする必要はありますが、温度湿度共に正しく表示されているようです。

#include <U8x8lib.h>
#include <Adafruit_AHTX0.h>

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE);
Adafruit_AHTX0 aht;

void setup() {
  u8x8.begin();
  u8x8.setFont(u8x8_font_7x14B_1x2_r);
  u8x8.clearDisplay();

  aht.begin(); // AHT21の初期化
}

char tstr[20] ;

void loop() {
  sensors_event_t humidity, temp;

  aht.getEvent(&humidity, &temp); // AHT21から湿度と温度の取得

  dtostrf(temp.temperature, 4, 1, tstr);  // sprintf は実数の変換ができない
  u8x8.draw1x2String(0, 0, tstr);
  sprintf(tstr, "'C %2d%%", (int)humidity.relative_humidity);
  u8x8.draw1x2String(4, 0, tstr);

  delay(1000);
}