Obsah:

Začínáme s rozhraním senzoru I2C ?? - Rozhraní vašeho MMA8451 pomocí ESP32s: 8 kroků
Začínáme s rozhraním senzoru I2C ?? - Rozhraní vašeho MMA8451 pomocí ESP32s: 8 kroků

Video: Začínáme s rozhraním senzoru I2C ?? - Rozhraní vašeho MMA8451 pomocí ESP32s: 8 kroků

Video: Začínáme s rozhraním senzoru I2C ?? - Rozhraní vašeho MMA8451 pomocí ESP32s: 8 kroků
Video: Začínáme s Unipi 1.1 – rozšiřující deskou pro počítač Raspberry Pi (Mervis software) 2024, Listopad
Anonim
Začínáme s rozhraním senzoru I2C ?? - Rozhraní vašeho MMA8451 pomocí ESP32s
Začínáme s rozhraním senzoru I2C ?? - Rozhraní vašeho MMA8451 pomocí ESP32s

V tomto tutoriálu se dozvíte vše o tom, jak spustit, připojit a získat zařízení I2C (akcelerometr) pracující s ovladačem (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Krok 1: Jak začít s I2C - Magnificent World of Inter IC Communication

Arduino, řada ESP, PIC, Rasberry PI atd. Jsou neuvěřitelné. Ale co s tím uděláte, až ho budete mít?

Nejlepší je přidat senzory a podobně. Dnes mnoho nových technologií využívá protokol I2C, který umožňuje počítačům, telefonům, tabletům nebo mikrokontrolérům komunikovat se senzory. Chytré telefony by byly méně chytré, kdyby nemohly mluvit s čidlem akcelerometru, aby věděly, kterým směrem je váš telefon otočen.

Krok 2: Přehled o I2C

I2C je sériový, synchronní, poloduplexní komunikační protokol, který umožňuje koexistenci více masterů a slave na stejné sběrnici. Sběrnice I2C se skládá ze dvou linek: sériové datové linky (SDA) a sériových hodin (SCL). Obě linky vyžadují stahovací odpory.

SDA (sériová data) - řádek pro master a slave pro odesílání a přijímání dat. SCL (Sériové hodiny) - Linka, která nese hodinový signál. S takovými výhodami, jako je jednoduchost a nízké výrobní náklady, se I2C většinou používá pro komunikaci periferních zařízení s nízkou rychlostí na krátké vzdálenosti (v rámci jedné stopy).

Chcete se dozvědět více o I2C? ……

Krok 3: Jak konfigurovat senzory I²C

Než se pustíte do projektu, musíte porozumět několika základům svého senzoru. Nalijte si tedy šálek kávy, než se ponoříte?:) …

Velkou výhodou I2C je, že na stejné čtyři vodiče můžete umístit tolik senzorů. Ale u jednotek s několika připojenými předem připravenými moduly možná budete muset z výpadků odstranit několik smd rezistorů, jinak může být vytažení na sběrnici příliš agresivní.

Jaké informace chceme z Datasheetu ??

  1. Funkce senzoru
  2. Funkce pinů a pinů
  3. Popis rozhraní (Nezapomeňte se podívat na „tabulku výběru adresy I2c“)
  4. Registrace !!

Všechno je v pořádku, snadno to najdete, ale zaregistrujete se ?? REGISTRACE jsou jednoduše paměťová místa uvnitř zařízení I²C. Souhrn toho, kolik registrů je v daném senzoru a co ovládají nebo obsahují, se nazývá mapa registrů. Většina informací v technickém listu senzoru je o vysvětlení, jak každý registr funguje, a jejich přečtení může být docela slog, protože informace jsou zřídka prezentovány přímým způsobem.

Abyste získali představu o tom, co tím chci říci: Existuje mnoho druhů registrů, ale pro tento úvod je rozdělím do dvou obecných typů: řídicí a datové registry.

1) Kontrolní registry

Většina senzorů mění způsob fungování na základě hodnot uložených v řídicích registrech. Představte si řídicí registry jako banky přepínačů Zapnuto/Vypnuto, které zapnete nastavením bitů na 1 a vypnete nastavením tohoto bitu na 0. Čidla založená na čipu I²C mají často tucet nebo více provozních nastavení pro věci jako bitové Režimy, přerušení, kontrola čtení a zápisu, hloubka, rychlost vzorkování, redukce šumu atd., Takže než budete moci skutečně číst, obvykle potřebujete nastavit bity v několika různých řídicích registrech.

2) Datové registry Na rozdíl od řídicího registru přepínacích bank, myslím na výstupní datové registry jako kontejnery s čísly, která jsou náhodou uložena v binární formě. Chcete -li tedy znát Data, vždy čtěte datové registry, jako například kdo jsem, registruji identifikaci zařízení, stavový registr atd.

Inicializace senzoru I²C je tedy vícestupňový proces a správné pořadí operací je často vysvětleno v opačném směru, místo přímého v datovém listu. seznam nikdy neříká „Chcete -li získat hodnotu z tohoto senzoru, proveďte (1), (2), (3), (4) atd.“, ale najdete popis bitů řídicího registru se slovy „než v tomto nastavíte bit x registr, musíte nastavit bit y v tomto jiném kontrolním registru “.

Přesto vždy zjistím, že datový list je interaktivnější než většina textu. pokud budete odkazovat na konkrétní kus nebo informace a poskytne vám všechny podrobnosti, souvislosti a reference. Jen si sedněte a čtěte, abyste získali všechny své reference.:)

Krok 4: Začněte pohybem - akcelerometr

Moderní akcelerometry jsou zařízení Micro Electro-Mechanical Systems (MEMS), což znamená, že jsou schopni vejít se na malý čip uvnitř nejmenšího zařízení. Jednou z metod pro měření zrychlení používaného akcelerometry MEMS je využití malé vodivé hmoty zavěšené na pružinách. Zrychlení zařízení způsobí, že se pružiny natáhnou nebo smršťují, a průhyb vodivé hmoty lze měřit změnou kapacity na blízké pevné desky.

Akcelerometry jsou určeny následujícími funkcemi:

  1. Počet os od jedné do tří os označených ve specifikačních diagramech X, Y a Z. Všimněte si, že některé akcelerometry se nazývají 6-osé nebo 9-osé, ale to jen znamená, že jsou spojeny s jinými zařízeními MEMS, jako jsou gyroskopy a/nebo magnetometry. Každé z těchto zařízení má také tři osy, a proto existují 3, 6 nebo 9-osé inerciální měřicí jednotky (IMU).
  2. Typ výstupu, analogový nebo digitální. Digitální akcelerometr se stará o formátování dat zrychlení do digitální reprezentace, kterou lze odečíst přes I2C nebo SPI.
  3. Rozsah zrychlení měřený v g, kde 1 g je zrychlení způsobené gravitací Země.
  4. Koprocesory, které mohou uvolnit některé výpočty potřebné k analýze nezpracovaných dat z MCU. Většina akcelerometrů má schopnost jednoduchého přerušení detekovat práh zrychlení (šok) a podmínku 0 g (volný pád). Jiní mohou provádět pokročilé zpracování nezpracovaných dat a nabídnout tak MCU smysluplnější data.

Krok 5: Rozhraní s ovladačem

Jelikož známe trendově mikrořadiče ESP, použijeme pro náš příklad ESP32. Nejprve tedy potřebujete Nodemcu-32s.

Žádné starosti, pokud máte další desky ESP nebo dokonce Arduino !!! Stačí nastavit IDE a konfiguraci Arduino podle vašich vývojových desek, pro Arduino, ESP NodeMCU, ESP32 atd.… Budete také potřebovat nějaký druh I2C dílů, obvykle na breakout desce. V tomto tutoriálu budu používat MMA8451 oddělovací deska digitálního akcelerometru.

A pár propojovacích vodičů …

Krok 6: Připojení

Připojení
Připojení

A tady je rozložení.

Použil jsem následující připojení z výše uvedeného modulu k mému modulu Nodemcu-32s.

ESP32s - modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

„Pamatujte si, že většinou ne všechny vývojové desky (většinou v ESP) mají dobrý jasný pinout, který vám pomůže určit, které piny se používají !! Takže před připojením identifikujte správné piny vaší desky pro použití, které piny jsou pro SDA a SCL."

Krok 7: Kód

To vyžaduje knihovnu Adafruit

z

Stáhněte si, rozbalte a najdete složku příkladů, ve složce stačí otevřít MMA8451demo v Arduino IDE a je to….

s ovladačem uvidíte následující kód pro rozhraní senzoru MMA8451

#zahrnout

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * připojte sběrnici i2c pomocí SDA = D1 a SCL = D2 NodeMCU */ Serial.println („test Adafruit MMA8451!“); if (! mma.begin ()) {Serial.println ("Nelze spustit"); zatímco (1); } Serial.println ("MMA8451 nalezeno!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Rozsah ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Přečíst 'nezpracovaná' data ve 14bitových počtech 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ískat novou událost senzoru */ sensor_event_t událost; mma.getEvent (& událost); / * Zobrazení výsledků (zrychlení se měří 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ískejte orientaci senzoru */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); přestávka; případ MMA8451_PL_PUB: Serial.println ("Portrét nahoru zpět"); přestávka; případ MMA8451_PL_PDF: Serial.println ("Portrét dolů zepředu"); přestávka; případ MMA8451_PL_PDB: Serial.println ("Portrét dolů zpět"); přestávka; případ MMA8451_PL_LRF: Serial.println ("Na šířku vpravo vpředu"); přestávka; případ MMA8451_PL_LRB: Serial.println ("Na šířku vpravo zpět"); přestávka; případ MMA8451_PL_LLF: Serial.println ("Krajina vlevo vpředu"); přestávka; případ MMA8451_PL_LLB: Serial.println ("Na šířku zleva dozadu"); přestávka; } Serial.println (); zpoždění (1000); }

Uložit, ověřit a nahrát ……

Otevřete sériový monitor a uvidíte něco takového, pohyboval jsem senzorem, a proto různé 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 vlevo vpředu

X: -224 Y: -2020 Z: 3188

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

Portrét vpředu

Pokud vše proběhlo tak, jak mělo, pak máte základy I2C a Jak připojit zařízení..

Ale zařízení nefunguje ??

Pokračujte dalším krokem ……

Krok 8: Nechte své zařízení I2C fungovat …

Základní kroky pro správnou funkci zařízení I2C

Pojďme vyšetřovat….

  • Zapojení je správné.. (zkontrolujte znovu)
  • Program je správný.. (Ano, je to testovací příklad..)

Začněte fázemi k vyřešení …

Fáze 1: Spusťte program pro skenování zařízení I2C a zkontrolujte adresu zařízení a nejprve je vaše zařízení I2C v pořádku

Můžete si stáhnout skicu a zkontrolovat výstup.

Výsledek - Zařízení funguje a adresa senzoru je správná

Skener I2C. Skenování…

Nalezená adresa: 28 (0x1C) Hotovo. Nalezeno 1 zařízení.

Fáze 2: Zkontrolujte knihovnu senzorů

Otevřete soubor Adafruit_MMA8451.h a najděte adresu zařízení

Výsledek - adresa se liší od mého zařízení?

/*===================================================================== ===================================================================================== ---------------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Výchozí adresa I2C MMA8451, pokud A je GND, jeho 0x1C /*=========================== ======================================================================== */

Do - Upravit soubor z poznámkového bloku (změnit adresu) + Uložit + Restartovat IDE

Funguje to. Můžete získat své údaje.

Aby ne….. ???

Fáze 3: Zkontrolujte, zda je Wire.begin přepsán?

Otevřete soubor Adafruit_MMA8451.c a najděte Wire.begin.

Výsledek - toto prohlášení je přepsáno

/******************************************************** ************************* @brief nastaví HW (čte hodnoty koeficientů atd.)* / / ***************************** *******************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Do - Upravit soubor z poznámkového bloku (komentář) + Uložit + Restartovat IDE

A konečně zařízení začíná fungovat☺…

Tento tutoriál téměř přetížím, protože jeho hlavním cílem bylo vysvětlit, jak začít, získávat data z datového listu, připojovat se a zařízení I2C pracovat na velmi základním příkladu. Doufám, že vše půjde tak, jak má, a bude užitečné spustit senzor.

Doporučuje: