広島工業大学山岸ゼミ - YamaLabo

温湿度センサAM2320をRaspberry Pi 3で使用する

他サイトにI2Cの温湿度センサをRaspberryPi上にてPythonを使って取得する記事が
あまりなかったので備忘録も兼ねて投稿します。

HW : raspberry pi 3 Model B
OS : raspbian 4.4.13-v7+

I2Cの設定

RAspberryPiのI2C機能有効化

$ sudo raspi-config
表示されるメニューにて
9 Advanced Option を選択(Enter)
A6 I2C を選択(Enter)
Would you like the ARM I2C interface to be enabled? にてを選択(Enter)
The ARM I2C interface is enabled にてを選択(Enter)
その後最初のメニューに戻るので→キー2回でを選択(Enter)
最後にRaspberry Piを再起動する
$ sudo reboot

pythonのI2Cモジュール、python-smbusのインストール

$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt-get install -y python-smbus

モジュールの確認

$ sudo vi /etc/modules

以下の記述がなければ追記する
i2c-dev
i2c-bcm2708

I2CのRepeated Start Conditionを有効化する

I2Cの設定ファイルを作成し、設定を記述する
$ sudo vi /etc/modprobe.d/i2c.conf
以下の内容を記述し保存する。
options i2c_bcm2708 combined=1
保存後、再起動する
$ sudo reboot

pythonのコード

import smbus
import time

i2c = smbus.SMBus(1)
address = 0x5c

# センサsleep解除
try:
    i2c.write_i2c_block_data(address,0x00,[])
except:
    pass
# 読み取り命令
time.sleep(0.003)
i2c.write_i2c_block_data(address,0x03,[0x00,0x04])

# データ受取
time.sleep(0.015)
block = i2c.read_i2c_block_data(address,0,6)
hum = float(block[2] << 8 | block[3])/10
tmp = float(block[4] << 8 | block[5])/10

print(hum) # 湿度表示
print(tmp) # 温度表示

頭痛予防

Raspberry Piにて上記記載のI2Cの Repeated Start Condition
の有効化をしないと、センサの読み取り結果(block)が常に下の値になる

[0, 5, 128, 115, 48, 0]

この値で温度計算すると

1228.8

という結果になる。


Mail Address


Comment

スパム・迷惑コメント投稿防止の為メールアドレスの入力が必須ですが、公開はされません。何卒ご協力のほどお願いいたします。
投稿いただいたコメントは管理者のチェック後掲載しておりますので、即時には反映されません。

Profile

ちぇけ丸

IT系の仕事をしつつ、趣味で本の装丁やiPhoneケースなどのデザインなど、様々なものづくりを行っています。

»more

Sarch

Category

calendar

2017年8月
« 5月    
 123456
78910111213
14151617181920
21222324252627
28293031  

▲Pagetop