忍者ブログ
[344]  [343]  [341]  [340]  [339]  [338]  [337]  [336]  [335]  [334]  [333
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Raspberrypiで温湿度 SHT31

今回はI2C接続のSHT31を使って高精度温度測定に挑戦
秋月電子のSHT31-D15使用センサモジュールキット

回路
 VCC、GRDにSDAとSCLを接続

設定
 sumbusとI2Ctoolsを導入し、i2cを有効可

プログラム
 ・秋月電子のデータシートに基づいて
 ・アドレス 0X45   sudo i2cdetect 1でサーチ
 ・SHT31にbus.write_i2c_block_data(0x45, 0x2C, [0x06])でコマンドを送信
 ・しばらく待って 温度2秒 湿度4秒 テストでは1秒
 ・0x00から6バイト読み込み bus.read_i2c_block_data(0x45, 0x00, 6)
 ・0バイト目 温度のMSB 1バイト目 温度のLSB 
 ・3バイト目 湿度のMSB 4バイト目 湿度のLSB

 ・MSBを8ビットシフトしLSBとAND
  temp = data[0]<<8|data[1]   バイト単位なのでdata[0] * 256 + data[1]でも可
 ・秋月電子のデータシート計算式で温度と湿度

全プログラム
import smbus
import time
# I2CBUS = 1
bus = smbus.SMBus(1)
#  address
# sudo i2cdetect 1
#0x45 comand upMSB 0x2C  downMSB 0X06
# address comand bytedata
bus.write_i2c_block_data(0x45, 0x2C, [0x06])
time.sleep(1.0)
# Read data back from 0x00(00), 6 bytes
#data
#data[0]+dat[1]+data[2]+data[3]+data[4]+data[5]+data[6]
# MSB   +LSB    +CRC      +MSB     +LSB      +CRC
data = bus.read_i2c_block_data(0x45, 0x00, 6)
# Convert the data
#msb+lsb
#temp = data[0] * 256 + data[1]
temp = data[0]<<8|data[1]
temp = -45 + (175 * temp/(pow(2,16) - 1))
#humi =(data[3] * 256 + data[4])
humi =(data[3] <<8|data[4]) 
humi = 100 * humi/ (pow(2,16) - 1)
# Output data
print ('Temp: %.3f C' %temp)
print ('Humi : %.2f %%RH'%humi)

拍手

PR
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
フリーエリア
最新CM
[03/10 DORA]
最新TB
プロフィール
HN:
dorabu
性別:
非公開
バーコード
ブログ内検索
P R
Copyright © ドラブーのアンドロイドとIoTなブログ All rights reserved. / Template by 四季. / Material by てんせん.

忍者ブログ [PR]