Kako skenirati naslov I2C v ESP32 z uporabo Arduino IDE

Kako Skenirati Naslov I2c V Esp32 Z Uporabo Arduino Ide



ESP32 je platforma na osnovi mikrokrmilnika, ki se lahko poveže z več napravami za nadzor različnih izhodov glede na vhod. Vsi komunikacijski protokoli, kot so UART, SPI in I2C, igrajo pomembno vlogo pri komunikaciji ESP32. V tem priročniku bomo razpravljali o internem integriranem vezju ali komunikacijskem protokolu I2C in o tem, kako skenirati naslov naprave.

Uvod v komunikacijo I2C

I2C, alternativno znan kot I2C ali IIC, je sinhroni komunikacijski protokol glavni-podrejeni, kjer lahko glavna signalna naprava nadzira več podrejenih naprav prek ene žice (linija SDA).

I2C združuje delovanje protokolov UART in SPI, na primer SPI podpira nadzor več podrejenih naprav nad enim glavnim, I2C to podpira tudi na drugi strani UART uporablja dvovrstični TX in Rx za komunikacijo I2C uporablja tudi dvovrstični SDA in SCL za komunikacijo komunikacije.









Tukaj lahko vidimo, da smo uporabili vlečne upore z obema linijama SDA in SCL. To je zato, ker I2C privzeto oddaja samo dve ravni bodisi LOW ali odprto vezje. Privzeto je I2C na vseh čipih v načinu odprtega tokokroga, zato smo za njihovo dviganje VISOKO uporabili vlečni upor.



Sledi dve vrstici, ki ju uporablja I2C:





  • SDA (Serijski podatki) : Linija za prenos in sprejemanje podatkov od glavnega do podrejenega in obratno
  • SCL (serijska ura) : Ura signalne linije za izbiro določene pomožne naprave

ESP32 I2C Bus vmesniki

ESP32 ima dva vmesnika vodila I2C, s katerima se komunikacija I2C izvaja kot glavni ali podrejeni, odvisno od naprave, ki je povezana z ESP32. V skladu s podatkovnim listom ESP32 vmesnik I2C plošče ESP32 podpira naslednjo konfiguracijo:

  • Standardni način komunikacije I2C s hitrostjo 100 Kbit/s
  • Hitra ali napredna I2C komunikacija s hitrostjo 400 Kbit/s
  • Dvojni način naslavljanja 7-bitni in 10-bitni
  • Uporabniki lahko nadzorujejo vmesnik I2C s programiranjem ukaznih registrov
  • Vmesnik vodila ESP32 I2C je bolj prilagodljiv pri nadzoru

Povezovanje naprav I2C z ESP32

Povezovanje naprav z ESP32, ki uporabljajo protokol I2C, je zelo preprosto, tako kot UART, potrebujemo le dve liniji za povezavo SDA in SCL časovne linije.



ESP32 je mogoče konfigurirati v glavnem in podrejenem načinu.

Glavni način ESP32 I2C

V tem načinu ESP32 ustvari signal ure, ki sproži komunikacijo s povezanimi podrejenimi napravami.

Dva zatiča GPIO v ESP32, ki sta vnaprej določena za komunikacijo I2C:

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

ESP32 I2C podrejeni način

V podrejenem načinu uro ustvari glavna naprava. Master je edina naprava, ki poganja linijo SCL v komunikaciji I2C. Podrejene naprave so naprave, ki se odzivajo na glavno, vendar ne morejo sprožiti prenosa podatkov. V vodilu ESP32 I2C lahko le glavni zažene prenos podatkov med napravami.

Slika prikazuje dve plošči ESP32 v konfiguraciji master-slave.

Zdaj smo razumeli delovanje načina I2C v ESP32, zdaj pa lahko zlahka najdemo naslov I2C katere koli naprave z nalaganjem dane kode.

Kako skenirati naslov I2C v ESP32 z uporabo Arduino IDE

Iskanje naslova I2C povezanih naprav z ESP32 je pomembno, ker če uporabljamo naprave z istim naslovom I2C, z njimi ne moremo komunicirati prek ene same linije vodila.

Vsaka naprava I2C mora vsebovati edinstven naslov in obseg naslovov od 0 do 127 ali (0 do 0X7F) v HEX. Na primer, če uporabljamo dva zaslona OLED iste številke modela ali izdelka, bosta oba imela enak naslov I2C, tako da ne moremo uporabiti obeh na isti liniji I2C v ESP32.

Za iskanje naslova IC vzemimo primer.

Shematski prikaz

Spodnja slika prikazuje shematski diagram povezovanja zaslona OLED s ploščo ESP32 z uporabo komunikacijskega protokola I2C.

Povezava ESP32 z OLED vključuje:

Zaslon OLED Zatič ESP32
VCC 3V3/VIN
GND GND
SCL GPIO 22
SDA GPIO 21

Koda
Odprite urejevalnik Arduino in naložite dano kodo za skeniranje I2C na ploščo ESP32. Prepričajte se, da je ESP32 priključen in da so izbrana vrata COM.

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

#include  /*Vključena žična knjižnica*/

nastavitev praznine ( ) {
Wire.begin ( ) ; /* Komunikacija I2C se začne */
Serial.begin ( 115200 ) ; /* Določena hitrost prenosa za serijsko komunikacijo */
Serial.println ( ' \n I2C skener' ) ; /* skener za tiskanje na serijski monitor */
}

prazna zanka ( ) {
bajtna napaka, naslov;
int nDevices;
Serial.println ( 'Skeniranje ...' ) ; /* ESP32 začne skenirati razpoložljive naprave I2C */
nNaprave = 0 ;
za ( naslov = 1 ; naslov < 127 ; naslov++ ) { /* za zanko za preverjanje števila vključenih naprav 127 naslov */
Wire.beginTransmission ( naslov ) ;
napaka = Wire.endTransmission ( ) ;
če ( napaka == 0 ) { /* če Najdena naprava I2C */
Serijski.natis ( 'Naprava I2C najdena na naslovu 0x' ) ; /* natisnite to vrstico če Najdena naprava I2C */
če ( naslov < 16 ) {
Serijski.natis ( '0' ) ;
}
Serial.println ( naslov, HEX ) ; /* natisne HEX vrednost naslova I2C */
nDevices++;
}
drugače če ( napaka == 4 ) {
Serijski.natis ( 'Neznana napaka na naslovu 0x' ) ;
če ( naslov < 16 ) {
Serijski.natis ( '0' ) ;
}
Serial.println ( naslov, HEX ) ;
}
}
če ( nNaprave == 0 ) {
Serial.println ( »Ni najdenih naprav I2C \n ' ) ; /* Če naprava I2C ni priključena, natisnite to sporočilo */
}
drugače {
Serial.println ( 'Končano \n ' ) ;
}
zamuda ( 5000 ) ; /* Dana zamuda za preverjanje I2C vodila vsak 5 sek */
}

Zgornja koda bo iskala razpoložljive naprave I2C. Koda se je začela s klicem žične knjižnice za komunikacijo I2C. Naslednja serijska komunikacija se začne s hitrostjo prenosa podatkov.

V delu zanke kode skeniranja I2C dve imeni spremenljivk, napaka in naslov so opredeljeni. Ti dve spremenljivki shranjujeta naslov I2C naprav. Nato se inicializira zanka for, ki bo iskala naslov I2C od 0 do 127 naprav.

Po branju naslova I2C se izhod natisne na serijski monitor v formatu HEX.

Strojna oprema

Tukaj lahko vidimo, da je OLED 0,96-palčni zaslon I2C povezan s ploščo ESP32 na GPIO zatičih 21 in 22. Vcc in GND zaslona sta povezana z ESP32 3V3 in GND zatiči.

Izhod
V izhodu lahko vidimo naslov I2C zaslona OLED, priključenega na ploščo ESP32. Tukaj je naslov I2C 0X3C, zato ne moremo uporabiti nobene druge naprave I2C z enakim naslovom, zato moramo najprej spremeniti naslov I2C te naprave.

Uspešno smo pridobili naslov I2C zaslona OLED, povezanega s ploščo ESP32.

Zaključek

Iskanje naslova I2C med povezovanjem več naprav z ESP32 je pomembno, saj naprav, ki si delijo isti naslov I2C, ni mogoče povezati prek enega vodila I2C. Z uporabo zgornje kode je mogoče prepoznati naslov I2C in če se naslova katerih koli dveh naprav ujemata, ga je mogoče ustrezno spremeniti glede na specifikacije naprave.