Zu Inhalt springen

Scroll Indicator

I2C Sensor Seduction: DigiLab + Flipper

I2C-Sensor-Verführung: DigiLab + Flipper

Das DigiLab ist ein von Lab401 und tixlegeek entwickeltes Zubehör für FlipperZero, das das erste Werkzeug sein soll, zu dem man greift, wenn man Elektronik erforscht. Es verfügt über ein eingebautes Oszilloskop- und Tastwerkzeug und nutzt Ton, Licht und Vibrationen als physikalische Feedback-Tools, die eine völlig neue und intuitive Art der Erforschung von Schaltkreisen ermöglichen.

Außerdem verfügt er über ein I2C-Probe-Tool. Sie haben wahrscheinlich schon von I2C gehört, und wenn Sie Arduino- oder RaspberryPi-basierte Geräte mit angeschlossenen Gizmos gebaut haben, haben Sie wahrscheinlich sogar I2C verwendet.

I2C ist ein Kommunikationsprotokoll, das in den 1980er Jahren entwickelt wurde, aber auch heute noch das Standardprotokoll für die Kommunikation mit niedrigeren Geschwindigkeiten zwischen Modulen und Sensoren ist, weil es so einfach ist (es werden nur zwei Drähte benötigt), so flexibel (Sie können bis zu 127+ Geräte auf denselben Leitungen haben und sie einzeln ansprechen!) und so allgegenwärtig (fast alles spricht I2C).

Bevor Sie einschlafen, hier die entscheidende Frage: Warum sollte ich mich für ein Tool begeistern, das ein 40 Jahre altes Protokoll spricht?

Die Realität ist, dass die Arbeit mit I2C-Geräten auch heute noch sehr frustrierend sein kann. Die meisten I2C-Sensoren sind einfach nur Mikrocomputer, mit denen man kommunizieren kann. Nehmen wir an, Sie haben einen Temperatursensor und möchten wissen, wie hoch die Temperatur ist. Theoretisch können Sie ihn einfach fragen, wie hoch die Temperatur ist, und er wird es Ihnen sagen. In Wirklichkeit müssen Sie den Sensor mit einem Computer verbinden - einem Arduino, einem ESP-32, einem Raspberry PI. Dann müssen Sie eine Programmierumgebung für das Host-Gerät einrichten und dann eine Bibliothek finden oder einen Code schreiben, um eine Schnittstelle zum Sensor zu finden. Das ist sehr ineffizient und fühlt sich umständlich an. Warum kann man nicht einfach auf den Sensor zugreifen, die Daten abgreifen und das war's dann auch schon, ohne viel Aufhebens?

Mit der I2C Probe von DigiLab ist die Arbeit mit I2C ein Kinderspiel. Schließen Sie das Modul an, und es wird automatisch erkannt (und unterstützt sogar mehrere Module gleichzeitig). Außerdem wird jedes Modul mit der eingebauten Predictive Engine identifiziert. Das Senden und Abrufen von Daten erfolgt über die integrierte Benutzeroberfläche und den Hex-Editor. Alles in allem können Sie ein I2C-Modul in Minuten statt in Stunden anschließen, erkennen, identifizieren und mit ihm interagieren.

Los geht's

In diesem Tutorial werden wir lernen, wie man einen Sensor in weniger als einer Minute anschließt und Daten von ihm ausliest. Wir werden mit dem LM75A-Sensor arbeiten - einem sehr beliebten Temperatursensor. Wir werden sehen, wie wir das Modul anschließen, identifizieren und Temperaturdaten direkt vom Sensor lesen können - ohne Code und ohne Debugging.

The LM75ADPSensor on a breakout board.Es gibt viele LM75A-Breakout-Boards, aber dies ist mein eigenes.

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 auslesen kann
  • Nutzung von AI zur Erstellung nützlicher Tools

In diesem Tutorial werden wir die folgenden Schritte behandeln:

  1. Anschließen des LM75ADP an das DigiLab
  2. Erkennen und Identifizieren des LM75ADP
  3. Beschaffung und Verwendung des Datenblatts
  4. Lesen von Temperaturdaten
  5. Erstellen eines Tools zur Interpretation der abgerufenen Daten

Bitte beachten Sie: Das DigiLab kann auch Daten in I2C-Geräte schreiben, wodurch Sie die vollständige Kontrolle über die Konfiguration von Sensoren, das Schreiben in Speicherchips usw. erhalten. Wir haben eine weitere Anleitung zur Verwendung des DigiLab mit einem BMP280-Sensor - einem viel komplexeren Sensor, der gelesen und geschrieben werden muss. Er ist etwas komplizierter, aber dennoch kann man ihn vollständig mit dem DigiLab steuern. Wenn Sie lernen wollen, wie man vollständig mit Sensoren und Modulen interagiert, sollten Sie dieses Buch lesen!

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

Anschließen des LM75A an das DigiLab

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

  • den 3,3V-Pin des DigiLab mit dem VCC/3,3V-Pin des LM75A
  • Den GND-Pin des DigiLab mit dem GND-Pin des LM75A
  • Der SCL-Pin des DigiLab wird mit dem SCL-Pin des LM75A verbunden.
  • Der DigiLab-SDA-Pin wird mit dem SDA-Pin des LM75A verbunden.

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 LM75

Verbinden Sie nun Ihr DigiLab mit Ihrem FlipperZero und gehen Sie zu 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 0x46 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 der LM75B gefunden wurde und dass es sich um einen "Temperatursensor" von NXP handelt. Toll!

An diesem Punkt 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 Websuche führt zu einer Kopie des Datenblatts für den LM75A-Sensor.

Beim Scannen des Dokuments sehen wir, dass der Sensor eine Reihe interessanter Funktionen hat (er kann auch als Thermostat verwendet werden, der bei bestimmten Temperaturen auslöst). Was uns jedoch am meisten interessiert, ist Seite 6 mit der Registerliste (Tabelle 5). Ein Register ist die Bezeichnung für einen Speicherbereich, in dem Daten gespeichert werden. Stellen Sie es sich wie einen Briefkasten vor. Es hat eine Nummer, Sie können Dinge hineinlegen, Dinge herausnehmen und je nach Größe unterschiedliche Mengen darin speichern.

Das LM75A speichert die Temperaturdaten in einem Register mit der Adresse: 0x00. Das Register hat eine Gesamtgröße von 2 Byte.

Auf Seite 8 wird beschrieben, wie die Daten kodiert sind, und es werden einige Beispiele für die Dekodierung gegeben. Jetzt wissen wir, woher wir die Daten bekommen, wie viele Daten wir brauchen und wie wir sie in etwas für den Menschen Lesbares umwandeln können!

Lesen von Temperaturdaten

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

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

Wir befinden uns nun im integrierten Hex-Editor des DigiLab und können direkt in den Speicher des LM75 schauen. Wir können sehen, dass es zwei Bytes an Daten gibt. Dies ist die Temperaturantwort des Moduls!

Achten Sie auf diese beiden Bytes: In unserem Beispiel: 1E 20

Erstellen eines Tools zur Interpretation der abgerufenen Daten

Jetzt, wo wir die Daten abgerufen haben, müssen wir sie in eine für Menschen lesbare Form umwandeln. Das Datenblatt gab uns Informationen darüber, wie die Daten kodiert sind, und eine Reihe von Beispielen. Wir können diese Daten und eine KI-Engine nutzen, um ein Tool zur Dekodierung der Daten zu entwickeln

Wir arbeiten mit einem LM75A-Temperatursensor.
Der Sensor speichert die Temperaturdaten in zwei 8-Bit-Datenbytes, die aus einem höchstsignifikanten Byte (MSByte) und einem niedrigstsignifikanten Byte (LSByte) bestehen.

- Nur 11 Bits dieser beiden Bytes werden verwendet, um die Temperaturdaten im 2er-Komplement-Format mit einer Auflösung von 0,125 °C zu speichern.
- Im MSByte werden alle Bits verwendet.
- Im LSByte werden nur die Bits 7, 6 und 5 verwendet.

Die restlichen Bits werden verworfen.

Die Bits sind wie folgt gemappt:
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` 
Die Temperatur wird nach folgendem Verfahren berechnet:
1. Ist das Temp-Daten MSByte Bit D10 = 0, dann ist die Temperatur positiv und

Temp-Wert (°C) = +(Temp-Daten) * 0,125 °C.

2. Wenn das MSByte-Bit D10 der Temp-Daten = 1 ist, dann ist die Temperatur negativ und

Temp-Wert (°C) = -(2er-Komplement der Temp-Daten) * 0,125 °C.

Erstellen Sie ein Javascript-Tool, das zwei hexadezimale Bytes als Eingabe annimmt und die entsprechende Temperatur dekodiert. Denken Sie daran, die Hexadezimalzahlen in Binärzahlen umzuwandeln und die Bits 4, 3, 2, 1 und 0 des LSByte zu verwerfen. Dann ordnen Sie die Bitwerte von MSByte und LSByte gemäß der obigen Tabelle zu und führen die Umwandlung durch.

AI wird eine Weile vor sich hin gurgeln, und dann haben Sie hoffentlich ein Tool, das die Temperaturdaten des Moduls in etwas für den Menschen Lesbares umwandelt. Wir zögern zwar, die KI als positiv zu bewerten, aber LLMs ermöglichen uns die schnelle Iteration von Werkzeugen, die uns früher von der eigentlichen Aufgabe abgelenkt hätten.

Herzlichen Glückwunsch!

Glückwunsch - Sie haben soeben gelernt, wie man mit dem DigiLab I2C-Module zähmt. Wie Sie sehen, abstrahiert das DigiLab mehrere Ebenen der Komplexität und erlaubt Ihnen, direkt mit Modulen zu arbeiten. Während wir in diesem Tutorial nur Daten lesen, können Sie genauso gut Daten schreiben. In einem kommenden Artikel werden wir uns mit der Verwendung des DigiLab beschäftigen, um ein komplexeres Modul zu konfigurieren, indem wir direkt in das Modul schreiben.

Hausaufgabe

Wir haben bereits erwähnt, dass das DigiLab über einen integrierten I2C-Speicherchip verfügt! Mit allem, was du gelernt hast, ist deine Hausaufgabe, 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

Unser Tool zum Interpretieren der LM75A-Sensordaten ist auf GitHub zum Experimentieren und Anpassen verfügbar: https: //github.com/lab-401/digilab-tutorial-lm75a

Nächster Artikel DigiLab : Daten aus der Luft holen (und ein BMP280-Modul)

Einen Kommentar hinterlassen

Kommentare müssen genehmigt werden, bevor sie erscheinen

* Erforderliche Felder