多个传感器如何使用单独的I2C总线连接到Nucleo板
扫描二维码
随时随地手机看文章
您有两个传感器,具有相同的I2C地址,您希望为每个传感器使用单独的I2C总线连接到Nucleo板。
您有一个微控制器和两个相同的传感器,这意味着它们具有相同的I2C地址。如果没有多路复用器或配置传感器的I2C地址的可能性,则无法将它们连接到相同的I2C总线。然而,STM32 Nucleo 64 F401RE板提供了几个独立的I2C总线,允许将每个传感器连接到其单独的I2C总线,以避免地址冲突。
在本例中,我们使用支持多个I2C总线的STM32 Nucleo 64 F401RE板。作为传感器,我们有两个盛思锐SCD41二氧化碳传感器评估板。您可以使用任意两个传感器,无论它们是相同的产品还是具有相同I2C地址的不同传感器。评估板很方便,因为我们可以将它们与评估套件中包含的电缆连接起来,允许我们在不焊接面包板的情况下连接所有东西。
一般工作原理
我们要连接的两个SCD41传感器的I2C地址为0x62,无法更改。因此,为了从微控制器与两个传感器通信,我们将为每个传感器使用单独的I2C总线。每个I2C总线需要一个引脚用于SDA线,一个引脚用于SCL线。在软件方面,我们需要初始化每个I2C总线的“TwoWire”实例并配置引脚。“TwoWire”是标准Wire库的一部分。作为最后一步,我们将创建传感器驱动程序类的两个实例,并使用标准I2C总线初始化一个实例,使用自定义I2C总线初始化另一个实例。
布线
STM32 Nucleo 64 F401RE板具有预定义的I2C引脚。我们连接到电路板的Arduino引脚头,并使用I2C1和I2C2的预定义引脚。
关于STM32 Nucleo 64 F401RE板的更多信息可以在st.com上找到。
上拉电阻
在每对I2C线(即数据(SDA)和时钟(SCL)线上安装上拉电阻对于良好的信号质量和健壮的通信非常重要。您可以在I2C上拉电阻介绍中了解更多信息。
Nucleo板和开发套件板都有内建的上拉电阻。因此,我们需要将一个电阻连接到每条I2C通信线路上。在这个例子中使用了四个8.26欧姆电阻,并且使用面包板进行布线。
接线图
R.1到R.4代表阻值为8.26欧姆的电阻器。
•SEK-SCD41 A引脚1至R.1 (SCL,黄色)
•r1到Nucleo Arduino连接器引脚15 (SCL,黄色)
•r1到Nucleo Arduino连接器3V3
•SEK-SCD41 A引脚2到Nucleo Arduino连接器GND
•SEK-SCD41 A引脚3到Nucleo Arduino连接器3V3(传感器供电电压,红色电缆)
•SEK-SCD41 A引脚4到R.2 (SDA,绿色)
•R.2到Nucleo Arduino连接器引脚14 (SDA,绿色)
•R.2到核子Arduino连接器3V3
•SEK-SCD41 B引脚1至R.3 (SCL,黄色)
•R.3到Nucleo Arduino连接器引脚6 (SCL,黄色)
•R.3到Nucleo Arduino连接器3V3
•SEK-SCD41 B引脚2到Nucleo Arduino连接器GND(接地,黑色电缆)
•SEK-SCD41 B引脚3到Nucleo 3.3V(传感器电源电压,红色电缆)
•SEK-SCD41 B引脚4到R.4 (SDA,绿色)
•R.4到Nucleo Arduino连接器引脚3 (SDA,绿色)
•R.4到核子Arduino连接器3V3
我们稍后在软件中的配置必须记住的是我们用于I2C总线的引脚。
软件设置
首先,您需要包含Wire库:
为了用正确的引脚配置I2C总线,我们需要实例化两个“TwoWire”实例,并传递用于I2C通信的引脚。
它们的作用域应该是全局的,因此定义在‘ setup() ’和‘ loop() ’之外。
然后,通过I2C总线向传感器发送命令的代码需要知道哪个传感器使用哪个总线。因此,您需要相应地配置传感器实例。首先,为每个传感器创建一个驱动程序实例。它们的作用域应该是全局的,这样就可以从‘ setup() ’和‘ loop() ’中引用它们。
然后,在‘ setup() ’函数中,为传感器分配I2C总线:
现在可以向传感器发送任何I2C命令,例如启动测量和检索值。
本文编译自hackster.io