Indholdsfortegnelse:

Kom godt i gang med I2C Sensor Interface ?? - Tilslut din MMA8451 ved hjælp af ESP32s: 8 trin
Kom godt i gang med I2C Sensor Interface ?? - Tilslut din MMA8451 ved hjælp af ESP32s: 8 trin

Video: Kom godt i gang med I2C Sensor Interface ?? - Tilslut din MMA8451 ved hjælp af ESP32s: 8 trin

Video: Kom godt i gang med I2C Sensor Interface ?? - Tilslut din MMA8451 ved hjælp af ESP32s: 8 trin
Video: Control 10 output pins or relay using 10 push button switch with 1 Arduino input pin ANPB-V2 2024, Juli
Anonim
Kom godt i gang med I2C Sensor Interface ?? - Tilslut din MMA8451 ved hjælp af ESP32'er
Kom godt i gang med I2C Sensor Interface ?? - Tilslut din MMA8451 ved hjælp af ESP32'er

I denne vejledning lærer du alt om, hvordan du starter, tilslutter og får I2C -enhed (Accelerometer) til at arbejde med controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Trin 1: Sådan kommer du i gang med I2C - Magnificent World of Inter IC Communication

Arduino, ESP -serien, PIC, Rasberry PI osv. Er alle utrolige. Men hvad gør du med det, når du har en?

Det bedste er at tilføje sensorer og sådan. I dag bruger meget af den hotte nye teknologi I2C -protokollen til at give computeren, telefoner, tablets eller mikrokontroller mulighed for at tale sensorerne. Smart telefoner ville være mindre smarte, hvis de ikke kunne tale med den accelerometer sensor for at vide, hvilken vej din telefon vender.

Trin 2: Oversigt over I2C

I2C er en seriel, synkron, halv dupleks kommunikationsprotokol, der tillader sameksistens af flere mestre og slaver på den samme bus. I2C -bussen består af to linjer: seriel datalinje (SDA) og serielt ur (SCL). Begge linjer kræver pull-up modstande.

SDA (Serial Data) - Linjen for master og slave til at sende og modtage data. SCL (Serial Clock) - Den linje, der bærer urets signal. Med fordele som enkelhed og lave fremstillingsomkostninger bruges I2C mest til kommunikation af periferiudstyr med lav hastighed over korte afstande (inden for en fod).

Vil du lære mere om I2C? ……

Trin 3: Sådan konfigureres I²C -sensorer

Inden du går ind i projektet, skal du forstå et par grundlæggende i din sensor. Så hæld dig en kop kaffe, inden du dykker ind:)? …

Den store styrke ved I2C er, at du kan sætte så mange sensorer på de samme fire ledninger. Men for enheder med flere præfabrikerede moduler tilsluttet, skal du muligvis fjerne et par smd-modstande fra udbrudene, ellers kan pull-up på bussen blive for aggressiv.

Hvilke oplysninger ønsker vi fra databladet ??

  1. Sensorfunktion
  2. Pinouts og pins funktioner
  3. Grænsefladebeskrivelse (gå ikke glip af at se "I2c -adressevalgstabel")
  4. Registrerer !!

Alt er fint, du finder det let, men registrerer ?? REGISTRER er simpelthen hukommelsessteder inde i en I²C -enhed. Resuméet af, hvor mange registre der er i en given sensor, og hvad de styrer eller indeholder, kaldes et registerkort. De fleste oplysninger på sensorens datablad handler om at forklare, hvordan hvert register fungerer, og de kan være en ganske slog at læse igennem, fordi oplysningerne sjældent præsenteres på direkte måde.

For at give dig en fornemmelse af, hvad jeg mener med det: Der er mange slags registre, men til denne introduktion vil jeg gruppere dem i to generelle typer: Kontrol- og dataregistre.

1) Kontrolregistre

De fleste sensorer ændrer, hvordan de fungerer, baseret på de værdier, der er gemt i kontrolregistre. Tænk på kontrolregistre som banker med tænd/sluk-switches, som du tænder ved at indstille lidt til 1 og slukke ved at indstille denne bit til 0. I²C-chipbaserede sensorer har ofte et dusin eller flere driftsindstillinger for ting som bit- Tilstande, afbrydelser, læse-skrive-kontrol, dybde, samplingshastighed, støjreduktion osv., Så du skal normalt indstille bits i flere forskellige kontrolregistre, før du rent faktisk kan foretage en måling.

