ファンレスPCで24時間運転にチャレンジ (5) i2cdriverライブラリ②HTU21D

 前回、読み出しだけで温度が得られるセンサLM75Bを使いました。今度は、温度湿度が得られるHTU21Dを利用します。読み出すための二つのレジスタを扱います。

読み出し

 温度は、「連続測定時の温度データ 0xe3」を、湿度は「連続測定時の湿度データ 0xe5」のレジスタを読み出します。
 i2cdriverボードは、COM3ポートにつながっています。HTU21Dのスレーブ・アドレスは0x40の固定です。各種設定を行うレジスタUser registerはデフォルト(温度、湿度共に最大ビット数、変換スタート)のまま使います。
 i2cDriverボードの端子とHTU21Dボードの端子は、Vcc-Vin、GND-GND、SCL-SCL、SDA-SDAとつなぎます。

 読み出したデータから%RHと摂氏は、データシートに掲載されている下記の式で求めます。

  RH = -6 + 125 * (readRHdata / 2^16)
  Temp = -46.85 + 175.72 * (readTempdata / 2^16)

import sys
sys.path.append('C:\\Users\\yoshidawin\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages')
from i2cdriver import I2CDriver
from time import sleep

i2c = I2CDriver('COM3')

while 1:
i2c.start(0x40, 0) 
data = i2c.write([0xe3]) 
i2c.stop()
i2c.start(0x40, 1)
data = i2c.read(2) 
i2c.stop()
print('read data ', data, data[0], data[1])
TempData = data[0]<<8 | data[1]
print('2bytes data', TempData)
Temp = -46.85 + 175.72 * TempData / 2 ** 16
print('Temp ', round(Temp,1), 'C')
i2c.start(0x40, 0) 
data = i2c.write([0xe5]) 
i2c.stop()
i2c.start(0x40, 1)
data = i2c.read(2) 
i2c.stop()
print('read data ', data, data[0], data[1])
HuData = data[0]<<8 | data[1]
print('2bytes data', HuData)
Hu = -6 + 125.0 *HuData / 2 ** 16
print('Humidity ', int(round(Hu,0)), '%')
sleep(3.14)

 実行中の様子です。

 regwr()とregrd()を使って読み出しをしました。

import sys
sys.path.append('C:\\Users\\yoshidawin\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages')
from i2cdriver import I2CDriver
from time import sleep

i2c = I2CDriver('COM3')

while 1:
i2c.regwr(0x40, 0xe3)
TempData = i2c.regrd(0x40, 0xe3, '>h')
print('2bytes data', TempData)
Temp = -46.85 + 175.72 * TempData / 2 ** 16
print('Temp ', round(Temp,1), 'C')
i2c.regwr(0x40, 0xe5)
HuData = i2c.regrd(0x40, 0xe5, '>h')
print('2bytes data', HuData)
Hu = -6 + 125.0 *HuData / 2 ** 16
print('Humidity ', int(round(Hu,0)), '%')
sleep(3.14)

 実行中の様子です。