2019-11-29 13:54:17 [显示全部楼层]
2361浏览
查看: 2361|回复: 0

[uPyCraft IDE] 使用BMP280模块检测压强和温度

[复制链接]
#http://docs.dfrobot.com.cn/bxy/4.2.16bmp280.html
#https://www.dfrobot.com.cn/goods-1860.html
#根据BMP280模块获取:温度、压强、海拔
from microbit import *
I2C_ADDR = 0x77

class BMP280():  
  def __init__(self,i2c):   
    self.i2c = i2c   
    self.T1 = self.get2Reg(0x88)   
    self.T2 = self.short(self.get2Reg(0x8A))   
    self.T3 = self.short(self.get2Reg(0x8C))   
    self.P1 = self.get2Reg(0x8E)   
    self.P2 = self.short(self.get2Reg(0x90))   
    self.P3 = self.short(self.get2Reg(0x92))   
    self.P4 = self.short(self.get2Reg(0x94))   
    self.P5 = self.short(self.get2Reg(0x96))   
    self.P6 = self.short(self.get2Reg(0x98))   
    self.P7 = self.short(self.get2Reg(0x9A))   
    self.P8 = self.short(self.get2Reg(0x9C))   
    self.P9 = self.short(self.get2Reg(0x9E))   
    self.setReg(0xF4, 0x2F)   
    self.setReg(0xF5, 0x0C)   
    self.T = 0   
    self.P = 0  
  def short(self, dat):   
    if dat > 32767: return dat-65536   
    else: return dat  
  def setReg(self,reg,dat):   
    self.i2c.write(I2C_ADDR, bytearray([reg,dat]))  
  def getReg(self,reg):   
    self.i2c.write(I2C_ADDR,bytearray([reg]))   
    t = self.i2c.read(I2C_ADDR,1)   
    return t[0]  
  def get2Reg(self,reg):   
    self.i2c.write(I2C_ADDR,bytearray([reg]))   
    t = self.i2c.read(I2C_ADDR,2)   
    return t[0]+t[1]*256  
  def get(self):   
    adc_T = (self.getReg(0xFA)<<12) + (self.getReg(0xFB)<<4) + (self.getReg(0xFC)>>4)   
    var1 = (((adc_T>>3)-(self.T1<<1))*self.T2)>>11   
    var2 = (((((adc_T>>4)-self.T1)*((adc_T>>4) - self.T1))>>12)*self.T3)>>14   
    t = var1+var2   
    self.T = ((t * 5 + 128) >> 8)/100   
    var1 = (t>>1) - 64000   
    var2 = (((var1>>2) * (var1>>2)) >> 11 ) * self.P6   
    var2 = var2 + ((var1*self.P5)<<1)   
    var2 = (var2>>2)+(self.P4<<16)   
    var1 = (((self.P3*((var1>>2)*(var1>>2))>>13)>>3) + (((self.P2) * var1)>>1))>>18   
    var1 = ((32768+var1)*self.P1)>>15   
    if var1 == 0:      
      return   
    adc_P = (self.getReg(0xF7)<<12) + (self.getReg(0xF8)<<4) + (self.getReg(0xF9)>>4)   
    p=((1048576-adc_P)-(var2>>12))*3125   
    if p < 0x80000000:      
      p = (p << 1) // var1   
    else:      
      p = (p // var1) * 2   
    var1 = (self.P9 * (((p>>3)*(p>>3))>>13))>>12   
    var2 = (((p>>2)) * self.P8)>>13   
    self.P = p + ((var1 + var2 + self.P7) >> 4)   
    return [self.T, self.P]  
  def getTemp(self):   
    self.get()   
    return self.T  
  def getPress(self):   
    self.get()   
    return self.P  
  def getAltitude(self):   
    return 44330*(1-(self.getPress()/101325)**(1/5.255))

i2c.init(freq=100000,scl=pin19,sda=pin20)
bmp=BMP280(i2c)
print(str(bmp.getTemp())+' *C')
print(str(bmp.getPress())+' Pa')
print(str(bmp.getAltitude())+' m')

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail