Az I2C-cím beolvasása az ESP32-ben Arduino IDE használatával

Az I2c Cim Beolvasasa Az Esp32 Ben Arduino Ide Hasznalataval



Az ESP32 egy mikrokontroller alapú platform, amely több eszközhöz kapcsolódva vezérelheti a különböző kimeneteket a bemenettől függően. Minden kommunikációs protokoll, mint az UART, SPI és I2C, jelentős szerepet játszik az ESP32 kommunikációban. Ebben az útmutatóban az Inter Integrated Circuit vagy az I2C kommunikációs protokollt és az eszköz címének beolvasását tárgyaljuk.

Bevezetés az I2C kommunikációba

Az I2C, más néven I2C vagy IIC, egy szinkron mester-szolga kommunikációs protokoll, ahol a jel-mester eszköz több szolga eszközt vezérelhet egyetlen vezetéken (SDA vonalon).

Az I2C egyesíti az UART és az SPI protokollok működését, például az SPI támogatja több slave eszköz vezérlését egyetlen master felett, az I2C is támogatja ezt, másrészt az UART kétsoros TX és Rx-et használ a kommunikációhoz Az I2C kétsoros SDA-t és SCL-t is használ kommunikáció.









Itt láthatjuk, hogy SDA és SCL vonalakkal is felhúzó ellenállásokat használtunk. Ennek az az oka, hogy az I2C alapértelmezés szerint csak két szintű LOW vagy szakadt áramkört ad ki. Alapértelmezés szerint az I2C az összes chipen nyitott áramkörű módban van, így a MAGASRA húzáshoz felhúzó ellenállást használtunk.



A következő az I2C által használt két sor:





  • SDA (soros adatok) : Vonal adatátvitelhez és fogadáshoz a mastertől a slave-ig és fordítva
  • SCL (soros óra) : Órajel vonal egy adott slave eszköz kiválasztásához

ESP32 I2C busz interfészek

Az ESP32 két I2C busz interfésszel rendelkezik, amelyek segítségével az I2C kommunikáció mesterként vagy szolgaként történik, attól függően, hogy melyik eszközhöz van csatolva az ESP32. Az ESP32 adatlapja szerint az ESP32 kártya I2C interfésze a következő konfigurációkat támogatja:

  • Normál módú I2C kommunikáció 100 Kbit/s sebességgel
  • Gyors vagy haladó módú I2C kommunikáció 400 Kbit/s sebességgel
  • Kettős címzési mód, 7 bites és 10 bites
  • A felhasználók az I2C interfészt a parancsregiszterek programozásával vezérelhetik
  • Az ESP32 I2C busz interfész rugalmasabb a vezérlésben

I2C eszközök csatlakoztatása ESP32-vel

Az ESP32-vel I2C protokollt használó eszközök interfésze nagyon egyszerű, csakúgy, mint az UART esetében, csak két vonalra van szükségünk az SDA és az SCL órajel összekötéséhez.



Az ESP32 Master és Slave módban is konfigurálható.

ESP32 I2C Master mód

Ebben az üzemmódban az ESP32 órajelet generál, amely elindítja a kommunikációt a csatlakoztatott slave eszközökkel.

Az ESP32 két GPIO érintkezője, amelyek előre meghatározottak az I2C kommunikációhoz:

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

ESP32 I2C Slave mód

Slave módban az órát a mester eszköz állítja elő. A Master az egyetlen eszköz, amely meghajtja az SCL vonalat az I2C kommunikációban. A szolgák azok az eszközök, amelyek válaszolnak a masternek, de nem tudnak adatátvitelt kezdeményezni. Az ESP32 I2C buszon csak a master kezdeményezhet adatátvitelt az eszközök között.

A képen két ESP32 kártya látható master-slave konfigurációban.

Mostanra megértettük az I2C mód működését az ESP32-ben, így a megadott kód feltöltésével könnyedén megtalálhatjuk bármely eszköz I2C címét.

Az I2C-cím beolvasása az ESP32-ben Arduino IDE használatával

Az ESP32-vel csatlakoztatott eszközök I2C címének megkeresése azért fontos, mert ha azonos I2C címmel rendelkező eszközöket használunk, akkor nem tudunk egyetlen buszvonalon keresztül kommunikálni velük.

Minden I2C-eszköznek tartalmaznia kell egy egyedi címet és a 0-tól 127-ig vagy (0-tól 0X7F-ig) tartományt HEX-ben. Például, ha két OLED-kijelzőt használunk azonos modellszámmal vagy termékkel, mindkettőnek ugyanaz az I2C-címe lesz, így nem tudjuk mindkettőt használni ugyanazon az I2C-vonalon az ESP32-ben.

Az IC-cím megtalálásához vegyünk egy példát.

Vázlatos

Az alábbi képen az OLED-kijelző és az ESP32 kártya I2C kommunikációs protokollt használó interfész vázlatos diagramja látható.

Az ESP32 és az OLED csatlakoztatása a következőket tartalmazza:

OLED kijelző ESP32 tű
VCC 3V3/VIN
GND GND
SCL GPIO 22
SDA GPIO 21

Kód
Nyissa meg az Arduino szerkesztőt, és töltse fel a megadott I2C szkennelő kódot az ESP32 kártyára. Győződjön meg arról, hogy az ESP32 csatlakoztatva van, és a COM port ki van választva.

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

#include  /*Wire library mellékelve*/

üres beállítás ( ) {
Wire.begin ( ) ; /* Megkezdődik az I2C kommunikáció */
Serial.begin ( 115200 ) ; /* Baud Rate meghatározva számára soros kommunikáció */
Serial.println ( ' \n I2C szkenner' ) ; /* nyomtatási szkenner a soros monitoron */
}

üres hurok ( ) {
bájt hiba, cím;
int nDevices;
Serial.println ( 'Szkennelés...' ) ; /* Az ESP32 megkezdi az elérhető I2C-eszközök vizsgálatát */
nEszközök = 0 ;
számára ( cím = 1 ; cím < 127 ; cím++ ) { /* számára hurok a bekapcsolt eszközök számának ellenőrzéséhez 127 cím */
Vezeték.beginTransmission ( cím ) ;
error = Wire.endTransmission ( ) ;
ha ( hiba == 0 ) { /* ha I2C eszköz található */
Serial.print ( 'I2C eszköz található a 0x címen' ) ; /* nyomtassa ki ezt a sort ha I2C eszköz található */
ha ( cím < 16 ) {
Serial.print ( '0' ) ;
}
Serial.println ( cím, HEX ) ; /* kiírja az I2C cím HEX értékét */
nDevices++;
}
más ha ( hiba == 4 ) {
Serial.print ( 'Ismeretlen hiba a 0x címen' ) ;
ha ( cím < 16 ) {
Serial.print ( '0' ) ;
}
Serial.println ( cím, HEX ) ;
}
}
ha ( nEszközök == 0 ) {
Serial.println ( 'Nem található I2C eszköz \n ' ) ; /* Ha nincs I2C eszköz csatlakoztatva, nyomtassa ki ezt az üzenetet */
}
más {
Serial.println ( 'Kész \n ' ) ;
}
késleltetés ( 5000 ) ; /* Késés adott számára minden I2C busz ellenőrzése 5 mp */
}

A fenti kód megkeresi az elérhető I2C eszközöket. A kód a vezetékes könyvtár felhívásával kezdődött az I2C kommunikációhoz. A következő soros kommunikáció az adatátviteli sebesség használatával indul.

Az I2C szkennelési kód ciklusrészében két változónév, hiba és cím vannak meghatározva. Ez a két változó tárolja az eszközök I2C címét. Ezután inicializálódik egy for hurok, amely 0 és 127 eszköz között keresi az I2C címet.

Az I2C cím beolvasása után a kimenet HEX formátumban kerül kinyomtatásra a soros monitorra.

Hardver

Itt láthatjuk, hogy az OLED 0,96 hüvelykes I2C kijelző az ESP32 kártyához csatlakozik a GPIO 21-es és 22-es érintkezőjén. A kijelző Vcc és GND-je az ESP32 3V3 és GND érintkezőivel csatlakozik.

Kimenet
A kimeneten az ESP32 kártyára csatlakoztatott OLED kijelző I2C címét láthatjuk. Itt az I2C-cím 0X3C, így nem használhatunk más I2C-eszközt ugyanazzal a címmel, ehhez először ennek az eszköznek az I2C-címét kell megváltoztatnunk.

Sikeresen megszereztük az ESP32 kártyához csatlakoztatott OLED kijelző I2C címét.

Következtetés

Az I2C-cím megkeresése több eszköz ESP32-vel történő csatlakoztatása közben is fontos, mivel az azonos I2C-címmel rendelkező eszközöket nem lehet egyetlen I2C-buszon keresztül csatlakoztatni. A fenti kód segítségével azonosítható az I2C cím, és ha bármelyik két eszköz címe megegyezik, az az eszköz specifikációitól függően módosítható.