Мультплексор подключается по I2C шине к микроконтроллеру (ведущему устройству), а датчики и модули (ведомые утройства) подключаются к портам мультиплексора. Таким образом мультиплексор выступает посредником в обмене данными между ведущим и ведомыми устройствами. Для начала необходимо обратиться по адресу мультиплексора (по умолчанию 0x70) и записать в регистр конфигурации мультиплексора номер порта, с которым необходимо работать. Можно указать сразу несколько портов. Номер активного порта определяется единицей в соответствующем разряде регистра. Например, 00000100 означает, что активным станет третий порт.
Далее работа осуществляется так же, как если бы ведомое устройство было подключено напрямую к микроконтроллеру. То есть можно использовать привычные библиотеки и обращаться по адресу ведомого устройства (дисплея, датчика и т.п.).
Если необходимо переключиться на другое устройство, то для этого досаточно просто записать в регистр мультиплексора номер нужного порта.
Стоит обратить внимание, что если адрес какого-либо периферийного устройства совпадает с адресом мультиплексора, то необходимо изенить адрес мультиплексора с помощью портов A1, A2, A3.
Кроме того, мультиплексор может работать как преобразователь логических уровней независимо по каждому каналу. Это удобно, если необходимо подключать трехвольтовые периферийные модули к пятивольтовой плате Arduino.
Модуль имеет следующие контакты:
- Vin – VCC, вывод питания, +5 В;
 - GND – GND, вывод питания, «земля»;
 - SCL – тактирующая линия шины I2C для связи мультиплексора с ведущим устройством (Arduino, МК);
 - SDA – линия данных шины I2C для связи мультиплексора с ведущим устройством (Arduino, МК);
 - RST – линия сброса, для сброса соединить с GND;
 - A0 – бит адреса мультиплексора; если соединить с Vin, то адрес увеличится на 1;
 - A1 – бит адреса мультиплексора; если соединить с Vin, то адрес увеличится на 2;
 - A2 – бит адреса мультиплексора; если соединить с Vin, то адрес увеличится на 4;
 - SС0 … SС7 – линии SСL для периферийных устройств;
 - SD0 … SD7 – линии SDA для периферийных устройств;
 
Пример выбора порта
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  | 
						#include <Wire.h> 	void setup() { 	Wire.begin(); 	Serial.begin(9600); 	for (byte i=0; i<8; i++) { 	// Записываем номер порта в регистр конфигурации 	Wire.beginTransmission(0x70); 	Wire.write(i); 	Wire.endTransmission(); 	// Читаем номер активного порта из регистра 	Wire.requestFrom(0x70, 1); 	byte j = Wire.read(); 	Serial.println(j); 	delay(500); 	} 	} 	void loop() { 	}  | 
					
Управление несколькими OLED-дисплеями
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95  | 
						#include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_Address 0x3C Adafruit_SSD1306 oled(1); #include "Wire.h" #define TCAADDR 0x70 void tcaselect(uint8_t i) {   if (i > 7) return;   Wire.beginTransmission(TCAADDR);   Wire.write(1 << i);   Wire.endTransmission();  } void setup() { oled.begin(SSD1306_SWITCHCAPVCC, OLED_Address); Wire.begin();  tcaselect(0);   oled.begin();   oled.clearDisplay();   oled.display();   tcaselect(1);   oled.begin();   oled.clearDisplay();   oled.display();   tcaselect(2);   oled.begin();   oled.clearDisplay();   oled.display();   tcaselect(3);   oled.begin();   oled.clearDisplay();   oled.display(); tcaselect(0);                 // Display a start text.   oled.begin();   oled.clearDisplay();   oled.setTextColor(WHITE);   oled.setCursor(20,0);   oled.println("4 Oled");   oled.setCursor(5,16);   oled.println("Display test.");   oled.display();   delay(3000); } void loop()  {   tcaselect(0); // Text to Oled display 0   oled.begin();   oled.clearDisplay();   oled.setTextColor(WHITE);   oled.setCursor(10,0);   oled.println("Display 0.");   oled.setCursor(4,11);   oled.println("Hello ");   oled.display();   tcaselect(1);//Text to Oled display 1   oled.begin();   oled.clearDisplay();   oled.setTextColor(WHITE);   oled.setCursor(0,0);   oled.println("Display 1.");   oled.setCursor(18,16);   oled.println("WORLD!");   oled.display();   tcaselect(2);//Text to Oled display 2   oled.begin();   oled.clearDisplay();   oled.setTextColor(WHITE);   oled.setCursor(0,0);   oled.println("Display 2.");   oled.setCursor(0,19);   oled.println("Knock");   oled.display();   tcaselect(3);//Text to Oled display 3   oled.begin();   oled.clearDisplay();   oled.setTextColor(WHITE);   oled.setCursor(0,0);   oled.println("Display 3.");   oled.setTextSize(2);    oled.setCursor(0,16);   oled.println("KNOCK!");   oled.setTextSize(1);   oled.display();   delay(10000); // Wait 10 sec. }  | 
					









