- Apa itu Protokol Komunikasi I2C?
- Bahan yang Diperlukan
- Modul I2C
- Gambarajah litar
- Kod untuk mencari Alamat Pengawal I2C
- Kod untuk ESP32
Dalam tutorial sebelumnya, OLED dihubungkan dengan ESP32 menggunakan komunikasi SPI yang menggunakan 5 pin. Dalam tutorial ini, kami menghubungkan antara muka LCD 16x2 dengan ESP32, hanya menggunakan 2 pin, dengan bantuan komunikasi I2C. Ini mengurangkan bilangan pin yang digunakan oleh ESP32 sehingga lebih banyak bilangan pin ESP32 tetap bebas untuk menghubungkan sensor yang berbeza.
Apa itu Protokol Komunikasi I2C?
Istilah I2C bermaksud " Inter Integrated Circuits". Biasanya dilambangkan sebagai IIC atau I kuadrat C atau bahkan sebagai protokol antara muka 2-wayar (TWI) di beberapa tempat tetapi semuanya bererti sama. I2C adalah protokol komunikasi segerak, yang bermaksud kedua-dua peranti yang berkongsi maklumat mesti berkongsi isyarat jam yang sama. Ia hanya mempunyai dua kabel, SDA dan SCL untuk berkongsi maklumat, dari mana SCL digunakan untuk isyarat jam dan SDA digunakan untuk mengirim dan menerima data.
Anda boleh membeli modul LCD I2C di mana Pengawal LCD I2C1602 sudah terpasang atau anda boleh membeli alat kawalan I2C untuk menghubungkan antara LCD 16x2 dengan ESP32.
Bahan yang Diperlukan
- ESP32
- Paparan LCD 16 * 2
- Pengawal LCD I2C
- Wayar
- Papan roti
Modul I2C
Pengawal I2C mempunyai IC PCF8574 yang menyediakan pengembangan I / O jarak jauh tujuan am melalui jam bersiri I2C-bus dua arah (SCL) dan data bersiri (SDA) dua wayar. IC ini sangat berguna dan boleh digunakan di papan tanda LED, paparan, pad kekunci, kawalan industri, dll. Terdapat 8 pin I / O, 3 pin (A0, A1, A2) untuk alamat bas I2C dan pin SDA, SCL.
Papan pengawal LCD mempunyai potensiometer terbina dalam untuk mengawal kontras LCD.
Gambarajah pin pengawal IC dan LCD diberikan di bawah.
Gambarajah litar
Sambungan untuk menghubungkan LCD dengan ESP32 diberikan di bawah
- sambungkan pin 1-16 modul I2C ke pin 1-16 paparan LCD.
- Pin SDA modul I2C -> Pin SDA ESP32 iaitu D21
- Pin SCL modul I2C -> Pin SCL ESP32 iaitu D22
Saya telah menghubungkan 3v ESP32 hingga 5v I2C untuk demonstrasi sahaja tetapi kami memerlukan bekalan 5V untuk modul I2C untuk memaparkan data dengan betul, kerana ESP32 hanya dapat memberikan 3.3 volt yang rendah untuk modul I2C dan data tidak akan dapat dilihat dengan jelas. Jadi, lebih baik menggunakan bekalan 5V luaran.
Kami memerlukan fail papan untuk ESP32, jadi jika anda baru menggunakan ESP32, mulailah mengikuti Tutorial Bermula dengan ESP32 dan kemudian kembali ke sini. Anda juga boleh menyambungkan LCD dengan ESP32 tanpa I2C tetapi ia memerlukan lebih banyak pin ESP32.
Kod untuk mencari Alamat Pengawal I2C
Sebelum masuk ke kod utama, kita mesti terlebih dahulu mencari alamat modul I2C.
Pengawal I2C mempunyai bit ADDRESS inbuilt yang digunakan untuk mengawal bas I2C. ALAMAT lalai adalah 0x27 tetapi dalam beberapa kes boleh menjadi 0x3f. Oleh itu, untuk memeriksa alamat pengawal I2C, sambungkan litar seperti yang ditunjukkan di atas muat naik kod yang diberikan di bawah ini dan buka monitor bersiri, Anda akan melihat alamatnya dalam heksadesimal.
#sertakan
Perhatikan bahawa kami menggunakan Alamat ini dalam kod antara muka LCD kami.
Dalam pengawal I2C, seperti yang anda lihat terdapat tiga jumper / soldering pad yang dilabelkan sebagai A0, A1 dan A2. Ini digunakan untuk menukar alamat modul. Inilah cara perubahan alamat dari nilai lalai 0x27 atau 0x3F, jika anda menyambungkan pad alamat. (1 = Tidak Bersambung. 0 = Bersambung)
A0 |
A1 |
A2 |
Alamat HEX |
1 |
1 |
1 |
0x27 |
0 |
1 |
1 |
0x26 |
1 |
0 |
1 |
0x25 |
0 |
0 |
1 |
0x24 |
1 |
1 |
0 |
0x23 |
0 |
1 |
0 |
0x22 |
1 |
0 |
0 |
0x21 |
0 |
0 |
0 |
0x20 |
Kod untuk ESP32
Mula-mula kita memerlukan perpustakaan LiquidCrystal_I2C untuk modul LCD I2C. Perpustakaan Liquidcrsytal Biasa tidak akan berfungsi kerana kami menggunakan I2C di sini.
Muat turun perpustakaan dari https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library ini
Kod tersebut ditulis sedemikian rupa sehingga apa pun yang ditaip pada monitor bersiri, akan dipaparkan di LCD. Arduino IDE telah digunakan untuk menulis dan memuat naik kod kami.
Pertama, kita mesti memasukkan perpustakaan wayar untuk komunikasi I2C yang disertakan dengan Arduino IDE.
#sertakan
Kemudian untuk I2C LCD, sertakan LiquidCrystal_I2C.h yang dimuat turun lebih awal.
#sertakan
Kemudian tetapkan alamat LCD I2C ke 0x27 atau alamat yang anda dapat dengan menjalankan kod pengimbas yang diberikan di atas untuk paparan baris 16 karakter 2
LiquidCrystal_I2C lcd (0x27, 16,2);
Dalam fungsi persediaan , mulakan komunikasi bersiri dan LCD untuk 16 bar 2 baris dan hidupkan lampu latar. Sekiranya anda ingin mematikan lampu latar, gunakan lcd .noBacklight () dan ubah fungsi setCursor () mengikut pilihan anda.
persediaan tidak sah () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Helo, dunia!"); kelewatan (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); kelewatan (3000);
LCD akan memaparkan terlebih dahulu arahan untuk menggunakan Monitor Serial dan menaip watak yang akan dipaparkan.
Tetapkan pilihan Monitor Bersiri ke "Tanpa Garisan Berakhir"
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Gunakan Ser. Monitor"); lcd.setCursor (0,1); lcd.print ("Jenis untuk dipaparkan"); }
fungsi gelung akan memeriksa berterusan bagi sebarang data bersiri yang masuk dari port bersiri menggunakan fungsi Serial.available (). Sekiranya ada mesej, tunggu sebentar dan cetak mesej di LCD menggunakan fungsi lcd .write () dan Serial.read ().
gelung kekosongan () {{// apabila watak tiba di atas port bersiri… if (Serial.available ()) {delay (100); // tunggu sebentar sehingga keseluruhan mesej tiba lcd.clear (); // kosongkan skrin semasa (Serial.available ()> 0) {// baca semua watak yang ada lcd.write (Serial.read ()); // paparkan setiap watak ke LCD}}}}
Kod Bersaing diberikan di bawah, jadi muat naik kod dan buka monitor bersiri. Kemudian taipkan mesej dan tekan enter. Mesej anda akan dipaparkan di LCD.
Sekiranya anda tidak mendapat respons yang tepat atau tidak ada pada LCD, periksa alamat pengawal I2C anda atau imbasnya semula dengan kod yang diberikan di atas untuk mendapatkan alamat yang betul.