Obsah:

Začíname s rozhraním snímača I2C ?? - Rozhranie vášho MMA8451 pomocou ESP32s: 8 krokov
Začíname s rozhraním snímača I2C ?? - Rozhranie vášho MMA8451 pomocou ESP32s: 8 krokov

Video: Začíname s rozhraním snímača I2C ?? - Rozhranie vášho MMA8451 pomocou ESP32s: 8 krokov

Video: Začíname s rozhraním snímača I2C ?? - Rozhranie vášho MMA8451 pomocou ESP32s: 8 krokov
Video: Introduction to HT16K33 4 Digit LED Seven Segment Display with Arduino 2024, November
Anonim
Začíname s rozhraním snímača I2C ?? - Rozhranie MMA8451 prepojte pomocou systému ESP32s
Začíname s rozhraním snímača I2C ?? - Rozhranie MMA8451 prepojte pomocou systému ESP32s

V tomto návode sa dozviete všetko o tom, ako spustiť, pripojiť a získať zariadenie I2C (akcelerometer) pracujúce s ovládačom (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Krok 1: Ako začať s I2C - Veľkolepý svet inter IC komunikácie

Arduino, série ESP, PIC, Rasberry PI atď. Sú neuveriteľné. Čo s tým však robíte, keď ho už máte?

Najlepšie je pridať senzory a podobne. Dnes veľa horúcich nových technológií používa protokol I2C, ktorý umožňuje počítaču, telefónom, tabletom alebo mikrokontrolérom hovoriť so senzormi. Inteligentné telefóny by boli menej inteligentné, keby nemohli hovoriť so senzorom akcelerometra, aby zistili, akým smerom je váš telefón otočený.

Krok 2: Prehľad o I2C

I2C je sériový, synchrónny, poloduplexný komunikačný protokol, ktorý umožňuje súčasnú existenciu viacerých nadradených a podriadených jednotiek na tej istej zbernici. Zbernica I2C sa skladá z dvoch liniek: sériová dátová linka (SDA) a sériové hodiny (SCL). Obe vedenia vyžadujú výsuvné odpory.

SDA (sériové údaje) - Riadok pre master a slave na odosielanie a prijímanie údajov. SCL (sériové hodiny) - linka, ktorá prenáša hodinový signál. S takými výhodami, ako je jednoduchosť a nízke výrobné náklady, sa I2C väčšinou používa na komunikáciu periférnych zariadení s nízkou rýchlosťou na krátke vzdialenosti (v rámci jednej stopy).

Chcete sa dozvedieť viac o I2C? ……

Krok 3: Ako nakonfigurovať senzory I²C

Predtým, ako sa pustíte do projektu, musíte pochopiť niekoľko základov svojho senzora. Takže nalejete si šálku kávy, než sa do toho ponoríte:)? …

Veľkou silou I2C je, že na rovnaké štyri vodiče môžete umiestniť toľko senzorov. Ale pre jednotky s niekoľkými vopred pripravenými modulmi pripojenými bude možno potrebné z výpadkov odstrániť niekoľko odporov smd, inak môže byť príťah na zbernici príliš agresívny.

Aké informácie chceme z technického listu ??

  1. Funkcia senzora
  2. Funkcia pinov a pinov
  3. Popis rozhrania (Nezabudnite si pozrieť „tabuľku výberu adries I2c“)
  4. Registruje sa !!

Všetko je v poriadku, nájdete to ľahko, ale zaregistrujete sa? REGISTRÁCIE sú jednoducho pamäťové miesta vo vnútri zariadenia I²C. Súhrn toho, koľko registrov je v danom senzore, a čo riadia alebo obsahujú, sa nazýva mapa registrov. Väčšina informácií v technickom liste senzora je o vysvetlení, ako jednotlivé registre fungujú, a ich prečítanie môže byť celkom slogan, pretože informácie sú len zriedka prezentované priamym spôsobom.

Aby ste pochopili, čo tým myslím: Existuje mnoho druhov registrov, ale v tomto úvode ich zoskupím do dvoch všeobecných typov: riadiace a dátové registre.

1) Kontrolné registre

Väčšina senzorov mení svoju činnosť na základe hodnôt uložených v riadiacich registroch. Predstavte si riadiace registre ako banky prepínačov zapnutia/vypnutia, ktoré zapnete nastavením bitov na 1 a vypnete nastavením tohto bitu na 0. Senzory na báze čipov I²C majú často tucet alebo viac prevádzkových nastavení pre veci ako bitové Režimy, prerušenia, ovládanie čítania a zápisu, hĺbka, rýchlosť vzorkovania, redukcia šumu atď., Takže pred skutočným čítaním zvyčajne potrebujete nastaviť bity v niekoľkých rôznych riadiacich registroch.

2) Dátové registre Na rozdiel od riadiaceho registra prepínačov, registre dátových výstupov považujem za kontajnery s číslami, ktoré sa náhodou ukladajú v binárnej forme. Ak chcete vedieť údaje, vždy si prečítajte dátové registre, ako napríklad kto som, zaregistrujte sa na identifikáciu zariadenia, stavový register atď.

Inicializácia senzora I²C je teda viacstupňový proces a správne poradie operácií je často vysvetlené v opačnom smere, namiesto v prehľadnom liste. nikdy nehovorte „Ak chcete získať údaje z tohto snímača, urobte (1), (2), (3), (4) atď.“, ale nájdete popisy bitov riadiaceho registra, ktoré hovoria „skôr, ako v tomto nastavíte bit x v tomto inom riadiacom registri musíte nastaviť bit y “.

Napriek tomu sa mi vždy zdá, že dátový list je interaktívnejší než väčšina textu. ak ho odkážete na konkrétny kus alebo informácie a poskytne vám všetky podrobnosti, súvislosti a odkazy. Len si sadnite a čítajte, aby ste získali všetky svoje referencie.:)

Krok 4: Začnite pohybom - akcelerometer

Moderné akcelerometre sú zariadenia s mikroelektromechanickými systémami (MEMS), čo znamená, že sa zmestia na malý čip vnútri najmenších pomôcok. Jednou z metód na meranie zrýchlenia používaného akcelerometrom MEMS je použitie malej vodivej hmoty zavesenej na pružinách. Zrýchlenie zariadenia spôsobí roztiahnutie alebo stiahnutie pružín a vychýlenie vodivej hmoty sa môže merať zmenou kapacity na blízke pevné dosky.

Akcelerometre sú určené nasledujúcimi funkciami:

  1. Počet osí od jednej do troch osí označených X, Y a Z v diagramoch špecifikácie. Všimnite si toho, že niektoré akcelerometre sa nazývajú 6-osové alebo 9-osové, ale to len znamená, že sú dodávané s inými zariadeniami MEMS, ako sú gyroskopy a/alebo magnetometre. Každé z týchto zariadení má tiež tri osi, a preto existujú 3, 6 alebo 9-osové inerciálne meracie jednotky (IMU).
  2. Typ výstupu, analógový alebo digitálny. Digitálny akcelerometer sa stará o formátovanie údajov o akcelerácii do digitálnej reprezentácie, ktorú je možné odčítať cez I2C alebo SPI.
  3. Rozsah zrýchlenia meraného v g, kde 1 g je zrýchlenie spôsobené gravitáciou Zeme.
  4. Koprocesory, ktoré môžu vyložiť niektoré z výpočtov potrebných na analýzu nespracovaných údajov z MCU. Väčšina akcelerometrov má jednoduchú schopnosť prerušenia na detekciu prahu zrýchlenia (šok) a stavu 0 g (voľný pád). Iní môžu vykonať pokročilé spracovanie nespracovaných údajov a ponúknuť tak MCU zmysluplnejšie údaje.

Krok 5: Rozhranie s ovládačom

Pretože poznáme trendovo mikroprocesory ESP, použijeme pre náš príklad ESP32. Najprv teda potrebujete Nodemcu-32s.

Ak máte ďalšie dosky ESP alebo dokonca Arduino, nemusíte sa báť !!! Stačí nastaviť IDE a konfiguráciu Arduino podľa vašich vývojových dosiek, pre Arduino, ESP NodeMCU, ESP32 atď.… Budete tiež potrebovať nejaký druh I2C dielov, zvyčajne na oddeľovacej doske. V tomto návode budem používať MMA8451 oddeľovacia doska digitálneho akcelerometra.

A niekoľko prepojovacích káblov …

Krok 6: Pripojenia

Pripojenia
Pripojenia

A tu je rozloženie.

Na svoj modul Nodemcu-32s som použil nasledujúce pripojenie z vyššie uvedeného modulu.

ESP32s - modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

„Pamätajte si, že väčšinou nie všetky vývojové dosky (väčšinou v ESP) majú dobrý jasný vývod, ktorý vám pomôže určiť, ktoré piny sa používajú !! Takže pred pripojením identifikujte správne piny vašej dosky, ktoré použijú, ktoré piny sú pre SDA a SCL."

Krok 7: Kód

Na to je potrebná knižnica Adafruit

z

Stiahnite, rozbaľte a nájdete priečinok s ukážkami, v priečinku stačí otvoriť MMA8451demo vo svojom Arduino IDE a je to …

s ovládačom uvidíte nasledujúci kód pre rozhranie senzora MMA8451

#zahrnúť

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * pripojte zbernicu i2c s SDA = D1 a SCL = D2 NodeMCU */ Serial.println („test Adafruit MMA8451!“); if (! mma.begin ()) {Serial.println ("nemožno spustiť"); pričom (1); } Serial.println ("MMA8451 nájdený!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Rozsah ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Prečítajte 'surové' údaje v 14-bitových počtoch 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 (); / * Získať novú udalosť senzora */ sensor_event_t udalosť; mma.getEvent (& event); / * Zobrazenie výsledkov (zrýchlenie sa meria v 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"); / * Získať orientáciu senzora */ uint8_t o = mma.getOrientation (); prepínač (o) {case MMA8451_PL_PUF: Serial.println ("Portrét hore dopredu"); prestávka; prípad MMA8451_PL_PUB: Serial.println ("Portrét hore späť"); prestávka; prípad MMA8451_PL_PDF: Serial.println ("Portrét dole vpredu"); prestávka; prípad MMA8451_PL_PDB: Serial.println ("Portrét nadol späť"); prestávka; prípad MMA8451_PL_LRF: Serial.println ("Na šírku vpravo vpredu"); prestávka; prípad MMA8451_PL_LRB: Serial.println ("Na šírku vpravo späť"); prestávka; prípad MMA8451_PL_LLF: Serial.println ("Na šírku vpredu"); prestávka; prípad MMA8451_PL_LLB: Serial.println ("Na šírku zľava dozadu"); prestávka; } Serial.println (); oneskorenie (1000); }

Uložiť, overiť a nahrať ……

Otvorte sériový monitor a uvidíte niečo také, pohyboval som senzorom, a preto rôzne hodnoty

X: -2166 Y: 1872 Z: 2186

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

Krajina vľavo vpredu

X: -224 Y: -2020 Z: 3188

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

Portrét vpredu

Ak všetko prebehlo tak, ako malo, potom máte základy I2C a spôsob pripojenia zariadenia.

Ale zariadenie nefunguje ?? !

Pokračujte ďalším krokom … …

Krok 8: Začnite pracovať so svojim zariadením I2C.

Základné kroky pre správnu funkciu zariadenia I2C

Vyšetrime….

  • Zapojenie je správne.. (znova skontrolujte)
  • Program je správny.. (Áno, je to testovací príklad..)

Začnite fázami na vyriešenie ….

Krok 1: Spustite program na skenovanie zariadení I2C a skontrolujte adresu zariadenia. Najprv je vaše zariadenie I2C v poriadku

Môžete si stiahnuť náčrt a skontrolovať výstup.

Výsledok - Zariadenie funguje a adresa senzora je správna

I2C skener. Skenovanie…

Nájdená adresa: 28 (0x1C) Hotovo. Našlo sa 1 zariadení.

Krok 2: Skontrolujte knižnicu senzorov

Otvorte súbor Adafruit_MMA8451.h a vyhľadajte adresu zariadenia

Výsledok - adresa sa líši od môjho zariadenia ??.

/*======================================================================== ============================ ADRESA/BITY I2C --------------------- ---------------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Predvolená adresa I2C MMA8451, ak A je GND, jeho 0x1C /*=========================== ========================================================================== */

Vykonať - Upraviť súbor z poznámkového bloku (zmeniť adresu) + Uložiť + Reštartovať IDE

Funguje to. Môžete si prečítať svoje údaje.

Aby nie … ???

Krok 3: Skontrolujte, či je Wire.begin prepísaný?

Otvorte súbor Adafruit_MMA8451.c a nájdite Wire.begin.

Výsledok - toto vyhlásenie je prepísané.

/********************************************************************** ************************* @brief nastavuje HW (číta hodnoty koeficientov atď.)* / / ***************************** ******************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Vykonať - Upraviť súbor z poznámkového bloku (komentár) + Uložiť + Reštartovať IDE

A zariadenie konečne funguje☺ …

Tento tutoriál takmer preťažujem, pretože jeho hlavným cieľom bolo vysvetliť Ako začať, získať údaje z technického listu, pripojiť sa a zariadenie I2C pracovať na veľmi základnom príklade. Dúfam, že všetko pôjde tak, ako má, a bude užitočné spustiť svoj senzor.

Odporúča: