Pubblicato il

Collegare da 2 a 8 Dispositivi Display I2C con Multiplexer

Premessa: Sulla stessa porta I2C, DFRobot Gravity: I2C Multiplexer risolve il conflitto di indirizzi e consente la normale comunicazione con più dispositivi I2C con lo stesso indirizzo.

Hai appena trovato il sensore che ti serviva e vuoi collegarne due o più alla porta I2C della tua scheda madre, ma in seguito ti sei accorto che hanno l’indirizzo I2C fisso!Ovvero, non puoi usarli sulla stessa porta I2C Sei sfortunato?Ora non ti preoccupare!DFRobot Gravity: I2C Multiplexer può facilmente risolvere il conflitto di indirizzi sulla stessa porta I2C.

Questo multiplexer I2C è facile da usare, collegare e collegare e non è necessario saldare.1 multiplexer ha 8 porte I2C, questo significa che puoi collegare 8 dispositivi con lo stesso indirizzo alla stessa porta I2C da 1 multiplexer.L’indirizzo I2C predefinito del multiplexer è 0x70 e puoi regolare da 0x70 a 0x77. In teoria, potresti collegare 8 multiplexer all’indirizzo 0x70 ~ 0x77, per controllare 64 dispositivi con lo stesso indirizzo. Così potente!

CARATTERISTICHE TECNICHE:

  • Tensione di esercizio: 3,3~5,0 V
  • Tipo di connettore: PH2.0-4P
  • Livello interfaccia: alto 3,3 V, basso 0 V
  • Protocollo di interfaccia: I2C (IIC)
  • Frequenza di clock I2C: 100K, 400K
  • Quantità porta I2C: 8
  • Indirizzo I2C predefinito: 0x70 (il quadrante passa tutto a 0)
  • Intervallo di indirizzi I2C: 0x70~0x77
  • Dimensioni: 32 * 32 mm / 1,26 * 1,26 pollici

LISTA MATERIALI:

PANORAMICA DELLA SCHEDA:

  • numero Etichetta Descrizione
  • VCC Alimentazione VCC (3,3 ~ 5 V)GND Potenza GND(0V)
  • C SCL I2C Clock Line-SCL
  • D SDA Linea dati I2C-SDA
  • R RIPRISTINA RESET PIN, Attivo Basso

Descrizione dell’interruttore del quadrante : come mostrato nell’immagine sopra, gli interruttori del quadrante sono tutti ruotati a destra (contrassegnati con “0”) per impostazione predefinita, in questo momento, A2, A1, A0 sono tutti di basso livello, quindi l’indirizzo predefinito del multiplexer è 0 x 70. Se gli interruttori di selezione sono tutti ruotati a sinistra (contrassegnati con “1”), allora A2, A1, A0 sono tutti di alto livello e l’indirizzo è 0 x 77. È possibile regolare gli interruttori di selezione secondo necessità per impostare il indirizzo. Puoi impostarlo da 0x70 a 0x77.

Questo tutorial utilizza due display OLED come esempio per dimostrare come utilizzare questo multiplexer I2C.Il display OLED utilizzato in questo esempio ha l’indirizzo I2C fisso, quindi questi due display OLED non possono essere collegati direttamente alla stessa porta I2C.Tuttavia, tramite trasferimento di questo multiplexer I2C, questi due display OLED possono essere normalmente utilizzati contemporaneamente sulla stessa porta I2C.

SCHEMA DI COLLEGAMENTO:

CODICE DI ESEMPIO:

Librerie:

  • DFRobot_I2C_Multiplexer LGPL: github.com/DFRobot/DFRobot_I2C_Multiplexer/archive/master.zip
  • DFRobot_SSD1306, DFRobot_Character, DFRobot_GT30L LGPL: github.com/DFRobot/DFRobot_SSD1306/archive/master.zip
  • DFRobot_Display LGPL: github.com/DFRobot/DFRobot_Display/archive/master.zip
  • Wire LGPL: arduino.cc/en/Reference/Wire
  • SPI LGPL: arduino.cc/en/Reference/SPI
#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){
}

Attraverso l’esempio sopra, abbiamo già capito come utilizzare la libreria hardware e software di questo multiplexer I2C.Ora riassumiamo ulteriormente e otteniamo il seguente framework software.Questo ti aiuterà a capire meglio la libreria software e ad applicarla al tuo progetto.

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

/*Create an I2C Multiplexer object, the default address of I2C Multiplexer is 0X70*/
DFRobot_I2CMultiplexer I2CMulti(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
}

Buon progetto.