Innholdsfortegnelse:

Komme i gang med I2C sensorgrensesnitt ?? - Grensesnitt for MMA8451 ved bruk av ESP32s: 8 trinn
Komme i gang med I2C sensorgrensesnitt ?? - Grensesnitt for MMA8451 ved bruk av ESP32s: 8 trinn

Video: Komme i gang med I2C sensorgrensesnitt ?? - Grensesnitt for MMA8451 ved bruk av ESP32s: 8 trinn

Video: Komme i gang med I2C sensorgrensesnitt ?? - Grensesnitt for MMA8451 ved bruk av ESP32s: 8 trinn
Video: Как использовать ESP32 WiFi и Bluetooth с Arduino IDE, полная информация с примерами и кодом. 2024, November
Anonim
Komme i gang med I2C sensorgrensesnitt ?? - Grensesnitt for MMA8451 ved bruk av ESP32 -er
Komme i gang med I2C sensorgrensesnitt ?? - Grensesnitt for MMA8451 ved bruk av ESP32 -er

I denne opplæringen lærer du alt om hvordan du starter, kobler til og får I2C -enhet (akselerometer) til å fungere med kontrolleren (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Trinn 1: Slik kommer du i gang med I2C - Magnificent World of Inter IC Communication

Arduino, ESP -serien, PIC, Rasberry PI, etc. er alle utrolig. Men hva gjør du med det når du har en?

Det beste er å legge til sensorer og slikt. I dag bruker mye av den varme nye teknologien I2C -protokollen for å la datamaskinen, telefonene, nettbrettene eller mikrokontrollerne snakke med sensorene. Smarttelefoner ville vært mindre smarte hvis de ikke kunne snakke med akselerometersensoren for å vite hvilken vei telefonen vender.

Trinn 2: Oversikt over I2C

I2C er en seriell, synkron, halv dupleks kommunikasjonsprotokoll som tillater sameksistens av flere mestere og slaver på samme buss. I2C -bussen består av to linjer: seriell datalinje (SDA) og seriell klokke (SCL). Begge linjene krever opptrekkmotstander.

SDA (Serial Data) - Linjen for master og slave for å sende og motta data. SCL (Serial Clock) - Linjen som bærer klokkesignalet. Med slike fordeler som enkelhet og lave produksjonskostnader, brukes I2C mest for kommunikasjon av eksterne enheter med lav hastighet over korte avstander (innen en fot).

Vil du lære mer om I2C? ……

Trinn 3: Hvordan konfigurere I²C -sensorer

Før du går inn i prosjektet, må du forstå noen få grunnleggende om sensoren din. Så hell deg en kopp kaffe før du dykker inn:)? …

Den store styrken til I2C er at du kan sette så mange sensorer på de fire ledningene. Men for enheter med flere ferdiglagde moduler tilkoblet, må du kanskje fjerne noen smd-motstander fra utbruddene, ellers kan pull-up på bussen bli for aggressiv.

Hvilken informasjon ønsker vi fra databladet ??

  1. Sensorfunksjonalitet
  2. Pinouts og pins funksjonalitet
  3. Grensesnittbeskrivelse (ikke gå glipp av å se på "I2c -adressevalgstabell")
  4. Registrerer !!

Alt er bra, du finner det enkelt, men registrerer ?? REGISTRER er ganske enkelt minneplasser inne i en I²C -enhet. Sammendraget av hvor mange registre det er i en gitt sensor, og hva de kontrollerer eller inneholder, kalles et registerkart. Mesteparten av informasjonen i sensorens datablad handler om å forklare hvordan hvert register fungerer, og de kan være ganske slog å lese gjennom fordi informasjonen sjelden presenteres på direkte måte.

For å gi deg en følelse av hva jeg mener med det: Det er mange typer registre, men for denne introduksjonen skal jeg gruppere dem i to generelle typer: Kontroll- og dataregistre.

1) Kontrollregistre

De fleste sensorer endrer hvordan de opererer basert på verdiene som er lagret i kontrollregistre. Tenk på kontrollregistre som banker for av/på-brytere, som du slår på ved å sette litt til 1 og slå av ved å sette den til 0. I²C-chipbaserte sensorer har ofte et dusin eller flere driftsinnstillinger for ting som bit- Modi, avbrudd, lese-skrive-kontroll, dybde, samplingshastighet, støyreduksjon, etc., så du må vanligvis sette biter i flere forskjellige kontrollregistre før du faktisk kan ta en avlesning.

2) Dataregistre I motsetning til en kontroll registrerer bank-of-switches, tenker jeg på datautgangsregistre som beholdere som inneholder tall som tilfeldigvis lagres i binær form. Så du vil vite data, les alltid dataregistre som hvem er jeg som registrerer meg for enhetsidentifikasjon, statusregister osv.

Så initialisering av en I²C-sensor er en flertrinnsprosess, og riktig rekkefølge forklares ofte skriftlig i motsatt retning, i stedet for en enkel i datablad. liste som aldri sier "For å få en avlesning fra denne sensoren, gjør (1), (2), (3), (4), etc", men du finner beskrivelser av kontrollregisterbitene som sier "før du setter bit x i dette register må du sette bit y i dette andre kontrollregistret”.

Likevel finner jeg alltid at et datablad er mer interaktivt enn mest tekst. hvis du vil referere den til et bestemt stykke eller deler av informasjonen, og den gir deg alle detaljer, forbindelser og referanser. Bare sett deg ned og les for å få ut alle referansene dine.:)

Trinn 4: Start med bevegelse - akselerometer

Moderne akselerometre er Micro Electro-Mechanical Systems (MEMS) enheter, noe som betyr at de kan passe på en liten brikke inne i den minste av gadgets. En metode for å måle akselerasjon brukt av MEMS -akselerometre er å bruke en liten ledende masse suspendert på fjærer. Akselerasjonen til enheten får fjærene til å strekke seg eller trekke seg sammen, og nedbøyningen av den ledende massen kan måles gjennom en endring i kapasitans til nærliggende, faste plater.

Akselerometre er spesifisert med følgende funksjoner:

  1. Antall akser, fra en til tre akser, merket X, Y og Z i spesifikasjonsdiagrammene. Vær oppmerksom på at noen akselerometre kalles 6-akser eller 9-akser, men det betyr bare at de er sammen med andre MEMS-enheter, for eksempel gyroskoper og/eller magnetometre. Hver av disse enhetene har også tre akser, og derfor er det 3, 6 eller 9-akse treghetsmåleenheter (IMUer).
  2. Utgangstypen, enten analog eller digital. Et digitalt akselerometer sørger for å formatere akselerasjonsdataene til en digital representasjon som kan leses ut over I2C eller SPI.
  3. Akselerasjonsområdet målt i g, hvor 1g er akselerasjonen på grunn av jordens tyngdekraft.
  4. Coprocessors som kan laste ned noen av beregningene som trengs for å analysere rådata fra MCU. De fleste akselerometre har en enkel avbruddsevne for å oppdage en akselerasjonsterskel (sjokk) og en 0-g (fritt fall) tilstand. Andre kan gjøre avansert behandling av rådata for å tilby mer meningsfylte data til MCU.

Trinn 5: Grensesnitt med kontroller

Siden vi kjenner ESP Microcontrollers i trend, vil vi bruke ESP32 for vårt eksempel. Så først trenger du en Nodemcu-32s.

Ingen bekymringer hvis du har andre ESP -brett eller til og med Arduino! Du trenger bare å konfigurere din Arduino IDE og konfigurasjon i henhold til utviklingstavlene dine, for Arduino, ESP NodeMCU, ESP32s etc … Du trenger også en slags I2C -deler, vanligvis på et breakout -bord. I denne opplæringen skal jeg bruke MMA8451 digitalt akselerometerutbruddstavle.

Og noen hoppetråder….

Trinn 6: Tilkoblinger

Tilkoblinger
Tilkoblinger

Og her er et oppsett.

Jeg brukte følgende tilkobling fra modulen ovenfor til min Nodemcu-32s-modul.

ESP32s - modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Husk at for det meste er det ikke alle utviklingstavler (for det meste i ESP -er) som har en god klar pinout for å avgjøre hvilke pinner som brukes !! Så før tilkobling, identifiser brettets riktige pinner for å bruke hvilke pinner som er for SDA og SCL."

