안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊
오늘은 아두이노 프로젝트의 꽃이라고 할 수 있는 'I2C LCD' 사용법에 대해 알아보려고 해요. 복잡한 회로 연결 없이 단 4개의 핀만으로 원하는 글자를 화면에 딱! 하고 띄울 수 있어서 정말 매력적인 부품이죠. 센서 값을 확인하거나, 멋진 나만의 메시지를 표시하고 싶을 때 아주 유용하답니다.
이전 시간에 I2C 통신이 무엇인지, 그리고 내 LCD의 고유 주소를 찾는 방법까지 알아봤다면, 이제 모든 준비는 끝났어요. 저와 함께 차근차근 회로를 구성하고 코드를 작성해서 "Hello, World!"를 화면에 띄워볼까요?
Slide 1: 02. I2C LCD 회로 구성하기
자, 드디어 4장 '화면과 움직임으로 표현하기'의 두 번째 주제, I2C LCD를 직접 다뤄볼 시간이에요. 우리는 이미 LCD와 대화하기 위한 모든 준비를 마쳤어요. 통역사 역할을 해줄 라이브러리도 설치했고, LCD의 집 주소인 I2C 주소도 알아냈죠.
이제 아두이노에게 명령을 내려서, 우리가 원하는 멋진 인사말을 LCD 화면에 띄워보는 일만 남았습니다. 정말 기대되지 않나요? 그럼 바로 시작해 볼게요!
Slide 2: I2C LCD 회로 구성하기
가장 먼저 할 일은 아두이노와 I2C LCD를 연결하는 회로 구성이에요. 하지만 걱정 마세요. I2C LCD의 가장 큰 장점은 연결이 정말 정말 간단하다는 점이랍니다!
✅ 준비물
- 아두이노 우노
- I2C LCD (1602)
✅ 연결 방법
슬라이드의 회로도처럼 딱 4개의 핀만 연결하면 끝나요. LCD 모듈 뒷면을 보면 각 핀의 이름이 적혀 있으니 그대로 따라 연결해주세요.
GND핀 ↔️ 아두이노GND핀VCC핀 ↔️ 아두이노5V핀SDA핀 ↔️ 아두이노A4핀SCL핀 ↔️ 아두이노A5핀
여기서 가장 중요한 포인트는 SDA와 SCL 핀이에요! 이 두 핀은 I2C 통신을 위한 약속된 자리라서 다른 핀에 연결하면 작동하지 않아요. SDA는 아날로그 4번(A4), SCL은 아날로그 5번(A5) 핀에 정확하게 연결하는 것, 잊지 마세요!
Slide 3: "Hello, World!" 텍스트 출력 코드 살펴보기
회로 연결이 끝났다면 이제 코드를 작성할 차례예요. 아래 코드를 아두이노 스케치에 입력하고 업로드하면, LCD 화면에 파란 불이 들어오면서 "Hello, World!"와 "Arduino I2C LCD"라는 글자가 나타날 거예요.
| 01 | // 1. 필요한 도구함(라이브러리)을 불러옵니다. |
| 02 | #include <Wire.h> |
| 03 | #include <LiquidCrystal_I2C.h> |
| 04 | |
| 05 | // 2. LCD 설정 (주소, 가로칸수, 세로줄수) |
| 06 | // 만약 스캐너로 찾은 주소가 0x27이라면 0x20 대신 0x27을 적으세요! |
| 07 | LiquidCrystal_I2C lcd(0x20, 16, 2); |
| 08 | |
| 09 | void setup() { |
| 10 | // 3. LCD 깨우기 |
| 11 | lcd.init(); // LCD야, 일어날 시간이야! (초기화) |
| 12 | lcd.backlight(); // 불을 켜줘! (백라이트 켜기) |
| 13 | } |
| 14 | |
| 15 | void loop() { |
| 16 | // 4. 첫 번째 줄에 글자 쓰기 |
| 17 | lcd.setCursor(0, 0); // 커서를 0번째 칸, 0번째 줄(첫째 줄)로 이동 |
| 18 | lcd.print("Hello, World!"); |
| 19 | |
| 20 | // 5. 두 번째 줄에 글자 쓰기 |
| 21 | lcd.setCursor(0, 1); // 커서를 0번째 칸, 1번째 줄(둘째 줄)로 이동 |
| 22 | lcd.print("Arduino I2C LCD"); |
| 23 | } |
✅ 코드 구조 이해하기
코드가 조금 길어 보이지만, 구조는 아주 간단해요. 크게 '라이브러리 및 설정', '초기화', '텍스트 출력' 세 부분으로 나눌 수 있어요.
1. 라이브러리 및 설정 (1~7줄)
#include <Wire.h>: I2C 통신을 위한 필수 라이브러리예요.#include <LiquidCrystal_I2C.h>: I2C LCD를 쉽게 제어하게 해주는 라이브러리죠.LiquidCrystal_I2C lcd(0x20, 16, 2);: 우리가 사용할 LCD의 정보를 아두이노에게 알려주는 부분이에요. "주소는 0x20이고, 가로 16칸, 세로 2줄짜리 LCD를 앞으로lcd라고 부를게!"라고 이름표를 붙여주는 것과 같아요. (만약 여러분의 LCD 주소가 0x27이라면0x20대신0x27을 적어주셔야 해요!)
2. 초기화 (9~13줄, setup() 함수)
lcd.init();: LCD의 기능을 본격적으로 사용하기 위해 깨워주는(초기화하는) 명령어예요.lcd.backlight();: LCD 화면 뒤쪽의 조명(백라이트)을 켜주는 명령어예요. 이게 없으면 글씨가 표시되어도 너무 어두워서 보이지 않는답니다.
3. 텍스트 출력 (15~23줄, loop() 함수)
lcd.setCursor(0, 0);: 글자를 어디에 쓸지 위치(커서)를 정해주는 아주 중요한 명령어예요.(0, 0)은 '0번째 줄(첫째 줄)의 0번째 칸(맨 왼쪽)'을 의미해요.lcd.print("Hello, World!");: 정해진 위치에 "Hello, World!"라는 글자를 출력해요.lcd.setCursor(0, 1);: 이번엔 커서를 '1번째 줄(둘째 줄)의 0번째 칸(맨 왼쪽)'으로 옮겨요.lcd.print("Arduino I2C LCD");: 그 위치에 "Arduino I2C LCD"를 출력하죠.
Slide 4: LCD 제어 핵심 함수 4가지
방금 살펴본 코드에 나왔던 핵심 함수들을 다시 한번 정리해 볼게요. 이 4가지만 알면 LCD를 자유자재로 다룰 수 있답니다!
1. lcd.init() : "일어날 시간이야!" (초기화)
LCD를 사용하기 위해 가장 먼저 실행해야 하는 함수예요. 아두이노와 LCD가 서로 통신할 준비를 마치는 과정이라고 생각하면 쉬워요. setup() 함수 안에서 딱 한 번만 실행해주면 됩니다.
2. lcd.backlight() : "조명을 켜줘!"
LCD는 스스로 빛을 내지 못해요. 그래서 뒤에서 조명을 비춰줘야 글씨가 선명하게 보이죠. 이 함수는 그 조명을 켜주는 역할을 해요. lcd.init()과 함께 setup()에서 실행해주는 것이 일반적이에요.
3. lcd.setCursor(가로, 세로) : "여기부터 쓸게요!" (가장 중요!)
LCD 문법 중 가장 헷갈리면서도 가장 중요한 함수예요. 글자를 쓰기 시작할 커서의 위치를 정해줍니다. 마치 극장에서 내 좌석을 찾는 것과 같아요.
lcd.setCursor(0, 0);→ 첫 번째 줄, 맨 왼쪽 칸lcd.setCursor(5, 1);→ 두 번째 줄, 여섯 번째 칸
⚠️ 여기서 잠깐! 아주 중요한 주의사항!
컴퓨터는 숫자를 0부터 세기 시작해요.
- 첫 번째 줄은
0번, 두 번째 줄은1번이에요.- 첫 번째 칸도
0번, 열여섯 번째 칸은15번이랍니다. 꼭 기억해주세요!
4. lcd.print() : "글자를 보여줘!"
setCursor()로 위치를 잡았다면, print() 함수로 원하는 글자나 숫자를 화면에 출력할 수 있어요.
- 문자 출력:
lcd.print("Hello");
따옴표 안의 내용을 그대로 출력해요. (아쉽게도 한글은 깨져서 나와요 😥) - 숫자(변수) 출력:
lcd.print(sensorValue);
센서 값이나 계산 결과가 저장된 변수의 값을 출력해요. - 소수점 자리수 제어:
lcd.print(3.141592, 2);→3.14출력
숫자 뒤에 콤마(,)와 함께 원하는 자릿수를 적어주면 소수점을 깔끔하게 잘라서 보여주는 아주 유용한 기능도 있답니다!
어떠셨나요? 생각보다 정말 간단하죠? 이제 여러분은 I2C LCD에 원하는 어떤 메시지든 자유롭게 띄울 수 있게 되었어요! 오늘 배운 내용을 바탕으로 온도 센서의 값을 출력해보거나, 초시계를 만들어보는 등 다양하게 응용해보세요. 상상하는 모든 것을 이 작은 화면에 표현할 수 있답니다.
앞으로 진행될 프로젝트에서도 LCD는 계속해서 사용될 예정이니, 오늘 배운 핵심 함수 4가지는 꼭 기억해주세요! 궁금한 점이 있다면 언제든지 댓글로 질문 남겨주시고요.
그럼 다음 시간에 더 재미있는 주제로 다시 만나요! 👋
이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초]에 수록된 내용입니다.
댓글 없음:
댓글 쓰기