Ir a contenido

Scroll Indicator

I2C Sensor Seduction: DigiLab + Flipper

Seducción de sensores I2C: DigiLab + Flipper

El DigiLab es un accesorio para FlipperZero fabricado por Lab401 y tixlegeek, que pretende ser la primera herramienta a la que recurras cuando explores la electrónica. Dispone de una herramienta de alcance y una herramienta de sonda integradas, y aprovecha el sonido, la luz y las vibraciones como herramientas de retroalimentación física, lo que permite una forma totalmente nueva y curiosamente intuitiva de explorar circuitos.

También tiene una sonda I2C. Probablemente hayas oído hablar de I2C, y si has construido algún gadget basado en Arduino o RaspberryPi que tenga artilugios conectados, probablemente incluso hayas utilizado I2C.

I2C es un protocolo de comunicación creado en la década de 1980, pero sigue siendo el protocolo de facto hoy en día para las comunicaciones de baja velocidad entre los módulos y sensores debido a su simplicidad (sólo utiliza dos cables), flexibilidad (puede tener hasta 127+ dispositivos en las mismas líneas, y hablar con ellos individualmente) y ubicuidad (casi todo habla I2C).

Antes de que te duermas, ésta es la pregunta clave: ¿por qué debería entusiasmarme una herramienta que habla un protocolo de hace 40 años?

La realidad es que trabajar con dispositivos I2C, incluso hoy en día, puede ser muy frustrante. La mayoría de los sensores I2C no son más que microordenadores con los que puedes comunicarte. Digamos que tienes un sensor de temperatura y quieres saber cuál es la temperatura. En teoría, puedes preguntarle cuál es la temperatura y te lo dirá. En realidad, tienes que conectar el sensor a algún tipo de ordenador: un Arduino, un ESP-32 o una Raspberry PI. Luego hay que configurar un entorno de programación para el dispositivo anfitrión, y luego encontrar una biblioteca o escribir código para tratar de interactuar con el sensor. Es super ineficiente, y se siente incómodo. ¿Por qué no se puede acceder al sensor, obtener los datos y listo, sin complicaciones?

Con la sonda I2C de DigiLab, trabajar con I2C es pan comido. Conecta el módulo y se detectará automáticamente (e incluso admite varios módulos al mismo tiempo). También identifica cada módulo con su motor predictivo incorporado. El envío y la recuperación de datos se realiza a través de la interfaz de usuario integrada y el editor hexadecimal. En definitiva, puedes conectar, detectar, identificar e interactuar con un módulo I2C en cuestión de minutos, en lugar de horas.

Empecemos

En este tutorial, vamos a aprender cómo conectar y leer datos de un sensor en menos de un minuto. Vamos a trabajar con el sensor LM75A - un sensor de temperatura muy popular. Veremos cómo podemos conectar el módulo, identificarlo, y leer los datos de temperatura directamente desde el sensor - sin código, sin depuración.

The LM75ADPSensor on a breakout board.Hay muchas placas LM75A, pero esta es la mía.

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 leer directamente la memoria / registros de los módulos I2C
  • Aprovechar la IA para crear herramientas útiles

En este tutorial, cubriremos los siguientes pasos:

  1. Conexión del LM75ADP al DigiLab
  2. Detección e identificación del LM75ADP
  3. Obtención y uso de la hoja de datos
  4. Lectura de los datos de temperatura
  5. Creación de una herramienta para interpretar los datos obtenidos

Nota: El DigiLab también puede escribir datos en dispositivos I2C, dándote un control completo para configurar sensores, escribir en chips de memoria, etc. Tenemos otro tutorial sobre el uso del DigiLab con un sensor BMP280 - un sensor mucho más complejo, que requiere lectura y escritura. Es un poco más complicado, pero sin embargo puedes controlarlo completamente con el DigiLab. Si quieres aprender a interactuar completamente con sensores y módulos, ¡es una lectura recomendada!

Para jugar en casa, sólo necesitarás tres cosas:

Conexión del LM75A al DigiLab

En primer lugar, conectaremos el módulo LM75A Breakout al DigiLab. Conectaremos

  • El pin 3.3V del DigiLab al pin VCC/3.3v del LM75A
  • El pin GND del DigiLab al pin GND del LM75A
  • El pin SCL del DigiLab al pin SCL del LM75A
  • El pin SDA del DigiLab al pin SDA del LM75A

¡Eso es todo el cableado que necesitamos hacer! Importante: si utilizas una placa diferente, asegúrate de seguir las instrucciones de la placa para evitar que el módulo se funda.

Detección e identificación del LM75

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 Flipper App Store: 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 0x46. 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 LM75B, y que es un "Sensor de Temperatura" de NXP. Genial.

Llegados a este punto, podrías pulsar 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 LM75A.

Escaneando el documento, vemos que el sensor puede hacer un montón de cosas interesantes (también se puede utilizar como termostato, que se activará a temperaturas específicas). Sin embargo, lo que más nos interesa está en la página 6, con la Lista de Registros (Tabla 5). Un Registro es el nombre de un trozo de memoria donde se almacenan datos. Piense que es como un buzón de correos. Tiene un número, puedes poner cosas en él, sacar cosas de él, y dependiendo del tamaño, almacenar diferentes cantidades en él.

El LM75A almacena los datos de temperatura en el Registro con la dirección 0x00. El registro tiene un tamaño total de 2 bytes.

En la página 8 se describe cómo se codifican los datos y se dan algunos ejemplos de cómo decodificarlos. Ahora, sabemos dónde obtener los datos, cuántos datos obtener, y cómo convertirlos en algo legible por humanos.

Lectura de datos de temperatura

En la aplicación DigiLab, ve a Sonda I2C, y selecciona el dispositivo con la dirección 0x48. Esta vez, haz click en el botón R/W - y serás llevado a una pantalla donde puedes introducir el registro que queremos leer.

Introduce el registro 00 (puedes teclearlo, o usar las flechas del teclado para aumentar la dirección) y pulsa OK. Ahora se nos preguntará cuántos datos debemos leer del registro. Por el documento, sabemos que son 2 bytes, así que introducimos 2 y pulsamos OK.

Ahora estamos dentro del editor hexadecimal del DigiLab, y mirando directamente a la memoria del LM75. Podemos ver que hay dos bytes de datos. Esta es la respuesta de temperatura del módulo.

Tome nota de estos dos bytes: En nuestro ejemplo, 1E 20

Construir una herramienta para interpretar los datos recuperados

Ahora que hemos recuperado los datos, tenemos que convertirlos a un formato legible. La hoja de datos nos ha proporcionado información sobre cómo están codificados los datos y un montón de ejemplos. Podemos aprovechar estos datos y un motor de IA para construir una herramienta que decodifique los datos.

Estamos trabajando con un sensor de temperatura LM75A.
El sensor almacena los datos de temperatura en dos bytes de datos de 8 bits, que constan de un Byte Más Significante (MSByte) y un Byte Menos Significante (LSByte).

- Sólo 11 bits de esos dos bytes se utilizan para almacenar los datos de temperatura en formato de complemento a 2 con una resolución de 0,125 °C.
- En el MSByte, se utilizan todos los bits.
- En el LSByte, sólo se utilizan los bits 7, 6, 5. Los bits restantes se descartan.

El resto de bits se descartan.

Los bits se asignan de la siguiente manera:
MSByte Bit 7: `D10`
MSByte Bit 6: "D9
MSByte Bit 5: "D8
MSByte Bit 4: "D7
MSByte Bit 3: "D6
MSByte Bit 2: "D5
MSByte Bit 1: "D4
MSByte Bit 0: "D3
LSByte Bit 7: "D2
MSByte Bit 6: "D1
MSByte Bit 5: "D0 
La temperatura se calcula con el siguiente método:
1. Si el bit MSByte de datos Temp D10 = 0, entonces la temperatura es positiva y

Valor Temp (°C) = +(Datos Temp) * 0,125 °C.

2. Si el bit MSByte de datos Temp D10 = 0, entonces la temperatura es positiva yValor Temp (°C) = +(Datos Temp) * 0,125 °C. 2. Si el bit MSByte D10 de los datos de Temperatura = 1, entonces la temperatura es negativa y

Valor de Temperatura (°C) = -(Complemento a 2 de los datos de Temperatura) * 0.125 °C.

Construya una herramienta Javascript que tome dos bytes Hexadecimales como entrada, y decodifique la temperatura correspondiente. Recuerda convertir el hexadecimal a binario, descartar los bits 4, 3, 2, 1 y 0 del LSByte. A continuación, asigna los valores de bits de MSByte y LSByte según la tabla anterior, y realiza la conversión.

La IA gorgoteará durante un rato, y entonces es de esperar que termines con una herramienta que convertirá los datos de temperatura del módulo en algo legible para el ser humano. Aunque no nos atrevemos a decir que la IA sea algo positivo, los LLM nos permiten iterar rápidamente herramientas que antes nos habrían distraído de la tarea principal.

Enhorabuena.

Enhorabuena, acabas de aprender a utilizar el DigiLab para domar módulos I2C. Como puedes ver, el DigiLab abstrae múltiples capas de complejidad, permitiéndote trabajar directamente con módulos. Aunque en este tutorial sólo leemos datos, puedes escribir datos con la misma facilidad. Tenemos un próximo artículo sobre el uso del DigiLab para configurar un módulo más complejo escribiendo directamente en el módulo.

Tarea para casa

Hemos mencionado que el DigiLab tiene un chip de memoria I2C integrado. Con todo lo que has aprendido, tu tarea es utilizar el DigiLab para detectar e identificar el chip de memoria, y luego 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

Nuestra herramienta para interpretar los datos del sensor LM75A está disponible en GitHub para experimentación y adaptación : https://github.com/lab-401/digilab-tutorial-lm75a

Artículo siguiente DigiLab : Extraer datos del aire (y un módulo BMP280)

Dejar un comentario

Los comentarios deben ser aprobados antes de aparecer

* Campos requeridos