Scroll Indicator
DigiLab : Extraer datos del aire (y un módulo BMP280)
Una de las sorprendentes características del accesorio DigiLab de Lab401 para FlipperZero® es su Sonda I2C. Si alguna vez ha jugado con electrónica, microcontroladores u ordenadores integrados como el ESP-32, sin duda se habrá topado con I2C.
Se trata de un protocolo de comunicación que funciona a través de sólo dos hilos y que permite conectar varios (en teoría, miles...) dispositivos y sensores a las mismas líneas y, aun así, mantener una comunicación directa.
Aunque se inventó en los años 80, es una tecnología increíblemente importante y popular. No es exagerado decir que hay literalmente miles de tipos de sensores I2C, ¡y millones de dispositivos que los utilizan!
Módulos, módulos, módulos.
Pero si tienes un sensor I2C sobre la mesa, ¿cómo interactúas con él?
Hoy en día, lo normal es coger un Ardunio o una Raspberry Pi, y esperar que alguien haya escrito una librería para ello. Tal vez te pelees con protoboards y puentes, y tal vez desees una manera de hablar con el módulo directamente. O tal vez sea un chip mágico misterioso de AliExpress sin marcar, y no tengas ni idea de lo que hace. O peor aún, puede que necesites hacer algo especial que las librerías no cubren - y no hay una forma sencilla de hacerlo.

Entra en DigiLab, y su herramienta I2C Probe. Puedes detectar fácilmente dispositivos en el bus I2C y utilizar el motor de predicción incorporado para adivinar cuáles son. Y luego - puedes ensuciarte las manos y hurgar directamente en el interior del propio módulo.
Empecemos
En este tutorial, vamos a investigar el BMP280, un sensor de presión de aire de Bosch. Estos sensores son bastante omnipresentes, pero no se engañe, son sensores increíblemente potentes que se pueden configurar literalmente de miles de maneras para satisfacer las necesidades de millones de dispositivos. En Lab401 creemos que comprender es más importante que hacer. Cuanto más profundo sea su conocimiento, más podrá hacer.
El módulo BMP280, en una placa breakout.
Al final del tutorial, habrás adquirido las siguientes habilidades:
- Cómo comunicarse con módulos desconocidos a través de los primeros principios.
- Cómo aprovechar las hojas de datos para utilizar módulos desconocidos
- Cómo utilizar el DigiLab para identificar módulos I2C desconocidos
- Cómo modificar directamente la memoria / registros de los módulos I2C
- Aprovechar la IA para crear herramientas útiles
En este tutorial, cubriremos los siguientes pasos:
- Conexión del BMP280 al DigiLab
- Detección e identificación del BMP280
- Obtención y uso de la hoja de datos
- Configuración del BMP280
- Obtención de datos de temperatura
- Obtención de datos de presión
- Obtención de datos de calibración
- Crear una herramienta para interpretar los datos obtenidos
Para poder jugar en casa, sólo necesitará tres cosas:
- El accesorio DigiLab Lab401 para FlipperZero®
- Una placa Breakout BMP280
- Algunos cables dupont
Conexión del BMP280 al DigiLab
En primer lugar, conectaremos el módulo Breakout BMP280 al DigiLab. Conectaremos
- El pin 3.3V del DigiLab al pin VCC/3.3v del BMP280
- El pin GND del DigiLab al pin GND del BMP280
- El pin SCL del DigiLab al pin SCL del BMP280
- El pin SDA del DigiLab al pin SDA del BMP280
Este es todo el cableado que necesitamos hacer. Importante - si estás usando una placa diferente, por favor asegúrate de seguir lo que está impreso en la PCB para evitar freír tu módulo.

Detectando e identificando el BMP280
Ahora, conecte su DigiLab a su FlipperZero, y vaya a Apps ' GPIO ' Lab401/DigiLab. Si aún no ha instalado la aplicación, puede conseguirla en la tienda de aplicaciones de Flipper: https://lab.flipper.net/apps/401_digilab.
Si es la primera vez que utiliza la aplicación DigiLab, se le pedirá que calibre su DigiLab. Siga las instrucciones que aparecen en pantalla - toque con la sonda roja el pad +5V, y pulse OK.
En la aplicación DigiLab, dirígete a Sonda I2C. El dispositivo buscará rápidamente dispositivos y te presentará una lista de resultados. Puedes navegar por la lista con las flechas izquierda y derecha.
Si todo se ha conectado correctamente, deberías ver dos dispositivos encontrados. El DigiLab tiene un chip de memoria I2C, por lo que siempre habrá un dispositivo encontrado.
Navega por la lista hasta que veas el dispositivo 0x76. Este número es la dirección del dispositivo, y es "algo" único. Haga clic en el botón Info.

El DigiLab utiliza su motor predictivo para intentar adivinar el tipo de módulo al que está conectado. Puede haber varios tipos de módulo - pero le ayuda a reducir lo que está tratando. Si navegas por la lista, verás que se encuentra el BMP280, y que es un "Sensor de Temperatura y Presión" de Bosch. Genial.
En este punto, podrías hacer clic en el botón R/W para leer y escribir valores de las ranuras de memoria ("registros") del módulo, pero ¿por dónde empezarías? Aquí es donde entran en juego las hojas de datos.
Cómo obtener y utilizar la hoja de datos
Una rápida búsqueda en Internet permite obtener una copia de la hoja de datos del sensor BMP280. La lectura del documento muestra que el sensor es bastante complejo: hay muchas funciones metidas en un paquete diminuto. Tiene múltiples filtros para tratar los picos, puede ser sondeado lentamente pero con precisión, o (muy) rápidamente, tiene múltiples modos de potencia y resoluciones diferentes.
Más específicamente, vamos a tener que configurar el sensor (es decir, escribir nuestros ajustes preferidos en él) antes de que podamos obtener datos de él.
Para nuestros propósitos, el documento se vuelve realmente interesante alrededor de la página 25, cuando discute los diferentes registros. Un registro es otra forma de referirse a un trozo de memoria. Según la documentación, cada registro en el BMP280 es de 8 bits, o 1 byte de datos. Cada registro tiene una dirección (normalmente referida en hexadecimal).
Es bueno ver que Bosch se preocupa por los clientes que utilizan gráficos CGA.
En la Tabla 18, podemos ver la disposición de la memoria. Hay cuatro secciones que parecen interesantes:
-
0xF5: El registro que contiene los datos de configuración del dispositivo -
0xF4: El registro que contiene la configuración de la medición -
0x88 - 0xA1: Los registros que contienen los valores de calibración -
0xF7 - 0xF9: Los registros que contienen los valores de presión -
0xFA - 0xFC: Los registros que contienen los valores de temperatura
Con la información de esta tabla, podemos completar los pasos 3 - 6:
- Configuración del BMP280
- Obtención de datos de temperatura
- Obtención de datos de presión
- Extracción de datos de calibración
Configuración del BMP280
Empecemos por configurar el BMP280. No tenemos requisitos muy técnicos (es decir, no necesitamos un modo de consumo ultrabajo ni un sondeo ultrarrápido). Podemos consultar en la página 26 los detalles sobre cómo se construye este valor de configuración. Un valor de configuración corriente se compone de la siguiente manera:
0xF5 - Configuración del dispositivo
-
Bit 7,6,5 ->
101(1000ms tiempo de espera) -
Bit 4,3,2 ->
000(coeficiente de filtro = desactivado) -
Bit 1 ->
0 -
Bit 0 ->
0(desactiva SPI de 3 hilos) -
Valor final:
10100000en binario, o0xA0en hexadecimal.
0xF4 - Configuración de la medición
-
Bit 7,6,5 ->
001(Sobremuestreo de temperatura x1) -
Bit 4,3,2 ->
001(Sobremuestreo de presión x1) -
Bit 1,0 ->
11(Modo normal - medidas continuas) -
Valor final:
00100111en binario, o0x27en hexadecimal.
OK - ahora sabemos que si escribimos esos valores en sus registros correspondientes, el módulo empezará a medir datos, ¡y podremos leerlos de vuelta! Volvamos al DigiLab para escribir los valores.
En la App DigiLab, ve a I2C Probe, y selecciona el dispositivo con la dirección 0x76. Esta vez, haz click en el botón R/W - y serás llevado a una pantalla donde puedes introducir el registro que quieres modificar.
Introduce el registro F5 (puedes teclearlo, o usar las flechas del teclado para aumentar la dirección) y pulsa OK. Ahora se nos pregunta cuántos datos debemos leer del registro. Por el documento, sabemos que es de 1 byte, así que introducimos 1 y pulsamos OK.
Ahora estamos dentro del editor hexadecimal del DigiLab, y mirando directamente a la memoria del BMP280. Usando las teclas de flecha, ajusta el valor del registro a A0 y pulsa OK. Obtendrás una confirmación de que el chip ha sido programado.

Ahora, haz lo mismo para el registro 0xF4, poniendo su valor a 27 y pulsa OK. De nuevo, obtendrás una confirmación de que el chip ha sido programado. Enhorabuena. El BMP280 está ahora configurado y midiendo datos de acuerdo con sus valores de configuración. Siguiente paso: ¡leamos los valores!
Obtención de los datos de temperatura
Puede que lo hayas adivinado - para extraer los datos de temperatura, necesitamos comprobar los valores en los registros 0xFA - 0xFC. Revisa cada registro y anota los datos en algún sitio.

