micropython lcd 2.4寸_MicroPython开发实例之自制小型家庭气象站

import pyb

from pyb import I2C

BMP180_I2C_ADDR = const(0x77)

class BMP180():

def __init__(self, i2c_num):

self.i2c = I2C(i2c_num, I2C.MASTER, baudrate = 100000)

self.AC1 = self.short(self.get2Reg(0xAA))

self.AC2 = self.short(self.get2Reg(0xAC))

self.AC3 = self.short(self.get2Reg(0xAE))

self.AC4 = self.get2Reg(0xB0)

self.AC5 = self.get2Reg(0xB2)

self.AC6 = self.get2Reg(0xB4)

self.B1 = self.short(self.get2Reg(0xB6))

self.B2 = self.short(self.get2Reg(0xB8))

self.MB = self.short(self.get2Reg(0xBA))

self.MC = self.short(self.get2Reg(0xBC))

self.MD = self.short(self.get2Reg(0xBE))

self.UT = 0

self.UP = 0

self.B3 = 0

self.B4 = 0

self.B5 = 0

self.B6 = 0

self.B7 = 0

self.X1 = 0

self.X2 = 0

self.X3 = 0

def short(self, dat):

if dat > 32767:

return dat - 65536

else:

return dat

def setReg(self, dat, reg):

buf = bytearray(2)

buf[0] = reg

buf[1] = dat

self.i2c.send(buf, BMP180_I2C_ADDR)

def getReg(self, reg):

buf = bytearray(1)

buf[0] = reg

self.i2c.send(buf, BMP180_I2C_ADDR)

t = self.i2c.recv(1, BMP180_I2C_ADDR)

return t[0]

def get2Reg(self, reg):

a = self.getReg(reg)

b = self.getReg(reg + 1)

return a*256 + b

def measure(self):

self.setReg(0x2E, 0xF4)

pyb.delay(5)

self.UT = self.get2Reg(0xF6)

self.setReg(0x34, 0xF4)

pyb.delay(5)

self.UP = self.get2Reg(0xF6)

def getTemp(self):

self.measure()

self.X1 = (self.UT - self.AC6) * self.AC5/(1<<15)

self.X2 = self.MC * (1<<11) / (self.X1 + self.MD)

self.B5 = self.X1 + self.X2

return (self.B5 + 8)/160

def getPress(self):

self.getTemp()

self.B6 = self.B5 - 4000

self.X1 = (self.B2 * (self.B6*self.B6/(1<<12))) / (1<<11)

self.X2 = (self.AC2 * self.B6)/(1<<11)

self.X3 = self.X1 + self.X2

self.B3 = ((self.AC1*4+self.X3) + 2)/4

self.X1 = self.AC3 * self.B6 / (1<<13)

self.X2 = (self.B1 * (self.B6*self.B6/(1<<12))) / (1<<16)

self.X3 = (self.X1 + self.X2 + 2)/4

self.B4 = self.AC4 * (self.X3 + 32768)/(1<<15)

self.B7 = (self.UP-self.B3) * 50000

if self.B7 

p = (self.B7*2)/self.B4

else:

p = (self.B7/self.B4) * 2

self.X1 = (p/(1<<8))*(p/(1<<8))

self.X1 = (self.X1 * 3038)/(1<<16)

self.X2 = (-7357*p)/(1<<16)

p = p + (self.X1 + self.X2 + 3791)/16

return p

def getAltitude(self):

p = self.getPress()

return (44330*(1-(p/101325)**(1/5.255)))

def get(self):

t = []

t.append(self.getPress())

t.append(self.getAltitude())

t.append(self.getTemp())

return t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值