_A=None from PiicoDev_Unified import * compat_str='\nUnified PiicoDev library out of date. Get the latest module: https://piico.dev/unified \n' class PiicoDev_BME280: def __init__(self,bus=_A,freq=_A,sda=_A,scl=_A,t_mode=2,p_mode=5,h_mode=1,iir=1,address=119): try: if compat_ind>=1:0 else:print(compat_str) except:print(compat_str) self.i2c=create_unified_i2c(bus=bus,freq=freq,sda=sda,scl=scl);self.t_mode=t_mode;self.p_mode=p_mode;self.h_mode=h_mode;self.iir=iir;self.addr=address;self._t_fine=0 try:self._T1=self._read16(136) except Exception as e:print(i2c_err_str.format(self.addr));raise e self._T2=self._short(self._read16(138));self._T3=self._short(self._read16(140));self._P1=self._read16(142);self._P2=self._short(self._read16(144));self._P3=self._short(self._read16(146));self._P4=self._short(self._read16(148));self._P5=self._short(self._read16(150));self._P6=self._short(self._read16(152));self._P7=self._short(self._read16(154));self._P8=self._short(self._read16(156));self._P9=self._short(self._read16(158));self._H1=self._read8(161);self._H2=self._short(self._read16(225));self._H3=self._read8(227);a=self._read8(229);self._H4=(self._read8(228)<<4)+a%16;self._H5=(self._read8(230)<<4)+(a>>4);self._H6=self._read8(231) if self._H6>127:self._H6-=256 self._write8(242,self.h_mode);sleep_ms(2);self._write8(244,36);sleep_ms(2);self._write8(245,self.iir<<2) def _read8(self,reg):t=self.i2c.readfrom_mem(self.addr,reg,1);return t[0] def _read16(self,reg):t=self.i2c.readfrom_mem(self.addr,reg,2);return t[0]+t[1]*256 def _write8(self,reg,dat):self.i2c.write8(self.addr,bytes([reg]),bytes([dat])) def _short(self,dat): if dat>32767:return dat-65536 else:return dat def read_raw_data(self): self._write8(244,self.p_mode<<5|self.t_mode<<2|1);sleep_time=1250 if self.t_mode in[1,2,3,4,5]:sleep_time+=2300*(1<>4;raw_t=(self._read8(250)<<16|self._read8(251)<<8|self._read8(252))>>4;raw_h=self._read8(253)<<8|self._read8(254);return raw_t,raw_p,raw_h def read_compensated_data(self): A='NaN' try:raw_t,raw_p,raw_h=self.read_raw_data() except:print(i2c_err_str.format(self.addr));return float(A),float(A),float(A) var1=((raw_t>>3)-(self._T1<<1))*(self._T2>>11);var2=(raw_t>>4)-self._T1;var2=var2*((raw_t>>4)-self._T1);var2=(var2>>12)*self._T3>>14;self._t_fine=var1+var2;temp=self._t_fine*5+128>>8;var1=self._t_fine-128000;var2=var1*var1*self._P6;var2=var2+(var1*self._P5<<17);var2=var2+(self._P4<<35);var1=(var1*var1*self._P3>>8)+(var1*self._P2<<12);var1=((1<<47)+var1)*self._P1>>33 if var1==0:pres=0 else:p=((1048576-raw_p<<31)-var2)*3125//var1;var1=self._P9*(p>>13)*(p>>13)>>25;var2=self._P8*p>>19;pres=(p+var1+var2>>8)+(self._P7<<4) h=self._t_fine-76800;h=((raw_h<<14)-(self._H4<<20)-self._H5*h+16384>>15)*((((h*self._H6>>10)*((h*self._H3>>11)+32768)>>10)+2097152)*self._H2+8192>>14);h=h-(((h>>15)*(h>>15)>>7)*self._H1>>4);h=0 if h<0 else h;h=419430400 if h>419430400 else h;humi=h>>12;return temp,pres,humi def values(self):temp,pres,humi=self.read_compensated_data();return temp/100,pres/256,humi/1024 def pressure_precision(self):p=self.read_compensated_data()[1];pi=float(p//256);pd=p%256/256;return pi,pd def altitude(self,pressure_sea_level=1013.25):pi,pd=self.pressure_precision();return 44330*(1-(float(pi+pd)/100/pressure_sea_level)**(1/5.255))