Turinys:

Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32: 8 žingsniai
Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32: 8 žingsniai

Video: Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32: 8 žingsniai

Video: Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32: 8 žingsniai
Video: Введение в LCD2004 ЖК-дисплей с модулем I2C для Arduino 2024, Liepa
Anonim
Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32
Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32

Šioje pamokoje sužinosite viską apie tai, kaip paleisti, prijungti ir gauti I2C įrenginį (pagreičio matuoklį), dirbantį su valdikliu („Arduino“, ESP32, ESP8266, ESP12 „NodeMCU“)

1 žingsnis: Kaip pradėti naudotis „I2C“- nuostabiu „Inter IC Communication“pasauliu

„Arduino“, ESP serijos, PIC, „Rasberry PI“ir kt. Yra neįtikėtini. Bet ką daryti su juo, kai jį turėsite?

Geriausias dalykas yra pridėti jutiklius ir pan. Šiandien daugelis naujų karštų technologijų naudoja I2C protokolą, kad kompiuteris, telefonai, planšetiniai kompiuteriai ar mikrovaldikliai galėtų kalbėti apie jutiklius. Išmanieji telefonai būtų mažiau protingi, jei negalėtų pasikalbėti su šiuo akselerometro jutikliu, kad žinotų, į kurią pusę nukreiptas jūsų telefonas.

2 žingsnis: „I2C“apžvalga

„I2C“yra nuoseklus, sinchroninis, pusiau dvipusis ryšio protokolas, leidžiantis kartu valdyti kelis šeimininkus ir vergus toje pačioje magistralėje. I2C magistralę sudaro dvi linijos: serijinė duomenų linija (SDA) ir nuoseklusis laikrodis (SCL). Abiem linijoms reikalingi traukiamieji rezistoriai.

SDA (serijiniai duomenys) - linija, skirta pagrindiniam ir pavaldžiajam duomenims siųsti ir gauti. SCL (serijinis laikrodis) - linija, kuri perduoda laikrodžio signalą. Turėdamas tokius privalumus kaip paprastumas ir mažos gamybos sąnaudos, I2C dažniausiai naudojamas mažo greičio periferinių įrenginių ryšiui trumpu atstumu (per vieną pėdą) perduoti.

Norite sužinoti daugiau apie I2C? ……

3 žingsnis: Kaip sukonfigūruoti I²C jutiklius

Prieš pradėdami projektą, turite suprasti keletą savo jutiklio pagrindų. Taigi prieš nardydami pilkite sau puodelį kavos:)? …

Didžioji „I2C“stiprybė yra ta, kad jūs galite prijungti tiek daug jutiklių prie tų pačių keturių laidų. Bet jei įrenginiuose yra prijungti keli iš anksto paruošti moduliai, gali tekti pašalinti keletą smd rezistorių iš pertraukų, kitaip magistralės traukimas gali tapti pernelyg agresyvus.

Kokios informacijos norime iš duomenų lapo ??

  1. Jutiklio funkcionalumas
  2. Smeigtukų ir smeigtukų funkcionalumas
  3. Sąsajos aprašymas (nepamirškite pažvelgti į „I2c adresų pasirinkimo lentelę“)
  4. Registrai !!

Viskas gerai, tai rasite lengvai, bet registrai ?? REGISTRACIJOS yra tiesiog atminties vietos I²C įrenginyje. Santrauka, kiek registrų yra tam tikrame jutiklyje ir ką jie valdo ar turi, vadinama registrų žemėlapiu. Dauguma informacijos jutiklio duomenų lape yra apie tai, kaip paaiškinti, kaip veikia kiekvienas registras, ir tai gali būti gana sunku perskaityti, nes informacija retai pateikiama tiesiogiai.

Kad suprastumėte, ką aš turiu omenyje: yra daug registrų rūšių, tačiau šiam įvadui aš juos sugrupuosiu į du bendrus tipus: kontrolės ir duomenų registrus.

1) Kontrolės registrai

Dauguma jutiklių keičia savo veikimą, atsižvelgdami į valdymo registruose saugomas vertes. Pagalvokite apie valdymo registrus kaip įjungimo/išjungimo jungiklių blokus, kuriuos įjungiate nustatydami bitą į 1 ir išjungdami nustatydami tą bitą į 0. I²C mikroschemų pagrindu veikiančiuose jutikliuose dažnai yra keliolika ar daugiau veikimo nustatymų, pvz. Režimai, pertraukimai, skaitymo ir rašymo valdymas, gylis, mėginių ėmimo greitis, triukšmo mažinimas ir kt., Todėl paprastai prieš nuskaitydami turite nustatyti bitus keliuose skirtinguose valdymo registruose.

2) Duomenų registrai Skirtingai nei valdiklis registruoja jungiklių bankus, aš manau, kad duomenų išvesties registrai yra konteineriai, kuriuose yra numeriai, kurie tiesiog saugomi dvejetaine forma. Taigi, norėdami sužinoti duomenis, visada skaitykite duomenų registrus, pvz., Kas aš esu registruodamasis įrenginiui identifikuoti, būsenos registrui ir pan.

Taigi, I²C jutiklio inicijavimas yra daugiapakopis procesas ir teisinga veiksmų tvarka dažnai paaiškinama raštu atvirkštine kryptimi, o ne paprasta duomenų lape. sąraše niekada nesakoma „Norėdami gauti nuskaitymą iš šio jutiklio, atlikite (1), (2), (3), (4) ir tt“, bet rasite valdymo registro bitų aprašymus, sakančius „prieš nustatydami bitą x šiame kitame valdymo registre turite nustatyti bitą y “.

Vis dėlto manau, kad duomenų lapas yra interaktyvesnis nei dauguma teksto. jei nurodysite tam tikrą informaciją ar informaciją ir suteiksite visą informaciją, ryšius ir nuorodas. Tiesiog atsisėskite ir perskaitykite, kad gautumėte visas savo nuorodas.:)

4 žingsnis: pradėkite nuo judesio - akselerometras

Šiuolaikiniai akselerometrai yra mikroelektromechaninės sistemos (MEMS) prietaisai, o tai reiškia, kad jie gali tilpti į mažą mikroschemą mažiausių prietaisų viduje. Vienas iš MEMS pagreičio matuoklių naudojamo pagreičio matavimo būdų yra mažos laidžios masės, pakabintos ant spyruoklių, panaudojimas. Dėl prietaiso pagreičio spyruoklės ištempiamos arba susitraukia, o laidžios masės deformaciją galima išmatuoti keičiant talpą į netoliese esančias fiksuotas plokštes.

Akselerometrai pasižymi šiomis savybėmis:

  1. Ašių skaičius, nuo vienos iki trijų ašių, specifikacijų diagramose pažymėtas X, Y ir Z. Atkreipkite dėmesį, kad kai kurie akselerometrai vadinami 6 ašių arba 9 ašių, tačiau tai tik reiškia, kad jie yra komplektuojami su kitais MEMS prietaisais, tokiais kaip giroskopai ir (arba) magnetometrai. Kiekvienas iš šių prietaisų taip pat turi tris ašis, todėl yra 3, 6 arba 9 ašių inerciniai matavimo vienetai (IMU).
  2. Išvesties tipas, analoginis arba skaitmeninis. Skaitmeninis akselerometras rūpinasi pagreičio duomenų formatavimu į skaitmeninį vaizdą, kurį galima nuskaityti per I2C arba SPI.
  3. Pagreitėjimo diapazonas, matuojamas g, kur 1g yra pagreitis dėl Žemės traukos.
  4. Bendraprocesoriai, galintys iškrauti kai kuriuos skaičiavimus, reikalingus neapdorotiems duomenims iš MCU analizuoti. Dauguma akselerometrų turi paprastą pertraukimo galimybę, kad nustatytų pagreičio slenkstį (šoką) ir 0 g (laisvo kritimo) būklę. Kiti gali atlikti išplėstinį neapdorotų duomenų apdorojimą, kad MCU pasiūlytų prasmingesnius duomenis.

5 žingsnis: sąsaja su valdikliu

Kadangi ESP mikrovaldiklius žinome tendencingai, savo pavyzdžiui naudosime ESP32. Taigi pirmiausia jums reikia „Nodemcu-32“.

Nesijaudinkite, jei turite kitų ESP plokščių ar net „Arduino“!!! Jums tereikia sukonfigūruoti „Arduino IDE“ir konfigūraciją pagal savo „Arduino“, „ESP NodeMCU“, „ESP32“ir kt. Kūrimo plokštes ir tt skaitmeninė pagreičio matuoklio pertraukimo lenta.

Ir keletas trumpųjų laidų …

6 žingsnis: jungtys

Sujungimai
Sujungimai

Ir čia yra išdėstymas.

Aš naudoju šį ryšį iš aukščiau esančio modulio su savo „Nodemcu-32s“moduliu.

ESP32 - modulis

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Atminkite, kad dažniausiai ne visos kūrimo plokštės (dažniausiai ESP) turi gerą aiškų kontaktą, padedantį nustatyti, kurie smeigtukai naudojami! Taigi prieš prijungdami nustatykite savo plokštės tinkamus kaiščius, kad galėtumėte naudoti SDA ir SCL kaiščius."

7 žingsnis: kodas

Tam reikalinga „Adafruit“biblioteka

Atsisiųskite, išpakuokite ir rasite pavyzdžių aplanką, aplanke tiesiog atidarykite „MMA8451demo“savo „Arduino IDE“ir štai …

pamatysite šį MMA8451 jutiklio sąsajos su valdikliu kodą

#įtraukti

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Viela.pradėti (4, 5); / * prisijungti prie i2c magistralės su SDA = D1 ir SCL = D2 iš NodeMCU */ Serial.println ("Adafruit MMA8451 testas!"); if (! mma.begin ()) {Serial.println ("Nepavyko paleisti"); tuo tarpu (1); } Serial.println ("Rasta MMA8451!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Diapazonas ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Skaitykite „neapdorotus“duomenis 14 bitų skaičiais mma.read (); Serial.print ("X: / t"); Serijinis atspaudas (mma.x); Serial.print ("\ tY: / t"); Serijinis atspaudas (mma.y); Serial.print ("\ tZ: / t"); Serijinis atspaudas (mma.z); Serial.println (); / * Gaukite naują jutiklio įvykį */ sensors_event_t įvykį; mma.getEvent (& event); / * Rodyti rezultatus (pagreitis matuojamas 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"); / * Gaukite jutiklio orientaciją */ uint8_t o = mma.getOrientation (); jungiklis (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); pertrauka; atvejis MMA8451_PL_PUB: Serial.println („Portretas aukštyn atgal“); pertrauka; atvejis MMA8451_PL_PDF: Serial.println („Portretas priekyje“); pertrauka; atvejis MMA8451_PL_PDB: Serial.println („Portretas žemyn atgal“); pertrauka; atvejis MMA8451_PL_LRF: Serial.println („Peizažas dešinėje priekyje“); pertrauka; atvejis MMA8451_PL_LRB: Serial.println („Peizažas dešinėje pusėje“); pertrauka; atvejis MMA8451_PL_LLF: Serial.println („Peizažas kairėje priekyje“); pertrauka; atvejis MMA8451_PL_LLB: Serial.println („Peizažas kairėn atgal“); pertrauka; } Serial.println (); vėlavimas (1000); }

Išsaugoti, patikrinti ir įkelti ……

Atidarykite nuoseklųjį monitorių ir pamatysite kažką panašaus, aš perkeliau jutiklį apie tai, kaip matyti įvairūs rodmenys

X: -2166 Y: 1872 Z: 2186

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

Peizažas kairysis priekis

X: -224 Y: -2020 Z: 3188

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

Portretas priekyje

Na, jei viskas klostėsi taip, kaip turėtų, dabar turite I2C pagrindus ir kaip prijungti įrenginį.

Bet prietaisas neveikia ??

Tiesiog eikite į kitą žingsnį ….

8 veiksmas: priverskite savo I2C įrenginį veikti

Pagrindiniai žingsniai, norint, kad I2C įrenginys veiktų

Ištirsime….

  • Laidai yra teisingi.. (patikrinkite dar kartą)
  • Programa teisinga.. (Taip, tai bandomasis pavyzdys..)

Pradėkite nuo etapų, kuriuos reikia išspręsti ….

1 etapas: paleiskite „I2C“įrenginio skaitytuvo programą, kad patikrintumėte įrenginio adresą ir pirmiausia jūsų „I2C“įrenginys veikia gerai

Galite atsisiųsti eskizą ir patikrinti išvestį.

Rezultatas - įrenginys veikia, o jutiklio adresas teisingas

I2C skaitytuvas. Nuskaitymas…

Rastas adresas: 28 (0x1C) Atlikta. Rasta 1 įrenginys (-ai).

2 etapas: patikrinkite jutiklių biblioteką

Atidarykite „Adafruit_MMA8451.h“failą ir raskite įrenginio adresą

Rezultatas - adresas skiriasi nuo mano įrenginio ??

/*================================================ ========================= I2C ADRESAS/BITAI --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Numatytasis MMA8451 I2C adresas, jei A yra GND, jo 0x1C /*======================= ================================================== */

Atlikti - Redaguoti failą iš bloknoto (pakeisti adresą) + Išsaugoti + Iš naujo paleisti IDE

Tai veikia. Galite gauti savo rodmenis.

Ar ne….. ???

3 etapas: patikrinkite „Wire.begin“yra perrašytas?

Atidarykite „Adafruit_MMA8451.c“failą ir raskite „Wire.begin“.

Rezultatas - šis teiginys perrašytas

/************************************************ ************************ //*! @brief Nustato HW (skaito koeficientų reikšmes ir pan.)* / / ********************************* ****************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Daryti - redaguoti failą iš užrašų knygelės (komentaras) + Išsaugoti + iš naujo paleisti IDE

Ir pagaliau įrenginys pradeda veikti…

Aš beveik perkraunu šią pamoką, nes jos pagrindinis tikslas buvo paaiškinti, kaip pradėti, gauti duomenis iš duomenų lapo, prisijungti ir gauti „I2C“įrenginį naudojant labai paprastą pavyzdį. Tikiuosi, kad viskas vyks taip, kaip turėtų, ir bus naudinga paleisti jutiklį.

Rekomenduojamas: