Kako skenirati I2C adresu u ESP32 koristeći Arduino IDE

Kako Skenirati I2c Adresu U Esp32 Koristeci Arduino Ide



ESP32 je platforma temeljena na mikrokontroleru koja može surađivati ​​s nekoliko uređaja za kontrolu različitih izlaza prema ulazu. Svi komunikacijski protokoli kao što su UART, SPI i I2C igraju značajnu ulogu u ESP32 komunikaciji. U ovom vodiču raspravljat ćemo o Inter Integrated Circuit ili I2C komunikacijskom protokolu i o tome kako skenirati adresu uređaja.

Uvod u I2C komunikaciju

I2C alternativno poznat kao I2C ili IIC je sinkroni master-slave komunikacijski protokol gdje signal master uređaj može kontrolirati višestruki broj slave uređaja preko jedne žice (SDA linija).

I2C kombinira rad UART i SPI protokola, na primjer SPI podržava kontrolu više podređenih uređaja preko jednog mastera, I2C također podržava ovo s druge strane UART koristi dvolinijski TX i Rx za komunikaciju I2C također koristi dvolinijski SDA i SCL za komunikacija.









Ovdje možemo vidjeti da smo koristili pull-up otpornike sa SDA i SCL linijama. To je zato što prema zadanim postavkama I2C emitira samo dvije razine, LOW ili otvoreni krug. Prema zadanim postavkama, I2C na svim čipovima je u otvorenom krugu, tako da smo ih povukli HIGH, koristili smo pull-up otpornik.



Slijede dvije linije koje koristi I2C:





  • SDA (serijski podaci) : Linija za prijenos i primanje podataka od glavnog do podređenog i obrnuto
  • SCL (serijski sat) : Linija signala sata za odabir određenog pomoćnog uređaja

ESP32 I2C sučelja sabirnice

ESP32 ima dva I2C sučelja sabirnice pomoću kojih se I2C komunikacija izvodi kao master ili slave ovisno o uređaju koji je povezan s ESP32. Prema podatkovnoj tablici ESP32, I2C sučelje ESP32 ploče podržava sljedeću konfiguraciju:

  • Standardni način I2C komunikacije brzinom od 100 Kbit/s
  • Brzi ili napredni način I2C komunikacije brzinom od 400 Kbit/s
  • Dvostruki način adresiranja 7-bitni i 10-bitni
  • Korisnici mogu kontrolirati I2C sučelje programiranjem registara naredbi
  • ESP32 I2C sučelje sabirnice je fleksibilnije u kontroli

Povezivanje I2C uređaja s ESP32

Povezivanje uređaja s ESP32 korištenjem I2C protokola je vrlo jednostavno kao i UART, trebamo samo dvije linije za povezivanje SDA i SCL linije sata.



ESP32 se može konfigurirati iu glavnom iu podređenom načinu rada.

ESP32 I2C glavni način rada

U ovom načinu rada ESP32 generira signal sata koji pokreće komunikaciju s povezanim podređenim uređajima.

Dva GPIO pina u ESP32 koji su unaprijed definirani za I2C komunikaciju:

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

ESP32 I2C Slave Mode

U podređenom načinu rada sat generira glavni uređaj. Master je jedini uređaj koji pokreće SCL liniju u I2C komunikaciji. Podređeni uređaji su uređaji koji odgovaraju na master, ali ne mogu pokrenuti prijenos podataka. U ESP32 I2C sabirnici samo master može pokrenuti prijenos podataka između uređaja.

Slika prikazuje dvije ESP32 ploče u konfiguraciji master-slave.

Do sada smo razumjeli rad I2C načina rada u ESP32, a sada možemo lako pronaći I2C adresu bilo kojeg uređaja učitavanjem danog koda.

Kako skenirati I2C adresu u ESP32 koristeći Arduino IDE

Pronalaženje I2C adrese povezanih uređaja s ESP32 važno je jer ako koristimo uređaje s istom I2C adresom tada ne možemo komunicirati s njima preko jedne linije sabirnice.

Svaki I2C uređaj mora sadržavati jedinstvenu adresu i raspon adresa od 0 do 127 ili (0 do 0X7F) u HEX. Na primjer, ako koristimo dva OLED zaslona istog broja modela ili proizvoda, oba će imati istu I2C adresu tako da ne možemo koristiti oba na istoj I2C liniji u ESP32.

Da bismo pronašli IC adresu, uzmimo primjer.

Shematski

Donja slika prikazuje shematski dijagram sučelja OLED zaslona s ESP32 pločom pomoću I2C komunikacijskog protokola.

Veza ESP32 s OLED-om uključuje:

OLED zaslon ESP32 Pin
VCC 3V3/VIN
GND GND
SCL GPIO 22
SDA GPIO 21

Kodirati
Otvorite Arduino editor i prenesite dani I2C kod za skeniranje u ESP32 ploču. Provjerite je li ESP32 spojen i je li odabran COM port.

/****************
****************
linuxhint.com
****************
****************/

#include  /*Žična biblioteka uključena*/

void setup ( ) {
Žica.započeti ( ) ; /* I2C komunikacija počinje */
Serijski.početi ( 115200 ) ; /* Definirana brzina prijenosa podataka za serijska komunikacija */
Serijski.println ( ' \n I2C skener' ) ; /* skener za ispis na serijskom monitoru */
}

void petlja ( ) {
greška u bajtu, adresa;
int nUređaji;
Serijski.println ( 'Skeniranje...' ) ; /* ESP32 počinje skenirati dostupne I2C uređaje */
nUređaji = 0 ;
za ( adresa = 1 ; adresa < 127 ; adresa++ ) { /* za petlja za provjeru broja uključenih uređaja 127 adresa */
Wire.beginTransmission ( adresa ) ;
pogreška = Wire.endTransmission ( ) ;
ako ( pogreška == 0 ) { /* ako I2C uređaj pronađen */
Serijski.ispis ( 'I2C uređaj pronađen na adresi 0x' ) ; /* ispišite ovaj redak ako I2C uređaj pronađen */
ako ( adresa < 16 ) {
Serijski.ispis ( '0' ) ;
}
Serijski.println ( adresa, HEX ) ; /* ispisuje HEX vrijednost I2C adrese */
nDevices++;
}
drugo ako ( greška == 4 ) {
Serijski.ispis ( 'Nepoznata pogreška na adresi 0x' ) ;
ako ( adresa < 16 ) {
Serijski.ispis ( '0' ) ;
}
Serijski.println ( adresa, HEX ) ;
}
}
ako ( nUređaji == 0 ) {
Serijski.println ( 'Nisu pronađeni I2C uređaji \n ' ) ; /* Ako nije priključen I2C uređaj, ispišite ovu poruku */
}
drugo {
Serijski.println ( 'gotovo \n ' ) ;
}
odgoditi ( 5000 ) ; /* Odgoda dana za provjeravajući I2C sabirnicu svakih 5 sek */
}

Gornji kod skenirat će dostupne I2C uređaje. Kod je započeo pozivanjem žične knjižnice za I2C komunikaciju. Sljedeća serijska komunikacija pokreće se brzinom prijenosa podataka.

U dijelu petlje koda za skeniranje I2C dva imena varijabli, greška i adresa su definirani. Ove dvije varijable pohranjuju I2C adresu uređaja. Zatim se pokreće for petlja koja će skenirati I2C adresu počevši od 0 do 127 uređaja.

Nakon očitavanja I2C adrese izlaz se ispisuje na serijskom monitoru u HEX formatu.

Hardver

Ovdje možemo vidjeti da je OLED 0,96-inčni I2C zaslon spojen na ESP32 ploču na GPIO pinovima 21 i 22. Vcc i GND zaslona povezani su s ESP32 3V3 i GND pinom.

Izlaz
U izlazu možemo vidjeti I2C adresu OLED zaslona spojenog na ESP32 ploču. Ovdje je I2C adresa 0X3C tako da ne možemo koristiti nijedan drugi I2C uređaj s istom adresom jer prvo moramo promijeniti I2C adresu tog uređaja.

Uspješno smo dobili I2C adresu OLED zaslona povezanog s ESP32 pločom.

Zaključak

Pronalaženje I2C adrese tijekom povezivanja više uređaja s ESP32 važno je jer se uređaji koji dijele istu I2C adresu ne mogu povezati preko jedne I2C sabirnice. Pomoću gornjeg koda može se identificirati I2C adresa i ako se adresa bilo koja dva uređaja podudara, može se promijeniti u skladu s tim ovisno o specifikacijama uređaja.