Съдържание:

Първи стъпки с I2C сензорен интерфейс ?? - Свържете вашия MMA8451 с помощта на ESP32: 8 стъпки
Първи стъпки с I2C сензорен интерфейс ?? - Свържете вашия MMA8451 с помощта на ESP32: 8 стъпки

Видео: Първи стъпки с I2C сензорен интерфейс ?? - Свържете вашия MMA8451 с помощта на ESP32: 8 стъпки

Видео: Първи стъпки с I2C сензорен интерфейс ?? - Свържете вашия MMA8451 с помощта на ESP32: 8 стъпки
Видео: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Ноември
Anonim
Първи стъпки с I2C сензорен интерфейс ?? - Свържете вашия MMA8451 с помощта на ESP32
Първи стъпки с I2C сензорен интерфейс ?? - Свържете вашия MMA8451 с помощта на ESP32

В този урок ще научите всичко за това как да стартирате, свържете и получите I2C устройство (акселерометър), работещо с контролер (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Стъпка 1: Как да започнете с I2C - Великолепен свят на комуникация между IC

Arduino, ESP Series, PIC, Rasberry PI и т.н. са невероятни. Но какво правите с него, след като го имате?

Най -доброто нещо е да добавите сензори и подобни. Днес много от горещите нови технологии използват протокола I2C, за да позволят на компютъра, телефоните, таблетите или микроконтролерите да говорят със сензорите. Умните телефони биха били по -малко умни, ако не можеха да говорят с този сензор за акселерометър, за да знаят в каква посока е обърнат телефонът ви.

Стъпка 2: Преглед на I2C

I2C е сериен, синхронен, полудуплексен комуникационен протокол, който позволява съвместно съществуване на множество господари и подчинени на една и съща шина. I2C шината се състои от две линии: серийна линия за данни (SDA) и сериен часовник (SCL). И двете линии изискват издърпващи се резистори.

SDA (Serial Data) - Линията за главното и подчиненото устройство за изпращане и получаване на данни. SCL (Serial Clock) - Линията, която носи часовника. С такива предимства като простота и ниски производствени разходи, I2C се използва най-вече за комуникация на нискоскоростни периферни устройства на къси разстояния (в рамките на един крак).

Искате ли да научите повече за I2C? ……

Стъпка 3: Как да конфигурирате I²C сензори

Преди да влезете в проекта, трябва да разберете няколко основи на вашия сензор. Така че сипете чаша кафе, преди да се потопите:)? …

Голямата сила на I2C е, че можете да поставите толкова много сензори върху същите четири проводника. Но за устройства с няколко предварително готови модула, свързани, може да се наложи да премахнете няколко smd резистора от пробивите, в противен случай издърпването на шината може да стане твърде агресивно.

Каква информация искаме от листа с данни ??

  1. Функционалност на сензора
  2. Функционалност на щифтове и щифтове
  3. Описание на интерфейса (Не пропускайте да погледнете „Таблица за избор на адрес I2c“)
  4. Регистрира !!

Всичко е наред, лесно ще го намерите, но регистрира ?? РЕГИСТРИТЕ са просто места в паметта в I²C устройство. Обобщението за това колко регистри има в даден сензор и какво те контролират или съдържат се нарича регистърна карта. По -голямата част от информацията в листа с данни на сензора е за обяснение как функционира всеки регистър и те могат да бъдат доста лоши за четене, тъй като информацията рядко се представя по директен начин.

За да ви дам представа какво имам предвид с това: Има много видове регистри, но за това въведение ще ги групирам в два общи типа: Регистри за контрол и данни.

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

Повечето сензори променят начина си на работа въз основа на стойностите, съхранявани в контролните регистри. Мислете за регистрите за управление като банки от превключватели за включване/изключване, които включвате, като задавате малко на 1 и изключвате, като задавате този бит на 0. Сензорите на базата на чипове I²C често имат десетина или повече оперативни настройки за неща като бит- Режими, прекъсвания, контрол за четене и запис, дълбочина, скорост на дискретизация, намаляване на шума и т.н., така че обикновено трябва да зададете битове в няколко различни контролни регистри, преди да можете да вземете действително отчитане.

2) Регистри на данни За разлика от контролните регистри на комутаторите, мисля, че регистрите за извеждане на данни са контейнери, съдържащи номера, които просто се съхраняват в двоична форма. Искате да знаете Данни, винаги четете регистрите с данни, като например кой съм аз за регистрация за идентификация на устройството, Регистър на състоянието и т.н.

И така, инициализирането на I²C сензор е многоетапен процес и правилният ред на операциите често се обяснява писмено в обратна посока, вместо просто в таблицата с данни. списък никога не казва „За да получите показания от този сензор, направете (1), (2), (3), (4) и т.н.“, но ще намерите описания на битовете на контролния регистър, казващи „преди да зададете бит x в това регистър трябва да зададете бит y в този друг контролен регистър”.

