Kuinka skannata I2C-osoite ESP32:ssa Arduino IDE:n avulla

Kuinka Skannata I2c Osoite Esp32 Ssa Arduino Ide N Avulla



ESP32 on mikrokontrolleripohjainen alusta, joka voi liittää useisiin laitteisiin eri lähtöjen ohjaamiseksi tulon mukaan. Kaikilla viestintäprotokollikoilla, kuten UART, SPI ja I2C, on merkittävä rooli ESP32-viestinnässä. Keskustelemme tässä oppaassa Interintegrated Circuit- tai I2C-viestintäprotokollasta ja laitteen osoitteen skannaamisesta.

Johdatus I2C-viestintään

I2C, joka tunnetaan myös nimellä I2C tai IIC, on synkroninen isäntä-orja-kommunikaatioprotokolla, jossa signaalin isäntälaite voi ohjata useita orjalaitteita yhden johdon (SDA-linjan) kautta.

I2C yhdistää UART- ja SPI-protokollien toiminnan, esimerkiksi SPI tukee useiden orjalaitteiden ohjausta yhden isäntälaitteen kautta, I2C tukee myös tätä, toisaalta UART käyttää kaksilinjaista TX- ja Rx-yhteyttä viestintään. I2C käyttää myös kaksirivistä SDA:ta ja SCL:ää viestintää.









Tässä voimme nähdä, että olemme käyttäneet vetovastuksia sekä SDA- että SCL-linjoilla. Tämä johtuu siitä, että oletusarvoisesti I2C tuottaa vain kaksi tasoa joko LOW- tai avoimen piirin. Oletuksena kaikkien sirujen I2C on avoimen piirin tilassa, joten käytimme vetovastusta nostaaksemme ne KORKEALLA.



Seuraavassa on kaksi I2C:n käyttämää riviä:





  • SDA (sarjatiedot) : Linja tiedon lähettämiseen ja vastaanottamiseen isännältä orjalle ja päinvastoin
  • SCL (sarjakello) : Kellon signaalilinja tietyn orjalaitteen valitsemiseksi

ESP32 I2C -väyläliitännät

ESP32:ssa on kaksi I2C-väyläliitäntää, joiden avulla I2C-tiedonsiirto suoritetaan joko isäntänä tai orjana riippuen laitteesta, joka on liitetty ESP32:een. ESP32-tietolomakkeen mukaan ESP32-kortin I2C-liitäntä tukee seuraavia kokoonpanoja:

  • Vakiomuotoinen I2C-viestintä nopeudella 100 Kbit/s
  • Nopea tai edistynyt I2C-viestintä nopeudella 400 Kbit/s
  • Kaksoisosoitetila, 7-bittinen ja 10-bittinen
  • Käyttäjät voivat ohjata I2C-liitäntää ohjelmoimalla komentorekistereitä
  • ESP32 I2C -väyläliitäntä on joustavampi ohjauksessa

I2C-laitteiden yhdistäminen ESP32:lla

Laitteiden liittäminen ESP32:een I2C-protokollaa käyttäen on hyvin yksinkertaista, aivan kuten UART, tarvitsemme vain kaksi linjaa SDA:n ja SCL-kellolinjan yhdistämiseen.



ESP32 voidaan konfiguroida sekä Master- että Slave-tilassa.

ESP32 I2C Master Mode

Tässä tilassa ESP32 generoi kellosignaalia, joka aloittaa tiedonsiirron kytkettyjen orjalaitteiden kanssa.

ESP32:n kaksi GPIO-nastaa, jotka on ennalta määritetty I2C-viestintää varten:

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

ESP32 I2C -orjatila

Orjatilassa kellon generoi isäntälaite. Master on ainoa laite, joka ohjaa SCL-linjaa I2C-viestinnässä. Orjat ovat laitteita, jotka vastaavat isännälle, mutta eivät voi aloittaa tiedonsiirtoa. ESP32 I2C -väylässä vain isäntä voi aloittaa tiedonsiirron laitteiden välillä.

Kuvassa kaksi ESP32-korttia master-slave-kokoonpanossa.

Tähän mennessä olemme ymmärtäneet I2C-tilan toiminnan ESP32:ssa, nyt voimme helposti löytää minkä tahansa laitteen I2C-osoitteen lataamalla annetun koodin.

Kuinka skannata I2C-osoite ESP32:ssa Arduino IDE:n avulla

ESP32:lla kytkettyjen laitteiden I2C-osoitteen löytäminen on tärkeää, koska jos käytämme laitteita, joilla on sama I2C-osoite, emme voi kommunikoida niiden kanssa yhden väylälinjan kautta.

Jokaisen I2C-laitteen tulee sisältää yksilöllinen osoite ja osoitealue 0-127 tai (0-0X7F) HEX-muodossa. Jos esimerkiksi käytämme kahta OLED-näyttöä, joilla on sama mallinumero tai tuote, molemmilla on sama I2C-osoite, joten emme voi käyttää molempia samalla I2C-linjalla ESP32:ssa.

Otetaan esimerkki IC-osoitteen löytämiseksi.

Kaaviomainen

Alla olevassa kuvassa on kaavio OLED-näytön liitännästä ESP32-korttiin I2C-tiedonsiirtoprotokollaa käyttäen.

ESP32:n liitäntä OLED:iin sisältää:

OLED-näyttö ESP32 Pin
VCC 3V3/VIN
GND GND
SCL GPIO 22
SDA GPIO 21

Koodi
Avaa Arduino-editori ja lataa annettu I2C-skannauskoodi ESP32-kortille. Varmista, että ESP32 on kytketty ja COM-portti on valittuna.

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

#include  /*Wire-kirjasto mukana*/

tyhjä asetus ( ) {
Wire.begin ( ) ; /* I2C-viestintä alkaa */
Serial.begin ( 115 200 ) ; /* Tiedonsiirtonopeus määritetty varten sarjaliikennettä */
Serial.println ( ' \n I2C skanneri' ) ; /* tulostaa skanneri sarjanäytössä */
}

tyhjä silmukka ( ) {
tavuvirhe, osoite;
int nLaitteet;
Serial.println ( 'Skannataan...' ) ; /* ESP32 aloittaa saatavilla olevien I2C-laitteiden skannauksen */
nLaitteet = 0 ;
varten ( osoite = 1 ; osoite < 127 ; osoite++ ) { /* varten silmukka tarkistaaksesi käytössä olevien laitteiden määrän 127 osoite */
Wire.beginTransmission ( osoite ) ;
error = Wire.endTransmission ( ) ;
jos ( virhe == 0 ) { /* jos I2C-laite löydetty */
Serial.print ( 'I2C-laite löytyi osoitteesta 0x' ) ; /* tulosta tämä rivi jos I2C-laite löydetty */
jos ( osoite < 16 ) {
Serial.print ( '0' ) ;
}
Serial.println ( osoite, HEX ) ; /* tulostaa I2C-osoitteen HEX-arvon */
nDevices++;
}
muu jos ( virhe == 4 ) {
Serial.print ( 'Tuntematon virhe osoitteessa 0x' ) ;
jos ( osoite < 16 ) {
Serial.print ( '0' ) ;
}
Serial.println ( osoite, HEX ) ;
}
}
jos ( nLaitteet == 0 ) {
Serial.println ( 'I2C-laitteita ei löytynyt \n ' ) ; /* Jos I2C-laitetta ei ole liitetty, tulosta tämä viesti */
}
muu {
Serial.println ( 'tehty \n ' ) ;
}
viive ( 5000 ) ; /* Viivästys annettu varten I2C-väylän tarkistus joka kerta 5 sek */
}

Yllä oleva koodi etsii käytettävissä olevia I2C-laitteita. Koodi aloitettiin soittamalla lankakirjastoon I2C-viestintää varten. Seuraava sarjaliikenne käynnistetään baudinopeudella.

I2C-skannauskoodin silmukkaosassa on kaksi muuttujan nimeä, virhe ja osoite määritellään. Nämä kaksi muuttujaa tallentavat laitteiden I2C-osoitteet. Seuraavaksi alustetaan for-silmukka, joka etsii I2C-osoitteen alkaen 0-127 laitteesta.

I2C-osoitteen lukemisen jälkeen tulos tulostetaan sarjanäytölle HEX-muodossa.

Laitteisto

Tässä näemme, että OLED 0,96 tuuman I2C-näyttö on kytketty ESP32-korttiin GPIO-nastoihin 21 ja 22. Näytön Vcc ja GND on kytketty ESP32 3V3- ja GND-nastalla.

Lähtö
Ulostulossa näemme ESP32-korttiin kytketyn OLED-näytön I2C-osoitteen. Tässä I2C-osoite on 0X3C, joten emme voi käyttää muita I2C-laitteita samalla osoitteella, jotta meidän on ensin vaihdettava kyseisen laitteen I2C-osoite.

Olemme saaneet onnistuneesti ESP32-korttiin liitetyn OLED-näytön I2C-osoitteen.

Johtopäätös

I2C-osoitteen löytäminen kytkettäessä useita laitteita ESP32:lla on tärkeää, koska laitteita, joilla on sama I2C-osoite, ei voida yhdistää yhden I2C-väylän kautta. Yllä olevaa koodia käyttämällä voidaan tunnistaa I2C-osoite ja jos minkä tahansa kahden laitteen osoite täsmää, sitä voidaan muuttaa vastaavasti laitteen teknisistä tiedoista riippuen.