ショップ

製品概要

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

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

仕様

AHT20とAHT21はほぼ同一ですが、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などでも使用できるので重宝しそうです。


Arduinoでの利用

ライブラリ等

インターネット上で検索すると、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);
}

MicroPythonでの利用

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

温度センサーAHT21で使用するドライバは、[ahtx0]が使用できます。Thonnyのパッケージ管理システムで確認すると、[micropython-ahtx0]として登録されています。本来であれば、Thonnyのパッケージ管理システムを利用して導入できるはずですが、少なくとも現時点で私のところではうまく導入できません。(ドライバのメタ情報だけ導入されて、ドライバ本体が導入されない)そこで、導入されるはずのドライバを下記のページから取得して、開発ボードに登録してください。

プログラム例

OLEDディスプレイに気温・湿度センサーAHT21で得られた気温と湿度を表示するプログラム例です。

from machine import Pin, I2C
import time
from ssd1306 import SSD1306_I2C
from ahtx0 import AHT20

i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=400000) # ESP32-S3, ESP32-C3
# i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000) # ESP32
oled = SSD1306_I2C(128, 64, i2c) # OLEDディスプレイ
aht21 = AHT20(i2c) # 温度・湿度センサー

while True:
    oled.fill(0)
    oled.text("TEMP: " + str(round(aht21.temperature,1)),0,0,1)
    oled.text("HUM: " + str(round(aht21.relative_humidity,1)),0,16,1)
    oled.show()
    time.sleep_ms(1000)

# CTRL-Cで終了

関連製品

AHT21をはじめセンサーや表示装置などを搭載したボードです。