Inhaltsverzeichnis:

Erste Schritte mit der I2C-Sensorschnittstelle? - Schnittstelle zu Ihrem MMA8451 mit ESP32s - Gunook
Erste Schritte mit der I2C-Sensorschnittstelle? - Schnittstelle zu Ihrem MMA8451 mit ESP32s - Gunook

Video: Erste Schritte mit der I2C-Sensorschnittstelle? - Schnittstelle zu Ihrem MMA8451 mit ESP32s - Gunook

Video: Erste Schritte mit der I2C-Sensorschnittstelle? - Schnittstelle zu Ihrem MMA8451 mit ESP32s - Gunook
Video: 0x05 Grundlagen I2C 2024, Juli
Anonim
Erste Schritte mit der I2C-Sensorschnittstelle? - Verbinden Sie Ihr MMA8451 mit ESP32s
Erste Schritte mit der I2C-Sensorschnittstelle? - Verbinden Sie Ihr MMA8451 mit ESP32s

In diesem Tutorial erfahren Sie alles darüber, wie Sie ein I2C-Gerät (Beschleunigungsmesser) starten, verbinden und mit dem Controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU) arbeiten.

Schritt 1: Erste Schritte mit I2C - Die großartige Welt der Inter-IC-Kommunikation

Die Arduino-, ESP-Serie, PIC, Rasberry PI usw. sind alle unglaublich. Aber was macht man damit, wenn man einen hat?

Das Beste ist, Sensoren und dergleichen hinzuzufügen. Heutzutage verwendet ein Großteil der heißen neuen Technologie das I2C-Protokoll, damit Computer, Telefone, Tablets oder Mikrocontroller mit den Sensoren kommunizieren können. Smartphones wären weniger intelligent, wenn sie nicht mit diesem Beschleunigungssensor kommunizieren könnten, um zu wissen, in welche Richtung Ihr Telefon zeigt.

Schritt 2: Überblick über I2C

I2C ist ein serielles, synchrones Halbduplex-Kommunikationsprotokoll, das die Koexistenz mehrerer Master und Slaves auf demselben Bus ermöglicht. Der I2C-Bus besteht aus zwei Leitungen: Serial Data Line (SDA) und Serial Clock (SCL). Beide Leitungen benötigen Pull-Up-Widerstände.

SDA (Serial Data) – Die Leitung für Master und Slave zum Senden und Empfangen von Daten. SCL (Serial Clock) – Die Leitung, die das Taktsignal trägt. Mit Vorteilen wie Einfachheit und geringen Herstellungskosten wird I2C hauptsächlich für die Kommunikation von Peripheriegeräten mit niedriger Geschwindigkeit über kurze Distanzen (innerhalb eines Fußes) verwendet.

Möchten Sie mehr über I2C erfahren?……

Schritt 3: So konfigurieren Sie I²C-Sensoren

Bevor Sie mit dem Projekt beginnen, müssen Sie einige Grundlagen Ihres Sensors verstehen. Also schenk dir eine Tasse Kaffee ein, bevor du eintauchst:)? …

Die große Stärke von I2C besteht darin, dass Sie so viele Sensoren an die gleichen vier Drähte anschließen können. Bei Geräten mit mehreren angeschlossenen vorgefertigten Modulen müssen Sie jedoch möglicherweise ein paar SMD-Widerstände aus den Breakouts entfernen, da sonst der Pullup auf dem Bus zu aggressiv wird.

Welche Informationen wollen wir vom Datenblatt?

  1. Sensorfunktionalität
  2. Pinbelegung und Pin-Funktionalität
  3. Schnittstellenbeschreibung (Verpassen Sie nicht die „I2c-Adressauswahltabelle“)
  4. Registriert!!

Alles ist in Ordnung, Sie werden es leicht finden, aber Register? REGISTERS sind einfach Speicherorte innerhalb eines I²C-Geräts. Die Zusammenfassung, wie viele Register sich in einem bestimmten Sensor befinden und was sie steuern oder enthalten, wird als Registerzuordnung bezeichnet. Bei den meisten Informationen im Datenblatt des Sensors geht es darum, die Funktionsweise der einzelnen Register zu erklären, und es kann ziemlich mühsam sein, sie durchzulesen, da die Informationen selten direkt präsentiert werden.

Um Ihnen ein Gefühl dafür zu geben, was ich damit meine: Es gibt viele Arten von Registern, aber für diese Einführung werde ich sie in zwei allgemeine Typen einteilen: Steuer- und Datenregister.

1) Kontrollregister

Die meisten Sensoren ändern ihre Funktionsweise basierend auf den in den Steuerregistern gespeicherten Werten. Stellen Sie sich Steuerregister als Bänke von Ein/Aus-Schaltern vor, die Sie einschalten, indem Sie ein Bit auf 1 setzen, und ausschalten, indem Sie dieses Bit auf 0 setzen. I²C-Chip-basierte Sensoren haben oft ein Dutzend oder mehr Betriebseinstellungen für Dinge wie Bit- Modi, Interrupts, Lese-/Schreibsteuerung, Tiefe, Abtastgeschwindigkeit, Rauschunterdrückung usw., sodass Sie normalerweise Bits in mehreren verschiedenen Steuerregistern setzen müssen, bevor Sie tatsächlich lesen können.

2) Datenregister Im Gegensatz zu einer Bank von Schaltern für Steuerregister stelle ich mir Datenausgaberegister als Container vor, die Zahlen enthalten, die zufällig in binärer Form gespeichert sind. Wenn Sie also Daten wissen möchten, lesen Sie immer Datenregister wie Wer bin ich registriere zur Geräteidentifikation, Statusregister usw.

Die Initialisierung eines I²C-Sensors ist also ein mehrstufiger Prozess und die richtige Reihenfolge der Operationen wird oft in umgekehrter Richtung erklärt, anstatt einfach im Datenblatt. Liste, die niemals sagt „Um einen Messwert von diesem Sensor zu erhalten, tun Sie (1), (2), (3), (4) usw.“, aber Sie finden Beschreibungen der Steuerregisterbits, die sagen „bevor Sie Bit x in dieser setzen“Register müssen Sie in diesem anderen Steuerregister das Bit y setzen“.

Trotzdem finde ich immer, dass ein Datenblatt interaktiver ist als der meiste Text. wenn Sie es für ein bestimmtes Stück oder bestimmte Informationen referenzieren und es Ihnen alle Details, Verbindungen und Referenzen gibt. Setzen Sie sich einfach hin und lesen Sie, um alle Ihre Referenzen herauszubekommen.:)

Schritt 4: Beginnen Sie mit Bewegung - Beschleunigungsmesser

Moderne Beschleunigungsmesser sind mikroelektromechanische Systeme (MEMS), was bedeutet, dass sie auf einem kleinen Chip im kleinsten Gerät Platz finden. Eine Methode zur Messung der Beschleunigung, die von MEMS-Beschleunigungsmessern verwendet wird, besteht darin, eine winzige leitende Masse zu verwenden, die an Federn aufgehängt ist. Die Beschleunigung des Geräts bewirkt, dass sich die Federn dehnen oder zusammenziehen, und die Auslenkung der leitfähigen Masse kann durch eine Kapazitätsänderung zu nahegelegenen, festen Platten gemessen werden.

Beschleunigungsmesser werden durch die folgenden Merkmale spezifiziert:

  1. Die Anzahl der Achsen, von einer bis drei Achsen, die in den Spezifikationsdiagrammen mit X, Y und Z bezeichnet sind. Beachten Sie, dass einige Beschleunigungsmesser als 6-Achsen oder 9-Achsen bezeichnet werden, aber das bedeutet nur, dass sie mit anderen MEMS-Geräten wie Gyroskopen und/oder Magnetometern gebündelt sind. Jedes dieser Geräte hat auch drei Achsen, weshalb es 3, 6 oder 9-Achsen Inertial Measurement Units (IMUs) gibt.
  2. Die Art der Ausgabe, entweder analog oder digital. Ein digitaler Beschleunigungsmesser übernimmt die Formatierung der Beschleunigungsdaten in eine digitale Darstellung, die über I2C oder SPI ausgelesen werden kann.
  3. Der Beschleunigungsbereich wird in g gemessen, wobei 1 g die Beschleunigung aufgrund der Erdanziehung ist.
  4. Coprozessoren, die einige der Berechnungen auslagern können, die zum Analysieren der Rohdaten von der MCU erforderlich sind. Die meisten Beschleunigungsmesser verfügen über eine einfache Unterbrechungsfunktion, um einen Beschleunigungsschwellenwert (Schock) und einen 0-g-Zustand (freier Fall) zu erkennen. Andere können die Rohdaten weiterverarbeiten, um der MCU aussagekräftigere Daten bereitzustellen.

Schritt 5: Schnittstelle mit Controller

Da wir ESP-Mikrocontroller im Trend kennen, verwenden wir ESP32 für unser Beispiel. Sie benötigen also zunächst ein Nodemcu-32s.

Keine Sorge, wenn Sie andere ESP-Boards oder sogar Arduino haben !!! Sie müssen nur Ihre Arduino-IDE und Konfiguration gemäß Ihren Entwicklungsboards einrichten, für Arduino, ESP NodeMCU, ESP32s usw. Sie benötigen auch eine Art I2C-Teile, normalerweise auf einem Breakout-Board. In diesem Tutorial werde ich MMA8451 verwenden digitale Beschleunigungsmesser-Breakout-Platine.

Und ein paar Überbrückungsdrähte….

Schritt 6: Verbindungen

Anschlüsse
Anschlüsse

Und hier ist ein Layout.

Ich habe die folgende Verbindung vom obigen Modul zu meinem Nodemcu-32s-Modul verwendet.

ESP32s -- Modul

3v3 -- Vin

Gnd -- Gnd

SDA 21 -- SDA

SCL 22 -- SCL

"Denken Sie daran, dass meistens nicht alle Entwicklungsboards (meistens in ESPs) eine gute klare Pinbelegung haben, um zu bestimmen, welche Pins verwendet werden!!"

Schritt 7: Code

Dies erfordert die Adafruit-Bibliothek

von

Downloaden, entpacken und Sie finden den Beispielordner, im Ordner einfach MMA8451demo in Ihrer Arduino IDE öffnen und los gehts….

Sie sehen folgenden Code für Ihre MMA8451-Sensorschnittstelle mit Ihrem Controller

