Zu Inhalt springen

Scroll Indicator

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

DigiLab : Daten aus der Luft holen (und ein BMP280-Modul)

Eine der erstaunlichsten Eigenschaften des DigiLab-Zubehörs von Lab401 für FlipperZero® ist die I2C-Probe. Wenn Sie schon einmal mit Elektronik, Mikrocontrollern oder eingebetteten Computern wie dem ESP-32 herumgespielt haben, werden Sie zweifellos auf I2C gestoßen sein.

Dabei handelt es sich um ein Kommunikationsprotokoll, das über nur zwei Drähte funktioniert und es ermöglicht, mehrere (theoretisch Tausende...) von Geräten und Sensoren an dieselben Leitungen anzuschließen und dennoch eine direkte Kommunikation zu ermöglichen.

Obwohl es erst in den 1980er Jahren erfunden wurde, ist es eine unglaublich wichtige und beliebte Technologie. Es ist keine Übertreibung, dass es buchstäblich Tausende von I2C-Sensortypen und Millionen von Geräten gibt, die sie verwenden!

Module, Module, Module.

Aber wie interagiert man mit einem I2C-Sensor, der auf dem Schreibtisch steht?

Heute würde man normalerweise zu einem Ardunio oder Raspberry Pi greifen und hoffen, dass jemand eine Bibliothek dafür geschrieben hat. Vielleicht kämpft man mit Lochrasterplatinen und Steckbrücken, und vielleicht wünscht man sich eine Möglichkeit, direkt mit dem Modul zu kommunizieren. Oder vielleicht ist es ein unmarkierter AliExpress Magical Mystery Chip, und Sie haben keine Ahnung, was er kann. Oder schlimmer noch, vielleicht müssen Sie etwas Spezielles tun, das die Bibliotheken nicht abdecken - und es gibt keine einfache Möglichkeit, es zu tun.

Hier kommt das DigiLab und sein I2C Probe Toolins Spiel. Sie können ganz einfach Geräte auf dem I2C-Bus aufspüren und mit der eingebauten Vorhersage-Engine erraten, um welche Geräte es sich handelt. Und dann - können Sie sich die Hände schmutzig machen und direkt im Modul selbst herumstochern.

Los geht's

In diesem Lernprogramm werden wir den BMP280, einen Luftdrucksensor von Bosch, untersuchen. Diese Sensoren sind ziemlich allgegenwärtig - aber lassen Sie sich nicht täuschen, es handelt sich um unglaublich leistungsstarke Sensoren, die auf buchstäblich Tausende von Arten konfiguriert werden können, um die Anforderungen von Millionen von Geräten zu erfüllen. Bei Lab401 sind wir der Meinung, dass Verstehen wichtiger ist als Handeln. Je mehr Sie verstehen, desto mehr können Sie tun.

The BMP280 Sensor on a breakout board.Das BMP280-Modul auf einem Breakout-Board.

Am Ende des Tutorials werden Sie die folgenden Fähigkeiten erworben haben:

  • Wie man mit unbekannten Modulen über erste Prinzipien kommuniziert
  • Wie man Datenblätter nutzt, um unbekannte Module zu verwenden
  • Wie man das DigiLab benutzt, um unbekannte I2C-Module zu identifizieren
  • Wie man den Speicher / die Register von I2C-Modulen direkt modifizieren kann
  • Nutzung von AI zur Erstellung nützlicher Tools

In diesem Tutorial werden wir die folgenden Schritte behandeln:

  1. Anschließen des BMP280 an das DigiLab
  2. Erkennen und Identifizieren des BMP280
  3. Beschaffung und Verwendung des Datenblatts
  4. Konfigurieren des BMP280
  5. Abrufen von Temperaturdaten
  6. Abrufen von Druckdaten
  7. Abrufen von Kalibrierungsdaten
  8. Erstellen eines Tools zur Interpretation der abgerufenen Daten

Um zu Hause mitspielen zu können, brauchen Sie nur drei Dinge:

Anschließen des BMP280 an das DigiLab

Zuerst schließen wir das BMP280 Breakout-Modul an das DigiLab an. Wir werden anschließen:

  • Den 3.3V-Pin des DigiLab mit dem VCC/3.3v-Pin des BMP280
  • Den GND-Pin des DigiLab mit dem GND-Pin des BMP280
  • Der DigiLab SCL-Pin an den SCL-Pin des BMP280
  • Der DigiLab SDA-Pin an den SDA-Pin des BMP280

Das ist die gesamte Verkabelung, die wir vornehmen müssen! Wichtig - wenn Sie eine andere Platine verwenden, stellen Sie bitte sicher, dass Sie sich an die Angaben auf der Platine halten, damit Ihr Modul nicht kaputt geht!

