Բովանդակություն:

Սկսելով I2C տվիչների ինտերֆեյսի հետ ?? - Միացրեք ձեր MMA8451- ը ESP32- ների միջոցով. 8 քայլ
Սկսելով I2C տվիչների ինտերֆեյսի հետ ?? - Միացրեք ձեր MMA8451- ը ESP32- ների միջոցով. 8 քայլ

Video: Սկսելով I2C տվիչների ինտերֆեյսի հետ ?? - Միացրեք ձեր MMA8451- ը ESP32- ների միջոցով. 8 քայլ

Video: Սկսելով I2C տվիչների ինտերֆեյսի հետ ?? - Միացրեք ձեր MMA8451- ը ESP32- ների միջոցով. 8 քայլ
Video: #18 I2C Ընդլայնված մուտքային ելքեր | Outseal Arduino PLC 2024, Հուլիսի
Anonim
Սկսելով I2C տվիչների ինտերֆեյսի հետ ?? - Միացրեք ձեր MMA8451- ը ESP32- երի միջոցով
Սկսելով I2C տվիչների ինտերֆեյսի հետ ?? - Միացրեք ձեր MMA8451- ը ESP32- երի միջոցով

Այս ձեռնարկում դուք կսովորեք այն մասին, թե ինչպես սկսել, միացնել և ձեռք բերել վերահսկիչով աշխատող I2C սարքը (արագացուցիչ) (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Քայլ 1. Ինչպես սկսել I2C- ից - Միջ IC IC հաղորդակցության հիանալի աշխարհ

Arduino- ն, ESP Series- ը, PIC- ը, Rasberry PI- ը և այլն բոլորը անհավանական են: Բայց ինչ եք անում դրա հետ մեկ անգամ ունենալուց հետո:

Լավագույնը սենսորներ ավելացնելն է և այլն: Այսօր շատ նոր տեխնոլոգիան օգտագործում է I2C արձանագրությունը ՝ թույլ տալով համակարգչին, հեռախոսներին, պլանշետներին կամ միկրոկոնտրոլերներին խոսել սենսորների հետ: Սմարթ հեռախոսներն ավելի քիչ խելացի կլինեին, եթե նրանք չկարողանային խոսել արագացուցիչի սենսորի հետ ՝ իմանալու, թե ձեր հեռախոսն ինչ կողմ է նայում:

Քայլ 2: I2C- ի ակնարկ

I2C- ը սերիալային, համաժամանակյա, կիսատ դուպլեքս հաղորդակցության արձանագրություն է, որը թույլ է տալիս միևնույն ավտոբուսում բազմաթիվ վարպետների և ստրուկների համակեցություն: I2C ավտոբուսը բաղկացած է երկու տողից ՝ սերիական տվյալների գիծ (SDA) և սերիական ժամացույց (SCL): Երկու տողերը պահանջում են ձգվող դիմադրիչներ:

SDA (Սերիական տվյալներ) - Տիրոջ և տվյալների փոխանցման և ստացման տողը: SCL (Սերիական ժամացույց) - ժամացույցի ազդանշանը կրող գիծ: Նման առավելություններով, ինչպիսիք են պարզությունը և արտադրության ցածր արժեքը, I2C- ն հիմնականում օգտագործվում է ցածր արագությամբ ծայրամասային սարքերի կարճ հեռավորության վրա (մեկ ոտնաչափ հեռավորության վրա) հաղորդակցվելու համար:

Wantանկանում եք ավելին իմանալ I2C- ի մասին ……

Քայլ 3. Ինչպես կարգավորել I²C տվիչները

Նախագծին անցնելուց առաջ դուք պետք է հասկանաք ձեր սենսորի մի քանի հիմունքներ: Ուրեմն ինքդ քեզ մի գավաթ սուրճ լցրու՞մ նախքան սուզվելը:): …

I2C- ի մեծ ուժն այն է, որ կարող եք այդքան սենսոր տեղադրել նույն չորս լարերի վրա: Բայց մի քանի նախապես պատրաստված մոդուլներով միացված միավորների դեպքում, հնարավոր է, ստիպված լինեք ջարդվածքներից հեռացնել մի քանի smd դիմադրիչներ, հակառակ դեպքում ավտոբուսի քաշքշուկը կարող է չափազանց ագրեսիվ դառնալ:

Ի՞նչ տեղեկատվություն ենք մենք ցանկանում տվյալների թերթիկից:

  1. Սենսորային ֆունկցիոնալություն
  2. Pinouts և կապում ֆունկցիոնալությունը
  3. Ինտերֆեյսի նկարագրություն (Բաց մի՛ թողեք դիտել «I2c հասցեների ընտրության աղյուսակը»)
  4. Գրանցումներ !!

