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 XIAO | Grove 面包板 | 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地址。
在线原理图查看器
资源
- [PDF] TCA9548A_数据手册
- [PDF] 硬件电路图
- [ZiP] Grove 8 通道 I2C Hub 库
技术支持与产品讨论
感谢您选择我们的产品!我们为您提供多种支持,以确保您在使用我们的产品时能够尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。