วิธีใช้ liquidcrystal_i2c ร่วมกับ ESP32

การต่อใช้งานจอแสดงผล LCD DISPLAYS I2C ​​ขนาด 16×2  ร่วมกับ ESP32

<VDO อธิบายการใช้งาน LCD DISPLAYS I2C>

สำหรับมือใหม่ที่เริ่มใช้งาน ESP32 จอแสดงผลตัวเลือกอันดับแรกๆคงจะเป็น liquidcrystal_i2c ขนาด 16×2 เพราะข้อดีของจอ LCD I2C คือการต่อสายไฟที่ง่ายเพียงต่อเข้ากับพิน SDA , SCL

จอ LCD สามารถปรับความ Contrast พื้นหลังกับอักษร ด้วยปรับคา่ โพเทนชิออมิเตอร์ ที่อยู่ด้านหลังจอ LCD

จอแสดงผล liquidcrystal_i2c ปรับความเข้ม

หากยังไม่รู้จักความสามารถและโครงสร้างของบอร์ด ESP32 แนะนำให้อ่าน ESP32 คืออะไร ก่อน เพื่อเข้าใจภาพรวม

เหตุผลที่นิยมใช้ LCD I2C แทน LCD ธรรมดา (แบบขาเยอะ)

✅ 1. ใช้สายไฟน้อยกว่า

  • LCD ปกติ (16×2) ต้องใช้ อย่างน้อย 6–10 สาย ในการควบคุม (RS, E, D4–D7 ฯลฯ)
  • แต่ LCD I2C ใช้แค่ 2 เส้นเท่านั้น → SDA และ SCL

✨ ช่วยลดสายไฟในโปรเจกต์ได้เยอะมาก!

✅ 2. ใช้พอร์ต GPIO น้อย

  • ESP32 มี GPIO ไม่มาก ถ้าใช้จอแบบปกติจะกินพอร์ตไปหลายขา
  • แต่ I2C ใช้แค่ GPIO21 (SDA) และ GPIO22 (SCL) (หรือพอร์ตอื่นที่กำหนดเองได้)

✅ 3. ต่อหลายอุปกรณ์ I2C พร้อมกันได้

  • โปรโตคอล I2C รองรับการเชื่อมต่อหลายอุปกรณ์ในสายเดียวกัน
  • เช่น สามารถใช้ LCD + BH1750 + เซนเซอร์อื่น ๆ ที่ใช้ I2C ร่วมกันได้

✅ 4. ไลบรารีพร้อมใช้งาน

  • มีไลบรารีอย่าง LiquidCrystal_I2C ที่ใช้งานง่าย
  • เขียนโค้ดไม่กี่บรรทัดก็แสดงผลได้แล้ว

✅ 5. มีตัวปรับแสง (Contrast) ในตัว

  • ด้านหลังจอมักมี Potentiometer สำหรับปรับความเข้มของข้อความให้เหมาะกับแสงรอบข้าง

🧠 เหมาะกับใคร?

  • มือใหม่ที่เริ่มต้นกับ ESP32
  • คนทำโปรเจกต์ IoT หรือฟาร์มอัจฉริยะ
  • คนที่ต้องการลดความซับซ้อนของวงจร

การต่อสาย จอ LCD Display I2C ร่วมกับ ESP32

อย่างที่ได้กล่าวไปข้างต้นแล้วว่า LCD DISPLAYS I2C นั้นช่วยให้การต่อสายไฟเป็นเรื่องง่าย

การต่อสายไฟ LCD เข้ากับ ESP32 ต่อสายไฟตามรูปด้านล่างนี้ ESP32 ใช้พิน I2C เริ่มต้น GPIO21 และ GPIO22

LCD I2CESP32
GNDGND
VCCVIN
SDAGPIO21
SCLGPIO22

การต่อสาย จอ LCD Display I2C ร่วมกับ ESP32

ศึกษาแผนผังขา ESP32 Pinout Devkit V1 เพื่อเลือกใช้งาน GPIO ได้อย่างถูกต้อง

โปรแกรม Arduino IDE ร่วมกับ ESP32

ไลบรารี LiquidCrystal_I2C ใช้งานร่วมกับ จอ LCD I2C

ดาวน์โหลด ไลบรารี่ที่นี้

  1. คลายซิป โฟลเดอร์ .zip จะได้รับ โฟลเดอร์ LiquidCrystal_I2C-master
  2. เปลี่ยนชื่อโฟลเดอร์จาก LiquidCrystal_I2C-มาสเตอร์ เป็น LiquidCrystal_I2C
  3. ย้าย โฟลเดอร์ LiquidCrystal_I2C ไปยัง โฟลเดอร์ไลบรารี การติดตั้ง Arduino IDE

Address ของ จอ LCD (i2c address)

การสื่อสาร I2C อุปกรณ์ Master (ESP32 ) จำเป็นต้องรู้ที่อยู่ของอุปกรณ์(i2c address)ที่กำลังจะติดต่อ (Slave) LCD DISPLAY ก่อน

เมื่อต่อสายไฟตามรูปด้านบนเรียบร้อยแล้ว ขั้นตอนต่อไป อัปโหลดโค๊ดด้านล่างนี้เพื่อหาเลขแอดเดรสของ LCD DISPLAY I2C

/*
Deva DIY
www.devadiy.com
*/
#include "Wire.h"
 
void setup() {
Serial.begin(115200);
Wire.begin();
}
 
void loop() {
byte error, address;
int nDevices = 0;
 
delay(5000);
 
Serial.println("Scanning for I2C devices ...");
for(address = 0x01; address &lt;= 0x7f; address++){
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0){
Serial.printf("I2C device found at address 0x%02X\n", address);
nDevices++;
} else if(error != 2){
Serial.printf("Error %d at address 0x%02X\n", error, address);
}
}
if (nDevices == 0){
Serial.println("No I2C devices found");
}
}

🔥 ข้อควรรู้” เช่น:

  • LCD I2C address อาจไม่เท่ากันทุกจอ
  • ถ้าแสดงภาษาไทยอาจต้องใช้ไลบรารีอื่น

ให้เปิดหน้าต่าง Serial Monitor  จะแสดงที่อยู่ของ LCD DISPLAY I2C ADDRESS

หน้าต่าง Serial Monitor จะแสดงที่อยู่ของ LCD DISPLAY I2C ADDRESS


 

 แสดงข้อความบนจอ LCD I2C แบบข้อความคงที่

สิ่งแรกที่ต้องทำ คือ การระบุตำแหน่งที่ต้องการให้แสดงข้อความบนหน้าจอ LCD หลังจากนั้นจึงส่งข้อความที่ต้องแสดงผล ส่งออกไปที่หน้าจอ

ผลลัพธ์ LCD I2C แบบข้อความคงที่

 

/*
Deva DIY
www.devadiy.com
*/

#include <LiquidCrystal_I2C.h>  
// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;

// set LCD address, number of columns and rows
// if you don't know your display address, run an I2C scanner sketch
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

void setup() {
  // initialize LCD
  lcd.init();
  // turn on LCD backlight
  lcd.backlight();
}

void loop() {
  // set cursor to first column, first row
  lcd.setCursor(0, 0);
  // print message
  lcd.print("Deva DIY");
  delay(1000);
  // clears the display to print new message
  lcd.clear();
  // set cursor to first column, second row
  lcd.setCursor(0, 1);
  lcd.print("devadiy.com");
  delay(1000);
  lcd.clear();
}
การแสดงผลข้อความ Deva DIY บนจอ LCD1602 เชื่อมต่อ ESP32
ผลลัพธ์ LCD I2C แบบข้อความคงที่
จอ LCD1602 เชื่อมต่อ ESP32 แสดงข้อความ devadiy.com
ผลลัพธ์ LCD I2C แบบข้อความคงที่

ESP32 ต่อร่วมกับ lcd i2c แสดงข้อความแบบคงที่
อัพโหลดโค๊ดแล้วข้อความจะแสดงบนจอ LCD แถวที่1 “Deva DIY” ถัดไปจะลบข้อความเก่าแล้วแสดงข้อความใหม่ในแถวที่2 “devadiy.com” ข้อความจะวนลูปแบบนี้ไปเรื่อยๆ

หากเพิ่งเริ่มต้นกับ Arduino และไม่รู้ว่าจะเริ่มตรงไหน แนะนำให้เปิด Arduino IDE Guide เพื่อความเข้าใจพื้นฐานจากศูนย์

แสดงข้อความบนจอ LCD I2C แบบเลื่อนตำแหน่งข้อความ

ในกรณีที่มีความยาวของข้อความเกิน 16 ตัวอักษร ตัวอักษรที่เกินจะไม่ถูกนำมาแสดงผลบนจอ LCD ดังนี้น เราจึงได้สร้างฟังค์ชั่นเพื่อเลื่อนตัวอักษร ทำให้ข้อความทั้งหมดถูกแสดงบนจอ LCD I2C นอกจากนี้สามารถกำหนดแถวในการให้ตัวอักษรเลื่อนได้

#include <LiquidCrystal_I2C.h>

// ตั้งค่าขนาดของ columns and rows
int lcdColumns = 16;
int lcdRows = 2;

// ตั้งค่า LCD address, columns and rows
// หาเลขที่อยู่ของจอ lcd ได้จากไฟล์ "find_adds"
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

String stringStatic = "Deva DIY ";
String stringToScroll = "Test Scrolling 1 2 3 4 5 6 7 8 9 0";

void setup() {
  // initialize LCD
  lcd.init();
  // turn on LCD backlight
  lcd.backlight();
}

void loop() {
  // เลือกตำแหน่ง row และ col ในการแสดงตัวอักษร
  lcd.setCursor(0, 0);
  // print แสดงผลข้อความบนจอ LCD
  lcd.print(stringStatic);
  // print เลื่อนข้อความบนจอ LCD
  scrollText(1, stringToScroll, 1000);
}

// ฟังชั่นเลื่อนข้อความจอLCD 16x2
// ฟังค์ชั่นรับค่าอินพุต arguments ดังนี้ :
// row: ตำแหน่งแถวที่ต้องการแสดงผล 0 คือ แถวบน 1 คือ แถวล่าง
// message: ข้อความที่ต้องการแสดงผลแบบเลื่อนข้อความ
// delayTime: ค่าเวลาในการหน่วงการเลื่อนตัวอักษร ค่ายิ่งมากการเลือนยิ่งช้า มีหน่วยเวลาเป็น ms.
void scrollText(int row, String message, int Delaytime) {

  static unsigned long lastSlide = 0;
  static int pos = 0;
  static int str = message.length();
  message = " " + message + " " + message + " ";

  if (millis() - lastSlide >= Delaytime) {
    lcd.setCursor(0, row);
    lcd.print(message.substring(pos, pos + lcdColumns));
    (pos <= str) ? pos++ : pos = 0;
    lastSlide = millis();
  }
}

ดาวน์โหลดโค้ดบทเรียนนี้

กรุณา เข้าสู่ระบบ เพื่อดาวน์โหลด

✅ ข้อผิดพลาดที่พบบ่อยในการใช้ LCD I2C กับ ESP32 เช่น:

  • address ไม่ตรง
  • ไม่ขึ้นจอเพราะไม่ได้ lcd.init() หรือ lcd.backlight()
  • ไลบรารีไม่ตรงกับจอ (บางรุ่นใช้ address 0x3F แทน 0x27)
LCD1602 ESP32 แสดงข้อความ Deva DIY และตัวเลขทดสอบ
ผลลัพธ์ จอ LCD I2C แบบเลื่อนตำแหน่งข้อความ
ผลลัพธ์ จอ LCD I2C แบบเลื่อนตำแหน่งข้อความ
 

สรุป

ในบทเรียนนี้ ได้สอนวิธีใช้จอแสดงผล liquidcrystal_i2c ร่วมกับ ESP32 โดยใช้โปรแกรม Arduino IDE > ตัวอย่างโค๊ดวิธีการหาเลขที่อยู่อุปกรณ์ Slave การแสดงข้อความคงที่และข้อความเลื่อน

Deva DIY มีบทเรียน ESP32 อื่นๆที่อาจมีประโยชน์สำหรับคุณ :

Shopping Cart
Scroll to Top