Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

micropython esp32 低成本气压式高度计制作教程(代码与接线部分)


低成本气压式高度计制作教程(代码与接线部分)


bmp.py

from micropython import const
from machine import I2C
BMP280_I2C_ADDR = const(0x76)
class BMP280():
    def __init__(self, i2c):
        self.i2c = i2c
        self.tb = bytearray(1)
        self.rb = bytearray(1)
        self.dig_T1 = self.get2Reg(0x88)
        self.dig_T2 = self.short(self.get2Reg(0x8A))
        self.dig_T3 = self.short(self.get2Reg(0x8C))
        self.dig_P1 = self.get2Reg(0x8E)
        self.dig_P2 = self.short(self.get2Reg(0x90))
        self.dig_P3 = self.short(self.get2Reg(0x92))
        self.dig_P4 = self.short(self.get2Reg(0x94))
        self.dig_P5 = self.short(self.get2Reg(0x96))
        self.dig_P6 = self.short(self.get2Reg(0x98))
        self.dig_P7 = self.short(self.get2Reg(0x9A))
        self.dig_P8 = self.short(self.get2Reg(0x9C))
        self.dig_P9 = self.short(self.get2Reg(0x9E))
        self.mode = 3
        self.osrs_p = 3
        self.osrs_t = 1
        self.setReg(0xF4, 0x2F)
        self.setReg(0xF5, 0x0C)
        self.filter = 3
        self.T = 0
        self.P = 0
        self.version = '1.0'
    def short(self, dat):
        if dat > 32767:
            return dat - 65536
        else:
            return dat
    # set reg
    def setReg(self, reg, dat):
        self.tb[0] = dat
        self.i2c.writeto_mem(BMP280_I2C_ADDR, reg, self.tb)
    # get reg
    def getReg(self, reg):
        self.i2c.readfrom_mem_into(BMP280_I2C_ADDR, reg, self.rb)
        return self.rb[0]
    # get two reg
    def get2Reg(self, reg):
        return self.getReg(reg) + self.getReg(reg+1) * 256
    def get(self):
        adc_T = (self.getReg(0xFA)<<12) + (self.getReg(0xFB)<>4)
        var1 = (((adc_T>>3)-(self.dig_T1<>11
        var2 = (((((adc_T>>4)-self.dig_T1)*((adc_T>>4) - self.dig_T1))>>12)*self.dig_T3)>>14
        t = var1+var2
        self.T = ((t * 5 + 128) >> 8)/100
        var1 = (t>>1) - 64000
        var2 = (((var1>>2) * (var1>>2)) >> 11 ) * self.dig_P6
        var2 = var2 + ((var1*self.dig_P5)<>2)+(self.dig_P4<>2)*(var1>>2))>>13)>>3) + (((self.dig_P2) * var1)>>1))>>18
        var1 = ((32768+var1)*self.dig_P1)>>15
        if var1 == 0:
            return  # avoid exception caused by division by zero
        adc_P = (self.getReg(0xF7)<<12) + (self.getReg(0xF8)<>4)
        p=((1048576-adc_P)-(var2>>12))*3125
        if p < 0x80000000:
            p = (p << 1) // var1
        else:
            p = (p // var1) * 2
        var1 = (self.dig_P9 * (((p>>3)*(p>>3))>>13))>>12
        var2 = (((p>>2)) * self.dig_P8)>>13
        self.P = p + ((var1 + var2 + self.dig_P7) >> 4)
        return [self.T, self.P]
    # get Temperature in Celsius
    def getTemp(self):
        self.get()
        return self.T
    # get Pressure in Pa
    def getPress(self):
        self.get()
        return self.P
    # Calculating absolute altitude
    def getAltitude(self):
        return 44330*(1-(self.getPress()/101325)**(1/5.255))
    # sleep mode
    def poweroff(self):
        self.setReg(0xF4, 0)
    # normal mode
    def poweron(self):
        self.setReg(0xF4, 0x2F)


main.py

import time
from machine import Pin,I2C
import _thread
import bmp280

def run():
    i2c = I2C(sda=Pin(6), scl=Pin(7))
    b = bmp280.BMP280(i2c)
    da = 0
    t=0
    try:
        while(1):
            da=da+1
            f = open("date"+str(da)+".txt",'r')
            f.close()
    except:
        f = open("date"+str(da)+".txt",'a')
        f.write('气压计数据记录\n')
        f.write("记录时间:  原始温度和气压:  高度:\n")
        f.close()
    while(True):
        time.sleep_ms(100)
        f = open("date"+str(da)+".txt",'a')
        t=t+1
        y = b.get()
        p = b.getPress()
        h = (101325-p)*9/100
        dat = (str(t/10)+"  "+str(y)+"  "+str(h)+"\n")
        f.write(dat)
        #print(h)
        f.close()
pboot = Pin(9,Pin.IN)

def bled():
    led4 = Pin(12,Pin.OUT)
    led5 = Pin(13,Pin.OUT)
    while(True):
        led4.on()
        time.sleep_ms(500)
        led4.off()
        led5.on()
        time.sleep_ms(500)
        led5.off()
        #_thread.start_new_thread(bled,())
while(1):
    time.sleep_ms(100)
    if(pboot.value()==0):
        _thread.start_new_thread(bled,())
        run()
        break


接线:

Snipaste_2023-07-12_23-28-18.png

接线图

SDA=IO06        SCL=IO07        VCC=3.3V        GND=GND

==========        ==========         ==========         ========== 

电池3.7/4.2V        正极=+5v        负极=GND

==========        ==========         ==========         ========== 


最后模块接到usb的5伏电源或者

把正5伏和gnd接到一块满电1s电池上

切记其他电池(2s-6s)只能插平衡头来获取1s电压

否则直接看烟花


作者:洋洋柚Y 

https://www.bilibili.com/read/cv24948670?spm_id_from=333.999.0.0

出处:bilibili


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 ESP56.com All Rights Reserved

执行时间: 0.0090289115905762 seconds