Erkennung und Identifizierung des BMP280

Verbinden Sie nun Ihr DigiLab mit Ihrem FlipperZero und gehen Sie in Apps ' GPIO ' Lab401/DigiLab. Wenn du die App noch nicht installiert hast, kannst du sie aus dem Flipper App Store herunterladen: https://lab.flipper.net/apps/401_digilab.

Wenn Sie die DigiLab-App zum ersten Mal verwenden, werden Sie aufgefordert, Ihr DigiLab zu kalibrieren. Folgen Sie den Anweisungen auf dem Bildschirm - berühren Sie mit der roten Sonde das +5V-Pad und klicken Sie auf OK.

Gehen Sie in der DigiLab App zu I2C Probe. Das Gerät scannt schnell nach Geräten und zeigt Ihnen eine Liste der Ergebnisse an. Sie können mit den Pfeiltasten nach links und rechts in der Liste navigieren.
Wenn alles richtig angeschlossen wurde, sollten Sie zwei gefundene Geräte sehen. Das DigiLab ist mit einem I2C-Speicherchip ausgestattet, so dass immer nur ein Gerät gefunden wird.

Navigieren Sie durch die Liste, bis Sie das Gerät 0x76 sehen. Diese Nummer ist die Adresse des Geräts, und sie ist "einigermaßen" eindeutig. Klicken Sie auf die Schaltfläche Info.

Das DigiLab versucht mit Hilfe seiner Vorhersagefunktion, den Modultyp zu erraten, an den es angeschlossen ist. Es kann mehrere Modultypen geben - aber es hilft Ihnen bei der Eingrenzung, womit Sie es zu tun haben. Wenn Sie in der Liste navigieren, sehen Sie, dass das BMP280 gefunden wurde und dass es sich um einen "Temperatur- und Drucksensor" von Bosch handelt. Toll!

An dieser Stelle könnten Sie auf die Schaltfläche R/W klicken, um Werte aus den Speicherplätzen ("Registern") des Moduls zu lesen und zu schreiben - aber wo würden Sie anfangen? An dieser Stelle kommen die Datenblätter ins Spiel.

Beschaffung und Verwendung des Datenblatts

Eine schnelle Suche im Internet führt zu einer Kopie des Datenblatts für den BMP280-Sensor. Bei der Durchsicht des Dokuments wird deutlich, dass der Sensor ziemlich komplex ist - in einem winzigen Gehäuse steckt eine Menge Funktionalität. Er verfügt über mehrere Filter, um Spikes abzufangen, kann langsam, aber präzise oder (sehr) schnell abgefragt werden und hat mehrere verschiedene Leistungsmodi und Auflösungen.

Genauer gesagt, müssen wir den Sensor konfigurieren (d. h. unsere bevorzugten Einstellungen in ihn schreiben), bevor wir Daten von ihm abrufen können.

Für unsere Zwecke wird das Dokument ab Seite 25 wirklich interessant, wenn es um die verschiedenen Register geht. Ein Register ist eine andere Bezeichnung für einen Speicherbereich. Laut der Dokumentation besteht jedes Register im BMP280 aus 8 Bits oder 1 Byte Daten. Jedes Register hat eine Adresse (in der Regel in hexadezimaler Schreibweise).

Es ist schön zu sehen, dass Bosch sich um die Kunden kümmert, die CGA-Grafiken verwenden.

In Tabelle 18 sehen wir das Speicherlayout. Es gibt vier Abschnitte, die interessant zu sein scheinen:

  1. 0xF5: Das Register, das die Gerätekonfigurationsdaten enthält
  2. 0xF4: Das Register, das die Messkonfiguration enthält
  3. 0x88 - 0xA1: Die Register, die die Kalibrierungswerte enthalten
  4. 0xF7 - 0xF9: Die Register, die die Druckwerte enthalten
  5. 0xFA - 0xFC: Die Register für die Temperaturwerte

Mit den Informationen aus dieser Tabelle können wir nun die Schritte 3 - 6 durchführen:

  • Konfigurieren des BMP280
  • Ziehen von Temperaturdaten
  • Ziehen von Druckdaten
  • Ziehen von Kalibrierungsdaten

Konfigurieren des BMP280

Beginnen wir mit der Konfiguration des BMP280. Wir haben keine hochtechnischen Anforderungen (d.h. wir brauchen keinen Ultra-Low-Power-Modus oder eine ultraschnelle Abfrage). Auf Seite 26 können wir nachlesen, wie dieser Konfigurationswert aufgebaut ist. Ein gewöhnlicher Konfigurationswert ist wie folgt aufgebaut:

0xF5 - Gerätekonfiguration

  • Bit 7,6,5 -> 101 (1000ms Standby-Zeit)
  • Bit 4,3,2 -> 000 (Filterkoeffizient = aus)
  • Bit 1 -> 0
  • Bit 0 -> 0 (schaltet 3-Draht-SPI aus)
  • Endwert: 10100000 im Binärformat oder 0xA0 im Hexadezimalformat.

0xF4 - Konfiguration der Messung

  • Bit 7,6,5 -> 001 (Temperaturüberabtastung x1)
  • Bit 4,3,2 -> 001 (Druck-Überabtastung x1)
  • Bit 1,0 -> 11 (Normalbetrieb - kontinuierliche Messungen)
  • Endgültiger Wert: 00100111 im Binärformat oder 0x27 im Hexadezimalformat.

OK - jetzt wissen wir, dass, wenn wir diese Werte in die entsprechenden Register schreiben, das Modul mit der Messung beginnt und wir in der Lage sein werden, die Daten zurückzulesen! Gehen wir also zurück zum DigiLab, um die Werte zu schreiben!

Gehen Sie in der DigiLab App zu I2C Probe und wählen Sie das Gerät mit der Adresse 0x76. Diesmal klicken Sie auf die Schaltfläche R/W - und Sie gelangen zu einem Bildschirm, in dem Sie das Register eingeben können, das Sie ändern möchten.

Geben Sie das Register F5 ein (Sie können es eintippen oder die Pfeiltasten verwenden, um die Adresse zu erhöhen) und klicken Sie auf OK. Jetzt werden wir gefragt, wie viele Daten wir aus dem Register lesen sollen. Aus dem Dokument wissen wir, dass es 1 Byte ist, also geben wir 1 ein und klicken auf OK.

Wir befinden uns jetzt im integrierten Hex-Editor des DigiLab und können direkt in den Speicher des BMP280 schauen. Mit den Pfeiltasten setzen wir den Wert des Registers auf A0 und klicken Sie auf OK. Sie erhalten eine Bestätigung, dass der Chip programmiert wurde.

Machen Sie dasselbe mit dem Register 0xF4 und setzen Sie seinen Wert auf 27 und klicken Sie auf OK. Auch hier erhalten Sie eine Bestätigung, dass der Chip programmiert wurde. Herzlichen Glückwunsch! Der BMP280 ist nun konfiguriert und misst Daten gemäß Ihren Konfigurationswerten. Nächster Schritt - wir lesen die Werte aus!

Auslesen der Temperaturdaten

Sie haben es vielleicht schon erraten - um die Temperaturdaten auszulesen, müssen wir die Werte in den Registern 0xFA - 0xFC überprüfen. Gehen Sie jedes Register durch und notieren Sie die Daten irgendwo.

Auslesen der Druckdaten

Wiederholen Sie den Vorgang für die Druckdaten in den Registern 0xF7 - 0xF9. Gehen Sie auch hier jedes Register durch und notieren Sie die Daten irgendwo.

Abrufen der Kalibrierungsdaten

Der BMP280 kalibriert sich selbst, indem er eine Vielzahl verschiedener Datenpunkte verwendet. Um die Druck- und Temperaturwerte korrekt umrechnen zu können, müssen wir auch die Kalibrierungsdaten notieren. Wiederholen Sie also den Vorgang ein letztes Mal, für die Register 0x88 - 0xA1.

Alles in allem sollten Sie 3 Byte Temperaturdaten, 3 Byte Druckdaten und 26 Byte Kalibrierungswerte haben - etwa so:

Temperaturdaten
0xFA: 0x88 0xFB: 0x27 0xFC: 0x00
Druckdaten 0xF7: 0x54 0xF8: 0x8C 0xF9: 0x00 Kalibrierungsdaten 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

Aufbau eines Werkzeugs zur Interpretation der abgerufenen Daten

Wir sind bereit, die Daten in etwas für den Menschen Lesbares umzuwandeln. Laut Datenblatt (Seite 21) sind die Daten in einem Format namens "16-Bit-Zweierkomplement" gespeichert. Anstatt stundenlang mit der Entwicklung eines Tools zu kämpfen, nutzen wir die KI, um uns einen Interpreter zu bauen. Wir haben das Agenten-/KI-Tool Aider mit Claude Opus verwendet, aber jedes Modell oder Mittel würde gut funktionieren.

Erstellen Sie ein Javascript-Rechner-Tool, das Temperaturwerte von 0xFA-0xFC und Druckwerte von 0xF7-0xF9 sowie die Kalibrierungswerte von 0x88-0xA1 von einem BMP280-Modul übernimmt und eine Temperaturausgabe (in °C) und eine Druckausgabe in HektoPascal liefert.

