본문 바로가기
Hardware/MCU(Arduino,ESP8266)

아두이노 I2C 스캐너, LCD 1602 I2C 모듈 주소 찾기

by lovey25 2019. 11. 20.
반응형

LCD 1602 I2C 모듈을 사용하는 방법을 소개한 포스팅(https://kwonkyo.tistory.com/309)에서 주소값 불일치로 인한 오류에 대해서 언급한 적이 있었습니다.

이번에는 LCD의 이 주소값을 확실하게 확인 할 수 있는 방법을 공유합니다.

아두이노를 통해서 주소값을 검색하고 시리얼 모니터로 이값을 확인하도록 하는방법입니다. 본론으로 들어가기 전에 인터넷을 검색하다가 발견한건데 모듈의 주소값을 정리해 놓은 사진이 있어서 기록으로 남깁니다. 어디서 받았는지 기억이 안나네요...

아무튼 아래에서 소개할 방법이 귀찮으신 분들은 이 그림보시고 주소값 먼저 확인해 보셔도 좋을 것 같습니다.

모듈 뒷면에 A0, A1, A2 라고 표시된 단자에 점퍼 연결여부에 따라서 주소값이 다른거 같습니다.

제가 가지고 있는 부품을 기준으로 보면,

칩 모델이 PCF8574T 이고 점퍼는 하나도 연결이 되어 있지 않으니 표에서 첫번째 줄 오른쪽 주소인 "0x27"이 되겠네요. 결론적으로 이 주소를 사용해서 잘 작동하는 걸 확인했으니 맞겠지만 스캐너 결과도 동일한지 확인해 보겠습니다.

하드웨어

하드웨어 부분은 LCD를 사용하는 일반적인 I2C 연결방법과 동일합니다. 이전 포스팅 확인해 주세요.

 

아두이노, LCD 1602 I2C 모듈 사용하기 (feat. 주소에러)

아두이노와 LCD를 I2C로 연결해서 출력을 하는 방법입니다. 아두이노와 I2C 모듈이 있는 LCD 그리고 케이블들만 준비하시면 되겠습니다. (여기에서는 아두이노 나노 사용했습니다.) 하드웨어 LCD 1602 I2C 모듈..

kwonkyo.tistory.com

소프트웨어

아두이노 포럼에서 가져온 소스입니다. 소스에 대한 설명도 생략합니다. ㅎ

(출처: https://playground.arduino.cc/Main/I2cScanner/)

 // --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
// 
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the 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\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

결과

코드를 업로드하고 시리얼 모니터를 켜주면 다음과 같은 결과를 확인 할 수 있습니다.

I2C로 연결된 디바이스를 찾아서 알아서 주소값을 알려주는데요. 

위어서 확인한 것과 동일하게 "0x27"이라고 나오네요. 재미있네요.

 

끝!

반응형

댓글