Salta il contenuto

Scroll Indicator

I2C Sensor Seduction: DigiLab + Flipper

Seduzione del sensore I2C: DigiLab + Flipper

Il DigiLab è un accessorio per FlipperZero realizzato da Lab401 e tixlegeek, che mira a diventare il primo strumento che si raggiunge quando si esplora l'elettronica. È dotato di un oscilloscopio e di una sonda integrati e sfrutta il suono, la luce e le vibrazioni come strumenti di feedback fisico, consentendo un modo completamente nuovo e curiosamente intuitivo di esplorare i circuiti.

È dotato anche di uno strumento di sonda I2C. Probabilmente avrete sentito parlare di I2C e, se avete costruito dei gadget basati su Arduino o RaspberryPi e dotati di aggeggi, probabilmente avrete anche usato I2C.

L'I2C è un protocollo di comunicazione nato negli anni '80, ma che oggi rimane il protocollo di riferimento per le comunicazioni a bassa velocità tra moduli e sensori grazie alla sua semplicità (utilizza solo due fili), flessibilità (si possono avere fino a 127+ dispositivi sulle stesse linee e parlare con loro individualmente!

Prima che vi addormentiate, ecco la domanda chiave: perché dovrei entusiasmarmi per uno strumento che parla un protocollo vecchio di 40 anni?

La realtà è che lavorare con i dispositivi I2C, anche oggi, può essere molto frustrante. La maggior parte dei sensori I2C non sono altro che microcomputer con cui è possibile comunicare. Supponiamo di avere un sensore di temperatura e di voler sapere qual è la sua temperatura. In teoria, basta chiedergli qual è la temperatura e lui ve lo dirà. In realtà, è necessario collegare il sensore a un qualche tipo di computer: un Arduino, un ESP-32, un Raspberry PI. Poi bisogna impostare un ambiente di programmazione per il dispositivo host e quindi trovare una libreria o scrivere codice per cercare di interfacciarsi con il sensore. È molto inefficiente e imbarazzante. Perché non si può semplicemente accedere al sensore, prendere i dati ed essere a posto, senza problemi?

Con la sonda I2C di DigiLab, lavorare con I2C è un gioco da ragazzi. Collegando il modulo, questo viene automaticamente rilevato (e supporta anche più moduli contemporaneamente). Inoltre, identifica ogni modulo grazie al motore predittivo incorporato. L'invio e il recupero dei dati avvengono tramite l'interfaccia utente integrata e l'editor esadecimale. In definitiva, è possibile collegare, rilevare, identificare e interagire con un modulo I2C in pochi minuti, anziché in ore.

Iniziamo

In questa esercitazione impareremo a collegare e leggere i dati di un sensore in meno di un minuto. Lavoreremo con il sensore LM75A, un sensore di temperatura molto diffuso. Vedremo come collegare il modulo, identificarlo e leggere i dati di temperatura direttamente dal sensore - senza codice, senza debug.

The LM75ADPSensor on a breakout board.Esistono molte schede breakout LM75A, ma questa è la mia.

Al termine dell'esercitazione, avrete acquisito le seguenti competenze:

  • Come comunicare con moduli sconosciuti tramite i principi primi
  • Come sfruttare i data-sheet per utilizzare moduli sconosciuti
  • Come utilizzare il DigiLab per identificare i moduli I2C sconosciuti
  • Come leggere direttamente la memoria/registri dei moduli I2C
  • Sfruttare l'intelligenza artificiale per costruire strumenti utili

In questo tutorial, verranno illustrati i seguenti passaggi:

  1. Collegamento dell'LM75ADP al DigiLab
  2. Rilevamento e identificazione dell'LM75ADP
  3. Ottenere e utilizzare la scheda tecnica
  4. Lettura dei dati di temperatura
  5. Creazione di uno strumento per interpretare i dati recuperati

Nota bene: il DigiLab può anche scrivere dati su dispositivi I2C, consentendo un controllo completo della configurazione dei sensori, della scrittura su chip di memoria, ecc. Abbiamo un'altra esercitazione sull'uso del DigiLab con un sensore BMP280, un sensore molto più complesso che richiede lettura e scrittura. È un po' più complesso, ma è comunque possibile controllarlo completamente con il DigiLab. Se volete imparare a interagire completamente con sensori e moduli, è una lettura consigliata!

Per giocare a casa vostra, avrete bisogno solo di tre cose:

Collegamento dell'LM75A al DigiLab

Per prima cosa, colleghiamo il modulo LM75A Breakout al DigiLab. Collegheremo:

  • Il pin 3,3 V del DigiLab al pin VCC/3,3 V dell'LM75A.
  • Il pin GND del DigiLab al pin GND dell'LM75A
  • Il pin SCL del DigiLab al pin SCL dell'LM75A
  • Il pin SDA del DigiLab al pin SDA dell'LM75A

Questo è tutto il cablaggio necessario! Importante: se si utilizza una scheda diversa, assicurarsi di seguire quanto stampato sul PCB per evitare di friggere il modulo!

Rilevamento e identificazione dell'LM75

Ora, collegate il DigiLab a FlipperZero e andate in Applicazioni ' GPIO ' Lab401/DigiLab. Se non avete ancora installato l'applicazione, potete ottenerla dal Flipper App Store: https://lab.flipper.net/apps/401_digilab.

Se è la prima volta che si utilizza l'applicazione DigiLab, verrà chiesto di calibrare il DigiLab. Seguire le istruzioni sullo schermo: toccare la sonda rossa sul pad +5V e fare clic su OK.

Nell'app DigiLab, selezionare I2C Probe. Il dispositivo esegue una scansione rapida dei dispositivi e presenta un elenco di risultati. È possibile navigare nell'elenco con le frecce destra e sinistra.
Se tutto è stato collegato correttamente, si dovrebbero vedere due dispositivi trovati. Il DigiLab è dotato di un chip di memoria I2C, quindi verrà sempre trovato un dispositivo.

Scorrere l'elenco fino a visualizzare il dispositivo 0x46. Questo numero è l'indirizzo del dispositivo ed è "in qualche modo" unico. Fare clic sul pulsante Info.

DigiLab utilizza il suo motore predittivo per cercare di indovinare il tipo di modulo a cui è collegato. Potrebbero esserci più tipi di moduli, ma questo aiuta a restringere il campo. Se si scorre l'elenco, si vedrà che è stato trovato l'LM75B e che si tratta di un "Sensore di temperatura" di NXP. Ottimo!

A questo punto, si potrebbe fare clic sul pulsante R/W per leggere e scrivere i valori dagli slot di memoria del modulo ("registri"), ma da dove iniziare? È qui che entrano in gioco le schede tecniche.

Ottenere e utilizzare la scheda tecnica

Con una rapida ricerca sul web si ottiene una copia della scheda tecnica del sensore LM75A.

Scorrendo il documento, si scopre che il sensore può fare diverse cose interessanti (può anche essere usato come termostato, che si attiva a determinate temperature). Tuttavia, ciò che ci interessa maggiormente è a pagina 6, con l'elenco dei registri (Tabella 5). Un registro è il nome di una porzione di memoria in cui vengono memorizzati i dati. Pensate a questo nome come a una cassetta postale. Ha un numero, si possono inserire e togliere dati e, a seconda delle dimensioni, memorizzare quantità diverse.

L'LM75A memorizza i dati di temperatura nel registro con l'indirizzo: 0x00. Il registro ha una dimensione totale di 2 byte.

A pagina 8 viene descritto come vengono codificati i dati e vengono forniti alcuni esempi di decodifica. Ora sappiamo dove prendere i dati, quanti dati prendere e come convertirli in qualcosa di leggibile!

Lettura dei dati di temperatura

Nell'applicazione DigiLab, andare su I2C Probe e selezionare il dispositivo con l'indirizzo 0x48. Questa volta, fare clic sul pulsante R/W - e si accederà a una schermata in cui è possibile inserire il registro che si desidera leggere.

Inserite il registro 00 (potete digitarlo o usare i tasti freccia per aumentare l'indirizzo) e fate clic su OK. Ora ci viene chiesto quanti dati dobbiamo leggere dal registro. Dal documento sappiamo che è di 2 byte, quindi immettiamo 2 e facciamo clic su OK.

Ora ci troviamo all'interno dell'editor esadecimale del DigiLab e stiamo scrutando direttamente la memoria dell'LM75. Possiamo vedere che ci sono due byte di dati. Si tratta della risposta del modulo alla temperatura!

Prendete nota di questi due byte: Nel nostro esempio, 1E 20

Costruire uno strumento per interpretare i dati recuperati

Ora che abbiamo recuperato i dati, dobbiamo convertirli in una forma leggibile dall'uomo. La scheda tecnica ci ha fornito informazioni su come sono codificati i dati e una serie di esempi. Possiamo sfruttare questi dati e un motore AI per costruire uno strumento per decodificare i dati.

Stiamo lavorando con un sensore di temperatura LM75A.
Il sensore conserva i dati di temperatura in due byte di dati a 8 bit, costituiti da un byte più significativo (MSByte) e da un byte meno significativo (LSByte).

- Solo 11 bit di questi due byte vengono utilizzati per memorizzare i dati di temperatura in formato complemento a 2 con una risoluzione di 0,125 °C.
- Nell'MSByte vengono utilizzati tutti i bit.
- Nell'LSByte vengono utilizzati solo i bit 7, 6 e 5. I restanti bit vengono scartati.

I bit rimanenti vengono scartati.

I bit sono mappati come segue:
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 viene calcolata con il seguente metodo:
1. Se il bit MSByte D10 dei dati Temp = 0, la temperatura è positiva e

Valore Temp (°C) = +(dati Temp) * 0,125 °C.

2. Se il bit MSByte dei dati Temp = 0, la temperatura è positiva. Se il bit MSByte D10 dei dati Temp = 1, la temperatura è negativa e

Valore Temp (°C) = -(complemento a 2 dei dati Temp) * 0,125 °C.

Costruire uno strumento Javascript che prenda in input due byte esadecimali e decodifichi la temperatura corrispondente. Ricordarsi di convertire l'esadecimale in binario, scartando i bit 4, 3, 2, 1 e 0 dal byte LSB. Quindi mappare i valori dei bit di MSByte e LSByte come da tabella precedente ed eseguire la conversione.

L'intelligenza artificiale gorgoglierà per un po' e si spera di ottenere uno strumento in grado di convertire i dati di temperatura del modulo in qualcosa di leggibile. Anche se esitiamo a dichiarare l'IA un fattore positivo, gli LLM ci permettono di iterare rapidamente strumenti che in precedenza ci avrebbero distratto dal compito principale.

Congratulazioni!

Congratulazioni: avete appena imparato a usare il DigiLab per addomesticare i moduli I2C. Come potete vedere, il DigiLab astrae da più livelli di complessità, permettendovi di lavorare direttamente con i moduli. In questa esercitazione ci siamo limitati a leggere i dati, ma è altrettanto facile scriverli. Abbiamo in programma un articolo sull'uso del DigiLab per configurare un modulo più complesso scrivendo direttamente sul modulo.

Compito a casa

Abbiamo detto che il DigiLab ha un chip di memoria I2C a bordo! Con tutto ciò che avete imparato, il vostro compito a casa consiste nell'utilizzare il DigiLab per rilevare e identificare il chip di memoria e quindi scrivere alcuni valori su di esso. Potete verificare se ha funzionato, scollegando e ricollegando il DigiLab: i dati che avete scritto saranno ancora salvati in memoria. Se avete bisogno di memorizzare segretamente alcuni dati che non volete che il vostro Flipper conosca, ora avete un nascondiglio!

Le risorse

Il nostro strumento per l'interpretazione dei dati del sensore LM75A è disponibile su GitHub per la sperimentazione e l'adattamento: https: //github.com/lab-401/digilab-tutorial-lm75a

Articolo successivo DigiLab: estrazione di dati dal nulla (e un modulo BMP280)

Lascia un commento

I commenti devono essere approvati prima di pubblicazione

* Campi obbligatori