070_I2C_1602LCD_๊ฐ„๊ฒฐ๋ฐฐ์„  ๐Ÿ“Ÿโœจ

๋ฐฐ์„ ์˜ ๊ธฐ์ ! PCF8574 I2C ์–ด๋Œ‘ํ„ฐ ๋ชจ๋“ˆ๋กœ 1602 LCD๋ฅผ ๋‹จ 4๊ฐ€๋‹ฅ(VCC, GND, SDA, SCL)์œผ๋กœ ์™„๋ฒฝ ์ œ์–ดํ•˜๊ธฐ
I2C Scanner ์ฃผ์†Œ ๊ฒ€์ƒ‰ ๊ธฐ๋ฒ•, LiquidCrystal_I2C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ•, ์‹ค์‹œ๊ฐ„ ๋””์ง€ํ„ธ ์ดˆ์‹œ๊ณ„ ๊ตฌํ˜„์„ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค.

I2C 1602 LCD ํƒ€์ดํ‹€

  • ๐Ÿ–ฅ๏ธ ๊ฐ•์˜ ์Šฌ๋ผ์ด๋“œ: slides.md

1. ๐Ÿ‘ง ๋„๋กœ์‹œ์˜ ๊ณ ๋ฏผ: โ€œ๋’ท๋ฉด์— ๊ฒ€์€ ๋ฐฐ๋‚ญ์ด ์ƒ๊ฒผ์–ด์š”!โ€

์ ํผ์„  16๊ฐœ๋กœ ๋ณต์žกํ–ˆ๋˜ LCD ํšŒ๋กœ ๋’คํŽธ์— ์ž‘์€ ๊ฒ€์€์ƒ‰ ๋ณด๋“œ๊ฐ€ ๋‹ฌ๋ฆฐ ๋ชจ๋“ˆ์„ ๋ฐœ๊ฒฌํ•œ ๋„๋กœ์‹œ!

๐Ÿ‘ง ๋„๋กœ์‹œ: โ€œ์ง€๋‹ˆ์•ผ! ์ €๋ฒˆ 1602 LCD ๋’ท๋ฉด์— ์›ฌ ์ž‘์€ ๊ธฐํŒ์ด ๋‚ฉ๋•œ๋˜์–ด ๋ถ™์–ด ์žˆ์–ด! ํ•€์ด 16๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ 4๊ฐœ๋ฐ–์— ์•ˆ ํŠ€์–ด๋‚˜์™€ ์žˆ๋Š”๋ฐ?!โ€
๐Ÿฑ ์ง€๋‹ˆ: โ€œ๋งž์•„! ๊ทธ๊ฒŒ ๋ฐ”๋กœ I2C ์ปจ๋ฒ„ํ„ฐ(PCF8574 ๋ฐฐ๋‚ญ ๋ณด๋“œ) ๋ž€๋‹ค! 16๊ฐœ ์‹ ํ˜ธ๋ฅผ ์•ˆ์—์„œ ๋ฌถ์–ด I2C 2์„ (SDA, SCL)์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ๋˜‘๋˜‘ํ•œ ํ†ต์—ญ์‚ฌ์•ผ!โ€
๐Ÿถ ํ† ํ† : โ€œ๋ฉ๋ฉ! (์„ ์ด 4๊ฐœ๋ฐ–์— ์—†์–ด์„œ ๊ฝ‚๊ธฐ ํ›จ์”ฌ ํŽธํ•˜๊ฒ ๋‹ค!)โ€

I2C LCD ๋ชจ๋“ˆ ์™ธํ˜•

[!NOTE] PCF8574 ์›๊ฒฉ 8๋น„ํŠธ I/O ํ™•์žฅ๊ธฐ(Expander)
I2C ์–ด๋Œ‘ํ„ฐ๋Š” I2C ๋ช…๋ น์„ ๋ฐ›์•„ 8๊ฐœ์˜ ๋ณ‘๋ ฌ ์ถœ๋ ฅ ํ•€์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” PCF8574 ์นฉ์„ ํƒ‘์žฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•„๋‘์ด๋…ธ๋Š” ๋ณต์žกํ•œ ๋ณ‘๋ ฌ ํ•€์„ ์ง์ ‘ ์ œ์–ดํ•˜์ง€ ์•Š๊ณ  ์˜ค์ง I2C ํŒจํ‚ท๋งŒ ์ „์†กํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


2. ๐ŸŽ’ I2C ๋ฐฐ๋‚ญ(์ปจ๋ฒ„ํ„ฐ)์˜ ํ•€ ๊ตฌ์กฐ ๋ฐ ๋ถ€ํ’ˆ ๊ตฌ์„ฑ

๊ธฐ์กด 16๊ฐœ์˜ ์ ‘์† ํ•€์„ ์™„๋ฒฝํžˆ ํก์ˆ˜ํ•˜์—ฌ ๋‹จ 4๊ฐœ์˜ ์ปค๋„ฅํ„ฐ ํ•€์œผ๋กœ ๋‹จ์ˆœํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

I2C ์–ด๋Œ‘ํ„ฐ ๋ณด๋“œ ํ•€ ๊ตฌ์กฐ

๐Ÿ“Œ 4๊ฐœ ํ•€ ์—ฐ๊ฒฐํ‘œ ๋ฐ ๋ณด๋“œ ๊ธฐ๋Šฅ

ํ•€ ๋ช…์นญ ์•„๋‘์ด๋…ธ ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ ๋ฐ ํŠน์ง•
GND GND ์ „์› ์ ‘์ง€
VCC 5V 5V ์‹œ์Šคํ…œ ์ „์›
SDA ์•„๋‚ ๋กœ๊ทธ A4 ์ง๋ ฌ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„  (Data)
SCL ์•„๋‚ ๋กœ๊ทธ A5 ์ง๋ ฌ ํด๋ก ๋™๊ธฐํ™”์„  (Clock)

[!TIP] ๋ชจ๋“ˆ ๋’ท๋ฉด์˜ ํŒŒ๋ž€์ƒ‰ ๋„ค๋ชจ ๊ฐ€๋ณ€์ €ํ•ญ(ํฌํ…์…”๋ฏธํ„ฐ) ์€ ๋ช…์•” ์กฐ์ ˆ์šฉ์ž…๋‹ˆ๋‹ค. ๊ธ€์ž๊ฐ€ ์•ˆ ๋ณด์ผ ๋•Œ๋Š” ์ผ์ž ๋“œ๋ผ์ด๋ฒ„๋กœ ์ด ์†์žก์ด๋ฅผ ๋Œ๋ ค ๋งž์ถฅ๋‹ˆ๋‹ค. ์ ํผ ํ•€(Jumper)์€ ๋ฐฑ๋ผ์ดํŠธ ์ „์› ์—ฐ๊ฒฐ์šฉ์ด๋ฏ€๋กœ ํ•ญ์ƒ ๊ฝ‚ํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


3. ๐Ÿ› ๏ธ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ํ•˜๊ธฐ

I2C LCD ๊ตฌ๋™์„ ์œ„ํ•ด ํ‘œ์ค€ I2C ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ „์šฉ ๋””์Šคํ”Œ๋ ˆ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งค๋‹ˆ์ € ์„ค์น˜ ํ™”๋ฉด

๐Ÿ“š ์„ค์น˜ ๋‹จ๊ณ„ ๊ฐ€์ด๋“œ

  1. <Wire.h>: ์•„๋‘์ด๋…ธ IDE์— ํ‘œ์ค€ ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ๋ณ„๋„ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.
  2. <LiquidCrystal_I2C.h>:
    • ์•„๋‘์ด๋…ธ IDE ์ƒ๋‹จ ๋ฉ”๋‰ด: [์Šค์ผ€์น˜] โžก๏ธ [๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํฌํ•จํ•˜๊ธฐ] โžก๏ธ [๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌโ€ฆ]
    • ๊ฒ€์ƒ‰์ฐฝ์— LiquidCrystal I2C ์ž…๋ ฅ
    • โ€œLiquidCrystal I2C by Frank de Brabanderโ€ ๋˜๋Š” Marco Schwartz ๋ฒ„์ „ ํ™•์ธ ํ›„ [์„ค์น˜] ํด๋ฆญ!

4. ๐Ÿ”Œ ์ดˆ๊ฐ„๋‹จ 4์„  ํšŒ๋กœ ์—ฐ๊ฒฐ๋„

๋ธŒ๋ ˆ๋“œ๋ณด๋“œ ์—†์ด ์•”-์ˆ˜(F-M) ์ ํผ์„  4๊ฐ€๋‹ฅ๋งŒ์œผ๋กœ ์•„๋‘์ด๋…ธ์™€ 1์ดˆ ๋งŒ์— ์ง๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

I2C LCD 4์„  ์ง๊ฒฐ ํšŒ๋กœ๋„

  • VCC (๋นจ๊ฐ„ ์„ ) โžก๏ธ ์•„๋‘์ด๋…ธ 5V
  • GND (๊ฒ€์€ ์„ ) โžก๏ธ ์•„๋‘์ด๋…ธ GND
  • SDA (์ดˆ๋ก/ํŒŒ๋ž€ ์„ ) โžก๏ธ ์•„๋‘์ด๋…ธ A4 ํ•€
  • SCL (๋…ธ๋ž€/์ฃผํ™ฉ ์„ ) โžก๏ธ ์•„๋‘์ด๋…ธ A5 ํ•€

5. ๐Ÿ•ต๏ธโ€โ™‚๏ธ I2C ์ฃผ์†Œ ์ž๋™ ๊ฒ€์ƒ‰: I2C Scanner

LCD ๋ชจ๋“ˆ๋งˆ๋‹ค ์ œ์กฐ์‚ฌ์— ๋”ฐ๋ผ ์ฃผ์†Œ๊ฐ€ 0x27 ๋˜๋Š” 0x3F๋กœ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ ์Šค์บ๋„ˆ ์ฝ”๋“œ๋กœ ํ™•์‹คํ•œ ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

I2C ์ฃผ์†Œ ์Šค์บ” ๋‹ค์ด์–ด๊ทธ๋žจ

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  while (!Serial);
  Wire.begin();
  
  Serial.println("\n--- I2C ๊ธฐ๊ธฐ ๊ฒ€์ƒ‰ ์‹œ์ž‘ ---");
  byte count = 0;
  
  for (byte address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0) {
      Serial.print("I2C ๊ธฐ๊ธฐ ๋ฐœ๊ฒฌ! 16์ง„์ˆ˜ ์ฃผ์†Œ: 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
      count++;
    }
  }
  
  if (count == 0) Serial.println("์—ฐ๊ฒฐ๋œ I2C ๊ธฐ๊ธฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ์„ ์„ ํ™•์ธํ•˜์„ธ์š”!");
  else Serial.println("๊ฒ€์ƒ‰ ์™„๋ฃŒ!");
}

void loop() {}

6. ๐Ÿ“ ์ฒซ ์ธ์‚ฌ: โ€œHello, Dorothy!โ€ ๋„์šฐ๊ธฐ

๋ฐœ๊ฒฌํ•œ ์ฃผ์†Œ(์˜ˆ: 0x27)๋ฅผ ์ง€์ •ํ•˜์—ฌ LCD๋ฅผ ์ผœ๊ณ  ํ™”๋ฉด์— ์ธ์‚ฟ๋ง์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

I2C LCD ํ…์ŠคํŠธ ์ถœ๋ ฅ ์‹ค์Šต

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// I2C ์ฃผ์†Œ 0x27, 16์—ด 2ํ–‰ LCD ๊ฐ์ฒด ์ƒ์„ฑ
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();        // LCD ๋‚ด๋ถ€ ์ œ์–ด๊ธฐ ์ดˆ๊ธฐํ™”
  lcd.backlight();   // ๋ฐฑ๋ผ์ดํŠธ LED ์ ๋“ฑ!
  
  // ์ฒซ ๋ฒˆ์งธ ์ค„ (0, 0)
  lcd.setCursor(0, 0);
  lcd.print("Hello, Dorothy!");
  
  // ๋‘ ๋ฒˆ์งธ ์ค„ (0, 1)
  lcd.setCursor(0, 1);
  lcd.print("Jiny & Arduino");
}

void loop() {
  // ํ™”๋ฉด ์œ ์ง€
}

7. โฑ๏ธ ์‘์šฉ ์‹ค์Šต: 1์ดˆ์”ฉ ์˜ฌ๋ผ๊ฐ€๋Š” ๋””์ง€ํ„ธ ์ดˆ์‹œ๊ณ„

loop() ํ•จ์ˆ˜์—์„œ 1์ดˆ๋งˆ๋‹ค ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ๊ฐฑ์‹ ํ•˜๋Š” ๋””์ง€ํ„ธ ์นด์šดํ„ฐ ๋””์Šคํ”Œ๋ ˆ์ด์ž…๋‹ˆ๋‹ค.

๋””์ง€ํ„ธ ์ดˆ์‹œ๊ณ„ ๋™์ž‘ ํ™”๋ฉด

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
int seconds = 0;

void setup() {
  lcd.init();
  lcd.backlight();
  
  lcd.setCursor(0, 0);
  lcd.print("Stopwatch Demo");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print("Sec: ");
  lcd.print(seconds);
  lcd.print(" s    "); // ์ด์ „ ๊ธด ์ž๋ฆฟ์ˆ˜๋ฅผ ๋ฎ์–ด์“ฐ๊ธฐ ์œ„ํ•œ ๊ณต๋ฐฑ ๋ฌธ์ž
  
  delay(1000);
  seconds++;
}

๐ŸŒŸ ๋„๋กœ์‹œ์™€ ์ง€๋‹ˆ์˜ ํ•ต์‹ฌ ๊ฟ€ํŒ! ๐Ÿ†

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ๋ฐฐ์„  ๋ณต์žก์„ฑ์„ 75% ์ค„์ด๊ณ  I2C ํ†ต์‹  ๊ธฐ๋ฐ˜์˜ ๊น”๋”ํ•œ ๋””์Šคํ”Œ๋ ˆ์ด ์‹œ์Šคํ…œ์„ ์™„์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

I2C LCD ์‹ค์Šต ์™„๋ฃŒ ์ถ•ํ•˜

๐Ÿ“‹ ํ•ต์‹ฌ ์š”์•ฝ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ๋‹จ 4๊ฐ€๋‹ฅ ์ง๊ฒฐ: VCC, GND, SDA(A4), SCL(A5)๋กœ ๋ธŒ๋ ˆ๋“œ๋ณด๋“œ ์—†์ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • I2C ์Šค์บ๋„ˆ ํ™œ์šฉ: 0x27 ๋˜๋Š” 0x3F ์ฃผ์†Œ๋ฅผ ์‚ฌ์ „์— ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ†ต์‹  ์˜ค๋ฅ˜๋ฅผ ์˜ˆ๋ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • lcd.init()๊ณผ lcd.backlight(): ์ดˆ๊ธฐํ™”์™€ ๋ฐฑ๋ผ์ดํŠธ ์ œ์–ด ๋ฉ”์†Œ๋“œ๋ฅผ ๋ช…ํ™•ํžˆ ์ˆ™์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ง ๋„๋กœ์‹œ: โ€œ์šฐ์™€! ์„ ์ด 4๊ฐœ๋ฐ–์— ์•ˆ ๋˜๋‹ˆ๊นŒ ํšŒ๋กœ๊ฐ€ ์ •๋ง ๊น”๋”ํ•˜๊ณ  ์˜ˆ๋ป!โ€
๐Ÿฑ ์ง€๋‹ˆ: โ€œํ›Œ๋ฅญํ•ด! ๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ๊ธ€์ž๊ฐ€ ์˜†์œผ๋กœ ์Šค๋ฅด๋ฅต ์ „๊ด‘ํŒ์ฒ˜๋Ÿผ ํ˜๋Ÿฌ๊ฐ€๋Š” โ€˜LCD ์Šคํฌ๋กค ํšจ๊ณผโ€™๋ฅผ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•ด ๋ณด์ž!โ€

์„œ๋ธŒ๋ชฉ์ฐจ