INHOUDSOPGAWE:

Aan die gang met die I2C -sensorinterface ?? - Koppel u MMA8451 met behulp van ESP32's: 8 stappe
Aan die gang met die I2C -sensorinterface ?? - Koppel u MMA8451 met behulp van ESP32's: 8 stappe

Video: Aan die gang met die I2C -sensorinterface ?? - Koppel u MMA8451 met behulp van ESP32's: 8 stappe

Video: Aan die gang met die I2C -sensorinterface ?? - Koppel u MMA8451 met behulp van ESP32's: 8 stappe
Video: Control 32 Servo over Wi-Fi using ESP32 and PCA9685 via desktop or mobile phone V5 2024, November
Anonim
Aan die gang met die I2C -sensorinterface ?? - Koppel u MMA8451 met behulp van ESP32's
Aan die gang met die I2C -sensorinterface ?? - Koppel u MMA8451 met behulp van ESP32's

In hierdie tutoriaal leer u alles oor hoe om 'n I2C -toestel (versnellingsmeter) te begin, aan te sluit en te laat werk met die kontroleerder (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Stap 1: Hoe om aan die gang te kom met I2C - Magnificent World of Inter IC Communication

Die Arduino, ESP -reeks, PIC, Rasberry PI, ens., Is almal ongelooflik. Maar wat doen jy daarmee as jy een het?

Die beste ding is om sensors en so by te voeg. Tans gebruik baie van die nuwe tegnologie die I2C -protokol om die rekenaar, telefone, tablette of mikrobeheerders toe te laat om met die sensors te praat. Slimfone sou minder slim gewees het as hulle nie met die versnellingsmetersensor kon praat om te weet in watter rigting u telefoon gerig is nie.

Stap 2: Oorsig oor I2C

I2C is 'n seriële, sinchrone, half-dupleks-kommunikasieprotokol wat meervoudige meesters en slawe op dieselfde bus kan laat bestaan. Die I2C -bus bestaan uit twee lyne: seriële data lyn (SDA) en seriële klok (SCL). Beide lyne benodig optrekweerstands.

SDA (Serial Data) - die reël vir die meester en slaaf om data te stuur en te ontvang. SCL (Serial Clock) - die lyn wat die kloksein dra. Met voordele soos eenvoud en lae vervaardigingskoste, word I2C meestal gebruik vir die kommunikasie van lae-snelheid randapparatuur oor kort afstande (binne een voet).

Wil u meer leer oor I2C? ……

Stap 3: Hoe om I²C -sensors op te stel

Voordat u by die projek ingaan, moet u 'n paar basiese beginsels van u sensor verstaan. Skink dus vir u 'n koppie koffie voordat u duik:)? …

Die groot sterkte van I2C is dat u soveel sensors op dieselfde vier drade kan sit. Maar vir eenhede met verskeie voorafgemaakte modules gekoppel, moet u moontlik 'n paar smd-weerstande uit die uitbrekings verwyder, anders kan die optrek in die bus te aggressief raak.

Watter inligting wil ons hê uit die datablad ??

  1. Sensor funksie
  2. Pinouts en pins funksies
  3. Beskrywing van die koppelvlak (moenie kyk na die "I2c -adreskeuse -tabel" nie)
  4. Registreer !!

Alles is reg, u sal dit maklik vind, maar registreer ?? REGISTERS is eenvoudig geheue -liggings in 'n I²C -toestel. Die opsomming van hoeveel registers daar in 'n gegewe sensor is, en wat hulle beheer of bevat, word 'n registerkaart genoem. Die meeste inligting op die datablad van die sensor handel oor die verduideliking van hoe elke register funksioneer, en dit kan 'n taamlike probleem wees om deur te lees, omdat die inligting selde op 'n direkte manier aangebied word.

Om u 'n idee te gee van wat ek daarmee bedoel: Daar is baie soorte registers, maar vir hierdie inleiding gaan ek dit in twee algemene tipes groepeer: Beheer- en dataregisters.

1) Beheerregisters

Die meeste sensors verander hul werking op grond van die waardes wat in kontroleregisters gestoor is. Dink aan kontroleregisters as banke van aan/uit-skakelaars, wat u aanskakel deur 'n bietjie op 1 te sit en dit uit te skakel deur die bit op 0. I²C-chip-gebaseerde sensors het dikwels 'n dosyn of meer operasionele instellings vir dinge soos bit- Modusse, onderbrekings, lees-skryfbeheer, diepte, monsternemingsnelheid, geraasvermindering, ensovoorts, sodat u gewoonlik stukkies in verskillende kontroleregisters moet plaas voordat u werklik kan lees.

2) Dataregisters In teenstelling met 'n kontrole registreer ek bank-van-skakelaars, ek dink aan data-uitsetregisters as houers met getalle wat net in binêre vorm gestoor word. Dus, as u data wil weet, lees altyd dataregisters, soos wie ek registreer vir apparaatidentifikasie, statusregister, ens.

Die initialisering van 'n I²C-sensor is dus 'n meervoudige proses en die korrekte volgorde van bedrywighede word dikwels in omgekeerde rigting in plaas van eenvoudig in die datablad verduidelik. lys wat nooit sê "Om 'n lesing van hierdie sensor te kry, doen (1), (2), (3), (4), ens." registreer, moet u bit y in hierdie ander kontroleregister stel ".

Tog vind ek altyd dat 'n gegewensblad meer interaktief is as die meeste teks. as u dit na 'n spesifieke stuk of inligting verwys, en dit gee u alle besonderhede, verbindings en verwysings. Sit net en lees om al u verwysings uit te haal.:)

Stap 4: Begin met beweging - versnellingsmeter

Moderne versnellingsmeters is toestelle van Micro Electro-Mechanical Systems (MEMS), wat beteken dat hulle op 'n klein skyfie in die kleinste toerusting kan pas. Een metode om die versnelling van MEMS -versnellingsmeters te meet, is om 'n klein geleidende massa wat op vere hang, te gebruik. Die versnelling van die toestel veroorsaak dat die vere rek of saamtrek, en die afbuiging van die geleidende massa kan gemeet word deur 'n verandering in kapasitansie na nabygeleë, vaste plate.

Versnellingsmeters word deur die volgende kenmerke gespesifiseer:

  1. Die aantal asse, van een tot drie asse, gemerk X, Y en Z in die spesifikasie diagramme. Let daarop dat sommige versnellingsmeters 6-as of 9-as genoem word, maar dit beteken net dat dit saamgevoeg word met ander MEMS-toestelle, soos gyroskope en/of magnetometers. Elkeen van die toestelle het ook drie asse, en daarom is daar 3, 6 of 9-as traagmeeteenhede (IMU's).
  2. Die tipe uitvoer, analoog of digitaal. 'N Digitale versnellingsmeter sorg vir die opmaak van die versnellingsdata in 'n digitale voorstelling wat oor I2C of SPI uitgelees kan word.
  3. Die versnellingsbereik gemeet in g’s, waar 1g die versnelling is as gevolg van die swaartekrag van die aarde.
  4. Coprocessors wat sommige van die berekeninge wat nodig is om die rou data van die MCU te ontleed, kan aflaai. Die meeste versnellingsmeters het 'n eenvoudige onderbrekingsvermoë om 'n versnellingsdrempel (skok) en 'n 0-g (vryval) toestand op te spoor. Ander kan gevorderde verwerking van die rou data doen om meer betekenisvolle data aan die MCU te bied.

Stap 5: Koppelvlak met kontroleerder

Aangesien ons ESP -mikrobeheerders in die neiging ken, sal ons ESP32 vir ons voorbeeld gebruik. U het dus eers 'n Nodemcu-32s nodig.

Moenie bekommerd wees as u ander ESP -borde of selfs Arduino het nie! U hoef net u Arduino IDE en konfigurasie volgens u ontwikkelingsborde op te stel vir Arduino, ESP NodeMCU, ESP32s ens … U benodig ook 'n soort I2C -onderdele, gewoonlik op 'n uitbreekbord. In hierdie tutoriaal gaan ek MMA8451 gebruik digitale uitbreekbord vir versnellingsmeter.

En 'n paar springdrade …

Stap 6: Verbindings

Verbindings
Verbindings

En hier is 'n uitleg.

Ek het die volgende verbinding van die module hierbo met my Nodemcu-32s-module gebruik.

ESP32s - Module

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

'Onthou, nie altyd het alle ontwikkelingsborde (meestal in ESP's) 'n duidelike pinout om te bepaal watter penne gebruik word nie. Identifiseer dus voor die aansluiting die korrekte penne van u bord om te gebruik watter penne vir SDA en SCL is."

Stap 7: Kode

Dit vereis die Adafruit -biblioteek

vanaf

Laai dit af, pak dit uit en u vind 'n gids met voorbeelde, in die gids, maak MMA8451demo oop in u Arduino IDE.

u sien die volgende kode vir u MMA8451 sensor -koppelvlak met u kontroleerder

#insluit

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); leemte opstel (leeg) {Serial.begin (9600); Draad. begin (4, 5); / * sluit aan by i2c -bus met SDA = D1 en SCL = D2 van NodeMCU */ Serial.println ("Adafruit MMA8451 -toets!"); if (! mma.begin ()) {Serial.println ("Kon nie begin nie"); terwyl (1); } Serial.println ("MMA8451 gevind!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Range ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } leemte-lus () {// Lees die 'rou' data in 14-bis tellings mma.read (); Serial.print ("X: / t"); Reeksafdruk (mma.x); Serial.print ("\ tY: / t"); Reeks.afdruk (mma.y); Serial.print ("\ tZ: / t"); Reeks.afdruk (mma.z); Serial.println (); / * Kry 'n nuwe sensorgebeurtenis */ sensors_event_t gebeurtenis; mma.getEvent (& gebeurtenis); / * Toon die resultate (versnelling word gemeet in m/s^2) */Serial.print ("X: / t"); Reeks.afdruk (gebeurtenis.versnelling.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"); / * Kry die oriëntasie van die sensor */ uint8_t o = mma.getOrientation (); skakelaar (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); breek; saak MMA8451_PL_PUB: Serial.println ("Portrait Up Back"); breek; saak MMA8451_PL_PDF: Serial.println ("Portret onderaan"); breek; saak MMA8451_PL_PDB: Serial.println ("Portrait Down Back"); breek; saak MMA8451_PL_LRF: Serial.println ("Landscape regs voor"); breek; saak MMA8451_PL_LRB: Serial.println ("Landscape Right Back"); breek; saak MMA8451_PL_LLF: Serial.println ("Landscape Left Front"); breek; saak MMA8451_PL_LLB: Serial.println ("Landscape Left Back"); breek; } Serial.println (); vertraging (1000); }

Stoor, verifieer en laai op ….

Maak die seriële monitor oop, en u sal so iets sien; ek het die sensor beweeg, vandaar die verskillende metings

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m/s^2

Landskap Links voor

X: -224 J: -2020 Z: 3188

X: -5,10 Y: -3,19 Z: 7,00 m/s^2

Portret aan die voorkant

As alles verloop soos dit moet, het u nou die basiese beginsels van I2C en hoe u u toestel kan koppel.

Maar toestel werk nie ??

Gaan net met die volgende stap ….

Stap 8: Laat u I2C -toestel werk …

Basiese stappe om I2C -toestel te laat werk

Kom ons ondersoek….

  • Bedrading is korrek.. (kyk weer)
  • Program is korrek.. (Ja, dit is 'n toetsvoorbeeld..)

Begin met fases om op te los ….

Fase 1: Begin die I2C -skandeerderprogram om die toestel se adres na te gaan, en eers is u I2C -toestel reg

U kan skets aflaai en die uitvoer kyk.

Resultaat - toestel werk en sensoradres is reg

I2C skandeerder. Soek tans…

Adres gevind: 28 (0x1C) Klaar. Het 1 toestel (e) gevind.

Fase 2: Gaan sensorbiblioteek na

Maak die Adafruit_MMA8451.h -lêer oop en vind die adres van die toestel

Resultaat - Adres verskil van my toestel ??

/*==================================================== ========================= I2C ADRES/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Default MMA8451 I2C address, if A is GND, its 0x1C /*======================== ====================================================== */

Doen - Wysig lêer vanaf notaboek (verander adres) + Stoor + Herbegin IDE

Dit werk. U kan u lesings kry.

Sill nie …. ???

Fase 3: Kontroleer of Wire.begin oorgeskryf is?

Maak die Adafruit_MMA8451.c -lêer oop en vind Wire.begin.

Resultaat - hierdie stelling word oorskryf

/************************************************ ************************* //*! @brief Stel die HW op (lees koëffisiëntwaardes, ens.)* / / *********************************** **************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Doen - Wysig lêer vanaf notaboek (kommentaarverklaring) + Stoor + Herbegin IDE

En uiteindelik werk toestel aan die gang☺ …

Ek oorlaai hierdie tutoriaal amper omdat die hoofdoel was om te verduidelik hoe om te begin, data uit die datablad te kry, te koppel en I2C -toestel te laat werk met 'n baie basiese voorbeeld. Hoop alles sal verloop soos dit moet, en dit sal nuttig wees om u sensor te begin.

Aanbeveel: