マイクロビット(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