Ամեն ինչ կարգին է, հեշտությամբ կգտնեք, բայց գրանցվում է ?? ԳՐԱՆՈՆԵՐԸ պարզապես հիշողության վայրեր են I²C սարքի ներսում: Ամփոփումը, թե քանի գրանցամատյան կա տվյալ տվիչի մեջ, և այն, ինչ նրանք վերահսկում կամ պարունակում են, կոչվում է գրանցամատյան: Սենսորների տվյալների թերթի մասին տեղեկատվության մեծ մասը վերաբերում է յուրաքանչյուր գրանցամատյանի գործառույթների բացատրությանը, և դրանք կարող են բավականին բարդ լինել ընթերցման համար, քանի որ տեղեկատվությունը հազվադեպ է ուղղակիորեն ներկայացվում:

Որպեսզի կարողանաք հասկանալ, թե ինչ նկատի ունեմ դրանում. Գրանցամատյանները շատ են, բայց այս ներածության համար ես դրանք խմբավորելու եմ երկու ընդհանուր տիպի ՝ Control և Data ռեգիստրներ:

1) Վերահսկիչ գրանցամատյաններ

Սենսորների մեծ մասը փոխում է իր գործելաոճը `հիմնվելով հսկիչ գրանցամատյաններում պահվող արժեքների վրա: Մտածեք կառավարման ռեգիստրների մասին որպես միացման/անջատման անջատիչների բանկեր, որոնք դուք միացնում եք ՝ մի փոքր սահմանելով 1 և անջատելով ՝ սահմանելով այն 0: Ռեժիմներ, ընդհատումներ, կարդալ-գրելու հսկողություն, խորություն, նմուշառման արագություն, աղմուկի նվազեցում և այլն, այնպես որ սովորաբար պետք է բիթեր դնել մի քանի տարբեր հսկիչ գրանցամատյաններում, նախքան իրականում կարդալը:

2) Տվյալների գրանցամատյաններ Ի տարբերություն հսկիչի, որը գրանցում է անջատիչների բանկը, ես կարծում եմ, որ տվյալների ելքային գրանցամատյանները որպես տարաներ պահող տարաներ են, որոնք պարզապես պահվում են երկուական տեսքով: Այսպիսով, դուք ցանկանում եք իմանալ Տվյալները, միշտ կարդալ տվյալների գրանցամատյաններ, ինչպիսիք են, թե ով եմ ես գրանցված սարքի նույնականացման համար, Կարգավիճակի գրանցամատյան և այլն:

Այսպիսով, I²C տվիչի նախաստորագրումը բազմաքայլ գործընթաց է, և գործողությունների ճիշտ կարգը հաճախ բացատրվում է գրավոր ՝ հակառակ ուղղությամբ ՝ տվյալների ուղղակի թերթի փոխարեն: ցուցակը, որը երբեք չի ասի. գրանցամատյանում դուք պետք է նշեք բիթը այս մյուս հսկիչ գրանցամատյանում »:

Այնուամենայնիվ, ես միշտ գտնում եմ, որ տվյալների թերթիկը ավելի ինտերակտիվ է, քան տեքստը: եթե Դուք հղում կատարեք այն որոշակի հատվածի կամ տեղեկատվության կտորների համար և այն կտա ձեզ բոլոր մանրամասները, կապերը և հղումները: Պարզապես նստեք և կարդացեք ՝ ձեր բոլոր հղումները հանելու համար::)

Քայլ 4: Սկսեք շարժումով `արագացուցիչ

Modernամանակակից արագացուցիչները Micro Electro-Mechanical Systems (MEMS) սարքերն են, ինչը նշանակում է, որ դրանք ունակ են տեղավորվել ամենափոքր գործիքի ներսում մի փոքր չիպի վրա: MEMS արագացուցիչների կողմից կիրառվող արագացումը չափելու մեթոդներից է աղբյուրների վրա կախված մի փոքր հաղորդիչ զանգվածի օգտագործումը: Սարքի արագացումն առաջացնում է աղբյուրների ձգում կամ սեղմում, իսկ հաղորդիչ զանգվածի շեղումը կարելի է չափել մոտակա, ամրացված թիթեղների հզորության փոփոխության միջոցով:

Արագաչափաչափերը որոշվում են հետևյալ հատկանիշներով

  1. Առանձնահատկությունների գծապատկերներում ՝ մեկից երեք առանցքների, X, Y և Z պիտակներով առանցքների թիվը: Նկատի ունեցեք, որ որոշ արագացուցիչներ կոչվում են 6 առանցք կամ 9 առանցք, բայց դա նշանակում է, որ դրանք միավորված են MEMS այլ սարքերի հետ, ինչպիսիք են գիրոսկոպը և/կամ մագնիսաչափերը: Այդ սարքերից յուրաքանչյուրն ունի նաև երեք առանցք, այդ իսկ պատճառով կան 3, 6 կամ 9 առանցքի իներցիոն չափման միավորներ (ԻՄՄ):
  2. Ելքի տեսակը ՝ անալոգային կամ թվային: Թվային արագացուցիչը հոգում է արագացման տվյալների ձևաչափումը թվային ներկայացման մեջ, որը կարելի է կարդալ I2C կամ SPI- ով:
  3. Գ – ով չափվող արագացման միջակայքը, որտեղ 1 գ – ը Երկրի ձգողության հետևանքով առաջացած արագացումն է:
  4. Համամշակողներ, որոնք կարող են բեռնաթափել որոշ հաշվարկներ, որոնք անհրաժեշտ են MCU- ի հումքի տվյալները վերլուծելու համար: Արագացուցիչ սարքերի մեծամասնությունն ունի որոշ պարզ ընդհատման ունակություն ՝ արագացման շեմ (ցնցում) և 0 գ (ազատ անկում) վիճակ հայտնաբերելու համար: Մյուսները կարող են կատարելապես մշակել չմշակված տվյալները ՝ ավելի իմաստալից տվյալներ առաջարկելու MCU- ին:

Քայլ 5: Կառավարիչի հետ ինտերֆեյս

Քանի որ մենք գիտենք ESP միկրոկոնտրոլերների միտումները, մենք մեր օրինակի համար կօգտագործենք ESP32- ը: Այսպիսով, նախ անհրաժեշտ է Nodemcu-32s:

Մի անհանգստացեք, եթե ունեք որևէ այլ ESP տախտակ կամ նույնիսկ Arduino !!! Պարզապես պետք է կարգավորեք ձեր Arduino IDE- ն և կազմաձևը ՝ ըստ ձեր զարգացման տախտակների, Arduino- ի, ESP NodeMCU- ի, ESP32s- ի և այլնի համար: Ձեզ նույնպես կպահանջվեն որոշ I2C մասեր, սովորաբար ՝ բեկման տախտակի վրա: Այս ձեռնարկում ես պատրաստվում եմ օգտագործել MMA8451- ը: թվային արագացուցիչի բեկման տախտակ:

Եվ մի քանի ցատկող լարեր …

Քայլ 6: Միացումներ

Միացումներ
Միացումներ

Եվ ահա դասավորությունը:

Ես օգտագործեցի հետևյալ կապը վերը նշված մոդուլից դեպի իմ Nodemcu-32s մոդուլը:

ESP32s - Մոդուլ

3v3 - Վին

Գնդ - Գնդ

SDA 21 - SDA

SCL 22 - SCL

«Հիշեք, որ շատ ժամանակ ոչ բոլոր զարգացման տախտակները (հիմնականում ESP- ներում) ունեն լավ հստակ մատնանշում, որը կօգնի որոշել, թե որ կապերն են օգտագործվում: Այսպիսով, նախքան կապը, գտեք ձեր տախտակի ճիշտ քորոցները, որոնք կօգտագործեն SDA- ի և SCL- ի համար:"

Քայլ 7: Կոդ

Սա պահանջում է Adafruit գրադարանը

downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_MMA8451_Library-1.1.0.zip կայքից

Ներբեռնեք, բացեք ֆայլը և կգտնեք օրինակների պանակ, թղթապանակում պարզապես բացեք MMA8451demo ձեր Arduino IDE- ում և ահա…

Դուք կտեսնեք հետևյալ կոդը ձեր MMA8451 սենսորային ինտերֆեյսի համար ձեր վերահսկիչի հետ

#ներառում

#ներառել #ներառել Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * միանալ i2c ավտոբուսին SDA = D1 և SCL = D2 NodeMCU */ Serial.println- ով («Adafruit MMA8451 թեստ»); if (! mma.begin ()) {Serial.println («Չհաջողվեց սկսել»); մինչդեռ (1); } Serial.println («Գտնվել է MMA8451»); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Range ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Կարդացեք «չմշակված» տվյալները 14 բիթանոց հաշվարկներով 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 (); / * Ստացեք նոր սենսորային իրադարձություն */ sensors_event_t միջոցառում; mma.getEvent (& իրադարձություն); / * Displayուցադրել արդյունքները (արագացումը չափվում է մ/վ^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 ("մ/վ^2"); / * Ստացեք տվիչի կողմնորոշումը */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Դիմանկար առջևում"); ընդմիջում; պատյան MMA8451_PL_PUB: Serial.println («Դիմանկար դեպի վեր»); ընդմիջում; գործ MMA8451_PL_PDF: Serial.println ("Դիմանկար ներքևից"); ընդմիջում; պատյան MMA8451_PL_PDB: Serial.println («Դիմանկար հետընթաց հետ»); ընդմիջում; գործ MMA8451_PL_LRF: Serial.println («Լանդշաֆտային աջ ճակատ»); ընդմիջում; գործ MMA8451_PL_LRB: Serial.println ("Լանդշաֆտ աջ հետ"); ընդմիջում; պատյան MMA8451_PL_LLF: Serial.println ("Լանդշաֆտ ձախ ճակատում"); ընդմիջում; գործ MMA8451_PL_LLB: Serial.println ("Լանդշաֆտ ձախ հետևում"); ընդմիջում; } Serial.println (); ուշացում (1000); }

Պահել, հաստատել և վերբեռնել ……

Բացեք սերիալային մոնիտորը և կտեսնեք այսպիսի մի բան, ես սենսորը տեղափոխում էի, հետևաբար տարբեր ընթերցումներ

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4.92 Y: 5.99 Z: 4.87 մ/վ^2

Լանդշաֆտ Ձախ ճակատ

X: -224 Y: -2020 Z: 3188

X: -5.10 Y: -3.19 Z: 7.00 մ/վ^2

Դիմանկար առջևում

Դե, եթե ամեն ինչ ընթացավ այնպես, ինչպես պետք է, ապա այժմ դուք ունեք I2C- ի հիմունքները և ինչպես միացնել ձեր սարքը:

Բայց սարքը չի աշխատում ??

Անցեք հաջորդ քայլին ……

Քայլ 8: Աշխատեք ձեր I2C սարքի վրա:

I2C սարքի աշխատանքի հիմնական քայլերը:

Եկեք քննենք….

  • Հաղորդալարումը ճիշտ է (նորից ստուգեք)
  • Programրագիրը ճիշտ է.. (Այո, դա փորձարկման օրինակ է..)

Սկսեք լուծման փուլերից…..

Փուլ 1. Գործարկեք I2C սարքի սկաների ծրագիրը `սարքի հասցեն ստուգելու համար, և նախ ձեր I2C սարքը լավ է:

Կարող եք ներբեռնել ուրվագիծը և ստուգել ելքը:

Արդյունք - Սարքն աշխատում է, և տվիչի հասցեն ճիշտ է

I2C սկաներ: Սկանավորում…

Գտնված հասցե ՝ 28 (0x1C) Կատարված է: Գտնվել է 1 սարք (ներ):

2 -րդ փուլ. Ստուգեք տվիչների գրադարանը:

Բացեք Adafruit_MMA8451.h ֆայլը և գտեք սարքի հասցեն

Արդյունք - Հասցեն տարբերվում է իմ սարքից ??

/*================================================ ========================= I2C ՀԱՍDԵ/ԲԻԹՍ --------------------- ------------------------------------------------------ * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Նախնական MMA8451 I2C հասցե, եթե A- ն GND է, դրա 0x1C /*======================== ================================================== */

Do - ֆայլը խմբագրել նոթատետրից (փոխել հասցեն) + Պահել + Վերագործարկել IDE- ն

Այն աշխատում է. Դուք կարող եք ստանալ ձեր ընթերցումները:

Չի կարելի….. ???

3 -րդ փուլ. Ստուգեք, որ Wire.begin- ը վերաշարադրվա՞ծ է:

Բացեք Adafruit_MMA8451.c ֆայլը և գտեք Wire.begin:

Արդյունք - Այս հայտարարությունը վերաշարադրված է:

/********************************************** **************************! @brief- ը կարգավորում է HW- ն (կարդում է գործակիցների արժեքները և այլն)* / / ******************************** *************************************/ bool Adafruit_MMA8451:: սկսել (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Անել - Խմբագրել ֆայլը նոթատետրից (մեկնաբանության հայտարարություն) + Պահել + Վերագործարկել IDE- ն

Եվ վերջապես Սարքն աշխատում է ☺…

Ես գրեթե ծանրաբեռնում եմ այս ձեռնարկը, քանի որ դրա հիմնական նպատակն էր բացատրել, թե ինչպես սկսել, տվյալներ ստանալ տվյալների թերթիկից, միացնել և աշխատել I2C սարքի հետ աշխատելով շատ հիմնական օրինակով: Հուսանք, որ ամեն ինչ կընթանա այնպես, ինչպես պետք է, և օգտակար կլինի սկսել ձեր ցուցիչը:

Խորհուրդ ենք տալիս: