Სარჩევი:

დავიწყოთ 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 (სერიული მონაცემები) - ხაზი ბატონისა და მონას მონაცემების გაგზავნისა და მიღებისათვის. SCL (სერიული საათი) - ხაზი, რომელიც ატარებს საათის სიგნალს. ისეთი უპირატესობებით, როგორიცაა სიმარტივე და წარმოების დაბალი ღირებულება, I2C ძირითადად გამოიყენება დაბალი სიჩქარით პერიფერიული მოწყობილობების მოკლე დისტანციებზე (ერთი ფეხის მანძილზე) კომუნიკაციისთვის.

გსურთ გაიგოთ მეტი I2C– ის შესახებ? ……

ნაბიჯი 3: როგორ დავაკონფიგურიროთ I²C სენსორები

სანამ პროექტზე გადახვალთ, თქვენ უნდა გესმოდეთ თქვენი სენსორის რამდენიმე საფუძველი. ასე რომ ჩაასხით ჭიქა ყავა ჩაყვინთვის წინ:)? …

I2C– ის დიდი ძალა იმაში მდგომარეობს, რომ თქვენ შეგიძლიათ ამდენი სენსორი ერთსა და იმავე ოთხ მავთულზე დააყენოთ. მაგრამ ერთეულებისათვის, რომელთანაც დაკავშირებულია რამდენიმე წინასწარ მომზადებული მოდული, შეიძლება დაგჭირდეთ რამდენიმე smd რეზისტორის ამოღება დაზიანებებისგან, წინააღმდეგ შემთხვევაში ავტობუსში გაყვანა შეიძლება ძალიან აგრესიული გახდეს.

რა ინფორმაცია გვინდა მონაცემთა ბაზისგან ??

  1. სენსორის ფუნქციონირება
  2. Pinouts და ქინძისთავების ფუნქციონირება
  3. ინტერფეისის აღწერა (არ გამოტოვოთ თვალი "I2c მისამართების შერჩევის ცხრილში")
  4. რეგისტრირდება !!

ყველაფერი კარგადაა თქვენ ადვილად იპოვით მაგრამ რეგისტრირდება ?? რეესტრები უბრალოდ მეხსიერების ადგილებია I²C მოწყობილობის შიგნით. შეჯამებას იმის შესახებ, თუ რამდენი რეგისტრია მოცემულ სენსორში და რას აკონტროლებენ ან შეიცავს, ეწოდება რეგისტრის რუკა. სენსორის მონაცემთა ფურცლის შესახებ ინფორმაციის უმეტესი ნაწილი არის იმის ახსნა, თუ როგორ ფუნქციონირებს თითოეული რეგისტრი, და მათი წაკითხვა შეიძლება საკმაოდ სუსტი იყოს, რადგან ინფორმაცია იშვიათად არის წარმოდგენილი პირდაპირი გზით.

იმის გასაგებად, თუ რას ვგულისხმობ ამაში: არსებობს მრავალი სახის რეგისტრი, მაგრამ ამ შესავლისთვის მე ვაპირებ დავაჯგუფო ისინი ორ ძირითად ტიპად: საკონტროლო და მონაცემთა რეგისტრები.

1) საკონტროლო რეგისტრები

სენსორების უმეტესობა ცვლის მათ მუშაობას საკონტროლო რეგისტრებში შენახული მნიშვნელობების მიხედვით. წარმოიდგინეთ საკონტროლო რეგისტრები, როგორც ჩართვის/გამორთვის კონცენტრატორების ბანკები, რომლებსაც ჩართავთ ცოტათი 1-ით და გამორთავთ ამ ბიტის 0. რეჟიმები, შეფერხებები, წაკითხვა-ჩაწერის კონტროლი, სიღრმე, შერჩევის სიჩქარე, ხმაურის შემცირება და ა.შ.

2) მონაცემთა რეგისტრატორები კონტროლისგან განსხვავებით, რომელიც ათავსებს გადამრთველების ბანკს, მე ვფიქრობ, რომ მონაცემების გამომავალი რეგისტრები არის კონტეინერები, რომლებსაც აქვთ რიცხვები, რომლებიც უბრალოდ ინახება ორობითი ფორმით. ასე რომ თქვენ გსურთ იცოდეთ მონაცემები, ყოველთვის წაიკითხეთ მონაცემთა რეგისტრები, როგორიცაა ვინ ვარ მე რეგისტრირებული მოწყობილობის იდენტიფიკაციისთვის, სტატუსის რეგისტრაცია და ა.

ამრიგად, I²C სენსორის ინიციალიზაცია მრავალსაფეხურიანი პროცესია და ოპერაციების სწორი თანმიმდევრობა ხშირად განმარტებულია დაწერილი საპირისპირო მიმართულებით, პირდაპირი მონაცემების ნაცვლად. სიაში არასოდეს ნათქვამია: „ამ სენსორისგან კითხვის მისაღებად გააკეთეთ (1), (2), (3), (4) და ა. შ. რეგისტრაცია თქვენ უნდა დააყენოთ ბიტი y ამ სხვა საკონტროლო რეესტრში”.

მე ყოველთვის ვხვდები, რომ მონაცემთა ფურცელი უფრო ინტერაქტიურია, ვიდრე ტექსტი. თუ თქვენ მიმართავთ მას კონკრეტული ნაწილისთვის ან ინფორმაციის ნაწილისთვის და მოგცემთ ყველა დეტალს, კავშირს და მითითებას. უბრალოდ დაჯექი და წაიკითხე, რომ გაიგო შენი ყველა მითითება.:)

ნაბიჯი 4: დაიწყეთ მოძრაობით - ამაჩქარებელი

თანამედროვე ამაჩქარებლები არის მიკროელექტრო – მექანიკური სისტემები (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– სთვის, ESP32– ისთვის და სხვა… თქვენ ასევე დაგჭირდებათ რაიმე სახის I2C ნაწილები, როგორც წესი, ბრეაკოუტ დაფაზე. ამ გაკვეთილში მე გამოვიყენებ MMA8451 ციფრული აქსელერომეტრის გარღვევის დაფა.

და რამდენიმე მხტუნავი მავთული ….

ნაბიჯი 6: კავშირები

კავშირები
კავშირები

და აქ არის განლაგება.

მე გამოვიყენე შემდეგი კავშირი ზემოთ მოყვანილი მოდულიდან ჩემს Nodemcu-32s მოდულთან.

ESP32s - მოდული

3v3 - ვინი

გნდ - გნდ

SDA 21 - SDA

SCL 22 - SCL

"დაიმახსოვრე, უმეტეს დროს არა ყველა განვითარების დაფას (ძირითადად ESP- ში) აქვს კარგი მკაფიო ხერხი, რათა დადგინდეს რომელი ქინძისთავები გამოიყენება !! ასე რომ, კავშირის დაწყებამდე დაადგინეთ თქვენი დაფის სწორი ქინძისთავები, რომელი SDA და SCL ქინძისთავების გამოსაყენებლად."

ნაბიჯი 7: კოდი

ეს მოითხოვს ადაფრუტის ბიბლიოთეკას

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 ("დიაპაზონი ="); 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"); სერიული. ბეჭდვა (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 ("მ/ს^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 მოწყობილობის მუშაობისთვის

მოდი გამოვიძიოთ ….

  • გაყვანილობა სწორია.. (კიდევ ერთხელ შეამოწმეთ)
  • პროგრამა სწორია.. (დიახ, ეს არის ტესტის მაგალითი..)

დაიწყეთ ამოხსნის ეტაპებით ….

ეტაპი 1: გაუშვით I2C მოწყობილობის სკანერის პროგრამა მოწყობილობის მისამართის შესამოწმებლად და პირველ რიგში თქვენი I2C მოწყობილობა გასაგებია

შეგიძლიათ ჩამოტვირთოთ ესკიზი და შეამოწმოთ გამომავალი.

შედეგი - მოწყობილობა მუშაობს და სენსორის მისამართი სწორია

I2C სკანერი. სკანირება…

ნაპოვნია მისამართი: 28 (0x1C) შესრულებულია. ნაპოვნია 1 მოწყობილობა (ები).

ეტაპი 2: შეამოწმეთ სენსორების ბიბლიოთეკა

გახსენით Adafruit_MMA8451.h ფაილი და იპოვეთ მოწყობილობის მისამართი

შედეგი - მისამართი განსხვავდება ჩემი მოწყობილობისგან?

/*================================================ ======================== I2C ADRESS/BITS --------------------- ------------------------------------------------------ * / #განსაზღვრეთ 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;

Do - ფაილის რედაქტირება ბლოკნოტიდან (კომენტარის განცხადება) + შენახვა + გადატვირთვა IDE

და ბოლოს მოწყობილობა მუშაობს ……

მე თითქმის გადატვირთული მაქვს ეს სამეურვეო, რადგან მისი მთავარი მიზანი იყო აეხსნა როგორ დავიწყოთ, მიიღოთ მონაცემები მონაცემთა ცხრილიდან, დააკავშიროთ და მიიღოთ I2C მოწყობილობა ძალიან ძირითადი მაგალითით. ვიმედოვნებთ, რომ ყველაფერი წავა ისე, როგორც უნდა და სასარგებლო იქნება თქვენი სენსორის დაწყება.

გირჩევთ: