Sisällysluettelo:

Aloittaminen I2C -anturiliitännän kanssa ?? - Liitä MMA8451 ESP32: n avulla: 8 vaihetta
Aloittaminen I2C -anturiliitännän kanssa ?? - Liitä MMA8451 ESP32: n avulla: 8 vaihetta

Video: Aloittaminen I2C -anturiliitännän kanssa ?? - Liitä MMA8451 ESP32: n avulla: 8 vaihetta

Video: Aloittaminen I2C -anturiliitännän kanssa ?? - Liitä MMA8451 ESP32: n avulla: 8 vaihetta
Video: How to use LCD LCD1602 with I2C module for Arduino - Robojax 2024, Marraskuu
Anonim
Aloittaminen I2C -anturiliitännän kanssa ?? - Liitä MMA8451 ESP32 -laitteiden avulla
Aloittaminen I2C -anturiliitännän kanssa ?? - Liitä MMA8451 ESP32 -laitteiden avulla

Tässä opetusohjelmassa opit kaiken I2C -laitteen (kiihtyvyysmittarin) käynnistämisestä, yhdistämisestä ja hankkimisesta ohjaimen kanssa (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Vaihe 1: Näin pääset alkuun I2C: n kanssa - IC Inter -viestinnän upea maailma

Arduino, ESP -sarja, PIC, Rasberry PI jne. Ovat kaikki uskomattomia. Mutta mitä teet sen kanssa, kun sinulla on sellainen?

Parasta on lisätä antureita ja vastaavia. Nykyään suuri osa uudesta kuumasta tekniikasta käyttää I2C -protokollaa, jotta tietokone, puhelimet, tabletit tai mikro -ohjaimet voivat puhua antureista. Älypuhelimet olisivat vähemmän älykkäitä, jos he eivät pystyisi puhumaan tuolle kiihtyvyysanturianturille tietääkseen puhelimesi suunnan.

Vaihe 2: Yleiskatsaus I2C: stä

I2C on sarjamuotoinen, synkroninen, puolidupleksinen tiedonsiirtoprotokolla, joka mahdollistaa useiden isäntien ja orjien rinnakkaiselon samassa väylässä. I2C -väylä koostuu kahdesta linjasta: sarjatietolinja (SDA) ja sarjakello (SCL). Molemmat linjat vaativat vetovastuksia.

SDA (sarjatiedot) - linja isännälle ja orjalle lähettää ja vastaanottaa tietoja. SCL (sarjakello) - linja, joka välittää kellosignaalin. Yksinkertaisuudella ja alhaisilla valmistuskustannuksilla I2C: tä käytetään enimmäkseen pienen nopeuden oheislaitteiden viestintään lyhyillä etäisyyksillä (yhden jalan sisällä).

Haluatko oppia lisää I2C: stä? ……

Vaihe 3: I²C -anturien määrittäminen

Ennen kuin aloitat projektin, sinun on ymmärrettävä muutamia anturin perusasioita. Joten kaada itsellesi kuppi kahvia ennen sukellusta:)? …

I2C: n suuri vahvuus on, että voit laittaa niin monta anturia samaan neljään johtoon. Yksiköissä, joihin on kytketty useita valmiita moduuleja, saatat joutua poistamaan muutamia smd-vastuksia katkoksista, muuten väylän vetäminen saattaa muuttua liian aggressiiviseksi.

Mitä tietoja haluamme tietolomakkeelta ??

  1. Anturin toimivuus
  2. Nastat ja nastat
  3. Käyttöliittymän kuvaus (Älä unohda katsoa”I2c -osoitteen valintataulukkoa”)
  4. Rekisterit !!

Kaikki on hyvin, löydät sen helposti, mutta rekisterit ?? REKISTERIT ovat yksinkertaisesti muistipaikkoja I²C -laitteen sisällä. Yhteenvetoa siitä, kuinka monta rekisteriä tietyssä anturissa on ja mitä ne ohjaavat tai sisältävät, kutsutaan rekisterikarttaksi. Suurin osa anturin tietolomakkeen tiedoista kertoo kunkin rekisterin toiminnasta, ja ne voivat olla melko hitaita lukea, koska tiedot esitetään harvoin suoraan.

Jotta voisit ymmärtää, mitä tarkoitan sillä: rekistereitä on monenlaisia, mutta tätä johdantoa varten aion ryhmitellä ne kahteen yleiseen tyyppiin: valvonta- ja tietorekisterit.

1) Ohjausrekisterit

Useimmat anturit muuttavat toimintaansa ohjausrekistereihin tallennettujen arvojen perusteella. Ajattele ohjausrekistereitä On/Off-kytkimien pankeiksi, jotka kytket päälle asettamalla bitin 1 ja sammuttamalla asettamalla bitin 0. I²C-sirupohjaisilla antureilla on usein kymmenkunta tai useampia toiminta-asetuksia esimerkiksi bitti- Tilat, keskeytykset, luku-kirjoitusohjaus, syvyys, näytteenottonopeus, kohinanvaimennus jne., Joten sinun on yleensä asetettava bittejä useisiin eri ohjausrekistereihin, ennen kuin voit todella lukea.

2) Datarekisterit Toisin kuin ohjausyksikkö rekisteröi pankkien kytkimiä, ajattelen datan tulostusrekistereitä säiliöinä, joissa on numeroita, jotka sattuvat vain olemaan tallennettuina binäärimuodossa. Joten haluat tietää tiedot, lue aina tietorekisterit, kuten kuka olen rekisteröitynyt laitteen tunnistamiseen, tilarekisteriin jne.

I²C-anturin alustaminen on siis monivaiheinen prosessi, ja oikea toimintatapa selitetään usein kirjallisesti päinvastaiseen suuntaan, eikä yksinkertaisesti taulukossa. luettelossa ei koskaan sanota "Saadaksesi lukeman tästä anturista, tee (1), (2), (3), (4) jne.", mutta löydät kuvaukset ohjausrekisteribiteistä sanomalla "ennen kuin asetat bitin x tässä rekisteröi, sinun on asetettava bitti y tässä toisessa ohjausrekisterissä”.

Silti huomaan aina, että tietolomake on vuorovaikutteisempi kuin useimmat tekstit. jos viittaat siihen tiettyyn osaan tai tietoihin ja annat sinulle kaikki yksityiskohdat, yhteydet ja viitteet. Istu alas ja lue saadaksesi kaikki viittauksesi.:)

Vaihe 4: Aloita liikkeellä - kiihtyvyysmittari

Nykyaikaiset kiihtyvyysmittarit ovat MEMS (Micro Electro-Mechanical Systems) -laitteita, mikä tarkoittaa, että ne mahtuvat pieneen siruun pienimpien laitteiden sisällä. Yksi menetelmä MEMS -kiihtyvyysmittarien käyttämän kiihtyvyyden mittaamiseksi on käyttää jousiin ripustettua pientä johtavaa massaa. Laitteen kiihtyvyys saa jouset venymään tai supistumaan, ja johtavan massan taipuma voidaan mitata muuttamalla kapasitanssia lähellä oleville, kiinteille levyille.

Kiihtyvyysmittarit on määritelty seuraavilla ominaisuuksilla:

  1. Akselien lukumäärä yhdestä kolmeen akseliin, merkinnöissä X, Y ja Z. Huomaa, että joitain kiihtyvyysmittareita kutsutaan 6-akseliseksi tai 9-akseliseksi, mutta tämä tarkoittaa vain sitä, että ne on liitetty muihin MEMS-laitteisiin, kuten gyroskooppeihin ja/tai magnetometreihin. Jokaisella näistä laitteista on myös kolme akselia, minkä vuoksi on 3, 6 tai 9-akselisia inertiamittausyksiköitä (IMU).
  2. Lähdön tyyppi, joko analoginen tai digitaalinen. Digitaalinen kiihtyvyysmittari huolehtii kiihdytystietojen muotoilusta digitaaliseksi esitykseksi, joka voidaan lukea I2C: n tai SPI: n kautta.
  3. Kiihtyvyysalue mitattuna grammoina, missä 1 g on maan painovoimasta johtuva kiihtyvyys.
  4. Yhteisprosessorit, jotka voivat purkaa joitakin laskelmia, joita tarvitaan raakadatan analysoimiseksi MCU: sta. Useimmilla kiihtyvyysmittareilla on yksinkertainen keskeytysominaisuus havaita kiihtyvyyskynnys (sokki) ja 0 g (vapaa putoaminen). Toiset voivat käsitellä raakatietoja tarkemmin tarjotakseen merkityksellisempää tietoa MCU: lle.

Vaihe 5: Liitäntä ohjaimeen

Koska tunnemme ESP -mikrokontrollerit trendissä, käytämme esimerkkinä ESP32: ta. Tarvitset siis ensin Nodemcu-32: n.

Ei hätää, jos sinulla on muita ESP -levyjä tai jopa Arduinoa !!! Sinun tarvitsee vain määrittää Arduino IDE ja kokoonpano kehityskorttien mukaan, Arduino, ESP NodeMCU, ESP32s jne … Tarvitset myös jonkinlaisia I2C -osia, yleensä katkaisulaudalla. Tässä opetusohjelmassa aion käyttää MMA8451 digitaalinen kiihtyvyysanturin katkaisulauta.

Ja muutama hyppyjohdin ….

Vaihe 6: Liitännät

Liitännät
Liitännät

Ja tässä on asettelu.

Käytin seuraavaa yhteyttä yllä olevasta moduulista Nodemcu-32s-moduuliini.

ESP32s - Moduuli

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Muista, että useimmiten kaikilla kehityskorteilla (enimmäkseen ESP: llä) ei ole selkeää pistoketta, joka auttaa määrittämään, mitä tappeja käytetään !! Joten ennen liittämistä tunnista levyn oikeat nastat käyttääksesi SDA: n ja SCL: n nastoja."

Vaihe 7: Koodi

Tämä vaatii Adafruit -kirjaston

osoitteesta

Lataa, pura pakkaus ja löydät esimerkkikansion, kansiosta, joka vain avaa MMA8451demo Arduino IDE -laitteessasi, ja näillä mennään….

näet seuraavan koodin MMA8451 -anturiliitäntään ohjaimesi kanssa

#sisältää

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Lanka. Alku (4, 5); / * liity i2c -väylään SDA = D1 ja SCL = D2 NodeMCU: sta */ Serial.println ("Adafruit MMA8451 -testi!"); if (! mma.begin ()) {Serial.println ("Ei voitu aloittaa"); kun taas (1); } Serial.println ("MMA8451 löydetty!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Alue ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Lue "raakatiedot" 14-bittisissä laskuissa mma.read (); Serial.print ("X: / t"); Sarjajälki (mma.x); Serial.print ("\ tY: / t"); Sarjajälki (mma.y); Serial.print ("\ tZ: / t"); Sarjajälki (mma.z); Sarja.println (); / * Hanki uusi anturitapahtuma */ sensors_event_t event; mma.getEvent (& tapahtuma); / * Näytä tulokset (kiihtyvyys mitataan m/s^2) */Serial.print ("X: / t"); Serial.print (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Sarjajälki (event.acceleration.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Sarjajälki (event.acceleration.z); Serial.print ("\ t"); Sarja.println ("m/s^2"); / * Selvitä anturin suunta */ uint8_t o = mma.getOrientation (); kytkin (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); tauko; tapaus MMA8451_PL_PUB: Serial.println ("Portrait Up Back"); tauko; tapaus MMA8451_PL_PDF: Serial.println ("Portrait Down Front"); tauko; tapaus MMA8451_PL_PDB: Serial.println ("Muotokuva alaspäin"); tauko; tapaus MMA8451_PL_LRF: Serial.println ("Maisema oikea etu"); tauko; tapaus MMA8451_PL_LRB: Serial.println ("Vaakasuora oikea"); tauko; tapaus MMA8451_PL_LLF: Serial.println ("Maisema vasen etu"); tauko; tapaus MMA8451_PL_LLB: Serial.println ("Vaakasuora vasen"); tauko; } Sarja.println (); viive (1000); }

Tallenna, vahvista ja lataa ……

Avaa sarjamonitori ja näet jotain tällaista, liikutin anturia noin tästä johtuen

X: -2166 Y: 1872 Z: 2186

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

Maisema Vasen Etu

X: -224 Y: -2020 Z: 3188

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

Muotokuva edestä

Jos kaikki meni niin kuin pitää, sinulla on nyt I2C: n perusteet ja laitteen liittäminen.

Mutta laite ei toimi ??

Siirry seuraavaan vaiheeseen ……

Vaihe 8: Ota I2C -laitteesi toimintaan

Perusvaiheet I2C -laitteen toimimiseksi

Tutkitaan….

  • Johdotus on oikein.. (tarkista uudelleen)
  • Ohjelma on oikea.. (Kyllä, se on testiesimerkki..)

Aloita ratkaistavilla vaiheilla ….

Vaihe 1: Suorita I2C -laitteen skanneriohjelma laitteen osoitteen tarkistamiseksi ja ensin I2C -laitteesi on kunnossa

Voit ladata luonnoksen ja tarkistaa tuloksen.

Tulos - Laite toimii ja anturin osoite on oikea

I2C -skanneri. Skannaa…

Löydetty osoite: 28 (0x1C) Valmis. Löytyi 1 laite.

Vaihe 2: Tarkista anturikirjasto

Avaa Adafruit_MMA8451.h -tiedosto ja etsi laitteen osoite

Tulos - Osoite on eri kuin laitteeni ??

/*================================================ ========================= I2C-OSOITE/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <MMA8451 -oletusosoite I2C, jos A on GND, sen 0x1C /*======================= ================================================== */

Tee - Muokkaa tiedostoa muistikirjasta (muuta osoitetta) + Tallenna + Käynnistä IDE uudelleen

Se toimii. Voit saada lukemasi.

Eikö ……. ???

Vaihe 3: Tarkista Wire.begin on korvattu?

Avaa Adafruit_MMA8451.c -tiedosto ja etsi Wire.begin.

Tulos - Tämä lausunto korvataan

/************************************************* ************************* //*! @brief Asettaa HW: n (lukee kertoimien arvot jne.)* / / ********************************** ***************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Tee - Muokkaa tiedostoa muistikirjasta (kommentti) + Tallenna + Käynnistä IDE uudelleen

Ja lopuksi laite alkaa toimia…

Lähes ylikuormitan tämän opetusohjelman, koska sen päätavoite oli selittää kuinka aloittaa, hakea tietoja lomakkeesta, muodostaa yhteys ja saada I2C -laite toimimaan hyvin yksinkertaisella esimerkillä.

Suositeltava: