Агуулгын хүснэгт:

I2C мэдрэгчийн интерфэйсийг ашиглаж эхлэх үү? - ESP32s ашиглан MMA8451 интерфэйс: 8 алхам
I2C мэдрэгчийн интерфэйсийг ашиглаж эхлэх үү? - ESP32s ашиглан MMA8451 интерфэйс: 8 алхам

Видео: I2C мэдрэгчийн интерфэйсийг ашиглаж эхлэх үү? - ESP32s ашиглан MMA8451 интерфэйс: 8 алхам

Видео: I2C мэдрэгчийн интерфэйсийг ашиглаж эхлэх үү? - ESP32s ашиглан MMA8451 интерфэйс: 8 алхам
Видео: FLProg10: датчик температуры DS18B20 | ESP32 NodeMCU | Визуальное программирование для Arduino 2024, Долдугаар сарын
Anonim
I2C мэдрэгчийн интерфэйсийг ашиглаж эхлэх үү? - ESP32s ашиглан таны MMA8451 интерфейс
I2C мэдрэгчийн интерфэйсийг ашиглаж эхлэх үү? - ESP32s ашиглан таны MMA8451 интерфейс

Энэхүү гарын авлагад та хянагчтай (Arduino, ESP32, ESP8266, ESP12 NodeMCU) ажиллах I2C төхөөрөмжийг (Accelerometer) хэрхэн эхлүүлэх, холбох, авах талаар бүгдийг сурах болно.

Алхам 1: I2C -ийг хэрхэн эхлүүлэх вэ - Интер IC харилцаа холбооны гайхамшигт ертөнц

Arduino, ESP Series, PIC, Rasberry PI гэх мэт нь үнэхээр гайхалтай. Гэхдээ та үүнийг авсны дараа үүнийг яах вэ?

Хамгийн сайн зүйл бол мэдрэгч гэх мэтийг нэмэх явдал юм. Өнөөдөр маш олон шинэ технологи нь I2C протоколыг ашиглан компьютер, утас, таблет эсвэл микроконтроллероор мэдрэгчтэй ярих боломжийг олгодог. Ухаалаг гар утас нь хурдасгуур мэдрэгчтэй утсаа аль зүг рүү харж байгааг мэдэх боломжгүй байсан бол ухаан муутай байх болно.

Алхам 2: I2C -ийн тойм

I2C нь цуваа, синхрон, хагас дуплекс харилцааны протокол бөгөөд нэг автобусанд олон мастер, боолуудыг хамт байлгах боломжийг олгодог. I2C автобус нь цуваа өгөгдлийн шугам (SDA) ба цуваа цаг (SCL) гэсэн хоёр шугамаас бүрдэнэ. Хоёр шугам хоёулаа татах эсэргүүцэл шаарддаг.

SDA (Цуваа өгөгдөл) - Мастер ба боолын өгөгдлийг илгээх, хүлээн авах шугам. SCL (Цуваа цаг) - Цагийн дохиог дамжуулдаг шугам. Энгийн байдал, үйлдвэрлэлийн өртөг багатай давуу талуудын хувьд I2C нь ихэвчлэн бага зайд (нэг фут дотор) бага хурдтай захын төхөөрөмжүүдийг холбоход ашиглагддаг.

I2C -ийн талаар илүү ихийг мэдэхийг хүсч байна уу? ……

Алхам 3: I²C мэдрэгчийг хэрхэн тохируулах вэ

Төсөлд орохоосоо өмнө мэдрэгчийнхээ үндсэн ойлголтыг ойлгох хэрэгтэй. Тиймээс усанд шумбахаасаа өмнө өөртөө кофе уугаарай:)? …

I2C -ийн гайхалтай давуу тал нь та маш олон тооны мэдрэгчийг нэг дөрвөн утсан дээр байрлуулах боломжтой юм. Гэхдээ хэд хэдэн бэлэн модулиудыг холбосон нэгжийн хувьд та хэд хэдэн smd резисторыг эвдрэлээс салгах хэрэгтэй болж магадгүй, эс тэгвээс автобусны татах нь хэт түрэмгий болж магадгүй юм.

Мэдээллийн хүснэгтээс бид ямар мэдээлэл хүсч байна вэ?

  1. Мэдрэгчийн үйл ажиллагаа
  2. Pinouts болон pin -ийн функцууд
  3. Интерфэйсийн тайлбар ("I2c хаяг сонгох хүснэгт" -ийг үзэхээ бүү мартаарай)
  4. Бүртгүүлэх !!

Бүх зүйл зүгээр, гэхдээ та үүнийг амархан олох болно, гэхдээ бүртгүүлэх үү? БҮРТГЭЛ бол I²C төхөөрөмж доторх санах ойн байршил юм. Өгөгдсөн мэдрэгчид хичнээн регистр байгаа, тэдгээрийн хянаж, агуулж байгаа зүйлийн хураангуйг регистрийн газрын зураг гэж нэрлэдэг. Мэдрэгчийн мэдээллийн хуудсан дээрх ихэнх мэдээлэл нь бүртгэл тус бүр хэрхэн ажилладаг талаар тайлбарлахад зориулагдсан байдаг бөгөөд мэдээллийг шууд шууд өгөх нь ховор байдаг тул уншихад маш хэцүү байдаг.

Үүнийг юу гэж ойлгохыг танд ойлгуулахын тулд: Олон төрлийн регистрүүд байдаг боловч энэхүү танилцуулгын үүднээс би тэдгээрийг Control and Data registr гэсэн хоёр ерөнхий төрөлд бүлэглэх гэж байна.

1) Хяналтын бүртгэл

Ихэнх мэдрэгчид хяналтын бүртгэлд хадгалагдсан утгууд дээр үндэслэн хэрхэн ажиллахаа өөрчилдөг. Хяналтын бүртгэлийг бит/асаах унтраалгын банк гэж бодоорой, та үүнийг бит болгож 1 болгож асаагаад 0 болгож унтраадаг. I²C чип дээр суурилсан мэдрэгч нь бит гэх мэт олон арван буюу түүнээс дээш ажиллагааны тохиргоотой байдаг. Горим, тасалдал, унших-бичих хяналт, гүн, дээж авах хурд, дуу чимээг бууруулах гэх мэт. Тиймээс уншихаасаа өмнө хэд хэдэн хяналтын регистрт бит оруулах шаардлагатай болдог.

2) Мэдээллийн бүртгэл Хяналтын свитаторыг бүртгэхээс ялгаатай нь би өгөгдлийн гаралтын бүртгэлийг хоёртын хэлбэрээр хадгалагдсан тоонуудыг багтаасан контейнер гэж боддог. Тиймээс та өгөгдлийг мэдэхийг хүсч байна, би хэн болохыг бүртгүүлэх, статусын бүртгэл гэх мэт мэдээллийн бүртгэлийг үргэлж уншаарай.

Тиймээс I²C мэдрэгчийг эхлүүлэх нь олон үе шаттай процесс бөгөөд үйлдлийн зөв дарааллыг өгөгдлийн хүснэгтийн оронд урвуу чиглэлд бичдэг. "Энэ мэдрэгчээс уншихын тулд (1), (2), (3), (4) гэх мэтийг хийгээрэй" гэсэн жагсаалт хэзээ ч байдаггүй, гэхдээ та үүнд бит x тохируулахаасаа өмнө хяналтын бүртгэлийн битүүдийн тайлбарыг олж болно. бүртгүүлэхийн тулд та энэ хяналтын регистрт y битийг оруулах ёстой."

Мэдээллийн хуудас нь ихэнх текстээс илүү интерактив болохыг би үргэлж олж хардаг. Хэрэв та үүнийг тодорхой нэг хэсэг эсвэл мэдээлэлд лавлах бөгөөд түүнд бүх мэдээлэл, холболт, лавлагаа өгөх болно. Бүх лавлагаагаа авахын тулд зүгээр л суугаад уншаарай.:)

Алхам 4: Motion - Accelerometer -ээс эхэл

Орчин үеийн хурдатгал хэмжигч бол бичил цахилгаан механик систем (MEMS) төхөөрөмж бөгөөд энэ нь хамгийн жижиг хэрэгслүүдийн дотор жижиг чип дээр багтах боломжтой гэсэн үг юм. MEMS акселерометрийн ашигладаг хурдатгалыг хэмжих нэг арга бол булаг дээр түдгэлзүүлсэн жижиг дамжуулагч массыг ашиглах явдал юм. Төхөөрөмжийн хурдатгал нь булаг сунах эсвэл агшихад хүргэдэг бөгөөд дамжуулагч массын хазайлтыг ойролцоох, тогтмол хавтангийн багтаамжийн өөрчлөлтөөр хэмжиж болно.

Акселерометрийг дараахь онцлог шинж чанаруудаар тодорхойлно

  1. Тодорхойлолтын диаграммд X, Y, Z гэж тэмдэглэгдсэн нэгээс гурван тэнхлэг хүртэлх тэнхлэгийн тоо. Зарим хурдатгал хэмжигчийг 6 тэнхлэг эсвэл 9 тэнхлэг гэж нэрлэдэг боловч энэ нь тэдгээрийг гироскоп ба/эсвэл соронзон хэмжигч гэх мэт бусад MEMS төхөөрөмжтэй цуглуулдаг гэсэн үг юм. Эдгээр төхөөрөмж бүр гурван тэнхлэгтэй байдаг тул 3, 6 эсвэл 9 тэнхлэгтэй инерцийн хэмжих нэгж (IMUs) байдаг.
  2. Аналог эсвэл дижитал гаралтын төрөл. Дижитал хурдатгал хэмжигч нь хурдатгалын өгөгдлийг I2C эсвэл SPI дээр уншиж болох тоон дүрслэл болгон форматлах ажлыг хариуцдаг.
  3. Хурдны хүрээг g -ээр хэмждэг бөгөөд 1г нь дэлхийн таталцлын хүчний хурдатгал юм.
  4. MCU -ийн түүхий өгөгдөлд дүн шинжилгээ хийхэд шаардлагатай зарим тооцооллыг ачаалах боломжтой процессорууд. Ихэнх акселерометр нь хурдатгалын босго (шок) ба 0-г (чөлөөт уналт) нөхцлийг илрүүлэх энгийн тасалдлын чадвартай байдаг. Бусад нь MCU -д илүү утга учиртай өгөгдлийг санал болгохын тулд түүхий өгөгдөл дээр дэвшилтэт боловсруулалт хийж болно.

Алхам 5: Хянагчтай интерфэйс

Бид ESP микроконтроллерыг чиг хандлагад мэддэг тул бид ESP32 -ийг жишээ болгон ашиглах болно. Тиймээс эхлээд танд Nodemcu-32s хэрэгтэй болно.

Хэрэв танд өөр ESP самбар эсвэл бүр Arduino байгаа бол санаа зовох хэрэггүй !!! Та Arduino, ESP NodeMCU, ESP32s гэх мэт хөгжлийн самбаруудынхаа дагуу Arduino IDE болон тохиргоогоо тохируулах хэрэгтэй болно. Танд ихэвчлэн I2C хэсгүүд хэрэгтэй болно. Энэ гарын авлагад би MMA8451 ашиглах болно. тоон Accelerometer таслах самбар.

Мөн цөөн тооны холбогч утас ….

Алхам 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 дээрээс

Татаж авах, задлахад та жишээ хавтсыг олох болно, хавтаснаас Arduino IDE дээрээ MMA8451demo -ийг нээгээд эндээс очно уу.

Та хянагчтайгаа MMA8451 мэдрэгчийн интерфэйсийн дараах кодыг харах болно

#оруулах

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Утас.begin (4, 5); / * NodeMCU -ийн SDA = D1 ба SCL = D2 бүхий i2c автобусанд нэгдэх */ 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"); Цуваа.хэвлэх (mma.x); Serial.print ("\ tY: / t"); Цуваа.хэвлэх (mma.y); Serial.print ("\ tZ: / t"); Цуваа.хэвлэх (mma.z); Serial.println (); / * Шинэ мэдрэгчийн үйл явдал авах */ sensors_event_t event; mma.getEvent (& үйл явдал); / * Үр дүнг харуулах (хурдатгалыг m/s^2 хэмждэг) */Serial.print ("X: / t"); Цуваа.хэвлэх (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Цуваа.хэвлэх (үйл явдал.хурдац.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Цуваа.хэвлэх (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 ADDRESS/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Анхдагч MMA8451 I2C хаяг, хэрэв A нь GND бол түүний 0x1C /*====================== ================================================== */

Хий - Notepad -аас файл засах (хаягийг өөрчлөх) + Хадгалах + IDE -ийг дахин эхлүүлэх

Энэ нь ажилладаг. Та уншилтаа авах боломжтой.

Тэгэхгүй л дээ …… ???

3 -р үе шат: шалгах Wire.begin дарж бичигдсэн үү?

Adafruit_MMA8451.c файлыг нээгээд Wire.begin -ийг олоорой.

Үр дүн - Энэ мэдэгдлийг дарж бичсэн болно

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

Хий - Notepad -аас файл засах (тайлбарын тайлбар) + Хадгалах + IDE -ийг дахин эхлүүлэх

Эцэст нь төхөөрөмж ажиллаж байна …

Би энэ хичээлийг бараг л хэт ачаалах болно, учир нь түүний гол зорилго нь хэрхэн эхлүүлэх, өгөгдлийн хүснэгтээс мэдээлэл авах, I2C төхөөрөмжийг маш энгийн жишээгээр ажиллуулахыг тайлбарлах явдал юм.

Зөвлөмж болгож буй: