아두이노 - LCD I2C | Arduino - LCD I2C

이 아두이노 LCD I2C 튜토리얼에서는 아두이노 보드에 LCD I2C(액정 디스플레이)를 연결하는 방법을 배웁니다. LCD는 정보를 표시하는 데 널리 사용되며 매우 인기가 있습니다. LCD에는 여러 종류가 있습니다. 이 튜토리얼에서는 예시로 LCD 16x2(16열과 2행)를 다룹니다. 다른 LCD도 비슷합니다.

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×LCD I2C 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Recommended) Breadboard Shield For Arduino Uno 쿠팡 | Amazon
1×(Recommended) Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

LCD I2C 16x2에 대하여

이전 튜토리얼에서 우리는 일반 LCD 사용 방법을 배웠습니다. 그러나, 아두이노와 일반 LCD 사이의 배선은 복잡합니다. 따라서, 배선을 간소화하기 위해 LCD I2C가 만들어졌습니다. 실제로, LCD I2C는 일반 LCD, I2C 모듈, 그리고 가변저항으로 구성되어 있습니다.

핀배열

LCD I2C는 I2C 인터페이스를 사용하므로 4개의 핀이 있습니다:

  • GND 핀: GND(0V)에 연결해야 합니다.
  • VCC 핀: LCD의 전원 공급용으로, VCC(5V)에 연결해야 합니다.
  • SDA 핀: I2C 데이터 신호
  • SCL 핀: I2C 클록 신호
LCD I2C Pinout

LCD 좌표

LCD I2C 16x2는 16개의 열과 2개의 행을 포함합니다. 열과 행은 0부터 인덱싱됩니다.

Arduino LCD I2C Coordinate

선연결

Arduino LCD I2C Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

LCD I2C Arduino Uno, Nano Arduino Mega
Vin 5V 5V
GND GND GND
SDA A4 20
SCL A5 21

LCD I2C 프로그래밍 방법

LiquidCrystal_I2C 라이브러리 덕분에 LCD를 사용하는 것이 식은 죽 먹기입니다.

라이브러리를 포함하십시오:

#include <LiquidCrystal_I2C.h> // LCD용 라이브러리

I2C 주소, 열의 수, 행의 수를 가진 LiquidCrystal_I2C 객체를 선언하십시오:

LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 0x27, 16열 및 2행

LCD를 초기화하십시오.

lcd.init(); //lcd 초기화 lcd.backlight(); //백라이트 켜기

커서를 원하는 위치(열_인덱스, 행_인덱스)로 이동하세요.

lcd.setCursor(column_index, row_index);

LCD에 메시지를 출력하십시오.

lcd.print("Hello World!");

다양한 기능을 제공합니다 (LCD로 더 많은 것을 하세요 부분 참조).

※ NOTE THAT:

LCD의 I2C 주소는 제조업체에 따라 다를 수 있습니다. 코드에서는 DIYables 제조업체에서 지정한 0x27을 사용했습니다.

아두이노 코드

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 0x27, 16열 및 2행 void setup() { lcd.init(); // lcd를 초기화합니다 lcd.backlight(); } void loop() { lcd.clear(); // 화면 지우기 lcd.setCursor(0, 0); // 커서를 (0, 0)으로 이동 lcd.print("Arduino"); // (0, 0)에 메시지를 출력 lcd.setCursor(2, 1); // 커서를 (2, 1)으로 이동 lcd.print("GetStarted.com"); // (2, 1)에 메시지를 출력 delay(2000); // 위 내용을 두 초간 표시 lcd.clear(); // 화면 지우기 lcd.setCursor(3, 0); // 커서를 (3, 0)으로 이동 lcd.print("DIYables"); // (3, 0)에 메시지를 출력 lcd.setCursor(0, 1); // 커서를 (0, 1)으로 이동 lcd.print("www.diyables.io"); // (0, 1)에 메시지를 출력 delay(2000); // 위 내용을 두 초간 표시 }

사용 방법

  • 아두이노 IDE의 왼쪽 바에서 Libraries 아이콘으로 이동하세요.
  • "LiquidCrystal I2C"를 검색한 다음, Frank de Brabander가 제작한 LiquidCrystal_I2C 라이브러리를 찾으세요.
  • LiquidCrystal_I2C 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
Arduino LiquidCrystal I2C library
  • 위의 코드를 복사하여 Arduino IDE로 엽니다
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드합니다
  • 결과를 LCD에서 확인합니다
Arduino display text on LCD
image source: diyables.io

텍스트와 위치를 수정해보세요.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

LCD로 더 많은 것을 하세요

맞춤 캐릭터

lcd.print() 함수는 오직 ASCII 문자만 지원합니다. 특별한 문자나 상징(예: 하트, 앵그리 버드)을 표시하고 싶다면 아래의 문자 생성기를 사용해야 합니다.

LCD 16x2는 32개의 문자를 표시할 수 있습니다(2행 16열). 각 문자는 40픽셀로 구성됩니다(8행 5열).

Arduino LCD 16x2 Pixel

캐릭터 생성기는 캐릭터(40 픽셀)를 나타냅니다. 단지 다음 단계들을 수행하면 됩니다:

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 0x27, 16열 및 2행 byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // lcd 초기화 lcd.backlight(); lcd.createChar(0, customChar); // 새로운 사용자 정의 문자 생성 lcd.setCursor(2, 0); // 커서를 (2, 0)으로 이동 lcd.write((byte)0); // (2, 0)에 사용자 정의 문자 출력 } void loop() { }

LCD에 표시된 결과:

LCD custom character

다양한 맞춤형 캐릭터들

우리는 최대 8개의 사용자 정의 문자(0부터 7까지 인덱싱)를 만들 수 있습니다. 아래 예는 세 개의 문자를 생성하고 표시합니다.

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소 0x27, 열 16개, 행 2개 byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.init(); // LCD를 초기화합니다 lcd.backlight(); lcd.createChar(0, customChar0); // 새로운 사용자 정의 문자를 생성합니다 (인덱스 0) lcd.createChar(1, customChar1); // 새로운 사용자 정의 문자를 생성합니다 (인덱스 1) lcd.createChar(2, customChar2); // 새로운 사용자 정의 문자를 생성합니다 (인덱스 2) lcd.setCursor(2, 0); // 커서를 (2, 0)으로 이동합니다 lcd.write((byte)0); // 사용자 정의 문자 0을 (2, 0)에 출력합니다 lcd.setCursor(4, 0); // 커서를 (4, 0)으로 이동합니다 lcd.write((byte)1); // 사용자 정의 문자 1을 (4, 0)에 출력합니다 lcd.setCursor(6, 0); // 커서를 (6, 0)으로 이동합니다 lcd.write((byte)2); // 사용자 정의 문자 2를 (6, 0)에 출력합니다 } void loop() { }

LCD에 표시된 결과:

LCD multiple custom characters

요약: LCD에서 사용자 정의 문자 사용 방법

  • 위의 문자 생성기를 사용하여 사용자 지정 문자의 이진 코드를 만드세요.
  • 사용자 지정 문자의 이진 코드를 선언하세요 (위 단계에서 복사).
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };

setup() 함수에서 인덱스 값(0에서 7까지)에 맞춰 커스텀 문자를 생성하고 할당하세요.

lcd.createChar(index, customChar);

언제 어디서나(설정() 또는 루프() 함수에서) LCD에 사용자 정의 문자를 출력하세요.

lcd.setCursor(column, row); // 커서를 원하는 위치로 이동 lcd.write((byte)index); // 원하는 위치에 사용자 정의 문자를 출력

기타 기능들

아래의 함수들을 하나씩 loop() 함수 안에 추가하십시오. 그리고 각 함수 후에 delay(5000)을 추가하십시오.

맑은 LCD 화면

lcd.clear();

커서를 LCD의 상단 왼쪽으로 이동하세요.

lcd.home();

커서를 (열, 행) 위치로 이동시키세요.

lcd.setCursor(column, row);

LCD 커서를 표시하세요.

lcd.cursor();

LCD 커서를 숨깁니다.

lcd.noCursor();

깜박이는 LCD 커서를 표시하세요.

lcd.blink()

깜박이는 LCD 커서를 끕니다.

lcd.noBlink()

도전하세요

다음 프로젝트 중 하나를 수행하려면 LCD를 사용하십시오:

LCD I2C 문제 해결

LCD I2C에 텍스트가 표시되지 않는 경우, 다음 문제를 확인해 주세요:

i. LCD 뒷면의 포텐시오미터를 돌려 LCD의 밝기를 조절하십시오.

ii. 제조업체에 따라 LCD의 I2C 주소가 다를 수 있습니다. 일반적으로 LCD의 기본 I2C 주소는 0x27 또는 0x3F입니다. 이 값을 차례로 시도하십시오. 그래도 실패한다면 아래 코드를 실행하여 I2C 주소를 찾으십시오.

#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found"); else Serial.println("done"); delay(5000); // 5초를 기다려 다음 탐색을 위함 }

Serial Monitor에서의 결과:

COM6
Send
Scanning... I2C device found at address 0x3F ! done Scanning... I2C device found at address 0x3F ! done
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!