같은 I2C 센서를 여러 개 연결하고 싶다면? TCA9548A I2C 멀티플렉서 활용하기

ESP32, Arduino, Raspberry Pi를 사용하다 보면 다양한 I2C 센서를 연결하게 됩니다.

온습도 센서, 조도 센서, IMU, OLED 디스플레이 등 대부분의 센서가 I2C 통신을 사용하기 때문에 배선이 간단하고 확장성이 좋습니다.

그런데 프로젝트가 조금만 커지면 예상치 못한 문제가 발생합니다.

바로 I2C 주소 충돌(Address Collision) 입니다.

오늘은 이 문제를 간단하게 해결해주는 TCA9548A 1-to-8 I2C 멀티플렉서를 소개해 보겠습니다.

■ I2C 주소 충돌이란?

I2C 통신에서는 각 장치가 고유한 주소를 가지고 있어야 합니다.

예를 들어 어떤 온도 센서가 항상 0x40 주소를 사용한다고 가정해 보겠습니다.

센서 하나를 연결할 때는 문제가 없지만 동일한 센서를 두 개 이상 연결하면 문제가 발생합니다.

마이크로컨트롤러는 SDA/SCL 버스에서 동일한 주소를 가진 장치들을 구별할 수 없기 때문입니다.

예를 들어,

센서 1 : 0x40

센서 2 : 0x40

처럼 주소가 동일하면 통신 충돌이 발생합니다.

일부 센서는 주소를 변경할 수 있지만, 많은 고성능 센서는 주소가 고정되어 있습니다.

이때 필요한 것이 바로 TCA9548A입니다.


■ TCA9548A란?

TCA9548A는 I2C 멀티플렉서(Multiplexer)입니다.

쉽게 말하면 하나의 I2C 버스를 여러 개의 독립된 채널로 분리해 주는 장치입니다.

마이크로컨트롤러는 TCA9548A를 통해 원하는 채널만 선택하여 통신할 수 있습니다.

즉,

채널 0 → 센서 A

채널 1 → 센서 B

채널 2 → 센서 C

...

채널 7 → 센서 H

처럼 최대 8개의 동일 주소 센서를 동시에 사용할 수 있습니다.

TCA9548A는 일종의 "교통 정리원" 역할을 수행한다고 생각하면 이해하기 쉽습니다.


■ 동작 방식

사용 방법은 매우 간단합니다.

먼저 TCA9548A에 원하는 포트 번호를 전송합니다.

예를 들어 채널 3을 선택하면 이후의 모든 I2C 통신은 자동으로 채널 3에 연결된 장치로 전달됩니다.

예시 코드

Wire.beginTransmission(0x70);

Wire.write(1 << 3); // 채널 3 선택

Wire.endTransmission();

그 후에는 일반적인 I2C 센서와 동일하게 통신하면 됩니다.

즉, 소프트웨어 측면에서도 매우 사용하기 쉬운 구조입니다.


■ 멀티플렉서 자체 주소도 변경 가능

TCA9548A의 기본 주소는 다음과 같습니다.

0x70

하지만 주소 핀을 이용하면

0x70 ~ 0x77

범위로 변경할 수 있습니다.

즉, 하나의 마이크로컨트롤러에 TCA9548A를 최대 8개까지 연결할 수 있습니다.


■ 최대 몇 개의 센서를 연결할 수 있을까?

계산해 보면 상당히 놀랍습니다.

TCA9548A 하나당 8개 채널

TCA9548A 최대 8개 연결 가능

따라서

8 × 8 = 64

즉, 최대 64개의 동일 주소 I2C 장치를 하나의 마이크로컨트롤러에서 제어할 수 있습니다.

예를 들어,

  • IMU 센서 64개
  • 온도 센서 64개
  • 조도 센서 64개

와 같은 대규모 측정 시스템도 구현 가능합니다.


■ 3.3V와 5V 모두 지원

TCA9548A는

  • 3.3V 시스템
  • 5V 시스템

모두 지원합니다.

따라서 다음과 같은 다양한 플랫폼에서 사용할 수 있습니다.

  • ESP32
  • ESP32-S3
  • Raspberry Pi
  • Arduino Uno
  • Arduino Mega
  • Adafruit Feather 시리즈

전압 호환성 때문에 별도의 레벨 시프터를 고민할 필요가 없는 경우가 많습니다.


■ Adafruit 브레이크아웃 보드의 장점

Adafruit 버전은 브레드보드에서 사용하기 쉽도록 설계되어 있습니다.

보드에는 이미 다음 부품들이 포함되어 있습니다.

  • 디커플링 캐패시터
  • 풀업 저항
  • 풀다운 회로

따라서 별도의 추가 회로 없이 바로 사용할 수 있습니다.

헤더핀만 납땜하면 브레드보드에 꽂아서 사용할 수 있습니다.

크기는 다음과 같습니다.

무게 : 1.8g

크기 : 30.6 × 17.6 × 2.7 mm

매우 작아서 프로젝트 내부에 쉽게 통합할 수 있습니다.


■ 어떤 프로젝트에 유용할까?

  1. 다중 환경 센서 시스템

제가 개발 중인 식물 관리 IoT 시스템처럼 여러 개의 화분 상태를 동시에 측정하는 경우 활용할 수 있습니다.

예를 들어,

  • 토양 수분 센서
  • 온도 센서
  • 조도 센서

를 여러 측정 지점에 설치할 수 있습니다.

1. 다수의 IMU 배열

로봇 공학이나 모션 캡처 시스템에서는 여러 개의 IMU 센서를 동시에 사용해야 할 때가 있습니다.

대부분 동일한 I2C 주소를 사용하기 때문에 TCA9548A가 거의 필수 부품이 됩니다.

2. 다중 OLED 디스플레이

OLED 모듈 역시 주소 변경 범위가 제한적인 경우가 많습니다.

TCA9548A를 사용하면 여러 개의 OLED를 독립적으로 제어할 수 있습니다.

3. 연구용 데이터 수집 시스템

연구실에서 다수의 온도 센서, 압력 센서, 진동 센서를 연결해야 할 경우 매우 유용합니다.

특히 센서 주소를 변경할 수 없는 경우 거의 유일한 해결책이 되기도 합니다.


■ 마무리

TCA9548A는 복잡한 기능을 제공하는 칩은 아니지만, I2C 기반 프로젝트를 확장할 때 매우 강력한 도구입니다.

특히 동일한 주소를 사용하는 센서를 여러 개 연결해야 하는 상황에서는 사실상 필수 부품이라고 할 수 있습니다.

ESP32나 Arduino 프로젝트에서 센서 개수가 늘어나기 시작했다면, TCA9548A를 활용하여 깔끔하고 확장성 있는 시스템을 구성해 보시기 바랍니다.

개인적으로는 여러 개의 동일한 환경 센서나 IMU를 연결해야 하는 프로젝트를 진행할 때 한 번쯤 반드시 알아두어야 할 부품이라고 생각합니다.

+ Recent posts