Trinn 7: Kode

Dette krever Adafruit -biblioteket

fra

Last ned, pakk ut, og du vil finne eksempler -mappen, i mappen åpner du bare MMA8451demo i Arduino IDE og her går du ….

vil du se følgende kode for MMA8451 sensorgrensesnittet med kontrolleren

#inkludere

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * bli med i2c -buss med SDA = D1 og SCL = D2 for NodeMCU */ Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin ()) {Serial.println ("Kunne ikke starte"); mens (1); } Serial.println ("MMA8451 funnet!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Range ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Les "rå" data i 14-bits tellinger 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 (); / * Få en ny sensorhendelse */ sensors_event_t event; mma.getEvent (& event); / * Vis resultatene (akselerasjon måles i m/s^2) */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"); / * Få orienteringen til sensoren */ uint8_t o = mma.getOrientation (); bytte (o) {sak MMA8451_PL_PUF: Serial.println ("Portrett foran"); gå i stykker; sak MMA8451_PL_PUB: Serial.println ("Portrett bak"); gå i stykker; sak MMA8451_PL_PDF: Serial.println ("Portrett ned foran"); gå i stykker; sak MMA8451_PL_PDB: Serial.println ("Portrett ned bak"); gå i stykker; sak MMA8451_PL_LRF: Serial.println ("Landskap foran høyre"); gå i stykker; case MMA8451_PL_LRB: Serial.println ("Landscape Right Back"); gå i stykker; sak MMA8451_PL_LLF: Serial.println ("Landskap venstre foran"); gå i stykker; sak MMA8451_PL_LLB: Serial.println ("Landskap venstre bak"); gå i stykker; } Serial.println (); forsinkelse (1000); }

Lagre, bekreft og last opp ……

Åpne den serielle skjermen, og du vil se noe sånt som dette. Jeg beveget sensoren rundt, derfor de forskjellige målingene

X: -2166 Y: 1872 Z: 2186

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

Landskap Venstre Front

X: -224 Y: -2020 Z: 3188

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

Portrett foran

Vel, hvis alt gikk som det skulle, så har du nå det grunnleggende om I2C og hvordan du kobler til enheten din.

Men enheten fungerer ikke ??

Bare gå til neste trinn ……

Trinn 8: Få I2C -enheten til å fungere

Grunnleggende trinn for å få I2C -enheten til å fungere

La oss undersøke….

  • Kabling er riktig.. (sjekk det igjen)
  • Programmet er riktig.. (Ja, det er testeksempel..)

Start med etapper for å løse ….

Trinn 1: Kjør I2C -enhetsskannerprogrammet for å kontrollere enhetsadressen, og først er I2C -enheten ok

Du kan laste ned skisse og sjekke utdata.

Resultat - Enheten fungerer og sensoradressen er riktig

I2C skanner. Skanner …

Funnet adresse: 28 (0x1C) Ferdig. Fant 1 enhet (er).

Trinn 2: Sjekk sensorbiblioteket

Åpne Adafruit_MMA8451.h -filen og finn enhetsadressen

Resultat - Adressen er forskjellig fra enheten min?

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

Gjør - Rediger fil fra notisblokk (endre adresse) + Lagre + Start IDE på nytt

Det fungerer. Du kan få avlesninger.

Terskel ikke….. ???

Trinn 3: Sjekk Wire.begin er overskrevet?

Åpne filen Adafruit_MMA8451.c og finn Wire.begin.

Resultat - Denne uttalelsen er overskrevet

/************************************************* ************************* //*! @brief Konfigurerer HW (leser koeffisientverdier, etc.)* / / ********************************** *************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Gjør - Rediger fil fra notisblokk (kommentaruttalelse) + Lagre + Start IDE på nytt

Og endelig fungerer enheten☺ …

Jeg overbelaster nesten denne opplæringen fordi hovedmålet var å forklare hvordan du starter, henter data fra datablad, kobler til og får I2C -enheten til å fungere med et veldig grunnleggende eksempel. Håper alt vil gå som det skal, og det vil være nyttig å starte sensoren din.

Anbefalt: