September 4, 2016
温湿度センサ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? にて
The ARM I2C interface is enabled にて
その後最初のメニューに戻るので→キー2回で
最後に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
という結果になる。
Tweet