Besuchen Sie den Online-Rechner hier

Wir können unsere Daten in das resultierende Tool eingeben, und es gibt die korrekten Temperatur- und Druckwerte des Sensors aus.

Wir können das Tool sogar erweitern, um die Höhe zu schätzen. Die Berechnung der Höhe ist recht einfach:

Höhe = 44330 * (1 - (Druck/Meeresspiegeldruck)^0,1903)

Die einzige Variable, die uns fehlt, ist "sea_level_pressure". Wir können entweder einen "globalen Durchschnitt", 1013,25hPa, verwenden, aber die Ergebnisse werden eine große Fehlerspanne haben. Alternativ können wir den sea_level_pressure von einer nahegelegenen Wetterstation abrufen!

Ändern Sie das Formular Calculator wie folgt:
1) Wenn " Calculate Temperature and Pressure" angeklickt wurde und die Ergebnisse berechnet wurden, fügen Sie eine Schaltfläche unter dem Rahmen "Debug Information" hinzu:"Höhe schätzen (Lokalisierung erforderlich)".

Fügen Sie unter dieser Schaltfläche in kursiver Schrift hinzu:"Lokalisierungsdaten werden verwendet, um eine anonyme Anfrage an die Open-Meteo API zu senden, um den QNH/Seeluftdruckwert in Ihrer Nähe abzurufen. Dies ermöglicht uns, Ihre aktuelle Höhe zu schätzen."

Wenn der Benutzer auf diese Schaltfläche klickt, fordern Sie seine Lokalisierungsdaten über den Browser an. Lehnt er dies ab, zeigen Sie eine Fehlermeldung an, die besagt: "Ohne Lokalisierungsdaten können wir die Höhe leider nicht schätzen."

Wenn wir die Lokalisierungsdaten des Benutzers haben, senden Sie eine Anfrage an Open-Meteo, um den QNH-Wert abzurufen, der dem Standort des Benutzers am nächsten kommt.

Wenn es einen Fehler gibt, zeigen Sie ihn in einem Rahmen an. Wenn wir erfolgreiche Informationen erhalten, verwenden Sie alle Daten, um die aktuelle Höhe des Benutzers zu schätzen.

Besuchen Sie den Online-Rechner hier

Jetzt kann das Tool sogar die Höhe schätzen! Unserer Meinung nach ist die Fähigkeit, Nebenaufgaben schnell zu erledigen, ein perfektes Werkzeug für KI. Normalerweise hätte es mindestens eine Stunde gedauert, um diese Art von Aufgaben zu lösen, was uns von unseren Hauptzielen abgelenkt hätte.

Resümee

Wir haben gesehen, dass die I2C Probe-Funktion des Lab401 DigiLab unglaublich nützlich ist. Sie ist leistungsstark, vielseitig, aber einfach zu bedienen. Sie abstrahiert alle schwierigen Teile der Kommunikation und verwendet ihre "Prediction Engine", um verschiedene Module zu identifizieren, und lässt Sie sogar Werte direkt in das Modul lesen und schreiben.

Das Erforschen von I2C-Modulen war bisher ziemlich umständlich oder erforderte teure Tools, das Schreiben von Code und war im Allgemeinen keine einfache Erfahrung. Das DigiLab macht die Erforschung von I2C nicht nur einfach, sondern auch für jedermann zugänglich, so dass Ihre Neugier nicht durch Frustrationen behindert wird.

Hausaufgabe

Wir haben bereits erwähnt, dass das DigiLab einen I2C-Speicherchip an Bord hat! Mit allem, was du gelernt hast, besteht deine Hausaufgabe darin, das DigiLab zu benutzen, um den Speicherchip zu erkennen und zu identifizieren, und dann einige Werte in ihn zu schreiben. Du kannst überprüfen, ob es geklappt hat, indem du das DigiLab trennst und wieder anschließt - die geschriebenen Daten sind dann immer noch im Speicher gespeichert. Falls du einmal heimlich Daten speichern musst, von denen dein Flipper nichts wissen soll, hast du jetzt ein Versteck!

Ressourcen

Die beiden Tools zur Interpretation der BMP280-Sensordaten sind auf GitHub zum Experimentieren und Anpassen verfügbar: https: //github.com/lab-401/digilab-tutorial-bmp280

Vorheriger Artikel I2C-Sensor-Verführung: DigiLab + Flipper
Nächster Artikel Conoce tus cartas mágicas

Einen Kommentar hinterlassen

Kommentare müssen genehmigt werden, bevor sie erscheinen

* Erforderliche Felder