Hvordan skanne I2C -adresse i ESPTOP 10 ved hjelp av Arduino IDE

Hvordan skanne I2C -adresse i ESPTOP 10 ved hjelp av Arduino IDE
ESP32 er en mikrokontrollerbasert plattform som kan grensesnitt mot flere enheter for å kontrollere forskjellige utganger i henhold til inngangen. Alle kommunikasjonsprotokoller som UART, SPI og I2C spiller en betydelig rolle i ESP32 -kommunikasjon. Vi vil diskutere Inter Integrated Circuit eller I2C kommunikasjonsprotokoll i denne guiden og hvordan du skanner en adresse på en enhet.

Introduksjon til I2C -kommunikasjon

I2C Alternativt kjent som I2C eller IIC er en synkron master-slave-kommunikasjonsprotokoll der en signalmesterenhet kan kontrollere flere antall slaveenheter over en enkelt ledning (SDA-linje).

I2C kombinerer arbeidet med UART- og SPI-protokoller for eksempel SPI støtter flere slaveenheter kontroll over en enkelt master, I2C støtter også dette på den annen side UART bruker to-linjers TX og RX for kommunikasjon I2C også bruker to-linjers SDA og SCL for for kommunikasjon.

Her kan vi se at vi har brukt opptrekksmotstander med begge SDA, SCL -linjer. Dette er fordi som standard I2C bare sender ut to nivåer av enten lav eller åpen krets. Som standard er I2C på alle brikker i åpen kretsmodus, så for å trekke dem høyt brukte vi en opptrekksmotstand.

Følgende er de to linjene I2C bruker:

  • SDA (seriedata): Linje for å overføre og motta data fra master til slave og omvendt
  • SCL (serieklokke): Klokkesignallinje for å velge en spesifikk slaveenhet

ESP32 I2C bussgrensesnitt

ESP32 har to I2C -bussgrensesnitt ved å bruke I2C -kommunikasjon utføres som enten master eller slave avhengig av enheten som er koblet til ESP32. I følge ESP32 DataSheet støtter ESP32 -tavlen I2C -grensesnittet etter konfigurasjon:

  • Standardmodus I2C -kommunikasjon med hastighet på 100 kbit/s
  • Rask eller avansert modus i2c kommunikasjon med hastighet på 400 kbit/s
  • Dobbelt adresseringsmodus 7-biters og 10-bit
  • Brukere kan kontrollere I2C -grensesnittet ved å programmere kommandoregistrene
  • ESP32 I2C busgrensesnitt er mer fleksibelt når det gjelder å kontrollere

Koble til I2C -enheter med ESP32

Grensesnittenheter med ESP32 ved bruk av I2C -protokoll er veldig enkelt akkurat som UART, vi trenger bare to linjer for å koble til SDA og SCL -klokkelinjen.

ESP32 kan konfigureres som både i master- og slavemodus.

ESP32 I2C Master Mode

I denne modusen brukes ESP32 et klokkesignal som initierer kommunikasjonen med tilkoblede slaveenheter.

De to GPIO-pinnene i ESP32 som er forhåndsdefinert for I2C-kommunikasjon:

  • SDA: Gpio pin 21
  • SCL: GPIO PIN 22

ESP32 I2C slavemodus

I slavemodus genereres klokken av masterenhet. Master er den eneste enheten som driver SCL -linjen i I2C -kommunikasjon. Slaver er enhetene som svarer på Master, men ikke kan sette i gang en dataoverføring. I ESP32 I2C -buss bare masteren kan sette i gang dataoverføring mellom enheter.

Bildet viser to ESP32-tavler i master-slavekonfigurasjon.

Per nå har vi forstått arbeidet med I2C -modus i ESP32 Nå kan vi enkelt finne I2C -adressen til en hvilken som helst enhet ved å laste opp den gitte koden.

Hvordan skanne I2C -adresse i ESP32 ved hjelp av Arduino IDE

Å finne I2C -adressen til tilkoblede enheter med ESP32 er viktig fordi hvis vi bruker enheter med samme I2C -adresse, kan vi ikke kommunisere med dem over en enkelt busslinje.

Hver I2C -enhet må inneholde en unik adresse og adresseområdet fra 0 til 127 eller (0 til 0x7F) i Hex. Hvis vi for eksempel bruker to OLED -skjermer av samme modellnummer eller produkt, vil begge ha samme I2C -adresse, slik at vi ikke kan bruke begge på samme I2C -linje i ESP32.

For å finne en IC -adresse, la oss ta et eksempel.

Skjematisk

Under bildet viser skjematisk diagram over OLED -skjermgrensesnitt med ESP32 -kort ved bruk av I2C -kommunikasjonsprotokollen.

Tilkoblingen til ESP32 med OLED inkluderer:

OLED -skjerm ESP32 PIN
VCC 3v3/vin
GND GND
SCL GPIO 22
SDA GPIO 21

Kode
Åpne Arduino -redaktør og last opp den gitte I2C -skanningskoden i ESP32 -styret. Forsikre deg om at ESP32 er tilkoblet, og COM -porten er valgt.

/***************
****************
Linuxhint.com
****************
****************/
#include /*wire -bibliotek inkludert* /
void setup ()
Metalltråd.begynne(); /*I2c kommunikasjon begynner*/
Serie.Begin (115200); /*Baudfrekvens definert for seriell kommunikasjon*/
Serie.println ("\ ni2c skanner"); /*Skriv ut skanner på seriell skjerm*/

void loop ()
bytefeil, adresse;
int ndevices;
Serie.println ("skanning ..."); /*ESP32 begynner å skanne tilgjengelig I2C -enheter*/
ndevices = 0;
for (adresse = 1; adresse < 127; address++ ) /*for loop to check number of devices on 127 address*/
Metalltråd.BeginTransmission (adresse);
Feil = ledning.EndTransmission ();
if (error == 0) /*hvis i2c -enhet funnet* /
Serie.skriv ut ("I2C -enhet funnet på adresse 0x");/*Skriv ut denne linjen hvis I2C -enhet funnet*/
hvis (adresse<16)
Serie.print ("0");

Serie.println (adresse, hex); /*Skriver ut hex -verdien til I2C -adressen*/
ndevices ++;

ellers hvis (feil == 4)
Serie.print ("ukjent feil på adresse 0x");
hvis (adresse<16)
Serie.print ("0");

Serie.println (adresse, hex);


if (nDevices == 0)
Serie.println ("NO I2C -enheter funnet \ n"); /*Hvis ingen I2C -enhet vedlegg, skriv ut denne meldingen*/

annet
Serie.println ("gjort \ n");

forsinkelse (5000); /*Forsinkelse gitt for å sjekke I2C -bussen hver 5. sekund*/

Ovennevnte kode vil skanne etter de tilgjengelige I2C -enhetene. Kode startet med å ringe Wire Library for I2C -kommunikasjon. Neste seriell kommunikasjon startes ved å bruke baudfrekvensen.

I sløyfen del av I2C skanningskode to variabelnavn, feil og adresse er definert. Disse to variablene lagrer I2C -adressen til enheter. Neste A for loop blir initialisert som vil skanne etter I2C -adressen fra 0 til 127 enheter.

Etter å ha lest I2C -adressen er utdata skrevet ut på seriemonitoren i HEX -format.

Maskinvare

Her kan vi se OLED 0.96-tommers I2C-skjerm er koblet til ESP32-brettet ved GPIO-pinner 21 og 22. VCC og GND på skjermen er koblet til ESP32 3V3 og GND PIN -kode.

Produksjon
I utgangen kan vi se I2C -adressen til OLED -skjermen koblet til ESP32 -styret. Her er I2C -adressen 0x3c, så vi kan ikke bruke noen annen I2C -enhet med samme adresse for at vi først må endre I2C -adressen til den enheten.

Vi har oppnådd I2C -adressen til OLED -skjermen koblet til ESP32 -styret.

Konklusjon

Å finne en I2C -adresse mens du kobler til flere enheter med ESP32 er viktig som enheter som deler den samme I2C -adressen ikke kan kobles til over en enkelt I2C -buss. Ved å bruke koden over kan man identifisere I2C -adressen, og hvis adressen til to enheter samsvarer, kan den endres deretter avhengig av enhetsspesifikasjonene.