Все пак винаги намирам, че лист с данни е по -интерактивен от повечето текстове. ако ще го позовавате за конкретна информация или части и тя ще ви даде всички подробности, връзки и препратки. Просто седнете и прочетете, за да извлечете всичките си препратки.:)

Стъпка 4: Започнете с движение - акселерометър

Съвременните акселерометри са устройства за микро електромеханични системи (MEMS), което означава, че те могат да се поберат на малък чип в най-малките приспособления. Един метод за измерване на ускорението, използван от акселерометрите MEMS, е да се използва малка проводима маса, окачена на пружини. Ускорението на устройството кара пружините да се разтягат или свиват, а отклонението на проводимата маса може да бъде измерено чрез промяна на капацитета до близки, неподвижни плочи.

Акселерометрите се определят от следните функции:

  1. Броят на осите, от една до три оси, обозначени с X, Y и Z в диаграмите на спецификациите. Имайте предвид, че някои акселерометри се наричат 6-осни или 9-осни, но това просто означава, че те са свързани с други MEMS устройства, като жироскопи и/или магнитометри. Всяко от тези устройства също има три оси, поради което има 3, 6 или 9-осни инерционни измервателни единици (IMU).
  2. Типът на изхода, аналогов или цифров. Цифровият акселерометър се грижи за форматирането на данните за ускорението в цифрово представяне, което може да се чете през I2C или SPI.
  3. Обхватът на ускорението, измерен в g's, където 1g е ускорението, дължащо се на гравитацията на Земята.
  4. Съпроцесори, които могат да разтоварят някои от изчисленията, необходими за анализ на необработените данни от MCU. Повечето акселерометри имат някои прости възможности за прекъсване за откриване на праг на ускорение (удар) и условие 0 g (свободно падане). Други могат да извършват усъвършенствана обработка на необработените данни, за да предложат по -значими данни на MCU.

Стъпка 5: Интерфейс с контролер

Тъй като познаваме ESP микроконтролерите в тенденция, ще използваме ESP32 за нашия пример. Така че първо имате нужда от Nodemcu-32.

Не се притеснявайте, ако имате други ESP платки или дори Arduino !!! Просто трябва да настроите вашата Arduino IDE и конфигурация според вашите дъски за разработка, за Arduino, ESP NodeMCU, ESP32 и т.н. пробивна дъска за цифров акселерометър.

И няколко джъмперни проводника….

Стъпка 6: Връзки

Връзки
Връзки

И ето оформление.

Използвах следната връзка от модула по-горе към моя модул Nodemcu-32s.

ESP32s - Модул

3v3 - Вин

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Не забравяйте, че през повечето време не всички дъски за разработка (най -вече в ESP) имат добър ясен извод, който да ви помогне да определите кои пинове се използват! Така че преди свързването, идентифицирайте правилните щифтове на вашата платка, за да използвате кои пинове са за SDA и SCL."

Стъпка 7: Код

Това изисква библиотеката Adafruit

от

Изтеглете, разархивирайте и ще намерите папка с примери, просто отворете MMA8451demo във вашата Arduino IDE и ето….

ще видите следния код за интерфейса на сензора MMA8451 с вашия контролер

#включва

#include #include 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 (& събитие); / * Показване на резултатите (ускорението се измерва в 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"); / * Вземете ориентацията на сензора */ 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 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 АДРЕС/БИТОВЕ --------------------- -------------------------------------------------- * / #дефинирайте MMA8451_DEFAULT_ADDRESS (0x1D) //! <Адрес по подразбиране MMA8451 I2C, ако A е GND, неговият 0x1C /*======================= ================================================== */

Do - Редактиране на файл от бележника (промяна на адреса) + Запазване + Рестартиране на IDE

Работи. Можете да получите показанията си.

Няма да … … ???

Етап 3: Проверете Wire.begin е презаписан?

Отворете файла Adafruit_MMA8451.c и намерете Wire.begin.

Резултат - Това изявление е презаписано

/************************************************* ************************* //*! @brief Настройва HW (чете стойностите на коефициентите и т.н.)* / / ********************************** ****************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Do - Редактиране на файл от бележника (изявление за коментар) + Запазване + Рестартиране на IDE

И накрая устройството започва да работи☺…

Почти претоварвам този урок, защото основната му цел беше да обясня как да стартирам, да получа данни от листа с данни, да се свържа и да накарам I2C устройството да работи с много елементарен пример. Надявам се, че всичко ще върви както трябва и ще бъде полезно да стартирате вашия сензор.

Препоръчано: