Close Menu
    Facebook X (Twitter) Instagram
    Facebook YouTube LinkedIn
    Industry SurferIndustry Surfer
    Inicio - Interfaz del BME280 con la Raspberry Pi Pico usando MicroPython
    Cursos

    Interfaz del BME280 con la Raspberry Pi Pico usando MicroPython

    5 Mins Read Cursos
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Interfaz del BME280 con la Raspberry Pi Pico usando MicroPython
    Share
    Facebook Twitter LinkedIn Pinterest Email

    #著者: Paul Canaan 2016, Peter Dahlburg 2016

    #

    # Este módulo está tomado de la biblioteca Python BME280 de Adafruit. Traducido de

    # El aviso de derechos de autor se reimprime a continuación.

    #

    #これらのライブラリはラズベリーパイ用に書かれました. Este cambio es

    # Se dirige a placas MicroPython y esp8266.

    #

    # Derechos de autor (c) 2014 Industria de Adafruit

    #著者: Tony DiCora

    #

    #によって提供されるBME280の変更を伴うBMP280ドライバーに基づく

    #デビッドJテイラー, Edimburgo (www.satsignal.eu)

    #

    # Basado en Adafruit_I2C.py creado por Kevin Townsend.

    #

    #許可は otorga de forma gratuita a todos los que obtienen una copia

    # de este software y archivos de documentación asociados (“Software”), dirección

    #権利を含むがこれに限定されない con software sin límites

    # Usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender

    #ソフトウェアのコピー, y quién permite que el software sea

    Amueblado para ello, #以下の条件に従って:

    #

    #上記の著作権表示とこの許可表示は,

    #ソフトウェアのすべてのコピーまたは重要な部分.

    #

    #ソフトウェアは proporciona “tal cual” sin ningún tipo de garantía expresa o de ningún tipo.

    #商品性の保証を含むがこれに限定されない黙示,

    #特定の目的への適合性と非侵害. En ningún caso,

    #著者または著作権者は, reclamación, daño u otro

    #契約, responsabilidad, ya sea en agravio o cualquier otro acto, derivada de:

    #ソフトウェアまたは使用またはその他の取引から o relacionados con

    #ソフトウェア.

    importación Hora

    remitente Ustract importación descongelación, unpack_from

    remitente arreglo importación arreglo

    # Dirección predeterminada de BME280.

    BME280_I2CADDR = 0x76

    # Modo de operación

    BME280_OSAMPLE_1 = 1

    BME280_OSAMPLE_2 = 2

    BME280_OSAMPLE_4 = 3

    BME280_OSAMPLE_8 = 4

    BME280_OSAMPLE_16 = 5

    BME280_REGISTER_CONTROL_HUM = 0xF2

    BME280_REGISTER_CONTROL = 0xF4

    …class BME280:

    Def __Init__(propio,

    modo=BME280_OSAMPLE_1,

    dirección=BME280_I2CADDR,

    I2C=ninguno,

    **Kwags):

    # Asegúrese de que el modo esté habilitado.

    Si modo No Y [BME280_OSAMPLE_1, BME280_OSAMPLE_2, BME280_OSAMPLE_4,

                            BME280_OSAMPLE_8, BME280_OSAMPLE_16]:

    levantar Error de valor(

    ‘Valor de modo inesperado{0}. Establezca el modo en ‘

    «BME280_ULTRALOWPOWER, BME280_STANDARD, BME280_HIGHRES o »

    「BME280_ULTRAHIGHRES」.formato(modo))

    propio._modo = modo

    propio.dirección = dirección

    Si I2C son ninguno:

    levantar Error de valor(“Se requiere un objeto I2C”)

    propio.I2C = I2C

    # Carga de datos de calibración

    dig_88_a1 = propio.I2C.readfrom_mem(propio.dirección, 0x88, 26)

    dig_e1_e7 = propio.I2C.readfrom_mem(propio.dirección, 0xE1, 7)

    propio.dig_T1, propio.dig_T2, propio.dig_T3, propio.dig_P1, \

    propio.dig_P2, propio.dig_P3, propio.dig_P4, propio.dig_P5, \

    propio.dig_P6, propio.dig_P7, propio.dig_P8, propio.dig_P9, \

    _, propio.dig_H1 = descongelación(“<, dig_88_a1)

    propio.dig_H2, propio.dig_H3 = descongelación(“<hB”, dig_e1_e7)

    e4_sign = unpack_from(“<b”, dig_e1_e7, 3)[0]

    propio.dig_H4 = (e4_sign << 4) | (dig_e1_e7[4] & 0xF)

    e6_sign = unpack_from(“<b”, dig_e1_e7, 5)[0]

    propio.dig_H5 = (e6_sign << 4) | (dig_e1_e7[4] >> 4)

    propio.dig_H6 = unpack_from(“<b”, dig_e1_e7, 6)[0]

    propio.I2C.writeto_mem(propio.dirección, BME280_REGISTER_CONTROL,

    Matriz de bytes([0x3F]))

    propio.t_fine = 0

    # Titulares temporales de datos que permanecen asignados

    propio._l1_barray = Matriz de bytes(1)

    propio._l8_barray = Matriz de bytes(8)

    propio._l3_resultarray = arreglo(“Lo soy”., [0, 0, 0])

    Def read_raw_data(propio, resultado):

    “”Lea datos sin procesar (no compensados) del sensor.

    Argumento:

    Resultado: una matriz de longitud 3 o similar al resultado tiene este aspecto

    Almacenar en el orden de temperatura, presión y humedad

    Ingresos:

    ninguno

    ““”

    propio._l1_barray[0] = propio._modo

    propio.I2C.writeto_mem(propio.dirección, BME280_REGISTER_CONTROL_HUM,

    propio._l1_barray)

    propio._l1_barray[0] = propio._modo << 5 | propio._modo << 2 | 1

    propio.I2C.writeto_mem(propio.dirección, BME280_REGISTER_CONTROL,

    propio._l1_barray)

    sleep_time = 1250 + 2300 * (1 << propio._modo)

    sleep_time = sleep_time + 2300 * (1 << propio._modo) + 575

    sleep_time = sleep_time + 2300 * (1 << propio._modo) + 575

    Hora.sleep_us(sleep_time) # Espere la cantidad de tiempo requerida

    # Lectura de ráfaga recomendada de la hoja de datos de 0xF7 a 0xFE

    propio.I2C.readfrom_mem_into(propio.dirección, 0xF7, propio._l8_barray)

    Lectura = propio._l8_barray

    # Presión (0xF7): ((MSB << 16) |( LSB << 8) |XLSB) >> 4

    raw_press = ((Lectura[0] << 16) | (Lectura[1] << 8) | Lectura[2]) >> 4

    # Temperatura (0xFA): ((MSB << 16) |( LSB << 8) |XLSB) >> 4

    raw_temp = ((Lectura[3] << 16) | (Lectura[4] << 8) | Lectura[5]) >> 4

    # Humedad (0xFD): (MSB << 8) |

    raw_hum = (Lectura[6] << 8) | Lectura[7]

    resultado[0] = raw_temp

    resultado[1] = raw_press

    resultado[2] = raw_hum

    Def read_compensated_data(propio, resultado=ninguno):

    “”Lee los datos del sensor y devuelve los datos corregidos.

    Argumento:

    Resultado: una matriz de longitud 3 o similar al resultado tiene este aspecto

    Almacenar d, en el orden de temperatura, presión y humedad. Puedes usar

    Esto es para leer el sensor sin asignar memoria de montón

    Ingresos:

    Matriz de temperatura, presión y humedad. será de

    Si el parámetro de resultado (ninguno)

    ““”

    propio.read_raw_data(propio._l3_resultarray)

    raw_temp, raw_press, raw_hum = propio._l3_resultarray

    # Temperatura

    var1 = ((raw_temp >> 3) – (propio.dig_T1 << 1)) * (propio.dig_T2 >> 11)

    var2 = (((((raw_temp >> 4) – propio.dig_T1) *

    ((raw_temp >> 4) – propio.dig_T1)) >> 12) * propio.dig_T3) >> 14

    propio.t_fine = var1 + var2

    una vez = (propio.t_fine * 5 + 128) >> 8

    # Presión

    var1 = propio.t_fine – 128000

    var2 = var1 * var1 * propio.dig_P6

    var2 = var2 + ((var1 * propio.dig_P5) << 17)

    var2 = var2 + (propio.dig_P4 << 35)

    var1 = (((var1 * var1 * propio.dig_P3) >> 8) +

    ((var1 * propio.dig_P2) << 12))

    var1 = (((1 << 47) + var1) * propio.dig_P1) >> 33

    Si var1 == 0:

    presión = 0

    de otra manera:

    p = 1048576 – raw_press

    p = (((p << 31) – var2) * 3125) var1

    var1 = (propio.dig_P9 * (p >> 13) * (p >> 13)) >> 25

    var2 = (propio.dig_P8 * p) >> 19

    presión = ((p + var1 + var2) >> 8) + (propio.dig_P7 << 4)

    # Humedad

    h = propio.t_fine – 76800

    h = (((((raw_hum << 14) – (propio.dig_H4 << 20) –

    (propio.dig_H5 * h)) + 16384)

    >> 15) * (((((((h * propio.dig_H6) >> 10) *

    (((h * propio.dig_H3) >> 11) + 32768)) >> 10) +

    2097152) * propio.dig_H2 + 8192) >> 14))

    h = h – (((((h >> 15) * (h >> 15)) >> 7) * propio.dig_H1) >> 4)

    h = 0 Si h < 0 de otra manera h

    h = 419430400 Si h > 419430400 de otra manera h

    humedad = h >> 12

    Si resultado:

    resultado[0] = una vez

    resultado[1] = presión

    resultado[2] = humedad

    devolución resultado

    devolución arreglo(“Lo soy”., (una vez, presión, humedad))

    @propiedad

    Def valores(propio):

    “”” Valor legible por humanos ““”

    t, p, h = propio.read_compensated_data()

    p = p 256

    pi = p 100

    Teletipo = p – Pi* 100

    Hola = h 1024

    disco duro = h * 100 1024 – Hola*100

    devolución (“{}C”.formato(t / 100), “{}. {:02d}hPa”.formato(pi, Teletipo),

    “{}. {:02d}%”.formato(Hola, disco duro))

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email

    Entradas relacionadas

    circuito capacitivo de ca

    circuito inductivo ca

    ¿Cómo probar un diodo? Uso de multímetros analógicos y digitales (DMM)

    Entradas recientes
    ¿Qué es el campo magnético y cómo funciona?
    circuito capacitivo de ca
    circuito inductivo ca
    ¿Cómo probar un diodo? Uso de multímetros analógicos y digitales (DMM)
    Noticias industrial
    ¿Qué es el campo magnético y cómo funciona?
    circuito capacitivo de ca
    circuito inductivo ca
    ¿Cómo probar un diodo? Uso de multímetros analógicos y digitales (DMM)
    Facebook YouTube LinkedIn
    © 2025 Hecho con ♥ desde México

    Type above and press Enter to search. Press Esc to cancel.

    Ir a la versión móvil