Lectura de temperatura BMP280 0x000FFFF0
Tengo un BMP280 (hoja de datos del módulo GY-BMP280) conectado a una Raspberry Pi 3 utilizando la interfaz IC2 (dirección 0x76). El GYBMP280 está conectado al pin de 3.3V (Pin 1).
Las lecturas de Presión parecen estar bien, fluctúan ligeramente como se espera.
Sin embargo, la lectura de Temperatura siempre es [255,255,0] = 0x000FFFF0. Confirmé con un termómetro infrarrojo que mi sensor tiene una temperatura razonable (aproximadamente 70F), la cual está dentro del rango de detección.
He reducido las bibliotecas que planeo usar en un programa de prueba breve que solo inicializa el GYBMP280 y lee los registros apropiados, como se muestra a continuación.
La página 24 de la hoja de datos de Bosch muestra el mapa de memoria.
¿Estoy haciendo algo mal o el módulo está defectuoso?
“`python
import smbus
import time
Obtener el bus I2C
bus = smbus.SMBus(1)
Dirección BMP280, 0x76(118)
Seleccionar el registro de medición de control, 0xF4(244)
0x27(39) Modo normal, tasa de sobremuestreo de presión y temperatura = 1
bus.write_byte_data(0x76, 0xF4, 0x27)
Dirección BMP280, 0x76(118)
Seleccionar el registro de configuración, 0xF5(245)
0xA0(00) Tiempo de espera en espera = 1000 ms
bus.write_byte_data(0x76, 0xF5, 0xA0)
time.sleep(0.5)
Dirección BMP280, 0x76(118)
Leer los datos de 0xF7(247), 8 bytes
MSB de presión, LSB de presión, xLSB de presión, MSB de temperatura, LSB de temperatura, xLSB de temperatura
data = bus.read_i2c_block_data(0x76, 0xF7, 6)
print(data)
Extraer Presión y Temperatura
adc_p = (data[0]<<16 | data[1]<<8 | data[2]) >> 4
adc_t = (data[3]<<16 | data[4]<<8 | data[5]) >> 4
print(“Presión = 0x{0:08X}”.format(adc_p))
print(“Temperatura = 0x{0:08X}”.format(adc_t))
davy.ai
Según el código y las hojas de datos proporcionadas, parece que el problema podría estar relacionado con el Factor de Calibración de Temperatura. El BMP280 tiene un Factor de Calibración incorporado que debe usarse para convertir los datos en bruto del sensor en lecturas de temperatura reales. Este factor consiste en varios valores de 16 bits que proporcionan la corrección para el valor de temperatura en bruto leído del sensor.
Para verificar si el Factor de Calibración está causando el problema, puedes intentar lo siguiente:
Puedes leer estos bytes utilizando el siguiente código:
La fórmula para convertir el valor corregido en unidades de temperatura está dada en la hoja de datos como:
Aquí, “adc_t” es el valor de temperatura en bruto leído del sensor, “dig_T1” a “dig_T3” son los valores del Factor de Calibración que leíste en el paso 1, y “t_fine” es una variable intermedia utilizada en la fórmula de conversión (representa un valor de temperatura en unidades de 0.01 grados Celsius).
Puedes agregar este código de conversión a tu programa existente de la siguiente manera:
Ten en cuenta que el valor final de temperatura se divide por 100 para convertirlo de unidades de 0.01 grados Celsius a grados Celsius. Además, se utiliza el especificador de formato “{0:.2f}” para imprimir el valor de temperatura con dos decimales.