Satura rādītājs:

Darba sākšana ar I2C sensora saskarni ?? - Saskarne ar jūsu MMA8451, izmantojot ESP32: 8 soļi
Darba sākšana ar I2C sensora saskarni ?? - Saskarne ar jūsu MMA8451, izmantojot ESP32: 8 soļi

Video: Darba sākšana ar I2C sensora saskarni ?? - Saskarne ar jūsu MMA8451, izmantojot ESP32: 8 soļi

Video: Darba sākšana ar I2C sensora saskarni ?? - Saskarne ar jūsu MMA8451, izmantojot ESP32: 8 soļi
Video: Introduction to HT16K33 4 Digit LED Seven Segment Display with Arduino 2024, Jūlijs
Anonim
Darba sākšana ar I2C sensora saskarni ?? - Saskarne ar jūsu MMA8451, izmantojot ESP32
Darba sākšana ar I2C sensora saskarni ?? - Saskarne ar jūsu MMA8451, izmantojot ESP32

Šajā apmācībā jūs uzzināsit visu par to, kā sākt, savienot un iegūt I2C ierīci (akselerometru) darbam ar kontrolieri (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

1. solis: Kā sākt darbu ar I2C - lielisku starpposma komunikācijas pasauli

Arduino, ESP sērija, PIC, Rasberry PI uc ir neticami. Bet ko jūs ar to darāt, kad jums tāds ir?

Vislabāk ir pievienot sensorus un tamlīdzīgus. Mūsdienās daudzās jaunajās karstajās tehnoloģijās tiek izmantots I2C protokols, lai dators, tālruņi, planšetdatori vai mikrokontrolleri varētu runāt par sensoriem. Viedtālruņi būtu mazāk gudri, ja viņi nevarētu runāt ar šo akselerometra sensoru, lai uzzinātu, uz kuru pusi jūsu tālrunis ir vērsts.

2. darbība. I2C pārskats

I2C ir sērijveida, sinhronais, pusdupleksais sakaru protokols, kas ļauj vienlaikus vadīt vairākus saimniekus un vergus vienā kopnē. I2C kopne sastāv no divām līnijām: sērijas datu līnija (SDA) un sērijas pulkstenis (SCL). Abām līnijām ir nepieciešami pievilkšanas rezistori.

SDA (sērijas dati) - līnija, kas ļauj kapteinim un vergam sūtīt un saņemt datus. SCL (sērijas pulkstenis) - līnija, kas pārraida pulksteņa signālu. Ar tādām priekšrocībām kā vienkāršība un zemas ražošanas izmaksas I2C galvenokārt izmanto zema ātruma perifērijas ierīču saziņai nelielos attālumos (vienas pēdas robežās).

Vai vēlaties uzzināt vairāk par I2C? ……

3. darbība. Kā konfigurēt I²C sensorus

Pirms došanās uz projektu, jums ir jāsaprot daži sensora pamati. Tāpēc pirms iegremdēšanās ielejiet sev kafijas tasi:)? …

I2C lielā priekšrocība ir tā, ka uz tiem pašiem četriem vadiem var ievietot tik daudz sensoru. Bet vienībām, kurām ir pievienoti vairāki iepriekš izgatavoti moduļi, iespējams, būs jānoņem daži smd rezistori no izlaušanās vietām, pretējā gadījumā kopnes pievilkšana var kļūt pārāk agresīva.

Kādu informāciju mēs vēlamies no datu lapas ??

  1. Sensora funkcionalitāte
  2. Pinpušu un tapu funkcionalitāte
  3. Interfeisa apraksts (neaizmirstiet apskatīt tabulu “I2c adrešu izvēles tabula”)
  4. Reģistri !!

Viss ir kārtībā, jūs to atradīsit viegli, bet reģistri ?? REĢISTRI ir vienkārši atmiņas vietas I²C ierīcē. Kopsavilkumu par to, cik reģistru ir noteiktā sensorā un ko tie kontrolē vai satur, sauc par reģistra karti. Lielākā daļa informācijas sensora datu lapā ir par to, kā izskaidrot katra reģistra darbību, un to var izlasīt, jo informācija reti tiek sniegta tiešā veidā.

Lai jūs saprastu, ko es ar to domāju: ir daudz reģistru veidu, bet šajā ievadā es tos grupēšu divos vispārējos veidos: kontroles un datu reģistri.

1) Kontroles reģistri

Lielākā daļa sensoru maina savu darbību, pamatojoties uz kontroles reģistros saglabātajām vērtībām. Iedomājieties vadības reģistrus kā ieslēgšanas/izslēgšanas slēdžu blokus, kurus ieslēdzat, iestatot bitu uz 1 un izslēdzot, iestatot šo bitu uz 0. I²C mikroshēmu sensoriem bieži ir ducis vai vairāk darbības iestatījumu, piemēram, bitiem. Režīmi, pārtraukumi, lasīšanas-rakstīšanas vadība, dziļums, paraugu ņemšanas ātrums, trokšņa samazināšana utt., Tāpēc parasti pirms nolasīšanas jums ir jāiestata biti vairākos dažādos vadības reģistros.