#enthalten

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451(); Void setup (void) {Serial.begin (9600); Draht. Begin(4, 5); /* i2c-Bus mit SDA=D1 und SCL=D2 von NodeMCU verbinden */ Serial.println("Adafruit MMA8451 test!"); if (! mma.begin ()) { Serial.println ("Konnte nicht starten"); während (1); } Serial.println ("MMA8451 gefunden!"); mma.setRange(MMA8451_RANGE_2_G); Serial.print ("Bereich = "); Serial.print (2 << mma.getRange()); Serial.println("G"); aufrechtzuerhalten. Void Schleife () { // Lesen Sie die 'rohen' Daten in 14-Bit-Zählungen mma.read (); Serial.print("X:\t"); Serial.print (mma.x); Serial.print("\tY:\t"); Serial.print (mma.y); Serial.print("\tZ:\t"); Serial.print (mma.z); Serial.println(); /* Holen Sie sich ein neues Sensorereignis */ sensor_event_t event; mma.getEvent(&event); /* Ergebnis anzeigen (Beschleunigung wird in m/s^2 gemessen) */ Serial.print("X: \t"); Serial.print (event.acceleration.x); Serial.print("\t"); Serial.print("Y:\t"); Serial.print (event.acceleration.y); Serial.print("\t"); Serial.print("Z:\t"); Serial.print (event.acceleration.z); Serial.print("\t"); Serial.println("m/s^2"); /* Ermittelt die Ausrichtung des Sensors */ uint8_t o = mma.getOrientation(); Schalter (o) { Fall MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); brechen; Fall MMA8451_PL_PUB: Serial.println ("Portrait Up Back"); brechen; Fall MMA8451_PL_PDF: Serial.println ("Portrait Down Front"); brechen; Fall MMA8451_PL_PDB: Serial.println ("Portrait Down Back"); brechen; Fall MMA8451_PL_LRF: Serial.println ("Querformat vorne rechts"); brechen; Fall MMA8451_PL_LRB: Serial.println ("Querformat rechts hinten"); brechen; Fall MMA8451_PL_LLF: Serial.println ("Querformat links vorne"); brechen; Fall MMA8451_PL_LLB: Serial.println ("Querformat links hinten"); brechen; } Serial.println(); Verzögerung (1000); }

Speichern, überprüfen und hochladen……

Öffnen Sie den seriellen Monitor und Sie werden so etwas sehen, ich habe den Sensor bewegt, daher die verschiedenen Messwerte

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m/s^2

Querformat vorne links

X: -224 Y: -2020 Z: 3188

X: -5,10 Y: -3,19 Z: 7,00 m/s^2

Hochformat vorne

Nun, wenn alles so gelaufen ist, wie es sollte, dann haben Sie jetzt die Grundlagen von I2C und wie Sie Ihr Gerät anschließen.

Aber Gerät funktioniert nicht??

Gehen Sie einfach mit dem nächsten Schritt……

Schritt 8: Bringen Sie Ihr I2C-Gerät zum Laufen

Grundlegende Schritte, um I2C-Geräte zum Laufen zu bringen

Lassen Sie uns untersuchen ….

  • Verkabelung ist korrekt.. (überprüfe es noch einmal)
  • Programm ist korrekt..(Ja, es ist ein Testbeispiel..)

Beginnen Sie mit Stufen zu lösen…..

Stufe 1: Führen Sie das I2C-Gerätescannerprogramm aus, um die Geräteadresse zu überprüfen, und zuerst ist Ihr I2C-Gerät in Ordnung

Sie können eine Skizze herunterladen und die Ausgabe überprüfen.

Ergebnis - Gerät funktioniert und Sensoradresse ist richtig

I2C-Scanner. Scannen …

Adresse gefunden: 28 (0x1C) Fertig. 1 Gerät(e) gefunden.

Stufe 2: Sensorbibliothek prüfen

Öffnen Sie die Datei Adafruit_MMA8451.h und suchen Sie die Geräteadresse

Ergebnis - Adresse unterscheidet sich von meinem Gerät??

/*=============================================== ========================= I2C-ADRESSE/BITS --------------------- -------------------------------------------------- */ #define MMA8451_DEFAULT_ADDRESS (0x1D) //!< Standard MMA8451 I2C-Adresse, wenn A GND ist, seine 0x1C /*======================= ================================================ */

Do - Datei vom Notepad bearbeiten (Adresse ändern) + Speichern + IDE neu starten

Es funktioniert. Sie können Ihre Messwerte abrufen.

Noch nicht…..???

Stufe 3: Überprüfen Sie, ob Wire.begin überschrieben ist?

Öffnen Sie die Datei Adafruit_MMA8451.c und suchen Sie Wire.begin.

Ergebnis - Diese Anweisung wird überschrieben

/************************************************ ************************ //*! @brief Richtet die HW ein (liest Koeffizientenwerte usw.) */ /************************************ ****************************************/ bool Adafruit_MMA8451::begin(uint8_t i2caddr) { Draht.begin(); _i2caddr = i2caddr;

Do - Datei vom Notepad bearbeiten (Kommentaranweisung) + Speichern + IDE neu starten

Und schließlich Gerät funktioniert …

Ich überfrachte dieses Tutorial fast, weil sein Hauptziel darin bestand, zu erklären, wie man startet, Daten aus dem Datenblatt erhält, eine Verbindung herstellt und das I2C-Gerät mit einem sehr einfachen Beispiel zum Laufen bringt. Hoffe, dass alles so läuft, wie es sollte, und es wird nützlich sein, Ihren Sensor zu starten.

Empfohlen: