Salta il contenuto

Scroll Indicator

DigiLab : Pulling Data from thin air (and a BMP280 module)

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

Una delle caratteristiche sorprendenti dell'accessorio DigiLab di Lab401 per FlipperZero® è la sonda I2C. Se avete mai giocato con l'elettronica, i microcontrollori o i computer embedded come l'ESP-32, vi sarete sicuramente imbattuti nell'I2C.

Si tratta di un protocollo di comunicazione che funziona su due soli fili e che consente di collegare alle stesse linee più dispositivi e sensori (in teoria migliaia...), pur essendo in grado di gestire la comunicazione diretta.

Sebbene sia stato inventato negli anni '80, è una tecnologia incredibilmente importante e popolare. Non è esagerato dire che esistono letteralmente migliaia di tipi di sensori I2C e milioni di dispositivi che li utilizzano!

Moduli, moduli, moduli.

Ma se avete un sensore I2C sulla vostra scrivania, come potete interagire con esso?

Oggi, in genere, si prende un Ardunio o un Raspberry Pi e si spera che qualcuno abbia scritto una libreria per il sensore. Forse si combatte con breadboard e ponticelli e forse si desidera un modo per parlare direttamente con il modulo. O forse si tratta di un chip magico e misterioso non contrassegnato da AliExpress e non si ha idea di cosa faccia. O peggio, forse avete bisogno di fare qualcosa di speciale che le librerie non coprono e non c'è un modo semplice per farlo.

Ecco DigiLab e il suo strumento I2C Probe. È possibile rilevare facilmente i dispositivi sul bus I2C e utilizzare il motore predittivo incorporato per indovinare quali sono. E poi, potete sporcarvi le mani e curiosare direttamente all'interno del modulo stesso.

Iniziamo

In questa esercitazione analizzeremo il BMP280, un sensore di pressione dell'aria di Bosch. Questi sensori sono piuttosto comuni, ma non lasciatevi ingannare: sono sensori incredibilmente potenti che possono essere configurati in migliaia di modi per soddisfare i requisiti di milioni di dispositivi. Noi di Lab401 crediamo che capire sia più importante che fare. Quanto più profonda è la vostra comprensione, tanto più sarete in grado di fare.

The BMP280 Sensor on a breakout board.Il modulo BMP280, su una scheda breakout.

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

  • Come comunicare con i moduli sconosciuti attraverso i principi primi
  • Come sfruttare i data-sheet per utilizzare i moduli sconosciuti
  • Come utilizzare il DigiLab per identificare i moduli I2C sconosciuti
  • Come modificare 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 del BMP280 al DigiLab
  2. Rilevamento e identificazione del BMP280
  3. Ottenere e utilizzare la scheda tecnica
  4. Configurazione del BMP280
  5. Estrazione dei dati di temperatura
  6. Estrazione dei dati di pressione
  7. Estrazione dei dati di calibrazione
  8. Creare uno strumento per interpretare i dati recuperati

Per giocare a casa, sono necessari solo tre elementi:

Collegamento del BMP280 al DigiLab

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

  • Il pin 3,3 V del DigiLab al pin VCC/3,3 V del BMP280.
  • Il pin GND del DigiLab al pin GND del BMP280
  • Il pin SCL del DigiLab al pin SCL del BMP280
  • Il pin SDA del DigiLab al pin SDA del BMP280

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 del BMP280

Ora collegate il DigiLab a FlipperZero e andate in Applicazioni ' GPIO ' Lab401/DigiLab. Se l'applicazione non è ancora stata installata, è possibile ottenerla dall'App Store di Flipper: 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.

Spostarsi nell'elenco fino a visualizzare il dispositivo 0x76. 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 il BMP280 e che si tratta di un "Sensore di temperatura e pressione" di Bosch. Forte!

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 è possibile ottenere una copia della scheda tecnica del sensore BMP280. La consultazione del documento mostra che il sensore è in realtà piuttosto complesso, con una grande quantità di funzionalità racchiuse in un piccolo pacchetto. Dispone di filtri multipli per gestire i picchi, può essere interrogato lentamente ma con precisione o (molto) rapidamente, ha diverse modalità di alimentazione e risoluzioni.

Più specificamente, dovremo configurare il sensore (cioè scriverci le nostre impostazioni preferite) prima di poterne estrarre i dati.

Per i nostri scopi, il documento diventa molto interessante a pagina 25, quando si parla dei diversi registri. Un registro è un altro modo per riferirsi a una porzione di memoria. Secondo la documentazione, ogni registro del BMP280 è composto da 8 bit, ovvero 1 byte di dati. Ogni registro ha un indirizzo (tipicamente indicato in esadecimale).

È bello vedere che Bosch si preoccupa dei clienti che utilizzano grafica CGA.

La Tabella 18 mostra il layout della memoria. Ci sono quattro sezioni che sembrano interessanti:

  1. 0xF5: il registro contenente i dati di configurazione del dispositivo.
  2. 0xF4: il registro che contiene la configurazione della misura
  3. 0x88 - 0xA1: i registri contenenti i valori di calibrazione
  4. 0xF7 - 0xF9: i registri contenenti i valori di pressione
  5. 0xFA - 0xFC: i registri che contengono i valori di temperatura

Con le informazioni contenute in questa tabella, possiamo ora completare i passaggi da 3 a 6:

  • Configurazione del BMP280
  • Prelievo dei dati di temperatura
  • Prelievo dei dati di pressione
  • Prelievo dei dati di calibrazione

Configurazione del BMP280

Cominciamo a configurare il BMP280. Non abbiamo requisiti altamente tecnici (ad esempio, non abbiamo bisogno di una modalità a bassissimo consumo o di un polling ultraveloce). Per i dettagli su come si costruisce questo valore di configurazione, si veda pagina 26. Un valore di configurazione ordinario è composto come segue:

0xF5 - Configurazione del dispositivo

  • Bit 7,6,5 -> 101 (tempo di standby di 1000 ms)
  • Bit 4,3,2 -> 000 (coefficiente di filtraggio = off)
  • Bit 1 -> 0
  • Bit 0 -> 0 (disattiva SPI a 3 fili)
  • Valore finale: 10100000 in binario, o 0xA0 in esadecimale.

0xF4 - Configurazione della misura

  • Bit 7,6,5 -> 001 (sovracampionamento della temperatura x1)
  • Bit 4,3,2 -> 001 (Sovracampionamento pressione x1)
  • Bit 1,0 -> 11 (modalità normale - misure continue)
  • Valore finale: 00100111 in binario, o 0x27 in esadecimale.

OK - ora sappiamo che se scriviamo questi valori nei registri corrispondenti, il modulo inizierà a misurare i dati e noi saremo in grado di leggerli! Torniamo al DigiLab per scrivere i valori!

Nell'applicazione DigiLab, andare su I2C Probe e selezionare il dispositivo con l'indirizzo 0x76. Questa volta, fate clic sul pulsante R/W per accedere a una schermata in cui è possibile inserire il registro da modificare.

Inserite il registro F5 (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 1 byte, quindi digitiamo 1 e facciamo clic su OK.

Ora ci troviamo all'interno dell'editor esadecimale di DigiLab e stiamo scrutando direttamente la memoria del BMP280. Utilizzando i tasti freccia, impostiamo il valore del registro su A0 e fare clic su OK. Verrà confermata l'avvenuta programmazione del chip.

Ora fate lo stesso per il registro 0xF4, impostando il suo valore su 27 e fare clic su OK. Anche in questo caso si otterrà la conferma che il chip è stato programmato. Congratulazioni! Il BMP280 è ora configurato e misura i dati in base ai valori di configurazione. Il prossimo passo è la lettura dei valori!

Estrazione dei dati di temperatura

Come avrete capito, per estrarre i dati di temperatura dobbiamo controllare i valori nei registri 0xFA - 0xFC. Esaminare ogni registro e annotare i dati da qualche parte.

Estrazione dei dati di pressione

Ripetere la procedura per i dati sulla pressione, nei registri 0xF7 - 0xF9. Anche in questo caso, scorrere ogni registro e annotare i dati da qualche parte.

Estrazione dei dati di calibrazione

Il BMP280 si autocalibra utilizzando una serie di punti dati diversi. Per tradurre correttamente i valori di pressione e temperatura, è necessario annotare anche i dati di calibrazione. Ripetere quindi la procedura un'ultima volta, per i registri 0x88 - 0xA1.

In totale, si dovrebbero avere 3 byte di dati di temperatura, 3 byte di dati di pressione e 26 byte di valori di calibrazione - qualcosa di simile:

Dati di temperatura
0xFA: 0x88 0xFB: 0x27 0xFC: 0x00
Dati di pressione 0xF7: 0x54 0xF8: 0x8C 0xF9: 0x00 Dati di calibrazione 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

Costruire uno strumento per interpretare i dati recuperati

Siamo pronti a trasformare i dati in qualcosa di leggibile. Secondo la scheda tecnica (a pagina 21), i dati sono memorizzati in un formato chiamato "complemento a due a 16 bit". Invece di passare ore a lottare per costruire uno strumento, sfruttiamo l'intelligenza artificiale per costruire un interprete. Con Claude Opus abbiamo usato l'agente / strumento cli Aider, ma qualsiasi modello o mezzo andrebbe bene.

Creare uno strumento di calcolo javascript che prenda i valori di temperatura da 0xFA-0xFC e di pressione da 0xF7-0xF9, e i valori di calibrazione da 0x88-0xA1 - da un modulo BMP280, e fornisca un output di temperatura (in °C) e di pressione in ettoPascal.

Visitate il calcolatore online qui

Possiamo inserire i nostri dati nello strumento risultante, che fornirà i valori corretti di temperatura e pressione del sensore.

Possiamo anche estendere lo strumento per stimare l'altitudine. Il calcolo dell'altitudine è abbastanza semplice:

altitudine = 44330 * (1 - (pressione/pressione_del_livello_marino)^0,1903)

L'unica variabile che ci manca è la "pressione_del_livello_del_mare". Possiamo usare una "media globale", 1013,25hPa, ma i risultati avranno un ampio margine di errore. In alternativa, possiamo recuperare la pressione_del_livello_del_mare da una stazione meteorologica vicina!

Modificare il modulo Calcolatrice come segue:
1) Quando si fa clic su Calcola temperatura e pressione e i risultati sono stati calcolati, aggiungere un pulsante sotto il riquadro "Informazioni di debug":"Stima altitudine (richiede localizzazione)".

Sotto questo pulsante, aggiungete in corsivo:"I dati di localizzazione vengono utilizzati per inviare una richiesta anonima all'API Open-Meteo, per recuperare il valore di pressione atmosferica QNH/livello del mare più vicino a voi. Questo ci permette di stimare l'altitudine attuale".

Quando l'utente fa clic su questo pulsante, richiede i suoi dati di localizzazione tramite il browser. Se l'utente rifiuta, si deve mostrare un riquadro di errore che dice:"Spiacenti, non possiamo stimare l'altitudine senza i dati di localizzazione".

Se disponiamo dei dati di localizzazione dell'utente, inviamo una richiesta a Open-Meteo per recuperare il valore QNH più vicino alla sua posizione.

Se c'è un errore, mostrarlo in un riquadro Se si ottengono informazioni corrette, utilizzare tutti i dati per stimare l'altitudine attuale dell'utente.

Visitate il calcolatore online qui

Ora lo strumento può anche stimare l'altitudine! A nostro avviso, la capacità di portare a termine rapidamente le missioni secondarie è uno strumento perfetto per l'IA. Tradizionalmente, questo tipo di strumento avrebbe richiesto almeno un'ora per essere portato a termine, distogliendo l'attenzione dai nostri obiettivi principali.

Riassumendo

Abbiamo visto che la funzione I2C Probe del Lab401 DigiLab è incredibilmente utile. È potente, versatile, ma semplice da usare. Astrae tutte le parti difficili della comunicazione e utilizza il suo "Prediction Engine" per identificare i diversi moduli, consentendo anche di leggere e scrivere valori direttamente sul modulo.

L'esplorazione dei moduli I2C è stata tradizionalmente piuttosto complicata o ha richiesto strumenti più costosi, la scrittura di codice e in generale non è stata un'esperienza facile. Il DigiLab rende l'esplorazione dell'I2C non solo semplice, ma anche accessibile a chiunque, in modo che la curiosità non sia bloccata dalla frustrazione.

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, 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

I due strumenti per l'interpretazione dei dati del sensore BMP280 sono disponibili su GitHub per la sperimentazione e l'adattamento: https: //github.com/lab-401/digilab-tutorial-bmp280

Articolo precedente Seduzione del sensore I2C: DigiLab + Flipper
Articolo successivo Conoscere le proprie carte magiche

Lascia un commento

I commenti devono essere approvati prima di pubblicazione

* Campi obbligatori