Indholdsfortegnelse:
- Trin 1: Sådan kommer du i gang med I2C - Magnificent World of Inter IC Communication
- Trin 2: Oversigt over I2C
- Trin 3: Sådan konfigureres I²C -sensorer
- Trin 4: Start med bevægelse - accelerometer
- Trin 5: Interface med controller
- Trin 6: Forbindelser
- Trin 7: Kode
- Trin 8: Få din I2C -enhed til at fungere
Video: Kom godt i gang med I2C Sensor Interface ?? - Tilslut din MMA8451 ved hjælp af ESP32s: 8 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
I denne vejledning lærer du alt om, hvordan du starter, tilslutter og får I2C -enhed (Accelerometer) til at arbejde med controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Trin 1: Sådan kommer du i gang med I2C - Magnificent World of Inter IC Communication
Arduino, ESP -serien, PIC, Rasberry PI osv. Er alle utrolige. Men hvad gør du med det, når du har en?
Det bedste er at tilføje sensorer og sådan. I dag bruger meget af den hotte nye teknologi I2C -protokollen til at give computeren, telefoner, tablets eller mikrokontroller mulighed for at tale sensorerne. Smart telefoner ville være mindre smarte, hvis de ikke kunne tale med den accelerometer sensor for at vide, hvilken vej din telefon vender.
Trin 2: Oversigt over I2C
I2C er en seriel, synkron, halv dupleks kommunikationsprotokol, der tillader sameksistens af flere mestre og slaver på den samme bus. I2C -bussen består af to linjer: seriel datalinje (SDA) og serielt ur (SCL). Begge linjer kræver pull-up modstande.
SDA (Serial Data) - Linjen for master og slave til at sende og modtage data. SCL (Serial Clock) - Den linje, der bærer urets signal. Med fordele som enkelhed og lave fremstillingsomkostninger bruges I2C mest til kommunikation af periferiudstyr med lav hastighed over korte afstande (inden for en fod).
Vil du lære mere om I2C? ……
Trin 3: Sådan konfigureres I²C -sensorer
Inden du går ind i projektet, skal du forstå et par grundlæggende i din sensor. Så hæld dig en kop kaffe, inden du dykker ind:)? …
Den store styrke ved I2C er, at du kan sætte så mange sensorer på de samme fire ledninger. Men for enheder med flere præfabrikerede moduler tilsluttet, skal du muligvis fjerne et par smd-modstande fra udbrudene, ellers kan pull-up på bussen blive for aggressiv.
Hvilke oplysninger ønsker vi fra databladet ??
- Sensorfunktion
- Pinouts og pins funktioner
- Grænsefladebeskrivelse (gå ikke glip af at se "I2c -adressevalgstabel")
- Registrerer !!
Alt er fint, du finder det let, men registrerer ?? REGISTRER er simpelthen hukommelsessteder inde i en I²C -enhed. Resuméet af, hvor mange registre der er i en given sensor, og hvad de styrer eller indeholder, kaldes et registerkort. De fleste oplysninger på sensorens datablad handler om at forklare, hvordan hvert register fungerer, og de kan være en ganske slog at læse igennem, fordi oplysningerne sjældent præsenteres på direkte måde.
For at give dig en fornemmelse af, hvad jeg mener med det: Der er mange slags registre, men til denne introduktion vil jeg gruppere dem i to generelle typer: Kontrol- og dataregistre.
1) Kontrolregistre
De fleste sensorer ændrer, hvordan de fungerer, baseret på de værdier, der er gemt i kontrolregistre. Tænk på kontrolregistre som banker med tænd/sluk-switches, som du tænder ved at indstille lidt til 1 og slukke ved at indstille denne bit til 0. I²C-chipbaserede sensorer har ofte et dusin eller flere driftsindstillinger for ting som bit- Tilstande, afbrydelser, læse-skrive-kontrol, dybde, samplingshastighed, støjreduktion osv., Så du skal normalt indstille bits i flere forskellige kontrolregistre, før du rent faktisk kan foretage en måling.
2) Dataregistre I modsætning til en kontrol registrerer bank-of-switches, tænker jeg på data output-registre som containere, der indeholder numre, som tilfældigvis er gemt i binær form. Så du vil vide data, læs altid dataregistre som hvem er jeg til registrering af enhedsidentifikation, statusregister osv.
Så initialisering af en I²C-sensor er en proces i flere trin, og den korrekte rækkefølge for handlinger forklares ofte i omvendt retning i stedet for en ligetil i databladet. liste, der aldrig siger "For at få en aflæsning fra denne sensor, skal du gøre (1), (2), (3), (4) osv.", men du finder beskrivelser af kontrolregistrets bits, der siger "før du indstiller bit x i dette register skal du indstille bit y i dette andet kontrolregister”.
Jeg finder stadig, at et datablad er mere interaktivt end den fleste tekst. hvis du vil referere det til et bestemt stykke eller oplysninger, og det giver dig alle detaljer, forbindelser og referencer. Bare sæt dig ned og læs for at få alle dine referencer frem.:)
Trin 4: Start med bevægelse - accelerometer
Moderne accelerometre er Micro Electro-Mechanical Systems (MEMS) -enheder, hvilket betyder, at de er i stand til at passe på en lille chip inde i de mindste gadgets. En metode til måling af acceleration, der anvendes af MEMS -accelerometre, er at udnytte en lille ledende masse suspenderet på fjedre. Enhedens acceleration får fjedrene til at strække sig eller trække sig sammen, og afledningen af den ledende masse kan måles gennem en ændring i kapacitans til nærliggende, faste plader.
Accelerometre er specificeret af følgende funktioner:
- Antallet af akser, fra en til tre akser, mærket X, Y og Z i specifikationsdiagrammerne. Bemærk, at nogle accelerometre kaldes 6-akse eller 9-akse, men det betyder bare, at de er bundtet med andre MEMS-enheder, såsom gyroskoper og/eller magnetometre. Hver af disse enheder har også tre akser, hvorfor der er 3, 6 eller 9-aksede inertialmåleenheder (IMU'er).
- Udgangstypen, enten analog eller digital. Et digitalt accelerometer sørger for at formatere accelerationsdataene til en digital repræsentation, der kan udlæses over I2C eller SPI.
- Accelerationsområdet målt i g’er, hvor 1g er accelerationen på grund af Jordens tyngdekraft.
- Coprocessorer, der kan aflaste nogle af de beregninger, der er nødvendige for at analysere rådataene fra MCU'en. De fleste accelerometre har en enkel afbrydelsesevne til at detektere en accelerationstærskel (stød) og en 0-g (frit fald) tilstand. Andre kan foretage avanceret behandling af rådataene for at tilbyde mere meningsfulde data til MCU'en.
Trin 5: Interface med controller
Da vi kender ESP Microcontrollers i trend, vil vi bruge ESP32 til vores eksempel. Så først skal du bruge en Nodemcu-32s.
Ingen bekymringer, hvis du har andre ESP -tavler eller endda Arduino !!! Du skal bare konfigurere din Arduino IDE og konfiguration i henhold til dine udviklingstavler, til Arduino, ESP NodeMCU, ESP32s osv … Du skal også bruge en slags I2C -dele, normalt på et breakout board. I denne tutorial vil jeg bruge MMA8451 digital Accelerometer breakout board.
Og få springtråde….
Trin 6: Forbindelser
Og her er et layout.
Jeg brugte følgende forbindelse fra modulet ovenfor til mit Nodemcu-32s modul.
ESP32s - modul
3v3 - Vin
Gnd - Gnd
SDA 21 - SDA
SCL 22 - SCL
"Husk, at det meste af tiden ikke alle udviklingstavler (for det meste i ESP'er) har en god klar pinout til at hjælpe med at afgøre, hvilke ben der bruges !! Så før tilslutning skal du identificere dit tavles korrekte ben til at bruge hvilke stifter der er til SDA og SCL."
Trin 7: Kode
Dette kræver Adafruit -biblioteket
fra
Download, pak ud, og du finder mappen eksempler, i mappen skal du bare åbne MMA8451demo i din Arduino IDE, og her er du gået ….
du vil se følgende kode til din MMA8451 sensorinterface med din controller
#omfatte
#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * slut i2c -bus med SDA = D1 og SCL = D2 for NodeMCU */ Serial.println ("Adafruit MMA8451 test!"); hvis (! mma.begin ()) {Serial.println ("Kunne ikke starte"); mens (1); } Serial.println ("MMA8451 fundet!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Range ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Læs de "rå" data i 14-bit tæller mma.read (); Serial.print ("X: / t"); Seriel.print (mma.x); Serial.print ("\ tY: / t"); Seriel.print (mma.y); Serial.print ("\ tZ: / t"); Seriel.print (mma.z); Serial.println (); / * Få en ny sensorhændelse */ sensors_event_t event; mma.getEvent (& event); / * Vis resultaterne (acceleration måles i m/s^2) */Serial.print ("X: / t"); Seriel.print (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Seriel.print (event.acceleration.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial.print (event.acceleration.z); Serial.print ("\ t"); Serial.println ("m/s^2"); / * Få sensorens retning */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portræt foran"); pause; sag MMA8451_PL_PUB: Serial.println ("Portræt op bag"); pause; sag MMA8451_PL_PDF: Serial.println ("Portræt nedad foran"); pause; sag MMA8451_PL_PDB: Serial.println ("Portræt nedad tilbage"); pause; sag MMA8451_PL_LRF: Serial.println ("Landskab højre forside"); pause; sag MMA8451_PL_LRB: Serial.println ("Landscape Right Back"); pause; sag MMA8451_PL_LLF: Serial.println ("Landskab venstre forside"); pause; sag MMA8451_PL_LLB: Serial.println ("Landskab venstre tilbage"); pause; } Serial.println (); forsinkelse (1000); }
Gem, verificer og upload ……
Åbn den serielle skærm, og du vil se sådan noget, jeg bevægede sensoren om derfor de forskellige aflæsninger
X: -2166 Y: 1872 Z: 2186
X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m/s^2
Landskab Venstre Front
X: -224 Y: -2020 Z: 3188
X: -5,10 Y: -3,19 Z: 7,00 m/s^2
Portræt foran
Hvis alt gik som det skulle, så har du nu det grundlæggende i I2C og Sådan tilslutter du din enhed.
Men enheden virker ikke ??
Bare gå med næste trin ……
Trin 8: Få din I2C -enhed til at fungere
Grundlæggende trin til at få I2C -enheden til at fungere
Lad os undersøge….
- Kabelføring er korrekt.. (tjek det igen)
- Programmet er korrekt.. (Ja, det er testeksempel..)
Start med etaper, der skal løses ….
Trin 1: Kør I2C -enhedsscannerprogram for at kontrollere enhedsadresse, og først er din I2C -enhed ok
Du kan downloade skitse og kontrollere output.
Resultat - Enheden fungerer, og sensoradressen er korrekt
I2C scanner. Scanner…
Fundet adresse: 28 (0x1C) Udført. Fundet 1 enhed (er).
Trin 2: Kontroller sensorbiblioteket
Åbn Adafruit_MMA8451.h -filen, og find enhedsadresse
Resultat - Adressen er forskellig fra min enhed ??
/*==================================================== ========================= I2C ADRESSE/BITS --------------------- ---------------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Standard MMA8451 I2C -adresse, hvis A er GND, er dens 0x1C /*======================= ===================================================== */
Gør - Rediger fil fra notesblok (skift adresse) + Gem + Genstart IDE
Det virker. Du kan få dine aflæsninger.
Tårn ikke….. ???
Trin 3: Kontroller, at Wire.begin er overskrevet?
Åbn filen Adafruit_MMA8451.c og find Wire.begin.
Resultat - Denne erklæring er overskrevet
/************************************************* ************************* //*! @brief Opsætter HW (læser koefficientværdier osv.)* / / ********************************** **************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;
Gør - Rediger fil fra notesblok (kommentarerklæring) + Gem + Genstart IDE
Og endelig virker enheden☺…
Jeg overbelaster næsten denne vejledning, fordi dens hovedmål var at forklare, hvordan man starter, henter data fra datablad, forbinder og får I2C -enheden til at fungere med et meget grundlæggende eksempel. Håber alt vil gå som det skal, og det vil være nyttigt at starte din sensor.
Anbefalede:
Kom godt i gang med STM32f767zi Cube IDE og upload din tilpassede skitse: 3 trin
Kom godt i gang med STM32f767zi Cube IDE og upload dig tilpasset skitse: KØB (klik på testen for at købe/besøg websiden) STM32F767ZISUPPORTED SOFTWARE · STM32CUBE IDE · KEIL MDK ARM µVISION · EWARM IAR EMBEDDED WORKBENCH · ARDUIN er tilgængelig bruges til at programmere STM mikrokontrollere
Kom godt i gang med ESP32 CAM - Streaming af video ved hjælp af ESP CAM over Wifi - ESP32 sikkerhedskamera projekt: 8 trin
Kom godt i gang med ESP32 CAM | Streaming af video ved hjælp af ESP CAM over Wifi | ESP32 Security Camera Project: I dag lærer vi, hvordan man bruger dette nye ESP32 CAM -kort, og hvordan vi kan kode det og bruge det som et sikkerhedskamera og få en streaming video over wifi
Installation af Raspbian i Raspberry Pi 3 B Uden HDMI - Kom godt i gang med Raspberry Pi 3B - Opsætning af din Raspberry Pi 3: 6 trin
Installation af Raspbian i Raspberry Pi 3 B Uden HDMI | Kom godt i gang med Raspberry Pi 3B | Opsætning af din Raspberry Pi 3: Som nogle af jer ved, er Raspberry Pi-computere ganske fantastiske, og du kan få hele computeren bare på et enkelt lille bord. Raspberry Pi 3 Model B har en quad-core 64-bit ARM Cortex A53 klokket til 1,2 GHz. Dette sætter Pi 3 cirka 50
Kom godt i gang med AWS IoT Med trådløs temperatursensor ved hjælp af MQTT: 8 trin
Kom godt i gang med AWS IoT Med trådløs temperatursensor ved hjælp af MQTT: I tidligere instruktioner har vi været igennem forskellige skyplatforme som Azure, Ubidots, ThingSpeak, Losant osv. Vi har brugt MQTT -protokollen til at sende sensordata til skyen i næsten hele skyplatformen. For mere information
Visuino Pro Macchina Interface OBDII Kom godt i gang LED -blink: 3 trin
Visuino Pro Macchina -grænseflade OBDII Kom godt i gang LED Blink: Film kan bruges til at programmere et program, der kan testes interfejsu MACCHINA M2 OBDII Oversæt: En video, der viser det enkleste eksempel fra MACCHINA M2 OBDII -interfacetest