- Kas yra „I2C“ ryšio protokolas?
- Reikalingos medžiagos
- I2C modulis
- Grandinės schema
- „I2C“ valdiklio adreso radimo kodas
- ESP32 kodas
Ankstesnėje mokymo programoje OLED yra susieta su ESP32 naudojant SPI ryšį, kuriame naudojami 5 kontaktai. Šioje pamokoje mes sujungiame 16x2 skystųjų kristalų ekraną su ESP32, naudodami tik 2 kaiščius, naudodami I2C ryšį. Tai sumažina ESP32 naudojamų kaiščių skaičių, todėl daugiau ESP32 kaiščių lieka laisvi skirtingų jutiklių sąsajai.
Kas yra „I2C“ ryšio protokolas?
Terminas I2C reiškia „ Inter Integrated Circuits“. Kai kuriose vietose jis paprastai žymimas kaip IIC arba I kvadratas arba net kaip 2 laidų sąsajos protokolas (TWI), tačiau visa tai reiškia tą patį. „I2C“ yra sinchroninio ryšio protokolas, tai reiškia, kad abu prietaisai, kurie dalijasi informacija, turi turėti bendrą laikrodžio signalą. Ji turi tik du laidus - SDA ir SCL dalytis informacija. Iš jų SCL naudojamas laikrodžio signalui, o SDA - duomenims siųsti ir priimti.
Galite nusipirkti „I2C“ LCD modulį, kuriame įmontuotas „I2C1602“ LCD valdiklis, arba galite tiesiog nusipirkti „I2C“ valdiklį, kuris valdys 16x2 LCD ekraną su ESP32.
Reikalingos medžiagos
- ESP32
- 16 * 2 LCD ekranas
- I2C LCD valdiklis
- Laidai
- Bandomoji Lenta
I2C modulis
„I2C“ valdiklyje yra IC PCF8574, užtikrinantis bendros paskirties nuotolinį įvesties / išvesties išplėtimą per dviejų laidų dvikryptį I2C magistralės nuoseklųjį laikrodį (SCL) ir nuoseklius duomenis (SDA). Tai yra labai naudinga IC ir gali būti naudojama LED ženklų lentose, ekranuose, klaviatūrose, pramoniniame valdyme ir kt. Yra 8 įvesties / išvesties kaiščiai, 3 kaiščiai (A0, A1, A2) I2C magistralės adresams ir SDA, SCL kaiščiai.
LCD valdiklio plokštėje yra įmontuotas potenciometras, skirtas valdyti LCD kontrastą.
Toliau pateikiamos IC ir LCD valdiklio kaiščių diagramos.
Grandinės schema
Jungtys, skirtos susieti LCD ekraną su ESP32, pateiktos žemiau
- prijunkite I2C modulio 1-16 kontaktą prie LCD ekrano 1-16 kontaktų.
- I2C modulio SDA kaištis -> ESP32, ty D21, SDA kaištis
- „I2C“ modulio SCL kaištis -> ESP32, ty D22, SCL kaištis
Aš prijungiau 3 V ESP32 prie 5 V I2C tik demonstravimui, bet mums reikia 5 V maitinimo, kad „I2C“ modulis tinkamai rodytų duomenis, nes „ESP32“ gali suteikti tik 3,3 voltus, o tai „I2C“ moduliui yra mažai ir duomenys nebus aiškiai matomi. Taigi, geriau naudoti išorinį 5 V maitinimą.
Mums reikia plokštės failų, skirtų ESP32, taigi, jei dar nesinaudojote ESP32, pirmiausia vadovaukitės „Pradėti naudoti ESP32 pamoka“ ir tada grįžkite čia. Taip pat galite prijungti skystųjų kristalų ekraną su ESP32 be „I2C“, tačiau tam reikės daugiau ESP32 kaiščių.
„I2C“ valdiklio adreso radimo kodas
Prieš eidami į pagrindinį kodą, pirmiausia turime rasti I2C modulio adresą.
I2C valdiklis turi integruotą ADDRESS bitą, kuris naudojamas valdyti I2C magistralę. Numatytasis ADDRESS yra 0x27, tačiau kai kuriais atvejais jis gali būti 0x3f. Taigi, norėdami patikrinti I2C valdiklio adresą, prijunkite grandinę, kaip parodyta aukščiau, įkelkite žemiau pateiktą kodą ir atidarykite nuoseklųjį monitorių. Adresą pamatysite šešioliktainiu skaičiumi.
# įtraukti
Atkreipkite dėmesį, kad šį adresą naudojame savo LCD sąsajos kode.
I2C valdiklyje, kaip matote, yra trys džemperiai / litavimo kaladėlės, pažymėtos A0, A1 ir A2. Jie naudojami modulio adresui pakeisti. Štai kaip adresas pasikeičia nuo numatytosios vertės 0x27 arba 0x3F, jei adresų bloknotus sujungiate kartu. (1 = neprijungtas. 0 = prijungtas):
A0 |
A1 |
A2 |
HEX adresas |
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 |
ESP32 kodas
Pirmiausia mums reikia bibliotekos „ LiquidCrystal_I2C“, skirtos I2C LCD moduliui. Įprasta „ Liquidcrsytal“ biblioteka neveiks, nes čia naudojame „I2C“.
Atsisiųskite biblioteką iš šios
Kodas parašytas taip, kad viskas, kas įvesta serijiniame monitoriuje, bus rodoma LCD. „Arduino IDE“ buvo naudojamas mūsų kodui rašyti ir įkelti.
Pirma, mes turime įtraukti laidų biblioteką „I2C“ ryšiui, kuris ateina su „ Arduino IDE“.
# įtraukti
Tada į „I2C LCD“ įtraukite anksčiau atsisiųstą „ LiquidCrystal_I2C.h“.
# įtraukti
Tada nustatykite LCD I2C adresą į 0x27 arba adresą, kurį gavote paleisdami aukščiau pateiktą skaitytuvo kodą 16 simbolių 2 eilutės ekrane
LiquidCrystal_I2C lcd (0x27, 16,2);
Naudodamiesi sąrankos funkcija, pradėkite 16 simbolių 2 eilučių nuoseklųjį ryšį ir LCD ekraną ir įjunkite apšvietimą. Jei norite išjungti apšvietimą, naudokite lcd .noBacklight () ir pakeiskite setCursor () funkciją pagal savo pageidavimus.
negaliojanti sąranka () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Sveikas, pasauli!"); vėlavimas (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); vėlavimas (3000);
Pirmiausia skystųjų kristalų ekrane bus rodomos instrukcijos, kaip naudoti „Serial Monitor“, ir įveskite rodomus simbolius.
Nustatykite „Serial Monitor“ parinktį į „No Line Ending“
lcd.clear (); lcd.setCursor (0,0); lcd.print („Use Ser. Monitor“); lcd.setCursor (0,1); lcd.print ("Tipas rodyti"); }
ciklo funkcija, naudodama „ Serial.available (“) funkciją, nuolat tikrins, ar iš serijos prievado gaunami nuoseklūs duomenys. Jei yra pranešimas, jis palaukia sekundę ir išspausdina pranešimą LCD, naudodamasis lcd .write () ir Serial.read () funkcijomis.
void loop () {{// kai simboliai atkeliauja per nuoseklųjį prievadą… if (Serial.available ()) {delay (100); // šiek tiek palaukite, kol atkeliaus visas pranešimas lcd.clear (); // išvalyti ekraną, kol (Serial.available ()> 0) {// perskaityti visus galimus simbolius lcd.write (Serial.read ()); // kiekvieną simbolį rodyti skystųjų kristalų ekrane}}}}
Konkurso kodas pateiktas žemiau, todėl įkelkite kodą ir atidarykite nuoseklųjį monitorių. Tada įveskite pranešimą ir paspauskite „Enter“. Jūsų pranešimas bus rodomas LCD.
Jei LCD ekrane nerandate tinkamo atsakymo arba neatsakote, patikrinkite I2C valdiklio adresą arba nuskaitykite jį dar kartą naudodami aukščiau pateiktą kodą, kad gautumėte teisingą adresą.