Мазмуну:

I2C сенсор интерфейси менен баштоо ?? - Interface Сиздин MMA8451 ESP32s колдонуу: 8 кадам
I2C сенсор интерфейси менен баштоо ?? - Interface Сиздин MMA8451 ESP32s колдонуу: 8 кадам

Video: I2C сенсор интерфейси менен баштоо ?? - Interface Сиздин MMA8451 ESP32s колдонуу: 8 кадам

Video: I2C сенсор интерфейси менен баштоо ?? - Interface Сиздин MMA8451 ESP32s колдонуу: 8 кадам
Video: Как отслеживать и контролировать ESP32 из любой точки мира с помощью RemoteXY IoT Cloud 2024, Ноябрь
Anonim
I2C сенсор интерфейси менен баштоо ?? - Сиздин MMA8451 интерфейсиңиз ESP32лерди колдонуу менен
I2C сенсор интерфейси менен баштоо ?? - Сиздин MMA8451 интерфейсиңиз ESP32лерди колдонуу менен

Бул үйрөткүчтө сиз контролер (Arduino, ESP32, ESP8266, ESP12 NodeMCU) менен иштеген I2C түзмөгүн (Акселерометрди) кантип баштоо, туташтыруу жана алуу жөнүндө баардыгын үйрөнөсүз.

1 -кадам: I2C менен кантип баштоо керек - Интер IC байланышынын керемет дүйнөсү

Arduino, ESP Series, PIC, Rasberry PI ж.б.у.с укмуштуудай. Бирок бирөө болгондон кийин аны эмне кыласың?

Эң жакшысы сенсорлорду жана башкаларды кошуу. Бүгүнкү күндө көптөгөн жаңы технологиялар I2C протоколун колдонуп, компьютерге, телефондорго, планшеттерге же микроконтроллерлерге сенсорлор менен сүйлөшүүгө мүмкүнчүлүк берет. Акылдуу телефондор, эгер алар акселерометрдин сенсору менен сүйлөшпөсө, телефонуңуз кайсы жакка караганын билишпейт.

2 -кадам: I2Cге сереп

I2C-бул бир автобуста бир нече кожоюндар менен кулдардын чогуу жашоосуна мүмкүнчүлүк берген сериялык, синхрондуу, жарым дуплекстүү байланыш протоколу. I2C автобусу эки линиядан турат: сериялык маалымат линиясы (SDA) жана сериялык саат (SCL). Эки линия тең тартуучу резисторлорду талап кылат.

SDA (Сериялык маалыматтар) - Мастер менен кулдун маалыматтарды жөнөтүү жана алуу линиясы. SCL (Serial Clock) - Саат сигналын алып жүргөн сызык. Жөнөкөйлүк жана өндүрүштүн арзандыгы сыяктуу артыкчылыктары менен I2C көбүнчө аз ылдамдыктагы перифериялык түзүлүштөрдү кыска аралыкта (бир фут ичинде) байланыш үчүн колдонулат.

I2C жөнүндө көбүрөөк билгиңиз келеби? ……

3 -кадам: I²C сенсорлорун кантип конфигурациялоо керек

Проектке кирүүдөн мурун сенсордун бир нече негиздерин түшүнүшүңүз керек. Ошентип, сууга түшүүдөн мурун өзүңүзгө бир чыны кофе куюңуз:)? …

I2Cдин эң чоң күчү - ушунча сенсорду бир эле төрт зымга салууга болот. Бирок бир нече алдын ала жасалган модулдары бар блоктор үчүн, бир нече smd каршылыгын үзүлүштөрдөн алып салууга туура келиши мүмкүн, антпесе автобустагы тартылуу өтө агрессивдүү болуп калышы мүмкүн.

Биз маалымат баракчасынан кандай маалыматты каалайбыз ??

  1. Сенсордун иштеши
  2. Pinouts жана пиндердин иштеши
  3. Интерфейстин сүрөттөлүшү ("I2c Дарек тандоо столун" кароону унутпаңыз)
  4. Регистрлер !!

Баары жакшы, сиз аны оңой эле таба аласыз, бирок регистрлер ?? REGISTERS - бул I²C түзмөгүнүн ичиндеги эс тутумдары. Берилген сенсордо канча реестр бар экенин жана алар көзөмөлдөгөн же камтылган нерселердин жыйындысы реестр картасы деп аталат. Сенсордун маалымат барагындагы маалыматтын көбү ар бир регистрдин кантип иштээрин түшүндүрүү болуп саналат жана аларды окуу оңой эмес, анткени маалымат сейрек кездешет.

Мен эмнени айткым келгенин түшүнүү үчүн: Регистрлердин көптөгөн түрлөрү бар, бирок бул киришүү үчүн мен аларды эки жалпы түргө топтогону жатам: Башкаруу жана Маалымат регистрлери.

1) Контролдоо реестрлери

Көпчүлүк сенсорлор башкаруу реестринде сакталган маанилердин негизинде иштөө ыкмасын өзгөртүшөт. Башкаруу реестрлерин бир азга коюу менен күйгүзүп, 0ду өчүрүү менен өчүрүп-күйгүзүү/өчүрүү өчүргүчтөрүнүн банкы катары элестетип көрүңүз. I²C чипке негизделген сенсорлор көбүнчө бит сыяктуу нерселер үчүн ондогон же андан көп иштөө жөндөөлөрүнө ээ. Режимдер, үзгүлтүктөр, окуу-жазууну көзөмөлдөө, тереңдик, ылдамдыкты тандоо, ызы-чууну азайтуу ж.

2) Маалымат регистрлери Башкаруу реестрлерин алмаштыргычтардан айырмаланып, мен маалыматтарды чыгаруу регистрлерин экилик түрдө сакталган сандарды кармаган контейнерлер деп ойлойм. Демек, сиз маалыматтарды билгиңиз келет, ар дайым маалымат регистрлерин окуңуз, мен киммин, мен түзмөктү идентификациялоо үчүн катталам, Статус реестри ж.

Ошентип, I²C сенсорун ишке киргизүү-бул көп этаптуу процесс жана операциялардын туура тартиби көбүнчө маалымат баракчасында оңой эмес, тескери багытта жазылат. "Бул сенсордон окуу үчүн, (1), (2), (3), (4), ж.б." дегенди эч качан айтпаңыз, бирок сиз контролдук регистрдин биттеринин сыпаттамаларын таба аласыз: регистр, сиз бул башка башкаруу реестрине битти орнотушуңуз керек ".

Ошентсе да, мен ар дайым маалымат баракчасы көпчүлүк текстке караганда интерактивдүү деп табам. эгер сиз аны белгилүү бир маалыматка же маалыматка шилтеме кылсаңыз жана ал сизге бардык деталдарды, байланыштарды жана шилтемелерди берет. Жөн эле отуруп, бардык шилтемелериңизди алуу үчүн окуңуз.:)

4 -кадам: Кыймыл менен баштаңыз - Акселерометр

Заманбап акселерометрлер-бул Micro Electro-Mechanical Systems (MEMS) приборлору, бул кичинекей гаджеттердин ичине кичинекей чипке туура келерин билдирет. MEMS акселерометрлеринде колдонулган ылдамданууну өлчөөнүн бир ыкмасы булактарга илинген кичинекей өткөргүч масса колдонуу. Түзмөктүн ылдамдашы пружиналардын созулушуна же кысылышына алып келет, жана өткөргүч массанын чегинүүсү жакын, туруктуу плиталардын сыйымдуулугунун өзгөрүшү аркылуу өлчөнөт.

Акселерометрлер төмөнкү өзгөчөлүктөр менен аныкталат:

  1. Спецификациялык диаграммаларда X, Y жана Z деп белгиленген бирден үчкө чейин октордун саны. Белгилей кетчү нерсе, кээ бир акселерометрлер 6 огу же 9 огу деп аталат, бирок бул жөн гана алар гироскоптор жана/же магнитометрлер сыяктуу башка MEMS түзмөктөрү менен бириктирилгенин билдирет. Бул түзмөктөрдүн ар биринин үч огу бар, ошондуктан 3, 6 же 9-октук инерциялык өлчөө бирдиктери (IMU) бар.
  2. Чыгуунун түрү, аналогдук же санариптик. Санарип акселерометр ылдамдатуу маалыматын I2C же SPIде окула турган санариптик өкүлчүлүккө форматтоого кам көрөт.
  3. Ылдамдануу диапазону g’менен өлчөнөт, мында 1г - Жердин тартылуу күчүнүн ылдамдануусу.
  4. MCUдан алынган чийки маалыматтарды талдоо үчүн зарыл болгон кээ бир эсептөөлөрдү жүктөй ала турган копроцессорлор. Көпчүлүк акселерометрлер ылдамдануу босогосун (шок) жана 0-г (эркин түшүү) абалын аныктоо үчүн кээ бир жөнөкөй үзгүлтүккө жөндөмдүү. Башкалары MCUга көбүрөөк маалымат берүү үчүн чийки маалымат боюнча өнүккөн иштетүүнү жасай алышат.

5 -кадам: Контроллер менен интерфейс

Биз ESP микроконтроллерлерин трендде билгендиктен, биз мисал үчүн ESP32 колдонобуз. Ошентип, адегенде сизге Nodemcu-32s керек.

Эгерде сизде башка ESP такталары же жада калса Arduino болсо, кабатыр болбоңуз !!! Сиз жөн гана Arduino IDE жана конфигурацияңызды Arduino, ESP NodeMCU, ESP32s ж. санарип акселерометрдин сынык тактасы.

Жана бир нече секирүүчү зымдар ….

6 -кадам: Байланыштар

Байланыштар
Байланыштар

Жана бул жерде макет.

Мен Nodemcu-32s модулуна жогорудагы модулдан төмөнкү байланышты колдондум.

ESP32s - Модуль

3v3 - Vin

Гнд - Гнд

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ден

Жүктөө, ачуу жана сиз мисалдар папкасын таба аласыз, папкада Arduino IDEде MMA8451demo ачыңыз жана бул жерде…

сиз контроллериңиз менен MMA8451 сенсор интерфейси үчүн төмөнкү кодду көрөсүз

#кошуу

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * iode 2 автобусуна SDA = D1 жана SCL = D2 менен NodeMCU */ Serial.println менен кошулуңуз ("Adafruit MMA8451 тест!"); if (! mma.begin ()) {Serial.println ("Старт болбоду"); while (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 (& окуя); / * Жыйынтыктарды көрсөтүү (ылдамдануу м/с^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"); / * Сенсордун багытын алыңыз */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); тыныгуу; Case MMA8451_PL_PUB: Serial.println ("Артка портрет"); тыныгуу; case MMA8451_PL_PDF: Serial.println ("Алдыңкы портрет"); тыныгуу; case MMA8451_PL_PDB: Serial.println ("Артка портрет"); тыныгуу; case MMA8451_PL_LRF: Serial.println ("Пейзаж Оң жактагы"); тыныгуу; case MMA8451_PL_LRB: Serial.println ("Пейзаж Оңго Артка"); тыныгуу; case MMA8451_PL_LLF: Serial.println ("Пейзаждын сол жагы"); тыныгуу; case 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 m/s^2

Пейзаж Сол жагы

X: -224 Y: -2020 Z: 3188

X: -5.10 Y: -3.19 Z: 7.00 m/s^2

Алдыңкы портрет

Ооба, эгер баары ойдогудай болсо, анда сизде I2Cдин негиздери жана түзмөгүңүздү кантип туташтыруу керек.

Бирок аппарат иштебейт ??

Кийинки кадам менен гана барыңыз ….

8 -кадам: I2C түзмөгүңүздү иштетиңиз

I2C түзмөгүнүн иштеши үчүн негизги кадамдар

Келгиле, иликтеп көрөлү ….

  • Кабель туура.. (кайра текшериңиз)
  • Программа туура.. (Ооба, бул тесттин мисалы..)

Чечүү үчүн этаптардан баштаңыз ….

1 -этап: I2C түзмөгүнүн сканер программасын иштетип, түзмөктүн дарегин текшериңиз жана адегенде I2C түзмөгүңүз жакшы

Сиз эскизди жүктөп алып, чыгууну текшере аласыз.

Жыйынтык - Түзмөк иштеп жатат жана сенсордун дареги туура

I2C сканери. Скандалууда…

Табылган дарек: 28 (0x1C) Бүттү. 1 түзмөк табылды.

2 -этап: сенсордук китепкананы текшерүү

Adafruit_MMA8451.h файлын ачыңыз жана түзмөктүн дарегин табыңыз

Жыйынтык - Дарек менин түзмөгүмдөн айырмаланат?

/*=============================================== =========================== I2C ADDRESS/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Демейки MMA8451 I2C дареги, эгер A GND болсо, анын 0x1C /*====================== ================================================= */

Жасоо - Блокноттон файлды түзөтүү (даректи өзгөртүү) + Сактоо + IDEди кайра баштоо

Бул иштейт. Сиз окууңузду ала аласыз.

Эчтеке эмес …. ???

3 -этап: Текшерүү Wire.begin кайра жазылганбы?

Adafruit_MMA8451.c файлын ачыңыз жана Wire.begin табыңыз.

Жыйынтык - Бул арыздын үстүнө жазылган

/************************************************* ************************* //*! @brief HWти жөнгө салат (коэффициенттердин маанилерин ж.б. окуйт)* / / ******************************** **************************************/ bool Adafruit_MMA8451:: баштоо (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Жасоо - Блокноттон файлды түзөтүү (комментарий билдирүүсү) + Сактоо + IDEди кайра баштоо

Акыры, түзмөк иштей баштады…

Мен бул окуу куралын дээрлик ашыкча жүктөп жатам, анткени анын негизги максаты кантип баштоо керектигин, маалымат барагынан маалыматтарды алуу, туташуу жана I2C түзмөгүн эң жөнөкөй мисал менен иштетүүнү алуу эле.

Сунушталууда: