Tartalomjegyzék:

Első lépések az I2C érzékelő interfésszel ?? - Az MMA8451 interfésze ESP32 -k használatával: 8 lépés
Első lépések az I2C érzékelő interfésszel ?? - Az MMA8451 interfésze ESP32 -k használatával: 8 lépés

Videó: Első lépések az I2C érzékelő interfésszel ?? - Az MMA8451 interfésze ESP32 -k használatával: 8 lépés

Videó: Első lépések az I2C érzékelő interfésszel ?? - Az MMA8451 interfésze ESP32 -k használatával: 8 lépés
Videó: Introduction to HT16K33 4 Digit LED Seven Segment Display with Arduino 2024, November
Anonim
Első lépések az I2C érzékelő interfésszel ?? - Az MMA8451 interfésze ESP32 -k használatával
Első lépések az I2C érzékelő interfésszel ?? - Az MMA8451 interfésze ESP32 -k használatával

Ebben az oktatóanyagban mindent megtudhat arról, hogyan lehet elindítani, csatlakoztatni és beszerezni az I2C eszközt (gyorsulásmérő) a vezérlővel (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

1. lépés: Az első lépések az I2C -vel - az IC közötti kommunikáció csodálatos világa

Az Arduino, az ESP sorozat, a PIC, a Rasberry PI stb. De mit csinálsz vele, ha egyszer megvan?

A legjobb az, ha hozzáadunk érzékelőket és hasonlókat. Manapság sok új, forró technológia használja az I2C protokollt, hogy a számítógép, telefonok, táblagépek vagy mikrokontrollerek beszélhessenek az érzékelőkről. Az okostelefonok kevésbé lennének okosak, ha nem tudnának beszélni a gyorsulásmérő érzékelőjével, hogy megtudják, a telefon milyen irányba néz.

2. lépés: Az I2C áttekintése

Az I2C egy soros, szinkron, fél-duplex kommunikációs protokoll, amely lehetővé teszi több master és slave együttélését ugyanazon a buszon. Az I2C busz két vonalból áll: soros adatvonalból (SDA) és soros órából (SCL). Mindkét vezeték felhúzó ellenállást igényel.

SDA (soros adat) - Az a sor, amelyen a master és a slave adatokat küldhet és fogadhat. SCL (soros óra) - Az órajelet hordozó vonal. Az olyan előnyökkel, mint az egyszerűség és az alacsony gyártási költség, az I2C-t leginkább kis sebességű perifériás eszközök kommunikációjára használják rövid távolságon (egy lábon belül).

Szeretne többet megtudni az I2C -ről? ……

3. lépés: Az I²C érzékelők konfigurálása

Mielőtt belekezdene a projektbe, meg kell értenie az érzékelő néhány alapját. Tehát öntsön magának egy csésze kávét, mielőtt búvárkodna:)? …

Az I2C nagy erőssége, hogy ugyanannyi négy vezetékre annyi érzékelőt helyezhet. De azoknál az egységeknél, amelyekhez több előre elkészített modul csatlakozik, előfordulhat, hogy el kell távolítania néhány smd ellenállást a kitörésekből, különben a buszon lévő felhúzás túl agresszív lehet.

Milyen információkat akarunk az adatlapról ??

  1. Érzékelő funkcionalitás
  2. Kihúzások és csapok funkció
  3. Interfész leírása (Ne felejtse el megnézni az „I2c címválasztási táblázatot”)
  4. Nyilvántartások !!

Minden rendben van, könnyen megtalálhatja, de Regiszterek ?? A REGISZTRÁCIÓK egyszerűen memóriahelyek egy I²C eszközön belül. Regisztrációs térképnek nevezzük azt az összefoglalót, hogy hány regiszter van egy adott érzékelőben, és mit szabályoznak vagy tartalmaznak. A szenzor adatlapján található információk nagy része az egyes regiszterek működésének magyarázatáról szól, és ezek elég nehézkesek az olvasáshoz, mert az információkat ritkán mutatják be közvetlen módon.

Hogy megértsük, mit értek ezalatt: Sokféle nyilvántartás létezik, de e bevezetéshez két általános típusba sorolom őket: Vezérlő és Adatregiszterek.

1) Ellenőrző nyilvántartások

A legtöbb érzékelő megváltoztatja működését a vezérlőregiszterekben tárolt értékek alapján. Gondoljon úgy a vezérlőregiszterekre, mint a Be/Ki kapcsolók csoportjaira, amelyeket egy bit 1-re állításával kapcsol be, és ezt a bitet 0-ra kapcsolja ki. Módok, megszakítások, olvasás-írás vezérlés, mélység, mintavételi sebesség, zajcsökkentés stb., Így általában több különböző vezérlőregiszterben kell biteket beállítani, mielőtt ténylegesen leolvashat.

2) AdatregiszterekA vezérlővel ellentétben a kapcsolók bankjait regisztrálom, az adatkimeneti regiszterekre úgy gondolok, mint olyan tárolókra, amelyek számokat tárolnak, amelyeket véletlenül bináris formában tárolnak. Tehát tudni szeretné az adatokat, mindig olvassa el az adatregisztereket, például azt, hogy ki vagyok regisztrálva az eszköz azonosítására, az állapotregiszterre stb.

Tehát az I²C érzékelő inicializálása többlépéses folyamat, és a műveletek helyes sorrendjét gyakran írásban, ellentétes irányban írják le, ahelyett, hogy egyszerű lenne az adatlapon. a lista soha nem mondja: „Ahhoz, hogy leolvashassa ezt az érzékelőt, tegye (1), (2), (3), (4) stb.”, de a vezérlőregiszter -bitek leírását találja, hogy „mielőtt beállítja az x bitet ebben regiszterben, be kell állítania az y bitet ebben a másik vezérlőregiszterben”.

Mégis mindig azt találom, hogy az adatlap interaktívabb, mint a legtöbb szöveg. ha hivatkozni fog rá egy bizonyos adatra vagy információra, és megadja az összes részletet, kapcsolatot és hivatkozást. Csak ülj le és olvass, hogy minden referenciádat megtaláld.:)

4. lépés: Kezdje a mozgással - gyorsulásmérő

A modern gyorsulásmérők a Micro Electro-Mechanical Systems (MEMS) eszközök, ami azt jelenti, hogy a legkisebb kütyük belsejében egy kis chipen is elférnek. A MEMS gyorsulásmérők által alkalmazott gyorsulás mérésének egyik módja a rugókon felfüggesztett apró vezetőképes tömeg felhasználása. A készülék gyorsulása miatt a rugók elnyúlnak vagy összehúzódnak, és a vezető tömeg elhajlása mérhető a közeli, rögzített lemezek kapacitásváltozásával.

A gyorsulásmérőket a következő jellemzők határozzák meg:

  1. Az egytől három tengelyig terjedő tengelyek száma X, Y és Z felirattal a specifikációs diagramokon. Ne feledje, hogy néhány gyorsulásmérőt 6 vagy 9 tengelyesnek neveznek, de ez csak azt jelenti, hogy más MEMS-eszközökkel, például giroszkópokkal és/vagy magnetométerekkel vannak ellátva. Ezen eszközök mindegyikének három tengelye is van, ezért van 3, 6 vagy 9 tengelyes inerciamérő egység (IMU).
  2. A kimenet típusa, analóg vagy digitális. A gyorsulásmérő digitális gyorsulásmérő gondoskodik az I2C vagy SPI -n leolvasható digitális ábrázolásról.
  3. A gyorsulás tartománya g -ban mérve, ahol 1g a Föld gravitációjának köszönhető gyorsulás.
  4. Koprocesszorok, amelyek ki tudják tölteni az MCU -ból származó nyers adatok elemzéséhez szükséges számítások egy részét. A legtöbb gyorsulásmérő egyszerű megszakítási képességgel rendelkezik a gyorsulási küszöb (sokk) és a 0 g (szabadesés) állapot észlelésére. Mások speciális feldolgozást végezhetnek a nyers adatokon, hogy értelmesebb adatokat nyújtsanak az MCU -nak.

5. lépés: Interfész a vezérlővel

Mivel az ESP mikrovezérlőket trendben ismerjük, példánkban az ESP32 -t fogjuk használni. Tehát először egy Nodemcu-32-re van szüksége.

Ne aggódjon, ha van más ESP táblája vagy akár Arduino !!! Csak be kell állítania az Arduino IDE -t és a konfigurációt a fejlesztői táblák szerint, az Arduino, az ESP NodeMCU, az ESP32s stb. Számára. Szüksége lesz valamilyen I2C alkatrészre is, általában egy kitörési táblára. Ebben az oktatóanyagban az MMA8451 -et fogom használni digitális gyorsulásmérő kitörő tábla.

És kevés áthidaló vezeték …

6. lépés: Csatlakozások

Kapcsolatok
Kapcsolatok

És itt van egy elrendezés.

Az alábbi kapcsolatot használtam a fenti modulból a Nodemcu-32s modulhoz.

ESP32s - modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Ne feledje, hogy legtöbbször nem minden fejlesztőlapon (főleg ESP -kben) van egy jól látható érintkező, amely segít meghatározni, hogy mely csapokat használják! Tehát a csatlakoztatás előtt azonosítsa be a tábla megfelelő csapjait, hogy melyik tűket használja az SDA és az SCL számára."

7. lépés: Kód

Ehhez szükség van az Adafruit könyvtárra

innen:

Töltse le, bontsa ki és talál példák mappát, az Arduino IDE -ben csak nyissa meg az MMA8451demo mappát, és tessék….

a következő kódot fogja látni az MMA8451 érzékelő interfészéhez a vezérlővel

#befoglalni

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Drót.kezdet (4, 5); / * csatlakozzon az i2c buszhoz SDA = D1 és SCL = D2 a NodeMCU */ Serial.println ("Adafruit MMA8451 teszt!"); if (! mma.begin ()) {Serial.println ("Nem indulhat el"); míg (1); } Serial.println ("MMA8451 talált!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Tartomány ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Olvassa el a "nyers" adatokat 14 bites számokban mma.read (); Serial.print ("X: / t"); Soros.nyomtatás (mma.x); Serial.print ("\ tY: / t"); Soros.nyomtatás (mma.y); Serial.print ("\ tZ: / t"); Soros.nyomat (mma.z); Sorozat.println (); / * Szerezzen be új érzékelőeseményt */ sensors_event_t event; mma.getEvent (& event); / * Az eredmények megjelenítése (a gyorsulást m/s^2 -ban mérik) */Sorozat.nyom ("X: / t"); Sorozatnyomat (esemény.gyorsulás.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Sorozatnyomat (esemény.gyorsulás.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Soros.nyomtatás (event.acceleration.z); Serial.print ("\ t"); Soros.println ("m/s^2"); / * Szerezze meg az érzékelő tájolását */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); szünet; case MMA8451_PL_PUB: Serial.println ("Portrait Up Back"); szünet; case MMA8451_PL_PDF: Serial.println ("Portrait Down Front"); szünet; MMA8451_PL_PDB eset: Serial.println ("Portré lefelé"); szünet; eset MMA8451_PL_LRF: Serial.println ("Táj jobb első"); szünet; MMA8451_PL_LRB eset: Serial.println ("Táj jobbra hátul"); szünet; eset MMA8451_PL_LLF: Serial.println ("Tájkép bal első"); szünet; eset MMA8451_PL_LLB: Serial.println ("Tájkép bal hátsó"); szünet; } Sorozat.println (); késleltetés (1000); }

Mentés, ellenőrzés és feltöltés ……

Nyissa ki a soros monitort, és valami ilyesmit fog látni, az érzékelőt mozgattam, ezért a különböző leolvasásokat

X: -2166 Y: 1872 Z: 2186

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

Táj bal első

X: -224 Y: -2020 Z: 3188

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

Portré elöl

Nos, ha minden úgy ment, ahogy kellett volna, akkor most megvan az I2C alapjai és az eszköz csatlakoztatása.

De a készülék nem működik ??

Csak folytassa a következő lépéssel ……

8. lépés: Működtesse az I2C -eszközt

Alapvető lépések az I2C eszköz működéséhez

Vizsgáljuk meg….

  • A kábelezés megfelelő.. (ellenőrizze újra)
  • A program helyes.. (Igen, ez egy teszt példa.)

Kezdje a megoldandó szakaszokkal ….

1. lépés: Futtassa az I2C eszközolvasó programot az eszköz címének ellenőrzéséhez, és először az I2C eszköz rendben van

Letöltheti a vázlatot, és ellenőrizheti a kimenetet.

Eredmény - A készülék működik, és az érzékelő címe helyes

I2C szkenner. Szkennelés…

Talált cím: 28 (0x1C) Kész. Talált 1 eszközt.

2. lépés: Ellenőrizze az érzékelőkönyvtárat

Nyissa meg az Adafruit_MMA8451.h fájlt, és keresse meg az eszköz címét

Eredmény - A cím eltér az eszközömből ??

/*================================================ ========================= I2C CÍM/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Alapértelmezett MMA8451 I2C cím, ha A GND, annak 0x1C /*======================= ================================================== */

Tegye - Fájl szerkesztése a jegyzettömbből (cím módosítása) + Mentés + IDE újraindítása

Működik. Leolvashatja az olvasmányait.

Nem ……. ???

3. szakasz: Ellenőrizze a Wire.begin felülírását?

Nyissa meg az Adafruit_MMA8451.c fájlt, és keresse meg a Wire.begin fájlt.

Eredmény - Ez az állítás felül van írva

/************************************************* ************************* //*! @brief Beállítja a HW -t (leolvassa az együttható értékeit stb.)* / / ********************************** ***************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Tegye - Fájl szerkesztése a jegyzettömbből (megjegyzés) + Mentés + IDE újraindítása

És végül a készülék működni kezd…

Majdnem túlterheltem ezt az oktatóanyagot, mert fő célja az volt, hogy elmagyarázza, hogyan kell elindítani, adatokat szerezni az adatlapról, csatlakozni és az I2C eszközt nagyon egyszerű példával működtetni. Remélem, minden a helyén lesz, és hasznos lesz elindítani az érzékelőt.

Ajánlott: