稼働中

マイクロビット(c_12)AHT10 用モジュール

AHT10 (I2C) c_aht10_00.py

AHT10は温度、湿度を測定できるセンサーです。※詳細はデータシートを参照ください。
AHT10センサーモジュールで使う自作の’c_aht10_00.py’を作成しました。使い方だけを記載します。(※記事e_046を元にクラスにしました。)
‘c_aht10_00.py’は末尾にあります。使い方だけを記載します。

使い方

ファイル転送
micro:bitへ’c_aht10_00.py’を送った後でimportして使います。micro:bitに直接ファイルをアップロード出来ない場合(Thonny 3.1.12など)は、microfsなどを使ってアップロードします。
※microfsについては、当サイト内のこちらを参照ください。
※c_aht10_00.pyの末尾に、使用例(c_aht10_ex.py)の## example以降をコピペ追加しても動作確認できます。

メソッド
‘c_aht10’をimportすると「aht_init, aht_calc, aht_rest, aht_stat, aht_trig」のメソッドが使えるようになります。
AHT10()で初期化します。
(01)aht_init()
初期化コマンドを送信します。初期化されます。
(02)aht_calc()
温度、湿度データを変換して返します。計算をして表示します。
(03)aht_reset()
リセットコマンドを送信します。ソフトリセットされます。
(04)aht_stat()
STATEの状態を返します。bus,mod,cal
(05)aht_trig()
トリガメジャーコマンドを送信します。

使用例

湿度、温度を測定しました。


c_aht10_ex.py
from microbit import *
from c_aht10_00 import AHT10
i2c.init()

a=AHT10()       # instance
a.aht_init()    # init
a.aht_rest()    # data reset
a.aht_trig()    # get data

humi,temp=a.aht_calc()      # read-data >> T,RH%
print('RH%=',humi,'TC=',temp)

bus,mod,cal=a.aht_stat()    # read-data >> state
print('bus,mod,cal=',bus,mod,cal)

実行結果


>>> %Run c_aht10_ex.py
RH%= 50.7193 TC= 25.1015     # 湿度、温度
bus,mod,cal= 0 0 1           # STATE表示
>>>

AHT10 モジュール


c_aht10_00.py
# AHT10 温度、湿度センサーモジュール
from microbit import i2c
class AHT10:
    # AHT10 Device
    def __init__(self):
        # AHT10 slave address hex(56)=0x38
        self.addr=0x38

    def aht_init(self):
        # initialize 0xe1  power on 20msec~
        sleep(100)
        buf=bytearray(1)
        buf[0]=0xe1
        i2c.write(self.addr,buf)
        sleep(100)

    def aht_reset(self):
        # soft reset 0xba  20msec~
        buf=bytearray(1)
        buf[0]=0xba
        i2c.write(self.addr,buf)
        sleep(100)

    # triger get and store data to register
    def aht_trig(self):
        # trigger mesure 0xac 0x33 0x00 75msec~
        buf=bytearray(3)
        buf[0]=0xac
        buf[1]=0x33
        buf[2]=0x00
        i2c.write(self.addr,buf)
        sleep(100)             # 無いとbusy 75msec~
        return

    # read-data  6byte
    def r_reg(self):
        # read register State(8)hum(20)temp(20) 6bytes
        dat=i2c.read(self.addr,6)
        return dat

    # dat[0](state)
    # dat[1]dat[2]dat[3][4:7](humidity)
    # dat[3][0:3]dat[4]rdat[5](temperature)

    def aht_calc(self):
        dat=self.r_reg()
        h_dat= ((dat[1]<<16)|(dat[2]<<8)|(dat[3])) >>4
        t_dat= ((dat[3] &0x0f)<<16)|(dat[4]<<8)| dat[5]
        self.humi=(h_dat/2**20)*100     #  %
        self.temp=(t_dat/2**20)*200-50  #  ℃
        return self.humi,self.temp
        
    def aht_stat(self):
        # state bit
        #dat=aht_trig()
        dat=self.r_reg()
        self.bus= (0x80 & dat[0])>>7
        self.mod= (0x60 & dat[0])>>5
        self.cal= (0x08 & dat[0])>>3
        return self.bus, self.mod, self.cal