Raspberry Pi Pico(s_06)AHT10 用モジュール
AHT10 AHT10c.py
AHT10はデジタル温湿度センサーです。※詳細はAHT10のデータシートを参照ください。
(詳細は記事d_08を参考にしてください。)
AHT10センサーモジュールで使う自作の’AHT10c.py’を作成しました。記事d_08を元に作成しています。
使い方だけを記載します。’AHT10c.py’は末尾にあります。
使い方
■ファイル転送
Raspberry Pi Picoへ’AHT10c.py’を送った後でimportして使います。
※AHT10c.pyの末尾に、使用例(AHT10_ex.py)の## example以降をコピペ追加しても動作確認できます。
■メソッド
‘AHT10c’をimportすると「aht_init、aht_rest、aht_trig、aht_calc、aht_stat、r_reg」のメソッドが使えるようになります。
AHT10(AHT10(I2C_num,sda_pin)で初期化します。
I2C_num:Raspberry Pi PicoのI2C番号の0,1
sda_pin:使用するI2C_numのSDAで使うGPIO番号(SCLはSDA_GP番号+1で算出)
(01)aht_init()
AHT10を初期化します。初期化コマンド’0xe1’を送ります。
(02)aht_rest()
AHT10をソフトリセットします。初期化コマンド’0xba’を送ります。
(03)aht_trig()
温湿度を測定します。トリガコマンド’0xac’を送ります。
(04)aht_calc()
温湿度の計算して、温度、湿度の値を返します。
(05)aht_stat()
State bitを返します。Busy, Mode, CALの状態を返します。
(06)r_reg()
読み出した6bytesアレイデータを返します。
使用例
AHT10で温湿度を測定します。
AHT10c_ex.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#from machine import I2C,Pin
#import time
from AHT10c import AHT10
# AHT10 Temperature and Humidity Sensor
## exapmle -----------------------------------------
a=AHT10(1,10) # instance (I2C_num,sda)
a.aht_init() # AHT10 initialization
a.aht_rest() # soft-reset
a.aht_trig() # trigger measurement
humi,temp = a.aht_calc() # 温湿度 >> T,RH%
print('RH%=',humi,'TC=',temp)
bus,mod,cal=a.aht_stat() # state-data Bit[3]calibrated='1'
print('bus,mod,cal=',bus,mod,cal)
print(a.r_reg()) # 6bytearray
a.aht_rest() # softreset
print(a.r_reg()) # 6bytearray
実行結果
実行すると以下のようになりました。※Thonnyのshellに表示されます。
>>> %Run -c $EDITOR_CONTENT
RH%= 65.13443 TC= 23.27271 # 湿度、温度
bus,mod,cal= 0 0 1 # Free, NOR mode, calibrated
b'\x1c\xa6\xbe\x85\xdc\xa0' # 6byteデータ
b'\x18\x00\x00\x00\x00\x00' # 6byteデータ(softreset後)
>>>
AHT10モジュール用
AHT10c.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import I2C,Pin
import time
class AHT10:
def __init__(self,num,sda):
# AHT10 Temperature and Humidity Sensor
# slave address hex(56)='0x38'
self.addr=0x38
self.i2c=I2C(num, scl=Pin(sda+1), sda=Pin(sda), freq=400_000)
def aht_init(self):
# initialize 0xe1 power on 20msec~
time.sleep_ms(100)
buf=bytearray(1)
buf[0]=0xe1
self.i2c.writeto(self.addr,buf)
time.sleep_ms(100)
def aht_rest(self):
# soft reset 0xba 20msec~
buf=bytearray(1)
buf[0]=0xba
self.i2c.writeto(self.addr,buf)
time.sleep_ms(100)
def aht_trig(self):
# trigger mesure 0xac 0x33 0x00 75msec~
buf=bytearray(3)
buf[0]=0xac
buf[1]=0x33
buf[2]=0x00
self.i2c.writeto(self.addr,buf)
time.sleep_ms(100)
return
# read-data 6byte data read
def r_reg(self):
# read register State(8)hum(20)temp(20) 6bytes
dat=self.i2c.readfrom(self.addr,6)
return dat
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=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