Skip to main content

Grove - 8通道I²C多路复用器/I²C集线器(TCA9548A)

我们已经发布了Grove - I2C Hub(4端口)Grove - I2C Hub(6端口)。等等,还不够吗?好吧,我们知道你在寻求更多。这不,我们为你带来了Grove - 8通道I2C Hub。

更重要的是,这不仅仅只是端口数量的叠加。我们都知道,在同一个总线系统中,I2C设备必须使用不同的地址,即使使用Grove I2C Hub(4或6端口),这个规则依然适用。然而,借助Grove - 8通道I2C Hub,你可以将最多8个具有相同地址的I2C设备连接到同一个Grove I2C系统中。这都要归功于TCA9548A I2C多路复用芯片。它采用时分复用技术,使得同一个控制器可以控制8个具有相同地址的I2C设备。你再也不用担心地址冲突的问题了。

功能特点

  • 8个Grove I2C端口
  • 支持多个具有相同I2C地址的设备
  • 支持3.3V/5V系统

支持平台

Arduino树莓派

入门指南

读取连接在Grove - 8通道I2C Hub上的设备的I2C地址

所需材料

Seeeduino XIAOGrove 面包板Grove - 8通道I2C多路复用器/I2C Hub (TCA9548A)
立即获取立即获取立即获取

我们还需要最多8个I2C设备,请点击这里找到你喜欢的Grove I2C设备。 以下为例,我们将使用三个I2C设备。

硬件连接

将I2C Hub连接到Seeeduino XIAO的I2C接口,并将每个I2C设备连接到每个hub。

软件代码

#include "TCA9548A.h"

// if you use the software I2C to drive, you can uncommnet the define SOFTWAREWIRE which in TCA9548A.h.
#ifdef SOFTWAREWIRE
#include <SoftwareWIRE.h>
SoftwareWire myWIRE(3, 2);
TCA9548A<SoftwareWire> TCA;
#define WIRE myWIRE
#else
#include <Wire.h>
TCA9548A<TwoWire> TCA;
#define WIRE Wire
#endif

#define SERIAL Serial

void setup()
{
SERIAL.begin(115200);
while(!SERIAL){};

//WIRE.begin();
TCA.begin(WIRE);
//defaut all channel was closed
//TCA.openAll();
//TCA.closeAll();

// Select the channels you want to open. You can open as many channels as you want
TCA.openChannel(TCA_CHANNEL_0); //TCA.closeChannel(TCA_CHANNEL_0);
TCA.openChannel(TCA_CHANNEL_1); //TCA.closeChannel(TCA_CHANNEL_1);
TCA.openChannel(TCA_CHANNEL_2); //TCA.closeChannel(TCA_CHANNEL_2);
TCA.openChannel(TCA_CHANNEL_3); //TCA.closeChannel(TCA_CHANNEL_3);
TCA.openChannel(TCA_CHANNEL_4); //TCA.closeChannel(TCA_CHANNEL_4);
TCA.openChannel(TCA_CHANNEL_5); //TCA.closeChannel(TCA_CHANNEL_5);
TCA.openChannel(TCA_CHANNEL_6); //TCA.closeChannel(TCA_CHANNEL_6);
TCA.openChannel(TCA_CHANNEL_7); //TCA.closeChannel(TCA_CHANNEL_7);

}

void loop()
{

uint8_t error, i2cAddress, devCount, unCount;

SERIAL.println("Scanning...");

devCount = 0;
unCount = 0;
for(i2cAddress = 1; i2cAddress < 127; i2cAddress++ )
{
WIRE.beginTransmission(i2cAddress);
error = WIRE.endTransmission();

if (error == 0)
{
SERIAL.print("I2C device found at 0x");
if (i2cAddress<16) SERIAL.print("0");
SERIAL.println(i2cAddress,HEX);
devCount++;
}
else if (error==4)
{
SERIAL.print("Unknow error at 0x");
if (i2cAddress<16) SERIAL.print("0");
SERIAL.println(i2cAddress,HEX);
unCount++;
}
}

if (devCount + unCount == 0)
SERIAL.println("No I2C devices found\n");
else {
SERIAL.print(devCount);
SERIAL.print(" device(s) found");
if (unCount > 0) {
SERIAL.print(", and unknown error in ");
SERIAL.print(unCount);
SERIAL.print(" address");
}
SERIAL.println();
}
SERIAL.println();
delay(1000);
}
  • 步骤1 从资源中下载库文件,并将“zip”库添加到您的Arduino IDE中。请参考如何安装Arduino库

  • 步骤2 找到示例代码并将其上传到您的板子上。请参考如何上传代码

  • 步骤3 上传代码后,您将在串行监视器中看到每个设备的I2C地址。地址0x70是I2C Hub的I2C地址。

在线原理图查看器

资源

技术支持与产品讨论

感谢您选择我们的产品!我们为您提供多种支持,以确保您在使用我们的产品时能够尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...