Lovoski レッド MPL3115A スマート温度気圧 高度センサーモジュール

Python

ありゃりゃ、MPL3115は湿度は測定できない・・・。プログラム段階で知るとは間抜けな!
まあいいかこれでやることに。結線の心配をしたが一発で繋がった。

 

例題がPython2.7だったので3に修正した。
コマンドラインからpython3 xxx.py でなく
$>./xxx.pyで実行するには以下のソースのヘッダー部分を記述。
chmod 755 にしないと実行できないね。久々にlinuxやってる(-_-;

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from smbus import SMBus
import time

# Special Chars
deg = u'\N{DEGREE SIGN}'

# I2C Constants
ADDR = 0x60
CTRL_REG1 = 0x26
PT_DATA_CFG = 0x13
bus = SMBus(1)

who_am_i = bus.read_byte_data(ADDR, 0x0C)
print( hex(who_am_i))
if who_am_i != 0xc4:
    print("Device not active.")
    exit(1)

# Set oversample rate to 128
setting = bus.read_byte_data(ADDR, CTRL_REG1)
newSetting = setting | 0x38
bus.write_byte_data(ADDR, CTRL_REG1, newSetting)

# Enable event flags
bus.write_byte_data(ADDR, PT_DATA_CFG, 0x07)

# Toggel One Shot
setting = bus.read_byte_data(ADDR, CTRL_REG1)
if (setting & 0x02) == 0:
    bus.write_byte_data(ADDR, CTRL_REG1, (setting | 0x02))

try:
	while True: 
		print("--------------")
		# Enable event flags
		bus.write_byte_data(ADDR, PT_DATA_CFG, 0x07)
		
		# Toggel One Shot
		setting = bus.read_byte_data(ADDR, CTRL_REG1)
		if (setting & 0x02) == 0:
			bus.write_byte_data(ADDR, CTRL_REG1, (setting | 0x02))

		# Read sensor data
		#print("Waiting for data...")
		status = bus.read_byte_data(ADDR,0x00)
		while (status & 0x08) == 0:
		    #print bin(status)
		    status = bus.read_byte_data(ADDR,0x00)
		    time.sleep(0.5)
		
		#print ("Reading sensor data...")
		p_data = bus.read_i2c_block_data(ADDR,0x01,3)
		t_data = bus.read_i2c_block_data(ADDR,0x04,2)
		status = bus.read_byte_data(ADDR,0x00)
		#print("status: "+bin(status))
		
		p_msb = p_data[0]
		p_csb = p_data[1]
		p_lsb = p_data[2]
		t_msb = t_data[0]
		t_lsb = t_data[1]
		
		pressure = (p_msb << 10) | (p_csb << 2) | (p_lsb >> 6)
		p_decimal = ((p_lsb & 0x30) >> 4)/4.0
		
		celsius = t_msb + (t_lsb >> 4)/16.0
		fahrenheit = (celsius * 9)/5 + 32
		
		#print ("Pressure and Temperature at "+time.strftime('%m/%d/%Y %H:%M:%S%z'))

		print ('{:.0f}'.format((pressure+p_decimal)/100.0)+" Pa")
		print ('{:.1f}'.format(celsius)+deg+"C")
		#print (str(fahrenheit)+deg+"F")

except KeyboardInterrupt:
	print("Key Stop")
	pass

【結果】
————–
10156 Pa
25.6°C
————–
10156 Pa
25.6°C
————–
10156 Pa
25.6°C

No tags for this post.
タイトルとURLをコピーしました