Inhoudsopgave:
- Stap 1: Aan de slag met I2C - Magnificent World of Inter IC Communication
- Stap 2: Overzicht op I2C
- Stap 3: I²C-sensoren configureren
- Stap 4: Begin met beweging - versnellingsmeter
- Stap 5: Interface met controller
- Stap 6: Aansluitingen
- Stap 7: Coderen
- Stap 8: Laat uw I2C-apparaat werken
Video: Aan de slag met I2C-sensorinterface?? - Interface uw MMA8451 met ESP32's: 8 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:15
In deze tutorial leer je alles over hoe je I2C-apparaat (versnellingsmeter) start, aansluit en laat werken met controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Stap 1: Aan de slag met I2C - Magnificent World of Inter IC Communication
De Arduino, ESP-serie, PIC, Rasberry PI, etc. zijn allemaal ongelooflijk. Maar wat doe je ermee als je er eenmaal een hebt?
Het beste is om sensoren en dergelijke toe te voegen. Tegenwoordig gebruikt veel van de hete nieuwe technologie het I2C-protocol om de computer, telefoons, tablets of microcontrollers de sensoren te laten praten. Smartphones zouden minder slim zijn als ze niet met die accelerometersensor zouden kunnen praten om te weten naar welke kant je telefoon kijkt.
Stap 2: Overzicht op I2C
I2C is een serieel, synchroon, half-duplex communicatieprotocol dat het naast elkaar bestaan van meerdere masters en slaves op dezelfde bus mogelijk maakt. De I2C-bus bestaat uit twee lijnen: seriële datalijn (SDA) en seriële klok (SCL). Beide lijnen vereisen pull-up weerstanden.
SDA (Serial Data) – De lijn voor de master en slave om gegevens te verzenden en te ontvangen. SCL (Serial Clock) – De lijn die het kloksignaal draagt. Met voordelen als eenvoud en lage fabricagekosten, wordt I2C meestal gebruikt voor communicatie van langzame randapparatuur over korte afstanden (binnen één voet).
Meer weten over I2C ?……
Stap 3: I²C-sensoren configureren
Voordat je aan het project begint, moet je een paar basisprincipes van je sensor begrijpen. Dus schenk jezelf een kopje koffie in voordat je erin duikt:)? …
De grote kracht van I2C is dat je zoveel sensoren op dezelfde vier draden kunt zetten. Maar voor units waarop meerdere vooraf gemaakte modules zijn aangesloten, moet u mogelijk een paar smd-weerstanden uit de breakouts verwijderen, anders kan de pull-up op de bus te agressief worden.
Welke informatie willen we van Datasheet??
- Sensorfunctionaliteit
- Pin-outs en pinnen-functionaliteit
- Interfacebeschrijving (Mis niet om te kijken op "I2c Address Selection table")
- Inschrijven!!
Alles is in orde, je zult het gemakkelijk vinden, maar registreert?? REGISTERS zijn eenvoudig geheugenlocaties in een I²C-apparaat. De samenvatting van hoeveel registers er in een bepaalde sensor zijn en wat ze besturen of bevatten, wordt een registerkaart genoemd. De meeste informatie op het gegevensblad van de sensor gaat over het uitleggen hoe elk register werkt, en het kan een hele opgave zijn om door te lezen omdat de informatie zelden op een directe manier wordt gepresenteerd.
Om u een idee te geven van wat ik daarmee bedoel: er zijn veel soorten registers, maar voor deze inleiding ga ik ze in twee algemene typen groeperen: controle- en gegevensregisters.
1) Controleregisters
De meeste sensoren veranderen hun werking op basis van de waarden die zijn opgeslagen in controleregisters. Zie besturingsregisters als banken met aan/uit-schakelaars, die u inschakelt door een bit op 1 te zetten en uitschakelt door dat bit op 0 te zetten. I²C-chipgebaseerde sensoren hebben vaak een tiental of meer operationele instellingen voor zaken als bit- Modes, interrupts, lees-schrijfbesturing, diepte, bemonsteringssnelheid, ruisonderdrukking, enz., dus u moet meestal bits in verschillende besturingsregisters instellen voordat u daadwerkelijk een meting kunt uitvoeren.
2) Gegevensregisters In tegenstelling tot een controle die bank-of-switches registreert, beschouw ik gegevensuitvoerregisters als containers met nummers die toevallig in binaire vorm worden opgeslagen. Dus u wilt gegevens weten, lees altijd gegevensregisters zoals wie ben ik registreer voor apparaatidentificatie, statusregister enz.
Het initialiseren van een I²C-sensor is dus een proces dat uit meerdere stappen bestaat en de juiste volgorde van bewerkingen wordt vaak uitgelegd in omgekeerde richting, in plaats van eenvoudig in het gegevensblad. lijst die nooit zegt "Om een meting van deze sensor te krijgen, doe (1), (2), (3), (4), enz", maar je vindt beschrijvingen van de besturingsregisterbits die zeggen "voordat je bit x instelt in deze register moet u bit y in dit andere controleregister zetten”.
Toch vind ik altijd dat een datasheet interactiever is dan de meeste tekst. als u ernaar verwijst voor een specifiek stuk of stukjes informatie en het geeft u alle details, verbindingen en referenties. Ga gewoon zitten en lees om al uw referenties eruit te halen.:)
Stap 4: Begin met beweging - versnellingsmeter
Moderne versnellingsmeters zijn Micro Electro-Mechanical Systems (MEMS)-apparaten, wat betekent dat ze op een kleine chip in de kleinste gadgets passen. Een methode om de versnelling te meten die door MEMS-versnellingsmeters wordt gebruikt, is het gebruik van een kleine geleidende massa die op veren is opgehangen. De versnelling van het apparaat zorgt ervoor dat de veren uitrekken of samentrekken, en de doorbuiging van de geleidende massa kan worden gemeten door een verandering in capaciteit naar nabijgelegen, vaste platen.
Versnellingsmeters worden gespecificeerd door de volgende kenmerken:
- Het aantal assen, van één tot drie assen, aangeduid met X, Y en Z in de specificatiediagrammen. Merk op dat sommige versnellingsmeters 6-assen of 9-assen worden genoemd, maar dat betekent alleen dat ze zijn gebundeld met andere MEMS-apparaten zoals gyroscopen en/of magnetometers. Elk van die apparaten heeft ook drie assen, daarom zijn er 3, 6 of 9-assige Inertial Measurement Units (IMU's).
- Het type uitgang, analoog of digitaal. Een digitale versnellingsmeter zorgt voor het formatteren van de versnellingsgegevens in een digitale weergave die kan worden uitgelezen via I2C of SPI.
- Het versnellingsbereik gemeten in g's, waarbij 1g de versnelling is als gevolg van de zwaartekracht van de aarde.
- Coprocessors die een deel van de berekeningen kunnen uitvoeren die nodig zijn om de onbewerkte gegevens van de MCU te analyseren. De meeste versnellingsmeters hebben een eenvoudige onderbrekingsmogelijkheid om een versnellingsdrempel (schok) en een toestand van 0 g (vrije val) te detecteren. Anderen kunnen geavanceerde verwerking van de onbewerkte gegevens uitvoeren om meer betekenisvolle gegevens aan de MCU te bieden.
Stap 5: Interface met controller
Omdat we ESP-microcontrollers in de trend kennen, zullen we ESP32 als voorbeeld gebruiken. Dus eerst heb je een Nodemcu-32s nodig.
Geen zorgen als je nog andere ESP-borden of zelfs Arduino hebt!!! Je hoeft alleen maar je Arduino IDE en configuratie in te stellen volgens je ontwikkelborden, voor Arduino, ESP NodeMCU, ESP32's enz … Je hebt ook een soort I2C-onderdelen nodig, meestal op een breakout-bord. In deze tutorial ga ik MMA8451 gebruiken digitale Accelerometer breakout board.
En weinig jumper draden….
Stap 6: Aansluitingen
En hier is een lay-out.
Ik gebruikte de volgende verbinding van de bovenstaande module naar mijn Nodemcu-32s-module.
ESP32's -- Module
3v3 -- Vin
Gnd -- Gnd
SDA 21 -- SDA
SCL 22 -- SCL
"Vergeet niet dat meestal niet alle ontwikkelborden (meestal in ESP's) een goede duidelijke pin-out hebben om te helpen bepalen welke pinnen worden gebruikt !! Dus identificeer vóór het aansluiten de juiste pinnen van je bord om te gebruiken welke pinnen voor SDA en SCL zijn."
Stap 7: Coderen
Dit vereist de Adafruit-bibliotheek
van
Download, unzip en je vindt de map met voorbeelden, in de map open je gewoon MMA8451demo in je Arduino IDE en hier ga je ….
u ziet de volgende code voor uw MMA8451-sensorinterface met uw controller:
#erbij betrekken
#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451(); void setup (void) { Serial.begin (9600); Draad.begin(4, 5); /* join i2c bus met SDA=D1 en SCL=D2 van NodeMCU */ Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin()) { Serial.println("Kon niet starten"); terwijl (1); } Serial.println("MMA8451 gevonden!"); mma.setRange(MMA8451_RANGE_2_G); Serial.print("Bereik = "); Serial.print(2 << mma.getRange()); Serieel.println("G"); } void loop() { // Lees de 'onbewerkte' gegevens in 14-bits tellingen mma.read(); Serial.print("X:\t"); Seriële.afdruk(mma.x); Serial.print("\tY:\t"); Seriële.afdruk(mma.y); Serial.print("\tZ:\t"); Serial.print(mma.z); Serieel.println(); /* Een nieuwe sensorgebeurtenis ophalen */ sensors_event_t gebeurtenis; mma.getEvent(&event); /* Geef de resultaten weer (versnelling wordt gemeten in m/s^2) */ Serial.print("X: \t"); Serial.print(gebeurtenis.acceleration.x); Serieel.print("\t"); Serial.print("Y: \t"); Serial.print(gebeurtenis.acceleration.y); Serieel.print("\t"); Serial.print("Z: \t"); Serial.print(gebeurtenis.acceleration.z); Serieel.print("\t"); Serial.println("m/s^2 "); /* Haal de oriëntatie van de sensor op */ uint8_t o = mma.getOrientation(); switch (o) { case MMA8451_PL_PUF: Serial.println ("Portret vooraan"); pauze; case MMA8451_PL_PUB: Serial.println ("Portret omhoog achter"); pauze; zaak MMA8451_PL_PDF: Serial.println ("Portret aan de voorkant"); pauze; case MMA8451_PL_PDB: Serial.println ("Portret omlaag achter"); pauze; case MMA8451_PL_LRF: Serial.println ("Landschap Rechts Voor"); pauze; case MMA8451_PL_LRB: Serial.println ("Landschap Rechts Achter"); pauze; case MMA8451_PL_LLF: Serial.println ("Landschap linksvoor"); pauze; case MMA8451_PL_LLB: Serial.println ("Landschap linksachter"); pauze; } Serieel.println(); vertraging (1000); }
Opslaan, verifiëren en uploaden……
Open de seriële monitor en je ziet zoiets als dit, ik was de sensor aan het verplaatsen, vandaar de verschillende metingen
X: -2166 Y: 1872 Z: 2186
X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m/s^2
Liggend Links Voor
X: -224 Y: -2020 Z: 3188
X: -5,10 Y: -3,19 Z: 7,00 m/s^2
Portret vooraan
Als alles is gegaan zoals het zou moeten, dan heb je nu de basis van I2C en hoe je je apparaat kunt aansluiten..
Maar apparaat werkt niet??
Ga gewoon met de volgende stap……
Stap 8: Laat uw I2C-apparaat werken
Basisstappen om het I2C-apparaat te laten werken
Laten we onderzoeken….
- Bedrading is correct..(controleer het opnieuw)
- Programma is correct..(Ja, het is een testvoorbeeld..)
Begin met fasen om op te lossen…..
Fase 1: Voer het I2C-apparaatscannerprogramma uit om het apparaatadres te controleren en eerst is uw I2C-apparaat in orde
U kunt schets downloaden en uitvoer controleren.
Resultaat - Apparaat werkt en Sensoradres is juist
I2C-scanner. Scannen …
Gevonden adres: 28 (0x1C) Klaar. 1 apparaat(en) gevonden.
Stap 2: Controleer de sensorbibliotheek
Open het bestand Adafruit_MMA8451.h en zoek het apparaatadres
Resultaat - Adres wijkt af van mijn apparaat??
/*================================================ ========================= I2C-ADRES/BITS --------------------- -------------------------------------------------- */ #define MMA8451_DEFAULT_ADDRESS (0x1D) //!< Standaard MMA8451 I2C-adres, als A GND is, is het 0x1C /*====================== ================================================== */
Doen - Bestand bewerken vanuit Kladblok (adres wijzigen) + Opslaan + IDE opnieuw starten
Het werkt. U kunt uw metingen krijgen.
Toch niet…..???
Stap 3: Controleer of Wire.begin is overschreven?
Open het bestand Adafruit_MMA8451.c en zoek Wire.begin.
Resultaat - Deze verklaring is overschreven
/************************************************** *************************//*! @brief Stelt de HW in (lees coëfficiënten, etc.) */ /*********************************** ****************************************/ bool Adafruit_MMA8451::begin(uint8_t i2caddr) { Draad.begin(); _i2caddr = i2caddr;
Doen - Bewerk bestand vanuit Kladblok (commentaar) + Opslaan + Herstart IDE
En tot slot werkt het apparaat …
Ik overbelast deze tutorial bijna omdat het belangrijkste doel was om uit te leggen hoe te beginnen, gegevens uit de datasheet te halen, verbinding te maken en het I2C-apparaat te laten werken met een zeer eenvoudig voorbeeld. Ik hoop dat alles zal gaan zoals het hoort, en het zal nuttig zijn om uw Sensor te starten.
Aanbevolen:
Aan de slag met draadloze temperatuur- en trillingssensoren met groot bereik: 7 stappen
Aan de slag met draadloze temperatuur- en trillingssensoren met groot bereik: Soms zijn trillingen de oorzaak van ernstige problemen in veel toepassingen. Van machineassen en lagers tot de prestaties van de harde schijf, trillingen veroorzaken schade aan de machine, vroegtijdige vervanging, lage prestaties en veroorzaken een grote aanslag op de nauwkeurigheid. Toezicht houden
Aan de slag met Ham Radio: 5 stappen (met afbeeldingen)
Aan de slag met Ham Radio: Als een onlangs geslagen ham-licentiehouder, wil ik het proces doorgeven dat ik heb gevolgd om in hamradio te komen. Ik werd verleid door het zelfredzaamheidsaspect van de hobby, mensen een manier geven om te communiceren wanneer andere methoden worden verstoord. Maar het is ook de moeite waard om
Aan de slag met Python voor ESP8266 & ESP32: 6 stappen
Aan de slag met Python voor ESP8266 en ESP32: basis De ESP8266 en zijn jongere grote broer ESP32 zijn goedkope wifi-microchips met volledige TCP/IP-stack en microcontroller-mogelijkheden. De ESP8266-chip kwam voor het eerst onder de aandacht van de makersgemeenschap in 2014. Sindsdien is de lage prijs (
Aan de slag met ESP32 CAM - Video streamen met ESP CAM via wifi - ESP32-beveiligingscameraproject - Ajarnpa
Aan de slag met ESP32 CAM | Video streamen met ESP CAM via wifi | ESP32 Security Camera Project: vandaag zullen we leren hoe we dit nieuwe ESP32 CAM-bord kunnen gebruiken en hoe we het kunnen coderen en gebruiken als een beveiligingscamera en een streaming video via wifi kunnen krijgen
Aan de slag met ESP32 - ESP32-kaarten installeren in Arduino IDE - ESP32-knippercode: 3 stappen
Aan de slag met ESP32 | ESP32-kaarten installeren in Arduino IDE | ESP32-knippercode: in deze instructie zullen we zien hoe we met esp32 kunnen werken en hoe we esp32-kaarten in Arduino IDE kunnen installeren en we zullen esp 32 programmeren om knippercode uit te voeren met behulp van arduino ide