Sisukord:

I2C anduri liidesega alustamine ?? - Liidestage oma MMA8451 liidesega ESP32 -de abil: 8 sammu
I2C anduri liidesega alustamine ?? - Liidestage oma MMA8451 liidesega ESP32 -de abil: 8 sammu

Video: I2C anduri liidesega alustamine ?? - Liidestage oma MMA8451 liidesega ESP32 -de abil: 8 sammu

Video: I2C anduri liidesega alustamine ?? - Liidestage oma MMA8451 liidesega ESP32 -de abil: 8 sammu
Video: Введение в LCD2004 ЖК-дисплей с модулем I2C для Arduino 2024, Detsember
Anonim
Alustamine I2C anduri liidesega ?? - Liidese oma MMA8451 -ga, kasutades ESP32 -sid
Alustamine I2C anduri liidesega ?? - Liidese oma MMA8451 -ga, kasutades ESP32 -sid

Selles õpetuses saate teada, kuidas käivitada, ühendada ja hankida I2C -seade (kiirendusmõõtur), mis töötab kontrolleriga (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Samm 1: Kuidas alustada I2C -ga - võrratu Interneti -kommunikatsiooni maailm

Arduino, ESP seeria, PIC, Rasberry PI jne on kõik uskumatud. Aga mida sa sellega peale hakkad, kui sul see on?

Parim on lisada andureid jms. Tänapäeval kasutab palju uut kuuma tehnoloogiat I2C protokolli, mis võimaldab arvutil, telefonidel, tahvelarvutitel või mikrokontrolleritel anduritest rääkida. Nutitelefonid oleksid vähem nutikad, kui nad ei saaks selle kiirendusmõõturi anduriga rääkida, et teada saada, mis suunas teie telefon on.

Samm: ülevaade I2C -st

I2C on jada, sünkroonne, pooldupleksne kommunikatsiooniprotokoll, mis võimaldab mitme bussi ja orja kooseksisteerimist samal siinil. I2C siin koosneb kahest liinist: jadaandmeside (SDA) ja jadakell (SCL). Mõlemad liinid vajavad tõmbetakistusi.

SDA (seeriaandmed) - liin, mille kaudu ülem ja alam saavad andmeid saata ja vastu võtta. SCL (jadakell) - liin, mis kannab kella signaali. Selliste eelistega nagu lihtsus ja madalad tootmiskulud kasutatakse I2C-d enamasti väikese kiirusega välisseadmete suhtlemiseks lühikestel vahemaadel (ühe jala kaugusel).

Kas soovite I2C kohta rohkem teada saada? ……

3. samm: kuidas seadistada I²C andureid

Enne projektiga alustamist peate mõistma oma anduri mõningaid põhitõdesid. Seega kalla endale enne sukeldumist tass kohvi:)? …

I2C suur tugevus on see, et saate panna samale neljale juhtmele nii palju andureid. Kuid seadmete puhul, millel on ühendatud mitu eelvalmis moodulit, peate võib-olla eemaldama purunemistest paar smd-takistit, vastasel juhul võib bussi tõmbamine liiga agressiivseks muutuda.

Millist teavet me andmelehelt soovime ??

  1. Anduri funktsionaalsus
  2. Pistikute ja tihvtide funktsionaalsus
  3. Liidese kirjeldus (ärge unustage vaadata "I2c aadressi valimise tabelit")
  4. Registrid !!

Kõik on korras, leiate selle hõlpsalt, kuid registrid ?? REGISTRID on lihtsalt mälu asukohad I²C seadme sees. Kokkuvõtet selle kohta, mitu registrit antud anduris on ja mida need kontrollivad või sisaldavad, nimetatakse registrikaardiks. Suurem osa anduri andmelehel olevast teabest on seotud iga registri toimimise selgitamisega ja neid võib olla üsna raske lugeda, sest teavet esitatakse harva otsesel viisil.

Et mõista, mida ma selle all mõtlen: Registreid on mitut tüüpi, kuid selle sissejuhatuse jaoks rühmitan need kahte üldtüüpi: kontroll- ja andmeregistrid.

1) Kontrolliregistrid

Enamik andureid muudavad oma tööpõhimõtteid, lähtudes kontrollregistritesse salvestatud väärtustest. Mõelge juhtregistritele kui sisse/välja lülitite pankadele, mille lülitate sisse, seadistades biti 1-le ja välja lülitades selle biti 0-le. I²C kiibipõhistel anduritel on sageli tosin või enam tööseadet, näiteks bit- Režiimid, katkestused, lugemis-kirjutamise juhtimine, sügavus, diskreetimiskiirus, müravähendus jne, nii et tavaliselt peate enne lugemise tegemist bitti seadistama mitmesse erinevasse juhtregistrisse.

2) Andmeregistrid Erinevalt kontrollist, mis registreerib lülitite pankasid, arvan ma andmete väljastamise registritest kui konteineritest, mis sisaldavad numbreid, mis lihtsalt salvestatakse binaarsel kujul. Nii et kui soovite andmeid teada, lugege alati andmeregistreid, näiteks seda, kes ma olen seadme registreerimiseks, olekuregistriks jne.

Niisiis, I²C anduri lähtestamine on mitmeastmeline protsess ja õiget toimingute järjestust selgitatakse sageli kirjalikult vastupidises suunas, selle asemel, et andmelehel oleks lihtne. nimekirjas pole kunagi öeldud: „Sellelt andurilt lugemise saamiseks tehke (1), (2), (3), (4) jne”, kuid leiate juhtregistribittide kirjeldused, mis ütlevad: „enne kui määrate selles bitti x registreerida, peate selles teises juhtregistris määrama biti y”.

Siiski leian alati, et andmeleht on interaktiivsem kui enamik teksti. kui viitate sellele konkreetse teabe või osade jaoks ja see annab teile kõik üksikasjad, seosed ja viited. Lihtsalt istuge ja lugege, et saada kõik oma viited.:)

Samm: alustage liikumisega - kiirendusmõõtur

Kaasaegsed kiirendusmõõturid on mikroelektromehaanilised süsteemid (MEMS), mis tähendab, et need mahuvad väikseima vidina sisse väikesele kiibile. Üks meetod MEMS kiirendusmõõturite kiirenduse mõõtmiseks on vedrude külge riputatud väikese juhtiva massi kasutamine. Seadme kiirendus põhjustab vedrude venitamise või kokkutõmbumise ning juhtiva massi läbipainde saab mõõta läbi mahtuvuse muutuse läheduses asuvatele fikseeritud plaatidele.

Kiirendusmõõturid on määratud järgmiste funktsioonidega:

  1. Telgede arv, üks kuni kolm telge, on spetsifikatsiooniskeemidel tähistatud X, Y ja Z -ga. Pange tähele, et mõnda kiirendusmõõturit nimetatakse 6-teljeliseks või 9-teljeliseks, kuid see tähendab lihtsalt, et need on komplekteeritud teiste MEMS-seadmetega, nagu güroskoobid ja/või magnetomeetrid. Kõigil neil seadmetel on ka kolm telge, mistõttu on 3, 6 või 9 teljega inertsiaalseid mõõtühikuid (IMU).
  2. Väljundi tüüp, kas analoog või digitaalne. Digitaalne kiirendusmõõtur hoolitseb kiirendusandmete vormindamise eest digitaalseks esituseks, mida saab lugeda I2C või SPI kaudu.
  3. Kiirendusvahemik, mida mõõdetakse g -des, kus 1g on Maa gravitatsioonist tingitud kiirendus.
  4. Kaasprotsessorid, mis suudavad maha laadida mõned arvutused, mis on vajalikud MCU lähteandmete analüüsimiseks. Enamikul kiirendusmõõturitel on lihtne katkestusvõime kiirendusläve (šokk) ja 0 g (vabalangemine) seisundi tuvastamiseks. Teised saavad töödelda algandmeid täpsemalt, et pakkuda MCU -le sisukamaid andmeid.

Samm: liides kontrolleriga

Kuna me teame ESP mikrokontrollereid trendis, kasutame näitena ESP32. Nii et kõigepealt vajate Nodemcu-32.

Ärge muretsege, kui teil on muid ESP -plaate või isegi Arduino !!! Peate lihtsalt seadistama oma Arduino IDE ja konfiguratsiooni vastavalt oma arendusplaatidele, Arduino, ESP NodeMCU, ESP32s jne jaoks. Teil on vaja ka mingeid I2C osi, tavaliselt murdelaual. Selles õpetuses kasutan MMA8451 digitaalne kiirendusmõõtur.

Ja mõned hüppajajuhtmed….

6. samm: ühendused

Ühendused
Ühendused

Ja siin on paigutus.

Kasutasin ülaltoodud moodulist järgmist ühendust oma Nodemcu-32s mooduliga.

ESP32 - moodul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Pidage meeles, et enamasti ei ole kõigil arendusplaatidel (enamasti ESP -des) hea selge nupp, mis aitab kindlaks teha, milliseid tihvte kasutatakse! Nii et enne ühendamist tehke kindlaks oma plaadi õiged tihvtid, mida kasutada SDA ja SCL jaoks."

Samm: kood

Selleks on vaja Adafruit raamatukogu

saidilt

Laadige alla, pakkige lahti ja leiate näidiste kausta, kaustas lihtsalt avage MMA8451demo oma Arduino IDE -s ja siit saate….

näete oma kontrolleriga oma MMA8451 anduri liidese järgmist koodi

#kaasake

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); tühine seadistus (tühine) {Serial.begin (9600); Traat.algus (4, 5); / * liituge i2c siiniga SDA = D1 ja SCL = D2 NodeMCU */ Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin ()) {Serial.println ("Ei saanud alustada"); samas (1); } Serial.println ("MMA8451 leitud!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Vahemik ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Loe 'toorandmeid' 14-bitistes loendites mma.read (); Serial.print ("X: / t"); Seeriaprint (mma.x); Serial.print ("\ tY: / t"); Seeriaprint (mma.y); Serial.print ("\ tZ: / t"); Seeriaprint (mma.z); Serial.println (); / * Hankige uus andurisündmus */ sensor_event_t sündmus; mma.getEvent (& sündmus); / * Kuva tulemused (kiirendust mõõdetakse m/s^2) */Serial.print ("X: / t"); Seeriaprint (sündmus.kiirendus.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Seeriaprint (sündmus.kiirendus.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial.print (event.acceleration.z); Serial.print ("\ t"); Serial.println ("m/s^2"); / * Hankige anduri orientatsioon */ uint8_t o = mma.getOrientation (); lüliti (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); murda; juhtum MMA8451_PL_PUB: Serial.println ("Portree üles tagasi"); murda; juhtum MMA8451_PL_PDF: Serial.println ("Portree all ees"); murda; juhtum MMA8451_PL_PDB: Serial.println ("Portree alla tagasi"); murda; juhtum MMA8451_PL_LRF: Serial.println ("Maastik paremal ees"); murda; juhtum MMA8451_PL_LRB: Serial.println ("Maastik paremale tagasi"); murda; juhtum MMA8451_PL_LLF: Serial.println ("Maastik vasakul ees"); murda; juhtum MMA8451_PL_LLB: Serial.println ("Maastik vasakule tagasi"); murda; } Serial.println (); viivitus (1000); }

Salvestage, kontrollige ja laadige üles ……

Avage jadamonitor ja näete midagi sellist, liigutasin andurit, seega erinevaid näiteid

X: -2166 Y: 1872 Z: 2186

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

Maastik vasakul ees

X: -224 Y: -2020 Z: 3188

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

Portree ees

Kui kõik läks nii nagu peaks, siis on teil nüüd I2C põhitõed ja seadme ühendamine.

Aga seade ei tööta ??

Lihtsalt jätkake järgmise sammuga ……

Samm: pange oma I2C -seade tööle

Põhilised sammud I2C -seadme tööks

Uurime….

  • Juhtmestik on õige.. (kontrollige uuesti)
  • Programm on õige.. (Jah, see on proovinäide..)

Alustage lahendatavate etappidega ….

1. etapp: käivitage seadme aadressi kontrollimiseks I2C -seadme skanneriprogramm ja kõigepealt on teie I2C -seade korras

Saate eskiisi alla laadida ja väljundit kontrollida.

Tulemus - seade töötab ja anduri aadress on õige

I2C skanner. Skaneerimine…

Leitud aadress: 28 (0x1C) Valmis. Leiti 1 seade (d).

2. etapp: kontrollige andurite kogu

Avage fail Adafruit_MMA8451.h ja leidke seadme aadress

Tulemus - aadress erineb minu seadmest ??

/*================================================ ========================= I2C AADRESS/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Vaikimisi MMA8451 I2C aadress, kui A on GND, selle 0x1C /*======================= ================================================== */

Tehke - muutke faili märkmikust (muuda aadressi) + Salvesta + taaskäivitage IDE

See töötab. Saate oma näitu saada.

Äkki mitte ……. ???

3. etapp: kontrollige, kas Wire.begin on üle kirjutatud?

Avage fail Adafruit_MMA8451.c ja leidke Wire.begin.

Tulemus - see avaldus kirjutatakse üle

/************************************************ ************************* //*! @brief Seadistab HW (loeb koefitsientide väärtusi jne)* / / ********************************* ***************************************/ bool Adafruit_MMA8451:: start (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Tehke - muutke faili märkmikust (kommentaari avaldus) + Salvesta + taaskäivitage IDE

Ja lõpuks hakkab seade tööle☺…

Ma peaaegu koormasin selle õpetuse üle, sest selle peamine eesmärk oli selgitada, kuidas alustada, saada andmeid andmelehelt, ühendada ja saada I2C -seade töötama väga lihtsa näitega. Loodan, et kõik läheb nii, nagu peaks, ja anduri käivitamine on kasulik.

Soovitan: