개발

아두이노로 I2C 장치 주소 찾기 및 스캐너 만들기

hes3518 2024. 11. 14. 21:59
728x90
반응형

아두이노 I2C 스캐너: 내 기기의 주소를 찾아보자

안녕하세요! 기술과 블로그를 사랑하는 여러분, 오늘은 아두이노를 활용해 I2C 통신의 기기를 탐지하는 방법을 소개해보겠습니다. 이 포스트에서는 I2C Scanner를 작성하며, 그 과정에서 발생할 수 있는 몇 가지 이슈와 해결 방법도 함께 살펴보겠습니다.

들어가며

I2C(Inter-Integrated Circuit) 통신은 여러 개의 장치를 동시에 다룰 수 있는 유용한 방식입니다. 하지만 여러 장치가 존재하는 환경에서는 각 장치의 주소를 알아야 하죠. 이번 포스트에서는 아두이노를 통해 이러한 장치들을 스캔하고, 각 장치의 주소를 찾아보겠습니다.

코드 작성하기

I2C 스캐너를 만들기 위해 아래의 코드를 참고하세요. 이 코드는 아두이노의 시리얼 모니터를 통해 I2C 장치의 주소를 출력합니다.

#include <Wire.h>

void setup() {
    Wire.begin();
    Serial.begin(9600);
    while (!Serial); // Leonardo: wait for serial monitor
    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); // wait 5 seconds for next scan
}

코드 설명하기

1. 라이브러리 포함

  • #include <Wire.h>: I2C 통신을 가능하게 해주는 Wire 라이브러리를 포함합니다.

2. 초기 설정

  • Wire.begin(): I2C 통신을 시작합니다.
  • Serial.begin(9600): 시리얼 통신을 위한 초기화입니다.

3. 장치 스캔 로직

  • for (address = 1; address < 127; address++): 주소 1부터 126까지의 주소를 스캔합니다.
  • Wire.beginTransmission(address)Wire.endTransmission(): 각 주소에 연결된 기기가 있는지 확인합니다.
  • 만약 기기가 발견되면 그 주소를 출력합니다.

4. 결과 출력

  • 발견된 장치 수에 따라 "No I2C devices found" 또는 "done" 메시지를 출력합니다.

예제 실행 결과

이 코드를 아두이노에 업로드하고 시리얼 모니터를 열면 다음과 같은 결과를 확인할 수 있습니다.

Scanning...
I2C device found at address 0x27!
done

위의 예제에서는 0x27 주소의 I2C 장치를 찾았다는 결과입니다. 다른 장치들이 있다면 또 다른 주소도 출력될 것입니다.

마무리

이번 포스트에서는 아두이노를 이용해 I2C 장치를 스캔하는 방법을 알려드렸습니다. I2C 통신의 유용성을 이해하고, 주소를 찾아내는 기초적인 방법을 배웠기에 여러분의 프로젝트에서 잘 활용하겠죠? 혹시 이와 관련해 궁금한 점이 있다면 댓글로 남겨주세요. 여러분의 프로그래밍 여정에 이 정보가 도움이 되기를 바랍니다! 다음 포스트에서 또 만나요!

728x90
반응형