Extraer los datos de presión
Repite el proceso para los datos de presión, en los registros 0xF7 - 0xF9. De nuevo, revise cada registro y anote los datos en algún lugar.
Extracción de los datos de calibración
El BMP280 se autocalibra utilizando una variedad de puntos de datos diferentes. Para traducir correctamente los valores de presión y temperatura, también necesitamos anotar los datos de calibración. Así que, repite el proceso una última vez, para los registros 0x88 - 0xA1.
En total, deberías tener 3 bytes de datos de temperatura, 3 bytes de datos de presión, y 26-ytes de valores de calibración - algo como:
Datos de temperatura
0xFA: 0x88 0xFB: 0x27 0xFC: 0x00
Datos de presión 0xF7: 0x54 0xF8: 0x8C 0xF9: 0x00 Datos de calibración 0x88: 37 0x89: 70 0x8A: d0 0x8B: 68 0x8C: 32 0x8D: 00 0x8E: 1C 0x8F: 90 0x90: 25 0x91: D6 0x92: D0 0x93: 0B 0x94: 04 0x95: 1B 0x96: 40 0x97: 00 0x98: F9 0x99: FF 0x9A: B4 0x9B: 2D 0x9C: E8 0x9D: D1 0x9E: 88 0x9F: 13 0xA0: 00 0xA1: 4B
Construir una herramienta para interpretar los datos recuperados
Estamos listos para transformar los datos en algo legible para el ser humano. Según la hoja de especificaciones (en la página 21), los datos se almacenan en un formato llamado "complemento a dos de 16 bits". En lugar de pasar horas luchando para construir una herramienta, aprovechamos la IA para que nos construya un intérprete. Hemos utilizado el agente / cli herramienta Aider con Claude Opus, pero cualquier modelo o medios funcionaría muy bien.
Hacer una herramienta de calculadora javascript que toma valores de temperatura de 0xFA-0xFC y valores de presión de 0xF7-0xF9, y los valores de calibración de 0x88-0xA1 - de un módulo BMP280, y proporciona una salida de temperatura (en °C) y una salida de presión en hectoPascales.
Visite la calculadora en línea aquí
Podemos introducir nuestros datos en la herramienta resultante y obtendremos los valores correctos de temperatura y presión del sensor.
Incluso podemos ampliar la herramienta para calcular la altitud. Calcular la altitud es bastante sencillo:
altitud = 44330 * (1 - (presión/nivel_del_mar)^0.1903)
La única variable que nos falta es "presión_nivel_del_mar". Podemos utilizar una "media global", 1013,25hPa, pero los resultados tendrán un gran margen de error. También podemos obtener la presión del nivel del mar de una estación meteorológica cercana.
Modifique el formulario de la Calculadora como sigue:
1) Cuando se haya hecho clic en Calcular temperatura y presión, y se hayan calculado los resultados, añada un botón bajo el marco "Información de depuración":"Estimar Altitud (Requiere Localización)".Debajo de este botón, añada en cursiva"Los datos de localización se utilizan para enviar una solicitud anónima a la API de Open-Meteo, para recuperar el valor de presión atmosférica QNH/nivel del mar más cercano a usted. Esto nos permite estimar tu altitud actual".
Cuando el usuario haga clic en este botón, solicite sus datos de localización a través del navegador. Si se niegan, mostrar un cuadro de error que diga:"Lo sentimos, no podemos estimar la altitud sin datos de localización".
Si tenemos los datos de localización del usuario, enviar una petición a Open-Meteo para recuperar el valor QNH más cercano a su ubicación.
Si hay un error, mostrarlo en un cuadro Si obtenemos información correcta, utilizar todos los datos para estimar la altitud actual del usuario.
Visita la calculadora en línea aquí
Ahora, ¡la herramienta puede incluso estimar la altitud! En nuestra opinión, la capacidad de realizar rápidamente misiones secundarias es una herramienta perfecta para la IA. Tradicionalmente, este tipo de herramienta habría tardado al menos una hora en terminarse, lo que nos habría desviado de nuestros objetivos principales.
Resumiendo
Hemos visto que la función Sonda I2C del Lab401 DigiLab es increíblemente útil. Es potente, versátil, pero fácil de usar. Abstrae todas las partes difíciles de la comunicación, y utiliza su "Motor de Predicción" para identificar diferentes módulos, e incluso le permite leer y escribir valores directamente en el módulo.
La exploración de módulos I2C ha sido tradicionalmente bastante torpe, o requiere herramientas más caras, escribir código y, en general, no es una experiencia fácil. El DigiLab hace que la exploración de I2C no sólo sea sencilla, sino accesible a cualquiera, para que tu curiosidad no se vea bloqueada por frustraciones.
Tarea para casa
Hemos mencionado que el DigiLab tiene un chip de memoria I2C integrado. Con todo lo que has aprendido, tu tarea consiste en utilizar el DigiLab para detectar e identificar el chip de memoria y, a continuación, escribir algunos valores en él. Puedes comprobar si ha funcionado - desconectando el DigiLab y volviéndolo a conectar - los datos que has escrito seguirán guardados en la memoria. Si alguna vez necesita almacenar en secreto algunos datos que no quiere que su Flipper conozca, ¡ahora tiene un escondite!
Recursos
Las dos herramientas para interpretar los datos del sensor BMP280 están disponibles en GitHub para su experimentación y adaptación : https://github.com/lab-401/digilab-tutorial-bmp280
Dejar un comentario