2) Datu reģistri Atšķirībā no kontroles, kas reģistrē slēdžu banku, es domāju, ka datu izvades reģistri ir konteineri, kuros ir numuri, kas vienkārši tiek glabāti binārā formā. Tātad, ja vēlaties uzzināt datus, vienmēr izlasiet datu reģistrus, piemēram, kas es esmu, reģistrējoties ierīces identifikācijai, statusa reģistram utt.

Tātad I²C sensora inicializēšana ir daudzpakāpju process, un pareizā darbību secība bieži tiek paskaidrota rakstiski apgrieztā virzienā, nevis vienkārša datu lapā. Sarakstā nekad nav teikts: “Lai nolasītu no šī sensora, rīkojieties (1), (2), (3), (4) utt.”, bet jūs atradīsit vadības reģistra bitu aprakstus, kuros teikts: “pirms iestatāt bitu x šajā reģistrēt, šajā citā vadības reģistrā ir jāiestata bits y”.

Tomēr es vienmēr uzskatu, ka datu lapa ir daudz interaktīvāka nekā lielākā daļa teksta. ja jūs to atsaucēsit uz konkrētu informācijas daļu vai informāciju, un tā sniegs jums visu informāciju, savienojumus un atsauces. Vienkārši apsēdieties un izlasiet, lai uzzinātu visas savas atsauces.:)

4. solis: sāciet ar kustību - akselerometrs

Mūsdienu akselerometri ir mikroelektromehāniskās sistēmas (MEMS) ierīces, kas nozīmē, ka tie spēj iekļauties nelielā mikroshēmā mazāko sīkrīku iekšpusē. Viena metode, kā izmērīt paātrinājumu, ko izmanto MEMS akselerometri, ir izmantot nelielu, vadošu masu, kas piekārta uz atsperēm. Ierīces paātrinājums izraisa atsperu izstiepšanos vai saraušanos, un vadošās masas novirzi var izmērīt, mainot kapacitāti uz tuvumā esošām, fiksētām plāksnēm.

Akselerometrus nosaka šādas funkcijas:

  1. Asu skaits, no vienas līdz trim asīm, specifikāciju diagrammās apzīmēts ar X, Y un Z. Ņemiet vērā, ka dažus akselerometrus sauc par 6 vai 9 asīm, bet tas nozīmē tikai to, ka tie ir komplektā ar citām MEMS ierīcēm, piemēram, žiroskopiem un/vai magnetometriem. Katrai no šīm ierīcēm ir arī trīs asis, tāpēc ir 3, 6 vai 9 asu inerciālās mērvienības (IMU).
  2. Analogās vai digitālās izejas veids. Digitālais akselerometrs rūpējas par paātrinājuma datu formatēšanu digitālā attēlojumā, ko var nolasīt, izmantojot I2C vai SPI.
  3. Paātrinājuma diapazons, ko mēra g, kur 1g ir paātrinājums Zemes gravitācijas dēļ.
  4. Kopprocesori, kas var izkraut dažus aprēķinus, kas nepieciešami, lai analizētu neapstrādātus datus no MCU. Lielākajai daļai akselerometru ir dažas vienkāršas pārtraukšanas iespējas, lai noteiktu paātrinājuma slieksni (šoku) un 0 g (brīvā kritiena) stāvokli. Citi var veikt neapstrādātu datu papildu apstrādi, lai MCU piedāvātu nozīmīgākus datus.

5. darbība: saskarne ar kontrolieri

Tā kā mēs zinām, ka ESP mikrokontrolleri ir tendenciozi, mūsu piemērā izmantosim ESP32. Tātad vispirms jums ir nepieciešams Nodemcu-32s.

Neuztraucieties, ja jums ir kādi citi ESP dēļi vai pat Arduino !!! Jums vienkārši ir jāiestata Arduino IDE un konfigurācija atbilstoši jūsu attīstības paneļiem, Arduino, ESP NodeMCU, ESP32s utt. Jums būs nepieciešamas arī dažas I2C detaļas, parasti uz sadalīšanas dēļa. Šajā apmācībā es izmantošu MMA8451 digitālais paātrinājuma mērītāja panelis.

Un daži džemperu vadi….

6. darbība. Savienojumi

Savienojumi
Savienojumi

Un šeit ir izkārtojums.

Es izmantoju šādu savienojumu no iepriekš minētā moduļa ar savu Nodemcu-32s moduli.

ESP32 - modulis

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Atcerieties, ka lielākoties ne visos izstrādes dēļos (pārsvarā ESP) ir labs skaidrs uzgalis, lai palīdzētu noteikt, kuras tapas tiek izmantotas! Tātad, pirms pieslēgšanas identificējiet pareizās tapas tapas, lai izmantotu, kuras tapas ir paredzētas SDA un SCL."

7. solis: kods

Tam nepieciešama Adafruit bibliotēka

no

Lejupielādējiet, izsaiņojiet un jūs atradīsit mapes piemērus, mapē vienkārši atveriet MMA8451demo savā Arduino IDE un lūk …

jūs redzēsit šādu kodu savai MMA8451 sensora saskarnei ar savu kontrolieri

#iekļaut

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * pievienoties i2c kopnei ar SDA = D1 un SCL = D2 no NodeMCU */ Serial.println ("Adafruit MMA8451 tests!"); if (! mma.begin ()) {Serial.println ("Nevarētu sākt"); kamēr (1); } Serial.println ("MMA8451 atrasts!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Diapazons ="); Sērijas nospiedums (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Lasiet 'neapstrādātos' datus 14 bitu skaitļos mma.read (); Serial.print ("X: / t"); Sērijas nospiedums (mma.x); Serial.print ("\ tY: / t"); Sērijas nospiedums (mma.y); Serial.print ("\ tZ: / t"); Sērijas nospiedums (mma.z); Sērijas.println (); / * Iegūstiet jaunu sensora notikumu */ sensors_event_t notikumu; mma.getEvent (& notikums); / * Parādiet rezultātus (paātrinājumu mēra m/s^2) */Serial.print ("X: / t"); Sērijas nospiedums (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Sērijas nospiedums (notikums.paātrinājums.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Sērijas nospiedums (event.acceleration.z); Serial.print ("\ t"); Sērijas.println ("m/s^2"); / * Iegūstiet sensora orientāciju */ uint8_t o = mma.getOrientation (); slēdzis (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); pārtraukums; lieta MMA8451_PL_PUB: Serial.println ("Portrets uz augšu"); pārtraukums; lieta MMA8451_PL_PDF: Serial.println ("Portrets uz leju priekšā"); pārtraukums; lieta MMA8451_PL_PDB: Serial.println ("Portrets uz leju"); pārtraukums; lieta MMA8451_PL_LRF: Serial.println ("Ainava labajā priekšpusē"); pārtraukums; lieta MMA8451_PL_LRB: Serial.println ("Ainava pa labi"); pārtraukums; lieta MMA8451_PL_LLF: Serial.println ("Ainava kreisajā priekšpusē"); pārtraukums; lieta MMA8451_PL_LLB: Serial.println ("Ainava pa kreisi"); pārtraukums; } Sērijas.println (); kavēšanās (1000); }

Saglabāt, pārbaudīt un augšupielādēt ……

Atveriet seriālo monitoru, un jūs redzēsit kaut ko līdzīgu, es pārvietoju sensoru par līdz ar to dažādiem rādījumiem

X: -2166 Y: 1872 Z: 2186

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

Ainava Kreisā priekšpuse

X: -224 Y: -2020 Z: 3188

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

Portrets priekšā

Nu, ja viss notika tā, kā vajadzētu, tad jums tagad ir I2C pamati un ierīces savienošana.

Bet ierīce nedarbojas ??

Vienkārši dodieties uz nākamo soli ……

8. darbība. I2C ierīces darbības sākšana

Pamata darbības, lai I2C ierīce darbotos

Izpētīsim….

  • Elektroinstalācija ir pareiza.. (pārbaudiet vēlreiz)
  • Programma ir pareiza.. (Jā, tas ir testa piemērs..)

Sāciet ar risināmiem posmiem ….

1. posms: palaidiet I2C ierīces skenera programmu, lai pārbaudītu ierīces adresi un vispirms jūsu I2C ierīce ir kārtībā

Jūs varat lejupielādēt skici un pārbaudīt izvadi.

Rezultāts - ierīce darbojas un sensora adrese ir pareiza

I2C skeneris. Notiek skenēšana…

Atrastā adrese: 28 (0x1C) Gatavs. Atrasta 1 ierīce (-as).

2. posms: pārbaudiet sensoru bibliotēku

Atveriet failu Adafruit_MMA8451.h un atrodiet ierīces adresi

Rezultāts - adrese atšķiras no manas ierīces ??

/*================================================ ========================= I2C ADRESE/BITI --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Noklusējuma MMA8451 I2C adrese, ja A ir GND, tā 0x1C /*======================= ================================================== */

Darīt - rediģēt failu no piezīmju grāmatiņas (mainīt adresi) + Saglabāt + Restartēt IDE

Tas darbojas. Jūs varat iegūt savus rādījumus.

Vai ne ……. ???

3. posms: pārbaudiet Wire.begin ir pārrakstīts?

Atveriet failu Adafruit_MMA8451.c un atrodiet Wire.begin.

Rezultāts - šis paziņojums ir pārrakstīts

/************************************************ ************************* //*! @brief Uzstāda HW (nolasa koeficientu vērtības utt.)* / / ********************************* ***************************************/ bool Adafruit_MMA8451:: starts (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Darīt - rediģēt failu no piezīmju grāmatiņas (komentāra paziņojums) + Saglabāt + Restartēt IDE

Un visbeidzot ierīce sāk darboties…

Es gandrīz pārslogoju šo apmācību, jo tās galvenais mērķis bija izskaidrot, kā sākt, iegūt datus no datu lapas, izveidot savienojumu un panākt, lai I2C ierīce darbotos ar ļoti vienkāršu piemēru. Ceru, ka viss notiks tā, kā vajadzētu, un būs lietderīgi iedarbināt sensoru.

Ieteicams: