Gravity: I2C级联扩展器

简介

Gravity: I2C扩展器专门用于解决I2C器件地址的冲突,通过这款扩展器的转接,连接到主控板同一个I2C口上的多个相同地址的I2C器件就可以正常通信并使用了。

当你辛辛苦苦找到了所需的传感器,并且想在主控板的I2C口上级联2个或者更多的传感器,但不久你发现传感器的I2C地址竟然是固定的!也就是说,不能在同一个I2C口上使用多个传感器!天啊,这可怎么办啊?我不想再换传感器了。别慌!DFRobot的Gravity: I2C扩展器就是专门解决I2C地址的冲突。通过这个扩展器的转接,你可以在同一个I2C口上接多个相同地址的I2C器件并且正常使用啦。

这个扩展器易于使用,即插即用,无需焊接。1个扩展器上有8个I2C接口,这就意味着:1个扩展器转接后,可以在同一个I2C口上接8个相同地址的器件并正常使用。这个扩展器默认的地址为0x70,地址是可以改变的,根据你的需要,可以在0x70~0x77之内做设定。理论上,在0x70~0x77的地址内可以级联8个扩展器,每个扩展器又可以接8个相同地址的器件,这就实现了同一个I2C口接64个相同地址的器件并正常使用,非常的强大!

技术规格

引脚说明

标号 名称 功能描述
+ VCC 电源正极(3.3~5V)
- GND 电源负极(0V)
C SCL I2C时钟信号线SCL
D SDA I2C数据信号线SDA
R RESET 复位,低电平有效

引脚说明

拨码开关说明: 如上图所示,拨码开关默认全部拨向右端,即标有‘0’的一端,此时A2A1A0全部为低电平,因此模块的默认地址为0x70。如拨码开关全部拨向左端,即标有‘1’的一端,此时A2A1A0全部为高电平,此时地址为0x77。您可以根据需要,调节拨码开关来设定地址,可在0x70~0x77内做设定。

使用教程

本教程以两块OLED显示屏为例来演示如何使用这款I2C扩展器。 本例中采用的OLED显示屏,I2C地址是固定的,因此这两块OLED屏幕不能直接同时级联到同一个I2C口上使用。但通过I2C扩展器的转接,主控板的一个I2C口就能正常的同时使用这2块OLED显示屏了。

准备

' 硬件'

软件

接线图

操作步骤

样例代码

请先下载[https://github.com/DFRobot/DFRobot_I2C_Multiplexer/archive/master.zipDFRobot_I2C_Multiplexer库][https://github.com/DFRobot/DFRobot_SSD1306/archive/master.zipDFRobot_SSD1306库] [https://github.com/DFRobot/DFRobot_Display/archive/master.zipDFRobot_Display库]并安装。 如何安装库?

 /*!
  * file Multi_SSD1306.ino
  *
  * Download Display library https://github.com/DFRobot/DFRobot_Display.git
  * Download SSD1306 library https://github.com/DFRobot/DFRobot_SSD1306.git
  *
  * Connect the 2 SSD1306 devices to the port 0 and  port 1 on the i2cmultiplexer respectively and then connect the I2cmultiplexer and Arduino, download this sample.
  * @n The address of I2C and the name of SSD1306 display module can be seen
  *
  * Copyright   [DFRobot](http://www.dfrobot.com), 2016
  * Copyright   GNU Lesser General Public License
  *
  * version  V0.1
  * date  2018-5-10
  */
#include "DFRobot_SSD1306_I2C.h"
#include "DFRobot_I2CMultiplexer.h"
#include "DFRobot_Character.h"
#include "DFRobot_GT30L.h"
#include <Wire.h>
#include <SPI.h>

/*Create an OLED object, the address is 0x3c*/
DFRobot_SSD1306_I2C OLED(0x3c);

/*Create an I2C Multiplexer object, the address of I2C Multiplexer is 0X70*/
DFRobot_I2CMultiplexer I2CMulti(0x70);


void setup(void){
  /*Let the OLED on port 0 display characters*/
  I2CMulti.selectPort(0);       //Select port
  OLED.begin();                 //initialize OLED
  OLED.setTextColor(1);
  OLED.setTextSize(2);

  OLED.setCursor(0,0);          // Set the corrdianate of characters
  OLED.print("device A");       //Display characters
  OLED.setCursor(0,30);
  OLED.print("addr:0x3C");

  /*Let OLED on  port 1 display  characters */
  I2CMulti.selectPort(1);
  OLED.begin();
  OLED.setTextColor(1);
  OLED.setTextSize(2);

  OLED.setCursor(0,0);
  OLED.print("device B");
  OLED.setCursor(0,30);
  OLED.print("addr:0x3C");
}

void loop(void){
}

结果

如下图所示,虽然两个OLED屏幕的I2C地址是一样的,但通过I2C扩展器的转接后,都能正常显示了。

![I2c_mutiplexer_ssd1306.png](http://imgtest.dfrobot.com.cn/DFRobotCnWikiImage/I2c_mutiplexer_ssd1306.png "I2c_mutiplexer_ssd1306.png")

程序框架

通过上述的案例,我们已经了解了这款I2C扩展器的硬件和软件是怎么使用的。现在对软件进一步概括,可得出如下的软件框架,该框架可更好的帮助你理解软件库并应用到您的项目中。


    #include "DFRobot_I2CMultiplexer.h"
    #include <Wire.h>

    DFRobot_I2CMultiplexer I2CMulti(0x70);   //Create an I2C Multiplexer Object;Default Address: 0x70

    void setup(void)
    {
      I2CMulti.selectPort(0);       //Select Port 0
      ...                           //Initialize the I2C Device on Port 0

      I2CMulti.selectPort(1);      //Select Port 1
      ...                          //Initialize the I2C Device on Port 1

       .
       .
       .

      I2CMulti.selectPort(8);      //Select Port 8
      ...                          //Initialize the I2C Device on Port 8
    }

    void loop(void)
    {
      I2CMulti.selectPort(0);       //Select Port 0
      ...                           //Communicate with the I2C Device on Port 0

      I2CMulti.selectPort(1);      //Select Port 1
      ...                          //Communicate with the I2C Device on Port 1

       .
       .
       .

      I2CMulti.selectPort(8);      //Select Port 8
      ...                          //Communicate with the I2C Device on Port 8
    }

Mind+(基于Scratch3.0)图形化编程

1、下载及安装软件。下载地址:http://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装 2、切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程 3、“扩展”中选择“主控板”中的“Arduino Uno”,“显示器”中选择“OLED2864显示屏”,“功能模块”选择“I2C级联扩展器”。 详细教程:Mind+基础wiki教程-加载扩展库流程 4、进行编程,程序如下图: 5、菜单“连接设备”,“上传到设备” 6、程序上传完毕后,即可看到效果。详细教程:Mind+基础wiki教程-串口打印

Gravity:I2C扩展器mind+示例程序

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。 |

更多

DFshopping_car1.png DFRobot商城购买链接