2) Dataregistre I modsætning til en kontrol registrerer bank-of-switches, tænker jeg på data output-registre som containere, der indeholder numre, som tilfældigvis er gemt i binær form. Så du vil vide data, læs altid dataregistre som hvem er jeg til registrering af enhedsidentifikation, statusregister osv.

Så initialisering af en I²C-sensor er en proces i flere trin, og den korrekte rækkefølge for handlinger forklares ofte i omvendt retning i stedet for en ligetil i databladet. liste, der aldrig siger "For at få en aflæsning fra denne sensor, skal du gøre (1), (2), (3), (4) osv.", men du finder beskrivelser af kontrolregistrets bits, der siger "før du indstiller bit x i dette register skal du indstille bit y i dette andet kontrolregister”.

Jeg finder stadig, at et datablad er mere interaktivt end den fleste tekst. hvis du vil referere det til et bestemt stykke eller oplysninger, og det giver dig alle detaljer, forbindelser og referencer. Bare sæt dig ned og læs for at få alle dine referencer frem.:)

Trin 4: Start med bevægelse - accelerometer

Moderne accelerometre er Micro Electro-Mechanical Systems (MEMS) -enheder, hvilket betyder, at de er i stand til at passe på en lille chip inde i de mindste gadgets. En metode til måling af acceleration, der anvendes af MEMS -accelerometre, er at udnytte en lille ledende masse suspenderet på fjedre. Enhedens acceleration får fjedrene til at strække sig eller trække sig sammen, og afledningen af den ledende masse kan måles gennem en ændring i kapacitans til nærliggende, faste plader.

Accelerometre er specificeret af følgende funktioner:

  1. Antallet af akser, fra en til tre akser, mærket X, Y og Z i specifikationsdiagrammerne. Bemærk, at nogle accelerometre kaldes 6-akse eller 9-akse, men det betyder bare, at de er bundtet med andre MEMS-enheder, såsom gyroskoper og/eller magnetometre. Hver af disse enheder har også tre akser, hvorfor der er 3, 6 eller 9-aksede inertialmåleenheder (IMU'er).
  2. Udgangstypen, enten analog eller digital. Et digitalt accelerometer sørger for at formatere accelerationsdataene til en digital repræsentation, der kan udlæses over I2C eller SPI.
  3. Accelerationsområdet målt i g’er, hvor 1g er accelerationen på grund af Jordens tyngdekraft.
  4. Coprocessorer, der kan aflaste nogle af de beregninger, der er nødvendige for at analysere rådataene fra MCU'en. De fleste accelerometre har en enkel afbrydelsesevne til at detektere en accelerationstærskel (stød) og en 0-g (frit fald) tilstand. Andre kan foretage avanceret behandling af rådataene for at tilbyde mere meningsfulde data til MCU'en.

Trin 5: Interface med controller

Da vi kender ESP Microcontrollers i trend, vil vi bruge ESP32 til vores eksempel. Så først skal du bruge en Nodemcu-32s.

Ingen bekymringer, hvis du har andre ESP -tavler eller endda Arduino !!! Du skal bare konfigurere din Arduino IDE og konfiguration i henhold til dine udviklingstavler, til Arduino, ESP NodeMCU, ESP32s osv … Du skal også bruge en slags I2C -dele, normalt på et breakout board. I denne tutorial vil jeg bruge MMA8451 digital Accelerometer breakout board.

Og få springtråde….

Trin 6: Forbindelser

Forbindelser
Forbindelser

Og her er et layout.

Jeg brugte følgende forbindelse fra modulet ovenfor til mit Nodemcu-32s modul.

ESP32s - modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Husk, at det meste af tiden ikke alle udviklingstavler (for det meste i ESP'er) har en god klar pinout til at hjælpe med at afgøre, hvilke ben der bruges !! Så før tilslutning skal du identificere dit tavles korrekte ben til at bruge hvilke stifter der er til SDA og SCL."

Trin 7: Kode

Dette kræver Adafruit -biblioteket

fra

Download, pak ud, og du finder mappen eksempler, i mappen skal du bare åbne MMA8451demo i din Arduino IDE, og her er du gået ….

du vil se følgende kode til din MMA8451 sensorinterface med din controller

#omfatte

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * slut i2c -bus med SDA = D1 og SCL = D2 for NodeMCU */ Serial.println ("Adafruit MMA8451 test!"); hvis (! mma.begin ()) {Serial.println ("Kunne ikke starte"); mens (1); } Serial.println ("MMA8451 fundet!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Range ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Læs de "rå" data i 14-bit tæller mma.read (); Serial.print ("X: / t"); Seriel.print (mma.x); Serial.print ("\ tY: / t"); Seriel.print (mma.y); Serial.print ("\ tZ: / t"); Seriel.print (mma.z); Serial.println (); / * Få en ny sensorhændelse */ sensors_event_t event; mma.getEvent (& event); / * Vis resultaterne (acceleration måles i m/s^2) */Serial.print ("X: / t"); Seriel.print (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Seriel.print (event.acceleration.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial.print (event.acceleration.z); Serial.print ("\ t"); Serial.println ("m/s^2"); / * Få sensorens retning */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portræt foran"); pause; sag MMA8451_PL_PUB: Serial.println ("Portræt op bag"); pause; sag MMA8451_PL_PDF: Serial.println ("Portræt nedad foran"); pause; sag MMA8451_PL_PDB: Serial.println ("Portræt nedad tilbage"); pause; sag MMA8451_PL_LRF: Serial.println ("Landskab højre forside"); pause; sag MMA8451_PL_LRB: Serial.println ("Landscape Right Back"); pause; sag MMA8451_PL_LLF: Serial.println ("Landskab venstre forside"); pause; sag MMA8451_PL_LLB: Serial.println ("Landskab venstre tilbage"); pause; } Serial.println (); forsinkelse (1000); }

