I dag vil vi diskutere hvordan vi kan koble til flere I2C -enheter med Arduino Nano og skanne I2C -adressen deres ved hjelp av Arduino IDE -koden.
Introduksjon til I2C -kommunikasjon
Arduino nano kan kommunisere med andre enheter ved hjelp av den inter-integrerte krets (I2C) -protokollen. Data utveksles via to ledninger ved hjelp av I2C -protokollen. Det er mye brukt i elektronikk fordi den lar flere enheter dele et begrenset antall tilkoblinger uten behov for en egen kommunikasjonskanal.
For å bruke I2C på Arduino Nano brukes SDA (datapin) og SCL (klokkepinne). På de fleste Arduino nano -brett er disse pinnene henholdsvis A4 og A5. Du må også inkludere trådbiblioteket i skissen din og initialisere I2C -kommunikasjonen ved hjelp av ledningen.Begynn () Funksjon.
I2C er lik i å jobbe med UART og SPI. For eksempel, som SPI -protokoll, har I2C også støtte for enkeltmester og flere slaveenheter. Tilsvarende er I2C på en eller annen måte lik UART også på grunn av de to ledningene for kommunikasjon. UART bruker to ledninger for kommunikasjon som er TX og RX, I2C bruker også to ledninger SDA og SCL for kommunikasjon og dataoverføring.
Over bildet representerer å kontrollere to slaveenheter ved hjelp av en enkelt master. Her er en opptreden motstand koblet til både SDA og SCL. I2C gir signaler med to nivåer lavt og åpen krets. I2C på Arduino Nano er i åpen kretsmodus. Trekk opp motstand som vi brukte vil trekke I2C til høyt nivå.
Arduino Nano bruker to linjer for I2C -kommunikasjon:
Hvordan skanne I2C -adresse i Arduino Nano ved hjelp av Arduino IDE
I2C -adressen til en enhet må være unik fordi den brukes til å identifisere enheten på I2C -bussen. Når en enhet sender eller mottar data om I2C -bussen, gjør den det ved å bruke sin unike I2C -adresse. Hvis to enheter på samme I2C -buss har samme adresse, vil det være umulig å skille mellom dem, noe som fører til kommunikasjonsfeil og upålitelig oppførsel.
For å sikre at hver enhet på en I2C -buss har en unik adresse, tildeles I2C -enheter vanligvis en fast adresse av produsenten. Disse adressene er vanligvis 7-biters eller 10-biters verdier, avhengig av den spesifikke I2C-protokollen som brukes.
Enheter som bruker I2C -protokollen har unike adresser fra 0 til 127. For eksempel, hvis vi har en LCD -skjerm med samme I2C -adresse, vil vi ikke kunne kommunisere mellom dem ved å bruke det samme Arduino -tavlen.
Nå vil vi grensesnitt to I2C -enheter med Arduino Nano og finne I2C -adressen ved hjelp av Arduino -koden.
Skjematisk
Under bildet viser skjematisk av Arduino Nano med OLED og I2C LCD -skjerm koblet til A4 og A5 -pinnen til Arduino Nano. SDA -pin er på A4 og SCL -pinnen tilsvarer A5 av Arduino Nano.
Tilkoblingspinnene til Arduino Nano med OLED og I2C LCD er:
OLED -skjerm | Arduino Nano Pin |
---|---|
VCC | 3v3 |
GND | GND |
SCL | A5 |
SDA | A4 |
I2C LCD -skjerm | Arduino Nano Pin |
---|---|
VCC | 5v |
GND | GND |
SCL | A5 |
SDA | A4 |
Kode
Åpne Arduino IDE, koble Nano -tavlen og last opp den gitte koden for å skanne I2C -adressen til OLED og I2C LCD -skjermen.
#include /*wire bibliotek importert* /
ugyldig oppsett ()
Metalltråd.begynne(); /*I2c kommunikasjon begynner*/
Serie.Begynn (9600); /*baudfrekvens for UART -kommunikasjon*/
samtidig som (!Seriell); /*Vent på serieutgang*/
Serie.println ("\ ni2c skanner");
ugyldig sløyfe ()
byte feil, adr; /*variabel for å lagre i2c adresse*/
int number_of_devices;
Serie.println ("skanning.");
number_of_devices = 0;
for (ADR = 1; ADR < 127; adr++)
Metalltråd.BeginTransmission (ADR);
feil = ledning.EndTransmission ();
if (err == 0)
Serie.print ("I2C -enhet på adresse 0x");
hvis (adr < 16)
Serie.print ("0");
Serie.trykk (ADR, Hex);
Serie.Println (" !");
NUMMER_OF_DEVICES ++;
ellers hvis (err == 4)
Serie.print ("ukjent feil på adresse 0x");
hvis (adr < 16)
Serie.print ("0");
Serie.Println (ADR, Hex);
if (number_of_devices == 0)
Serie.println ("NO I2C -enheter vedlagt \ n");
ellers
Serie.println ("gjort \ n");
forsinkelse (5000); /*Vent 5 sek etter hver I2C -skanning*/
Kode startet med å inkludere trådbiblioteket som hjelper Nano til å etablere I2C -kommunikasjon med enheter. Neste baudfrekvens er definert for seriell kommunikasjon.
I løkkenes seksjonsvariabel feil og adr er definert. To variabler vil lagre I2C -adressen etter skanning. A for Loop er definert som skanner I2C -adressene til enheter som er festet til Arduino Nano.
Etter skanning av I2C -adressen vil den bli skrevet ut på Arduino Serial Monitor. Den viste I2C -adressen vil være i HEX -format.
Maskinvare
Under bildet viser OLED 0.96-tommers I2C-skjerm og I2C LCD-skjerm er koblet til Arduino Nano ved GPIO-pinner A4 og A5. VCC og GND av begge skjermer er koblet til Arduino Nano 3V3/5V og GND PIN -kode.
Produksjon
Seriell monitor viste I2C -adressen til OLED- og I2C LCD -skjermer. Begge har separate I2C -adresser som betyr at vi kan bruke dem sammen på samme Arduino Nano -brett.
Imidlertid, hvis vi har enheter med samme I2C -adresse, kan vi endre adressen deres. For å gjøre dette se etter databladet til en spesifikk sensor.
Både OLED- og LCD I2C -adresser oppnås ved bruk av Arduino Nano.
Konklusjon
Å skanne en I2C -adresse før du kobler til flere I2C -enheter med Arduino er viktig, da to enheter med samme adresse ikke kan kommunisere over en enkelt I2C -buss. Denne artikkelen inkluderer I2C -skanningskoden ved hjelp av noen av I2C -enhetsadressene som er funnet som er koblet til Nano -tavlen.