- Ano ang I2C Communication Protocol?
- Mga Materyal na Kinakailangan
- I2C Modyul
- Diagram ng circuit
- Code para sa paghahanap ng I2C Controller Address
- Code para sa ESP32
Sa nakaraang tutorial, ang OLED ay naka-interfaced sa ESP32 gamit ang SPI na komunikasyon na gumagamit ng 5 mga pin. Sa tutorial na ito, nakikipag-ugnay kami sa 16x2 LCD sa ESP32, gumagamit lamang ng 2 mga pin, sa tulong ng komunikasyon ng I2C. Binabawasan nito ang bilang ng mga pin na ginamit ng ESP32 upang mas maraming bilang ng mga ESP32 na pin ang mananatiling libre para sa pag-interfacing ng iba't ibang mga sensor.
Ano ang I2C Communication Protocol?
Ang term na I2C ay nangangahulugang " Inter Integrated Circuits". Karaniwan itong tinukoy bilang IIC o I-square C o kahit na bilang 2-wire interface protocol (TWI) sa ilang mga lugar ngunit pareho ang ibig sabihin nito. Ang I2C ay isang magkasabay na protocol ng komunikasyon, nangangahulugang kapwa ang mga aparato na nagbabahagi ng impormasyon ay dapat magbahagi ng isang karaniwang signal ng orasan. Mayroon lamang itong dalawang wires, SDA at SCL upang magbahagi ng impormasyon, kung saan ginagamit ang SCL para sa signal ng orasan at ginagamit ang SDA para sa pagpapadala at pagtanggap ng data.
Maaari kang bumili ng module ng I2C LCD kung saan ang I2C1602 LCD Controller ay inbuilt o maaari mo lamang bilhin ang I2C controller upang i-interface ang 16x2 LCD sa ESP32.
Mga Materyal na Kinakailangan
- ESP32
- 16 * 2 LCD display
- I2C LCD Controller
- Mga wire
- Breadboard
I2C Modyul
Ang I2C controller ay may isang IC PCF8574 na nagbibigay ng pangkalahatang-layunin na remote I / O na pagpapalawak sa pamamagitan ng two-wire bidirectional I2C-bus serial clock (SCL) at serial data (SDA). Napaka kapaki-pakinabang ng IC at maaaring magamit sa mga LED sign board, display, Key pad, Industrial control, atbp. Mayroong 8 I / O pin, 3 pin (A0, A1, A2) para sa I2C bus address at SDA, SCL pins.
Ang LCD board board ay may isang built-in na potensyomiter upang makontrol ang kaibahan ng LCD.
Ang mga diagram ng pin ng IC at LCD controller ay ibinibigay sa ibaba.
Diagram ng circuit
Ang mga koneksyon para sa interfacing LCD sa ESP32 ay ibinibigay sa ibaba
- ikonekta ang pin 1-16 ng module ng I2C upang i-pin ang 1-16 ng LCD display.
- SDA pin ng I2C module -> SDA pin ng ESP32 ie D21
- SCL pin ng I2C module -> SCL pin ng ESP32 ie D22
Nakakonekta ako sa 3v ng ESP32 sa 5v ng I2C para sa pagpapakita lamang ngunit kailangan namin ng 5V supply para sa module na I2C upang maipakita nang maayos ang data, dahil ang ESP32 ay maaari lamang magbigay ng 3.3 volts na mababa para sa module ng I2C at hindi malinaw na makikita ang data. Kaya, mas mahusay na gumamit ng panlabas na 5V supply.
Kailangan namin ng mga board file para sa ESP32, kaya kung bago ka sa ESP32 pagkatapos ay sundin muna ang Pagsisimula sa Tutorial sa ESP32 at pagkatapos ay tumalon pabalik dito. Maaari mo ring ikonekta ang LCD sa ESP32 nang walang I2C ngunit tatagal ito ng higit pang mga pin ng ESP32.
Code para sa paghahanap ng I2C Controller Address
Bago pumunta sa pangunahing code kailangan muna nating hanapin ang address ng module na I2C.
Ang I2C controller ay may built inbuilt na ADDRESS na ginagamit upang makontrol ang I2C bus. Ang default na ADDRESS ay 0x27 ngunit sa ilang mga kaso maaari itong maging 0x3f. Kaya, upang suriin ang address ng I2C controller, ikonekta ang circuit tulad ng ipinapakita sa itaas i-upload ang ibinigay na code sa ibaba at buksan ang serial monitor, Makikita mo ang address sa hexadecimal.
# isama
Tandaan na ginagamit namin ang Address na ito sa aming LCD interface code.
Sa I2C controller, tulad ng makikita mo mayroong tatlong mga jumpers / soldering pad na may label na A0, A1 at A2. Ginagamit ang mga ito upang baguhin ang address ng modyul. Narito kung paano nagbabago ang address mula sa default na halaga na 0x27 o 0x3F, kung ikinonekta mo ang mga address pad. (1 = Hindi Nakakonekta. 0 = Nakakonekta):
A0 |
A1 |
A2 |
HEX Address |
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 |
Code para sa ESP32
Una kailangan namin ng isang library LiquidCrystal_I2C para sa I2C LCD module. Hindi gagana ang ordinaryong library ng Liquidcrsytal sapagkat gumagamit kami ng I2C dito.
Mag-download ng library mula sa
Ang code ay nakasulat sa paraang kahit anong nai-type sa serial monitor, ipapakita sa LCD. Ginamit ang Arduino IDE upang magsulat at mag-upload ng aming code.
Una, kailangan naming isama ang wire library para sa komunikasyon ng I2C na kasama ng Arduino IDE.
# isama
Pagkatapos para sa I2C LCD, isama ang LiquidCrystal_I2C.h na na-download nang mas maaga.
# isama
Pagkatapos itakda ang LCD I2C address sa 0x27 o ang address na nakuha mo sa pamamagitan ng pagpapatakbo ng scanner code na ibinigay sa itaas para sa isang 16 chars 2 line display
LiquidCrystal_I2C lcd (0x27, 16,2);
Sa pag- andar ng pag- setup , simulan ang serial komunikasyon at LCD para sa 16 chars 2 na linya at i-on ang backlight. Kung nais mong patayin ang backlight gumamit ng lcd .noBacklight () at baguhin ang pagpapaandar ng setCursor () alinsunod sa iyong kagustuhan.
void setup () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Kumusta, mundo!"); pagkaantala (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); pagkaantala (3000);
Ipapakita muna ng LCD ang mga tagubilin upang magamit ang Serial Monitor at i-type ang mga character upang ipakita.
Itakda ang pagpipiliang Serial Monitor sa "Walang Pagtatapos ng Linya"
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Gumamit ng Ser. Monitor"); lcd.setCursor (0,1); lcd.print ("Uri upang ipakita"); }
tuluy-tuloy na pag-andar ng loop para sa anumang papasok na serial data mula sa serial port gamit ang Serial.available () function. Kung mayroong isang mensahe, maghintay ito para sa pangalawa at i-print ang mensahe sa LCD gamit ang lcd .write () at Serial.read () na mga function.
void loop () {{// kapag dumating ang mga character sa serial port… kung (Serial.available ()) {pagkaantala (100); // maghintay ng kaunti para sa buong mensahe na dumating lcd.clear (); // limasin ang screen habang (Serial.available ()> 0) {// basahin ang lahat ng mga magagamit na character lcd.write (Serial.read ()); // ipakita ang bawat character sa LCD}}}}
Ang Compete Code ay ibinibigay sa ibaba, kaya i-upload ang code at buksan ang serial monitor. Pagkatapos i-type ang mensahe at pindutin ang enter. Ang iyong mensahe ay ipapakita sa LCD.
Kung hindi ka nakakakuha ng maayos o walang tugon sa LCD pagkatapos suriin ang iyong I2C address ng controller o i-scan ito muli gamit ang nabigay na code sa itaas upang makuha ang tamang address.