Gem, verificer og upload ……

Åbn den serielle skærm, og du vil se sådan noget, jeg bevægede sensoren om derfor de forskellige aflæsninger

X: -2166 Y: 1872 Z: 2186

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

Landskab Venstre Front

X: -224 Y: -2020 Z: 3188

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

Portræt foran

Hvis alt gik som det skulle, så har du nu det grundlæggende i I2C og Sådan tilslutter du din enhed.

Men enheden virker ikke ??

Bare gå med næste trin ……

Trin 8: Få din I2C -enhed til at fungere

Grundlæggende trin til at få I2C -enheden til at fungere

Lad os undersøge….

  • Kabelføring er korrekt.. (tjek det igen)
  • Programmet er korrekt.. (Ja, det er testeksempel..)

Start med etaper, der skal løses ….

Trin 1: Kør I2C -enhedsscannerprogram for at kontrollere enhedsadresse, og først er din I2C -enhed ok

Du kan downloade skitse og kontrollere output.

Resultat - Enheden fungerer, og sensoradressen er korrekt

I2C scanner. Scanner…

Fundet adresse: 28 (0x1C) Udført. Fundet 1 enhed (er).

Trin 2: Kontroller sensorbiblioteket

Åbn Adafruit_MMA8451.h -filen, og find enhedsadresse

Resultat - Adressen er forskellig fra min enhed ??

/*==================================================== ========================= I2C ADRESSE/BITS --------------------- ---------------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Standard MMA8451 I2C -adresse, hvis A er GND, er dens 0x1C /*======================= ===================================================== */

Gør - Rediger fil fra notesblok (skift adresse) + Gem + Genstart IDE

Det virker. Du kan få dine aflæsninger.

Tårn ikke….. ???

Trin 3: Kontroller, at Wire.begin er overskrevet?

Åbn filen Adafruit_MMA8451.c og find Wire.begin.

Resultat - Denne erklæring er overskrevet

/************************************************* ************************* //*! @brief Opsætter HW (læser koefficientværdier osv.)* / / ********************************** **************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Gør - Rediger fil fra notesblok (kommentarerklæring) + Gem + Genstart IDE

Og endelig virker enheden☺…

Jeg overbelaster næsten denne vejledning, fordi dens hovedmål var at forklare, hvordan man starter, henter data fra datablad, forbinder og får I2C -enheden til at fungere med et meget grundlæggende eksempel. Håber alt vil gå som det skal, og det vil være nyttigt at starte din sensor.

Anbefalede: