Cara Mengimbas Alamat I2C dalam ESP32 Menggunakan Arduino IDE

Cara Mengimbas Alamat I2c Dalam Esp32 Menggunakan Arduino Ide



ESP32 ialah platform berasaskan mikropengawal yang boleh antara muka dengan beberapa peranti untuk mengawal output yang berbeza mengikut input. Semua protokol komunikasi seperti UART, SPI dan I2C memainkan peranan penting dalam komunikasi ESP32. Kami akan membincangkan protokol komunikasi Inter Integrated Circuit atau I2C dalam panduan ini dan cara mengimbas alamat peranti.

Pengenalan kepada Komunikasi I2C

I2C secara alternatif dikenali sebagai I2C atau IIC ialah protokol komunikasi induk-hamba segerak di mana peranti induk isyarat boleh mengawal berbilang bilangan peranti hamba melalui satu wayar (talian SDA).

I2C menggabungkan kerja protokol UART dan SPI contohnya SPI menyokong berbilang peranti hamba kawalan ke atas satu induk, I2C juga menyokong ini sebaliknya UART menggunakan dua talian TX dan Rx untuk komunikasi I2C juga menggunakan dua talian SDA dan SCL untuk komunikasi.









Di sini kita dapat melihat bahawa kita telah menggunakan perintang tarik ke atas dengan kedua-dua garisan SDA, SCL. Ini kerana secara lalai I2C hanya mengeluarkan dua tahap sama ada litar RENDAH atau terbuka. Secara lalai, I2C pada semua cip berada dalam mod litar terbuka jadi untuk menariknya HIGH kami menggunakan perintang tarik naik.



Berikut ialah dua baris yang digunakan I2C:





  • SDA (Data Bersiri) : Talian untuk menghantar dan menerima data daripada tuan kepada hamba dan sebaliknya
  • SCL (Jam Bersiri) : Garis isyarat jam untuk memilih peranti hamba tertentu

Antara Muka Bas ESP32 I2C

ESP32 menampilkan dua antara muka bas I2C yang menggunakan komunikasi I2C yang dilakukan sama ada sebagai induk atau hamba bergantung pada peranti yang disambungkan dengan ESP32. Menurut lembaran data ESP32, antara muka I2C papan ESP32 menyokong konfigurasi berikut:

  • Komunikasi I2C mod standard pada kadar 100 Kbit/s
  • Komunikasi I2C mod pantas atau lanjutan pada kelajuan 400 Kbit/s
  • Mod pengalamatan dwi 7-bit dan 10-bit
  • Pengguna boleh mengawal antara muka I2C dengan memprogramkan daftar arahan
  • Antara muka bas ESP32 I2C adalah lebih fleksibel dalam mengawal

Menyambungkan Peranti I2C dengan ESP32

Mengantaramuka peranti dengan ESP32 menggunakan protokol I2C adalah sangat mudah seperti UART kita hanya memerlukan dua talian untuk menyambung SDA dan garis jam SCL.



ESP32 boleh dikonfigurasikan sebagai kedua-dua dalam mod Master dan Slave.

Mod Induk ESP32 I2C

Dalam mod ini ESP32 menjana isyarat jam digunakan yang memulakan komunikasi dengan peranti hamba yang disambungkan.

Dua pin GPIO dalam ESP32 yang telah ditetapkan untuk komunikasi I2C:

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

Mod Hamba ESP32 I2C

Dalam mod hamba jam dijana oleh peranti induk. Master ialah satu-satunya peranti yang memacu talian SCL dalam komunikasi I2C. Hamba ialah peranti yang bertindak balas kepada tuan tetapi tidak boleh memulakan pemindahan data. Dalam bas ESP32 I2C hanya tuan boleh memulakan pemindahan data antara peranti.

Imej menunjukkan dua papan ESP32 dalam konfigurasi tuan-hamba.

Setakat ini kami telah memahami cara kerja mod I2C dalam ESP32 kini kami boleh mencari alamat I2C mana-mana peranti dengan mudah dengan memuat naik kod yang diberikan.

Cara Mengimbas Alamat I2C dalam ESP32 Menggunakan Arduino IDE

Mencari alamat I2C peranti yang disambungkan dengan ESP32 adalah penting kerana jika kami menggunakan peranti dengan alamat I2C yang sama maka kami tidak boleh berkomunikasi dengan mereka melalui satu laluan bas.

Setiap peranti I2C mesti mengandungi alamat unik dan julat alamat dari 0 hingga 127 atau (0 hingga 0X7F) dalam HEX. Contohnya, jika kami menggunakan dua paparan OLED dengan nombor model atau produk yang sama, kedua-duanya akan mempunyai alamat I2C yang sama jadi kami tidak boleh menggunakan kedua-duanya pada talian I2C yang sama dalam ESP32.

Untuk mencari alamat IC mari kita ambil contoh.

Skema

Imej di bawah menunjukkan rajah skema antara muka paparan OLED dengan papan ESP32 menggunakan protokol komunikasi I2C.

Sambungan ESP32 dengan OLED termasuk:

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

Kod
Buka editor Arduino dan muat naik kod pengimbasan I2C yang diberikan dalam papan ESP32. Pastikan ESP32 disambungkan dan port COM dipilih.

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

#include  /*Pustaka Wire Termasuk*/

persediaan kosong ( ) {
Kawat.mula ( ) ; /* Komunikasi I2C bermula */
Bersiri.mulakan ( 115200 ) ; /* Kadar Baud ditakrifkan untuk komunikasi bersiri */
Serial.println ( ' \n Pengimbas I2C' ) ; /* pengimbas cetakan pada monitor bersiri */
}

gelung kosong ( ) {
ralat bait, alamat;
int nPeranti;
Serial.println ( 'Mengimbas...' ) ; /* ESP32 mula mengimbas peranti I2C yang tersedia */
nPeranti = 0 ;
untuk ( alamat = 1 ; alamat < 127 ; alamat++ ) { /* untuk gelung untuk menyemak bilangan peranti dihidupkan 127 alamat */
Wire.beginTransmission ( alamat ) ;
ralat = Wire.endTransmission ( ) ;
jika ( ralat == 0 ) { /* jika Peranti I2C ditemui */
Bersiri.cetak ( 'Peranti I2C ditemui di alamat 0x' ) ; /* cetak baris ini jika Peranti I2C ditemui */
jika ( alamat < 16 ) {
Bersiri.cetak ( '0' ) ;
}
Serial.println ( alamat,HEX ) ; /* mencetak nilai HEX alamat I2C */
nPeranti++;
}
lain jika ( ralat == 4 ) {
Bersiri.cetak ( 'Ralat tidak diketahui di alamat 0x' ) ;
jika ( alamat < 16 ) {
Bersiri.cetak ( '0' ) ;
}
Serial.println ( alamat,HEX ) ;
}
}
jika ( nPeranti == 0 ) {
Serial.println ( 'Tiada peranti I2C ditemui \n ' ) ; /* Jika tiada peranti I2C dilampirkan cetak mesej ini */
}
lain {
Serial.println ( 'selesai \n ' ) ;
}
kelewatan ( 5000 ) ; /* Kelewatan diberi untuk memeriksa bas I2C setiap 5 sec */
}

Kod di atas akan mengimbas peranti I2C yang tersedia. Kod bermula dengan memanggil perpustakaan wayar untuk komunikasi I2C. Komunikasi bersiri seterusnya dimulakan menggunakan kadar baud.

Dalam bahagian gelung kod pengimbasan I2C dua nama pembolehubah, ralat dan alamat ditakrifkan. Kedua-dua pembolehubah ini menyimpan alamat I2C peranti. Seterusnya gelung untuk dimulakan yang akan mengimbas alamat I2C bermula dari 0 hingga 127 peranti.

Selepas membaca alamat I2C output dicetak pada monitor bersiri dalam format HEX.

Perkakasan

Di sini kita dapat melihat paparan I2C OLED 0.96-inci disambungkan ke papan ESP32 pada pin GPIO 21 dan 22. Vcc dan GND paparan disambungkan dengan ESP32 3V3 dan pin GND.

Pengeluaran
Dalam output kita dapat melihat alamat I2C paparan OLED yang disambungkan ke papan ESP32. Di sini alamat I2C ialah 0X3C jadi kami tidak boleh menggunakan mana-mana peranti I2C lain dengan alamat yang sama untuk itu kami perlu menukar alamat I2C peranti itu terlebih dahulu.

Kami telah berjaya mendapatkan alamat I2C paparan OLED yang disambungkan dengan papan ESP32.

Kesimpulan

Mencari alamat I2C semasa menyambungkan berbilang peranti dengan ESP32 adalah penting kerana peranti yang berkongsi alamat I2C yang sama tidak boleh disambungkan melalui bas I2C tunggal. Menggunakan kod di atas seseorang boleh mengenal pasti alamat I2C dan jika alamat mana-mana dua peranti sepadan, ia boleh ditukar sewajarnya bergantung pada spesifikasi peranti.