Turinys:
- 1 žingsnis: Kaip pradėti naudotis „I2C“- nuostabiu „Inter IC Communication“pasauliu
- 2 žingsnis: „I2C“apžvalga
- 3 žingsnis: Kaip sukonfigūruoti I²C jutiklius
- 4 žingsnis: pradėkite nuo judesio - akselerometras
- 5 žingsnis: sąsaja su valdikliu
- 6 žingsnis: jungtys
- 7 žingsnis: kodas
- 8 veiksmas: priverskite savo I2C įrenginį veikti
Video: Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32: 8 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Šioje pamokoje sužinosite viską apie tai, kaip paleisti, prijungti ir gauti I2C įrenginį (pagreičio matuoklį), dirbantį su valdikliu („Arduino“, ESP32, ESP8266, ESP12 „NodeMCU“)
1 žingsnis: Kaip pradėti naudotis „I2C“- nuostabiu „Inter IC Communication“pasauliu
„Arduino“, ESP serijos, PIC, „Rasberry PI“ir kt. Yra neįtikėtini. Bet ką daryti su juo, kai jį turėsite?
Geriausias dalykas yra pridėti jutiklius ir pan. Šiandien daugelis naujų karštų technologijų naudoja I2C protokolą, kad kompiuteris, telefonai, planšetiniai kompiuteriai ar mikrovaldikliai galėtų kalbėti apie jutiklius. Išmanieji telefonai būtų mažiau protingi, jei negalėtų pasikalbėti su šiuo akselerometro jutikliu, kad žinotų, į kurią pusę nukreiptas jūsų telefonas.
2 žingsnis: „I2C“apžvalga
„I2C“yra nuoseklus, sinchroninis, pusiau dvipusis ryšio protokolas, leidžiantis kartu valdyti kelis šeimininkus ir vergus toje pačioje magistralėje. I2C magistralę sudaro dvi linijos: serijinė duomenų linija (SDA) ir nuoseklusis laikrodis (SCL). Abiem linijoms reikalingi traukiamieji rezistoriai.
SDA (serijiniai duomenys) - linija, skirta pagrindiniam ir pavaldžiajam duomenims siųsti ir gauti. SCL (serijinis laikrodis) - linija, kuri perduoda laikrodžio signalą. Turėdamas tokius privalumus kaip paprastumas ir mažos gamybos sąnaudos, I2C dažniausiai naudojamas mažo greičio periferinių įrenginių ryšiui trumpu atstumu (per vieną pėdą) perduoti.
Norite sužinoti daugiau apie I2C? ……
3 žingsnis: Kaip sukonfigūruoti I²C jutiklius
Prieš pradėdami projektą, turite suprasti keletą savo jutiklio pagrindų. Taigi prieš nardydami pilkite sau puodelį kavos:)? …
Didžioji „I2C“stiprybė yra ta, kad jūs galite prijungti tiek daug jutiklių prie tų pačių keturių laidų. Bet jei įrenginiuose yra prijungti keli iš anksto paruošti moduliai, gali tekti pašalinti keletą smd rezistorių iš pertraukų, kitaip magistralės traukimas gali tapti pernelyg agresyvus.
Kokios informacijos norime iš duomenų lapo ??
- Jutiklio funkcionalumas
- Smeigtukų ir smeigtukų funkcionalumas
- Sąsajos aprašymas (nepamirškite pažvelgti į „I2c adresų pasirinkimo lentelę“)
- Registrai !!
Viskas gerai, tai rasite lengvai, bet registrai ?? REGISTRACIJOS yra tiesiog atminties vietos I²C įrenginyje. Santrauka, kiek registrų yra tam tikrame jutiklyje ir ką jie valdo ar turi, vadinama registrų žemėlapiu. Dauguma informacijos jutiklio duomenų lape yra apie tai, kaip paaiškinti, kaip veikia kiekvienas registras, ir tai gali būti gana sunku perskaityti, nes informacija retai pateikiama tiesiogiai.
Kad suprastumėte, ką aš turiu omenyje: yra daug registrų rūšių, tačiau šiam įvadui aš juos sugrupuosiu į du bendrus tipus: kontrolės ir duomenų registrus.
1) Kontrolės registrai
Dauguma jutiklių keičia savo veikimą, atsižvelgdami į valdymo registruose saugomas vertes. Pagalvokite apie valdymo registrus kaip įjungimo/išjungimo jungiklių blokus, kuriuos įjungiate nustatydami bitą į 1 ir išjungdami nustatydami tą bitą į 0. I²C mikroschemų pagrindu veikiančiuose jutikliuose dažnai yra keliolika ar daugiau veikimo nustatymų, pvz. Režimai, pertraukimai, skaitymo ir rašymo valdymas, gylis, mėginių ėmimo greitis, triukšmo mažinimas ir kt., Todėl paprastai prieš nuskaitydami turite nustatyti bitus keliuose skirtinguose valdymo registruose.
2) Duomenų registrai Skirtingai nei valdiklis registruoja jungiklių bankus, aš manau, kad duomenų išvesties registrai yra konteineriai, kuriuose yra numeriai, kurie tiesiog saugomi dvejetaine forma. Taigi, norėdami sužinoti duomenis, visada skaitykite duomenų registrus, pvz., Kas aš esu registruodamasis įrenginiui identifikuoti, būsenos registrui ir pan.
Taigi, I²C jutiklio inicijavimas yra daugiapakopis procesas ir teisinga veiksmų tvarka dažnai paaiškinama raštu atvirkštine kryptimi, o ne paprasta duomenų lape. sąraše niekada nesakoma „Norėdami gauti nuskaitymą iš šio jutiklio, atlikite (1), (2), (3), (4) ir tt“, bet rasite valdymo registro bitų aprašymus, sakančius „prieš nustatydami bitą x šiame kitame valdymo registre turite nustatyti bitą y “.
Vis dėlto manau, kad duomenų lapas yra interaktyvesnis nei dauguma teksto. jei nurodysite tam tikrą informaciją ar informaciją ir suteiksite visą informaciją, ryšius ir nuorodas. Tiesiog atsisėskite ir perskaitykite, kad gautumėte visas savo nuorodas.:)
4 žingsnis: pradėkite nuo judesio - akselerometras
Šiuolaikiniai akselerometrai yra mikroelektromechaninės sistemos (MEMS) prietaisai, o tai reiškia, kad jie gali tilpti į mažą mikroschemą mažiausių prietaisų viduje. Vienas iš MEMS pagreičio matuoklių naudojamo pagreičio matavimo būdų yra mažos laidžios masės, pakabintos ant spyruoklių, panaudojimas. Dėl prietaiso pagreičio spyruoklės ištempiamos arba susitraukia, o laidžios masės deformaciją galima išmatuoti keičiant talpą į netoliese esančias fiksuotas plokštes.
Akselerometrai pasižymi šiomis savybėmis:
- Ašių skaičius, nuo vienos iki trijų ašių, specifikacijų diagramose pažymėtas X, Y ir Z. Atkreipkite dėmesį, kad kai kurie akselerometrai vadinami 6 ašių arba 9 ašių, tačiau tai tik reiškia, kad jie yra komplektuojami su kitais MEMS prietaisais, tokiais kaip giroskopai ir (arba) magnetometrai. Kiekvienas iš šių prietaisų taip pat turi tris ašis, todėl yra 3, 6 arba 9 ašių inerciniai matavimo vienetai (IMU).
- Išvesties tipas, analoginis arba skaitmeninis. Skaitmeninis akselerometras rūpinasi pagreičio duomenų formatavimu į skaitmeninį vaizdą, kurį galima nuskaityti per I2C arba SPI.
- Pagreitėjimo diapazonas, matuojamas g, kur 1g yra pagreitis dėl Žemės traukos.
- Bendraprocesoriai, galintys iškrauti kai kuriuos skaičiavimus, reikalingus neapdorotiems duomenims iš MCU analizuoti. Dauguma akselerometrų turi paprastą pertraukimo galimybę, kad nustatytų pagreičio slenkstį (šoką) ir 0 g (laisvo kritimo) būklę. Kiti gali atlikti išplėstinį neapdorotų duomenų apdorojimą, kad MCU pasiūlytų prasmingesnius duomenis.
5 žingsnis: sąsaja su valdikliu
Kadangi ESP mikrovaldiklius žinome tendencingai, savo pavyzdžiui naudosime ESP32. Taigi pirmiausia jums reikia „Nodemcu-32“.
Nesijaudinkite, jei turite kitų ESP plokščių ar net „Arduino“!!! Jums tereikia sukonfigūruoti „Arduino IDE“ir konfigūraciją pagal savo „Arduino“, „ESP NodeMCU“, „ESP32“ir kt. Kūrimo plokštes ir tt skaitmeninė pagreičio matuoklio pertraukimo lenta.
Ir keletas trumpųjų laidų …
6 žingsnis: jungtys
Ir čia yra išdėstymas.
Aš naudoju šį ryšį iš aukščiau esančio modulio su savo „Nodemcu-32s“moduliu.
ESP32 - modulis
3v3 - Vin
Gnd - Gnd
SDA 21 - SDA
SCL 22 - SCL
"Atminkite, kad dažniausiai ne visos kūrimo plokštės (dažniausiai ESP) turi gerą aiškų kontaktą, padedantį nustatyti, kurie smeigtukai naudojami! Taigi prieš prijungdami nustatykite savo plokštės tinkamus kaiščius, kad galėtumėte naudoti SDA ir SCL kaiščius."
7 žingsnis: kodas
Tam reikalinga „Adafruit“biblioteka
iš
Atsisiųskite, išpakuokite ir rasite pavyzdžių aplanką, aplanke tiesiog atidarykite „MMA8451demo“savo „Arduino IDE“ir štai …
pamatysite šį MMA8451 jutiklio sąsajos su valdikliu kodą
#įtraukti
#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Viela.pradėti (4, 5); / * prisijungti prie i2c magistralės su SDA = D1 ir SCL = D2 iš NodeMCU */ Serial.println ("Adafruit MMA8451 testas!"); if (! mma.begin ()) {Serial.println ("Nepavyko paleisti"); tuo tarpu (1); } Serial.println ("Rasta MMA8451!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Diapazonas ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Skaitykite „neapdorotus“duomenis 14 bitų skaičiais mma.read (); Serial.print ("X: / t"); Serijinis atspaudas (mma.x); Serial.print ("\ tY: / t"); Serijinis atspaudas (mma.y); Serial.print ("\ tZ: / t"); Serijinis atspaudas (mma.z); Serial.println (); / * Gaukite naują jutiklio įvykį */ sensors_event_t įvykį; mma.getEvent (& event); / * Rodyti rezultatus (pagreitis matuojamas 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"); / * Gaukite jutiklio orientaciją */ uint8_t o = mma.getOrientation (); jungiklis (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); pertrauka; atvejis MMA8451_PL_PUB: Serial.println („Portretas aukštyn atgal“); pertrauka; atvejis MMA8451_PL_PDF: Serial.println („Portretas priekyje“); pertrauka; atvejis MMA8451_PL_PDB: Serial.println („Portretas žemyn atgal“); pertrauka; atvejis MMA8451_PL_LRF: Serial.println („Peizažas dešinėje priekyje“); pertrauka; atvejis MMA8451_PL_LRB: Serial.println („Peizažas dešinėje pusėje“); pertrauka; atvejis MMA8451_PL_LLF: Serial.println („Peizažas kairėje priekyje“); pertrauka; atvejis MMA8451_PL_LLB: Serial.println („Peizažas kairėn atgal“); pertrauka; } Serial.println (); vėlavimas (1000); }
Išsaugoti, patikrinti ir įkelti ……
Atidarykite nuoseklųjį monitorių ir pamatysite kažką panašaus, aš perkeliau jutiklį apie tai, kaip matyti įvairūs rodmenys
X: -2166 Y: 1872 Z: 2186
X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m/s^2
Peizažas kairysis priekis
X: -224 Y: -2020 Z: 3188
X: -5,10 Y: -3,19 Z: 7,00 m/s^2
Portretas priekyje
Na, jei viskas klostėsi taip, kaip turėtų, dabar turite I2C pagrindus ir kaip prijungti įrenginį.
Bet prietaisas neveikia ??
Tiesiog eikite į kitą žingsnį ….
8 veiksmas: priverskite savo I2C įrenginį veikti
Pagrindiniai žingsniai, norint, kad I2C įrenginys veiktų
Ištirsime….
- Laidai yra teisingi.. (patikrinkite dar kartą)
- Programa teisinga.. (Taip, tai bandomasis pavyzdys..)
Pradėkite nuo etapų, kuriuos reikia išspręsti ….
1 etapas: paleiskite „I2C“įrenginio skaitytuvo programą, kad patikrintumėte įrenginio adresą ir pirmiausia jūsų „I2C“įrenginys veikia gerai
Galite atsisiųsti eskizą ir patikrinti išvestį.
Rezultatas - įrenginys veikia, o jutiklio adresas teisingas
I2C skaitytuvas. Nuskaitymas…
Rastas adresas: 28 (0x1C) Atlikta. Rasta 1 įrenginys (-ai).
2 etapas: patikrinkite jutiklių biblioteką
Atidarykite „Adafruit_MMA8451.h“failą ir raskite įrenginio adresą
Rezultatas - adresas skiriasi nuo mano įrenginio ??
/*================================================ ========================= I2C ADRESAS/BITAI --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Numatytasis MMA8451 I2C adresas, jei A yra GND, jo 0x1C /*======================= ================================================== */
Atlikti - Redaguoti failą iš bloknoto (pakeisti adresą) + Išsaugoti + Iš naujo paleisti IDE
Tai veikia. Galite gauti savo rodmenis.
Ar ne….. ???
3 etapas: patikrinkite „Wire.begin“yra perrašytas?
Atidarykite „Adafruit_MMA8451.c“failą ir raskite „Wire.begin“.
Rezultatas - šis teiginys perrašytas
/************************************************ ************************ //*! @brief Nustato HW (skaito koeficientų reikšmes ir pan.)* / / ********************************* ****************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;
Daryti - redaguoti failą iš užrašų knygelės (komentaras) + Išsaugoti + iš naujo paleisti IDE
Ir pagaliau įrenginys pradeda veikti…
Aš beveik perkraunu šią pamoką, nes jos pagrindinis tikslas buvo paaiškinti, kaip pradėti, gauti duomenis iš duomenų lapo, prisijungti ir gauti „I2C“įrenginį naudojant labai paprastą pavyzdį. Tikiuosi, kad viskas vyks taip, kaip turėtų, ir bus naudinga paleisti jutiklį.
Rekomenduojamas:
Darbo su ESP32 CAM pradžia - Vaizdo transliacija naudojant ESP CAM per „Wifi“- ESP32 apsaugos kameros projektas: 8 žingsniai
Darbo su ESP32 CAM pradžia | Vaizdo transliacija naudojant ESP CAM per „Wifi“| ESP32 apsaugos kameros projektas: Šiandien mes išmoksime naudoti šią naują ESP32 CAM plokštę ir kaip galime ją koduoti, naudoti kaip apsaugos kamerą ir gauti vaizdo transliaciją per „Wi -Fi“
Darbo su ESP32 pradžia - ESP32 plokščių diegimas „Arduino IDE“- ESP32 mirksėjimo kodas: 3 žingsniai
Darbo su ESP32 pradžia | ESP32 plokščių diegimas „Arduino IDE“| ESP32 mirksėjimo kodas: Šioje instrukcijoje pamatysime, kaip pradėti dirbti su esp32 ir kaip įdiegti esp32 plokštes į „Arduino IDE“, ir užprogramuosime esp 32 paleisti mirksėjimo kodą naudojant „arduino ide“
Darbo su „Stm32“pradžia naudojant „Arduino IDE“: 3 žingsniai
Darbo su „Stm32“pradžia naudojant „Arduino IDE“: STM32 yra gana galinga ir populiari plokštė, kurią palaiko „Arduino IDE“. Tačiau norėdami ją naudoti, turite įdiegti „stm32“plokštes „Arduino IDE“, todėl šioje instrukcijoje pasakysiu, kaip įdiegti „stm32“plokštes ir kaip jį užprogramuoti
Darbo pradžia „W/ NodeMCU ESP8266“naudojant „Arduino IDE“: 6 žingsniai
Darbo pradžia „W/ NodeMCU ESP8266“naudojant „Arduino IDE“: apžvalga Šiame vadove sužinosite, kaip naudoti „NodeMCU“„Arduino IDE“. Ką sužinosite Bendra informacija apie „NodeMCU“Kaip įdiegti ESP8266 pagrindu sukurtas plokštes „Arduino IDE“naudotas
Darbo su „AWS IoT“pradžia naudojant belaidį temperatūros jutiklį naudojant MQTT: 8 žingsniai
Darbo su „AWS IoT“su belaidžiu temperatūros jutikliu naudojimas naudojant MQTT: Ankstesnėse instrukcijose mes perėjome įvairias debesų platformas, tokias kaip „Azure“, „Ubidots“, „ThingSpeak“, „Losant“ir kt. Mes beveik naudojome MQTT protokolą, skirtą jutiklių duomenims į debesį siųsti. visa debesų platforma. Norėdami gauti daugiau informacijos