Produktbilder dienen ausschließlich zu Informationszwecken und können je nach Charge und Lieferant geringfügige Unterschiede aufweisen. Produktspezifikationen und Preise können ohne vorherige Ankündigung geändert werden. Wir tun unser Bestes, um der Produktseite möglichst genaue und richtige Spezifikationen hinzuzufügen, es ist jedoch möglich, dass diese nicht ganz korrekt sind. Sollten Sie einen solchen Fall feststellen, melden Sie ihn uns bitte.
Das Produkt ist für Fachleute bestimmt und erfordert qualifiziertes und autorisiertes Personal. Dem Produkt liegt keine Montage-/Gebrauchsanleitung bei . Die Inbetriebnahme des Produktes durch nicht qualifizierte Personen führt zum Verlust der Garantie gemäß den AGB auf der Seite.
Die angegebenen technischen Spezifikationen (Strom, Leistung usw.) stellen maximale zulässige Werte unter idealen Betriebsbedingungen dar. Für einen sicheren Betrieb und eine optimale Lebensdauer wird empfohlen, das Produkt im Dauerbetrieb mit höchstens 50 % der angegebenen Maximalwerte zu verwenden.
I/O-Expander-Modul MCP23017, 16 Bit, I2C, CJMCU-2317
Das MCP23017 CJMCU-2317 Expansionsmodul fügt einer Entwicklungsplatine über I2C 16 digitale Ein-/Ausgangspins hinzu, mit konfigurierbarer Adresse über A0-A2 für bis zu 8 Module auf demselben Bus, zwei Interrupt-Ausgängen INTA und INTB, internem Pull-up an jedem Pin sowie Kompatibilität mit Arduino, ESP32, STM32 und Raspberry Pi, ideal für Relais, LEDs, Tasten und Panels mit vielen Ein- oder Ausgängen.
Mit dem Kauf dieses Produkts erhalten Sie 1,15 RON an Treuepunkten.
International fast shipping within EU. Free Shipping for orders above 100 EUR in most EU countries.
We ship from our stock within 24H
Sie erhalten bei jeder Bestellung Punkte im Wert von 5 %.
Das MCP23017 CJMCU-2317 Expander-Modul fügt einer Entwicklungsplatine über die I2C-Schnittstelle 16 digitale Ein- und Ausgangspins hinzu und kombiniert die MCP23017-Schaltung mit zwei Pinreihen für die schnelle Montage auf einem Breadboard. Es eignet sich, wenn die Anzahl der GPIO-Pins des Mikrocontrollers nicht ausreicht, zum Beispiel zur Ansteuerung mehrerer Relais, LEDs, LED-Anzeigen, Tasten oder Schalter oder zum Einlesen einer großen Anzahl digitaler Eingänge.
Der MCP23017-Chip ist ein 16-Bit-I2C-Expander, organisiert in zwei Ports mit jeweils 8 Pins, GPA0 - GPA7 und GPB0 - GPB7. Jeder Pin kann einzeln als Eingang oder Ausgang konfiguriert werden und verfügt über einen intern zuschaltbaren 100-kOhm-Pull-up-Widerstand, der per Software aktiviert werden kann. Die Kommunikation verwendet die I2C-Schnittstelle mit Geschwindigkeiten von 100 kHz, 400 kHz oder 1,7 MHz, und die Adresse auf dem Bus wird über die Pins A0, A1 und A2 festgelegt, wodurch 8 mögliche Adressen zwischen 0x20 und 0x27 entstehen und der Anschluss von bis zu 8 identischen Modulen am selben SDA-SCL-Paar ermöglicht wird. Das Modul verfügt über zwei programmierbare Interrupt-Ausgänge INTA und INTB, die automatisch erzeugt werden, wenn sich der Zustand eines Eingangs ändert, über ein Polaritätsregister zur logischen Invertierung der Eingänge und über eine interne Reset-Schaltung beim Einschalten.
Zu den Hauptmerkmalen zählen der MCP23017 in SOIC-Gehäuse, das integrierte Widerstandsnetzwerk für Pull-ups auf den I2C-Leitungen, zwei Pinreihen für Versorgung, Steuerung und die 16 I/O-Kanäle sowie die Befestigungsbohrungen auf der Platine; die Versorgung erfolgt direkt über die VCC- und GND-Pins des Moduls.
Über die I2C-Schnittstelle ist das Modul kompatibel mit Arduino, ESP32, STM32, Raspberry Pi und jeder anderen Entwicklungsplatine oder jedem Mikrocontroller, der über SDA- und SCL-Pins verfügt.
Spezifikationen:
Versorgungsspannung: 3,3 - 5,5 VDC
Ruhestrom: 1 uA (maximal)
Chip: MCP23017
Schnittstelle: I2C (IIC)
Anzahl I/O-Pins: 16 (2 Ports x 8, GPA0 - GPA7 und GPB0 - GPB7)
I2C-Frequenz: bis zu 1,7 MHz (100 kHz / 400 kHz / 1,7 MHz)
Maximaler Strom pro I/O-Pin: 25 mA
Gesamtstrom des Gehäuses: 125 mA
Interne Pull-up-Widerstände: 100 kOhm, individuell pro Pin konfigurierbar
Interrupt-Ausgänge: INTA, INTB, konfigurierbar als active-high, active-low oder open-drain
I2C-Adresse: 0x20 - 0x27
Adresskonfigurations-Pins: A0, A1, A2 (bis zu 8 Module am selben Bus)
Betriebstemperatur: -40 - 85 Grad Celsius
Abmessungen: 21 x 26,5 mm
Layout:

1. MCP23017-Expander-Schaltung: Der originale integrierte Schaltkreis im SOIC-Gehäuse, der I2C-Befehle in 16 digitale Ein- oder Ausgangsleitungen umsetzt.
2. Pull-up-Widerstandsnetzwerk: Integriertes Widerstandsnetzwerk als Pull-up für die SDA- und SCL-Leitungen, ausreichend für kurze Verbindungen am selben Bus.
3. Header mit Versorgungs- und Steuerpins: Fasst die Pins VCC, GND, SCL, SDA, RESET, A0, A1, A2, INTA und INTB zusammen.
4. Header mit Ein-/Ausgangspins: Fasst die 16 digitalen Kanäle GPA0 - GPA7 und GPB0 - GPB7 zusammen.
5. Befestigungsbohrungen: Bohrungen zur Montage der Platine auf einer Halterung oder in einem Gehäuse.
Pinbelegung:
| Steckverbinder | Pin | Funktion |
|---|---|---|
| Header Versorgung und Steuerung | VCC | Versorgung 3,3 - 5,5 VDC |
| Header Versorgung und Steuerung | GND | Gemeinsame Masse |
| Header Versorgung und Steuerung | SCL | I2C-Taktleitung |
| Header Versorgung und Steuerung | SDA | I2C-Datenleitung |
| Header Versorgung und Steuerung | RESET | Reset aktiv bei LOW-Pegel, für den normalen Betrieb an VCC anschließen |
| Header Versorgung und Steuerung | A0, A1, A2 | I2C-Adresskonfiguration, jeder Pin an GND oder VCC |
| Header Versorgung und Steuerung | INTA | Interrupt-Ausgang Port A |
| Header Versorgung und Steuerung | INTB | Interrupt-Ausgang Port B |
| Header I/O | GPA0 - GPA7 | 8 digitale Ein- oder Ausgangspins, Port A |
| Header I/O | GPB0 - GPB7 | 8 digitale Ein- oder Ausgangspins, Port B |
| A2 | A1 | A0 | I2C-Adresse |
|---|---|---|---|
| GND | GND | GND | 0x20 |
| GND | GND | VCC | 0x21 |
| GND | VCC | GND | 0x22 |
| GND | VCC | VCC | 0x23 |
| VCC | GND | GND | 0x24 |
| VCC | GND | VCC | 0x25 |
| VCC | VCC | GND | 0x26 |
| VCC | VCC | VCC | 0x27 |
Schaltplan und I2C-Adresse:


Der Anschlussplan zeigt die minimale Verbindung zwischen dem Modul und der Entwicklungsplatine über die Pins VCC, GND, SCL und SDA, und die Adresstabelle zeigt genau die Kombinationen der Pins A0, A1 und A2, die die 8 möglichen Adressen zwischen 0x20 und 0x27 ergeben, für die Verwendung mehrerer Module am selben Bus.
Verwendung:
Verbinden Sie die VCC- und GND-Pins des Moduls mit einer 3,3-V- oder 5-V-Quelle, abhängig vom Logikpegel der Entwicklungsplatine, und schließen Sie SCL und SDA an die entsprechenden I2C-Leitungen an.
Verbinden Sie den RESET-Pin direkt mit VCC oder über einen 10-kOhm-Widerstand, damit das Modul nicht im Reset hängen bleibt und korrekt auf dem Bus erkannt wird.
Stellen Sie die gewünschte I2C-Adresse ein, indem Sie die Pins A0, A1 und A2 mit GND oder VCC verbinden, zum Beispiel alle drei mit GND für die Adresse 0x20, gemäß der Adresstabelle.
Konfigurieren Sie alle 16 Pins GPA0 - GPA7 und GPB0 - GPB7 per Programm als Eingang oder Ausgang, bevor Sie deren Zustand lesen oder schreiben, da nach dem Einschalten alle Pins standardmäßig Eingänge sind.
Für Eingänge, die mit Tastern oder Schaltern verbunden sind, aktivieren Sie den internen Pull-up per Software und verzichten Sie auf zusätzliche externe Widerstände, sofern keine andere Konfiguration erforderlich ist.
Für Lasten wie Relais oder LEDs beachten Sie den maximalen Strom von 25 mA pro I/O-Pin und den Gesamtstrom von 125 mA des Gehäuses; für größere Lasten verwenden Sie Transistoren oder separate Relaismodule.
Für Anwendungen mit mehreren Modulen am selben Bus weisen Sie jedem eine eindeutige Adresse über die Kombination A0, A1, A2 zu, bis maximal 8 Module gleichzeitig.
Um die ständige Abfrage des I2C-Busses zu reduzieren, verwenden Sie die Ausgänge INTA und INTB, die auf LOW wechseln, wenn sich ein Eingang am entsprechenden Port ändert, und lesen Sie die Interrupt-Register aus, um den Pin und den Zustand zu ermitteln, die den Interrupt ausgelöst haben.
Für Verbindungen, die länger als einige Zentimeter sind, oder bei mehreren Modulen am selben Bus, fügen Sie externe 4,7-kOhm-Pull-up-Widerstände an SDA und SCL hinzu, zusätzlich zum internen Netzwerk auf dem Modul.
Maßzeichnung:

- Kommunikationsschnittstelle
- I2C
- Hauptchip
- MCP23017
- Anzahl der I/O-Kanäle
- 16
Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.
Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.
Avertismente generale de siguranta:
Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.
Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.
Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.
Nu lasati produsul alimentat nesupravegheat in timpul testelor.
Produsul nu este jucarie si nu este destinat copiilor.
Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.
Identificare produs:
Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.
Producator / Importator / Distribuitor:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Website: www.sigmanortec.ro
Persoana responsabila in UE:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Documentatie si siguranta:
Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].
/*
MCP23017 16-Bit I2C IO Expander - Basic Hardware Test
Board: Arduino Uno (Arduino AVR Boards)
Library: Wire.h only (included with Arduino IDE, no extra library needed)
Wiring:
MCP23017 VCC -> Arduino 5V
MCP23017 GND -> Arduino GND
MCP23017 SCL -> Arduino A5 (SCL)
MCP23017 SDA -> Arduino A4 (SDA)
MCP23017 RESET -> Arduino 5V
MCP23017 A0,A1,A2 -> GND (I2C address 0x20)
MCP23017 GPA0 -> 220 ohm resistor -> LED anode, LED cathode -> GND
This test writes directly to the MCP23017 registers to confirm
the module answers on the I2C bus and that GPA0 can be toggled,
without relying on any external library.
*/
#include <Wire.h>
const uint8_t MCP23017_ADDR = 0x20;
const uint8_t REG_IODIRA = 0x00; // direction register port A
const uint8_t REG_GPIOA = 0x12; // read/write register port A
void mcpWriteRegister(uint8_t reg, uint8_t value) {
Wire.beginTransmission(MCP23017_ADDR);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
bool mcpIsPresent() {
Wire.beginTransmission(MCP23017_ADDR);
return (Wire.endTransmission() == 0);
}
void setup() {
Serial.begin(9600);
Wire.begin();
Serial.println("Scanning for MCP23017 at address 0x20...");
if (!mcpIsPresent()) {
Serial.println("MCP23017 not found, check VCC, GND, SDA, SCL and RESET");
while (1);
}
Serial.println("MCP23017 found on the I2C bus");
// Set GPA0 as output, the rest of port A stays as input
mcpWriteRegister(REG_IODIRA, 0xFE);
}
void loop() {
// Turn GPA0 on
mcpWriteRegister(REG_GPIOA, 0x01);
Serial.println("GPA0 set HIGH, LED should turn on");
delay(1000);
// Turn GPA0 off
mcpWriteRegister(REG_GPIOA, 0x00);
Serial.println("GPA0 set LOW, LED should turn off");
delay(1000);
}
Dieses Tutorial zeigt, wie Sie das Expander-Modul MCP23017 CJMCU-2317 mit einer Arduino-Uno-Platine in Betrieb nehmen, um eine LED zu steuern und den Zustand eines Tasters über die 16 zusätzlichen Pins am I2C-Bus zu lesen. Das Modul ist geeignet, wenn das Projekt mehr digitale Ein- oder Ausgänge benötigt als die auf der Basisplatine verfügbaren Pins, zum Beispiel für Panels mit mehreren LEDs, Tastern oder Relais.

Funktionsweise:
Der MCP23017 kommuniziert mit Arduino über interne Register, die die Bibliothek über I2C schreibt und liest. Zwei Richtungsregister, IODIRA und IODIRB, bestimmen, ob jeder der 8 Pins eines Ports ein Eingang oder ein Ausgang ist, während zwei Register GPIOA und GPIOB den physikalischen Zustand der Pins lesen oder schreiben. Die I2C-Adresse des Moduls wird aus 4 festen Bits gefolgt vom Zustand der Pins A2, A1 und A0 gebildet, was einen Adressbereich zwischen 0x20, wenn alle drei auf GND liegen, und 0x27, wenn alle drei auf VCC liegen, ergibt. In diesem Tutorial bleiben A0, A1 und A2 auf GND, daher antwortet das Modul auf die Adresse 0x20. Die Adafruit_MCP23X17-Bibliothek verbirgt alle diese Register und stellt einfache Funktionen wie pinMode, digitalWrite und digitalRead für jeden der 16 Pins zur Verfügung, die von 0 (GPA0) bis 15 (GPB7) nummeriert sind.
Was Sie benötigen:
- 1 x MCP23017 I2C 16-Bit IO Expander Module
- 1 x Entwicklungsplatine Uno R3 mit Wifi ESP8266, Arduino-kompatibel
- 1 x Breadboard 830 Kontakte MB-102
- 1 x LED 5mm, Weiß
- 1 x Widerstand 220 Ohm
- 1 x Drucktaster 4-polig
- 1 x 40 Dupont-Leitungen 10cm, Stecker-Buchse
Verdrahtung:
Das Modul verwendet nur 4 aktive Leitungen zum Arduino, plus den RESET-Pin und die Adresspins, die direkt an die Stromversorgung oder Masse gelegt werden.
| Produktpin | Verbunden mit | Funktion |
|---|---|---|
| VCC | 5V Arduino Uno | Modulspannung |
| GND | GND Arduino Uno | Gemeinsame Masse |
| SCL | A5 (SCL) Arduino Uno | I2C-Taktleitung |
| SDA | A4 (SDA) Arduino Uno | I2C-Datenleitung |
| RESET | 5V Arduino Uno | Hält das Modul im normalen Betriebszustand |
| A0, A1, A2 | GND | Stellt die I2C-Adresse 0x20 ein |
| GPA0 | Widerstand 220 Ohm dann Anode LED, LED-Kathode auf GND | Gesteuerter Ausgang, LED-Leuchten |
| GPB0 | Ein Anschluss des Tasters, anderer Anschluss auf GND | Eingang mit internem Pull-Up, liest Tasterzustand |
Platine und Bibliotheken:
Wählen Sie in der Arduino IDE die Arduino-Uno-Platine unter Tools > Board > Arduino AVR Boards, ein Paket, das mit Arduino IDE enthalten ist, ohne dass eine zusätzliche Adresse in File > Preferences erforderlich ist. Installieren Sie aus dem Library Manager die Adafruit MCP23017 Arduino Library vom Autor Adafruit, die die Datei Adafruit_MCP23X17.h enthält, und lassen Sie den Manager auch die von dieser benötigte Abhängigkeit Adafruit BusIO installieren. Die grundlegende I2C-Kommunikation verwendet die Bibliothek Wire, die mit Arduino IDE enthalten ist und nicht separat installiert werden muss.
Der Code:
Das folgende Programm initialisiert das Modul mit der Standardadresse 0x20, konfiguriert GPA0 als Ausgang für die LED und GPB0 als Eingang mit Pull-Up für den Taster, dann schaltet die LED an, während der Taster gedrückt wird.
/*
MCP23017 16-Bit I2C IO Expander - Button and LED Example
Board: Arduino Uno (Arduino AVR Boards)
Library: Adafruit MCP23017 Arduino Library (Adafruit_MCP23X17.h) by Adafruit
Library: Wire.h (included with Arduino IDE)
Wiring:
MCP23017 VCC -> Arduino 5V
MCP23017 GND -> Arduino GND
MCP23017 SCL -> Arduino A5 (SCL)
MCP23017 SDA -> Arduino A4 (SDA)
MCP23017 RESET -> Arduino 5V
MCP23017 A0,A1,A2 -> GND (I2C address 0x20)
MCP23017 GPA0 -> 220 ohm resistor -> LED anode, LED cathode -> GND
MCP23017 GPB0 -> push button -> GND (other button terminal)
*/
#include <Adafruit_MCP23X17.h>
Adafruit_MCP23X17 mcp;
const uint8_t LED_PIN = 0; // GPA0
const uint8_t BUTTON_PIN = 8; // GPB0
void setup() {
Serial.begin(9600);
// Initialize the MCP23017 at I2C address 0x20
if (!mcp.begin_I2C(0x20)) {
Serial.println("MCP23017 not found, check wiring and RESET pin");
while (1);
}
// Configure GPA0 as output for the LED
mcp.pinMode(LED_PIN, OUTPUT);
// Configure GPB0 as input with internal pull-up for the button
mcp.pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.println("MCP23017 initialized at address 0x20");
}
void loop() {
// Read the button state, LOW means pressed (pulled to GND)
int buttonState = mcp.digitalRead(BUTTON_PIN);
if (buttonState == LOW) {
mcp.digitalWrite(LED_PIN, HIGH); // turn LED on
} else {
mcp.digitalWrite(LED_PIN, LOW); // turn LED off
}
Serial.print("Button state: ");
Serial.println(buttonState == LOW ? "pressed" : "released");
delay(100);
}
Funktionsweise des Codes:
Am Anfang des Programms wird die Bibliothek Adafruit_MCP23X17.h eingebunden und das Objekt mcp erstellt, über das alle Befehle an das Modul gesendet werden. In der setup-Funktion wird der seriellen Port mit 9600 Baud initialisiert, dann wird mcp.begin_I2C mit der Adresse 0x20 aufgerufen, um die I2C-Kommunikation herzustellen, und wenn das Modul nicht antwortet, zeigt das Programm eine Fehlermeldung an und stoppt in der while(1)-Schleife. Auch im setup wird der LED_PIN (GPA0) als OUTPUT und der BUTTON_PIN (GPB0) als INPUT_PULLUP konfiguriert, wobei der interne Pull-Up des MCP23017 verwendet wird. In der loop-Funktion wird der Tasterzustand mit mcp.digitalRead(BUTTON_PIN) gelesen, und wenn der Wert LOW ist, also der Taster gedrückt wird, wird HIGH auf LED_PIN geschrieben, um die LED zu schalten, andernfalls wird LOW geschrieben. Der Tasterzustand wird auch an den seriellen Monitor gesendet, gefolgt von einer kurzen Pause, die durch delay gegeben wird.
Ergebnis:
Öffnen Sie den seriellen Monitor mit 9600 Baud, die auf GPA0 angeschlossene LED sollte aufleuchten, wenn Sie den Taster auf GPB0 gedrückt halten und erlöschen, wenn Sie ihn loslassen, und der Monitor zeigt gleichzeitig den gelesenen Tasterzustand.
MCP23017 initialized at address 0x20
Button state: released
Button state: released
Button state: pressed
Button state: pressed
Button state: pressed
Button state: released
Button state: released
Häufige Probleme:
Die Meldung MCP23017 not found auf dem seriellen Monitor erscheint normalerweise, wenn der RESET-Pin nicht angeschlossen ist, da das Modul in Reset blockiert bleibt, die Lösung ist, RESET direkt mit VCC oder über einen 10-kOhm-Widerstand zu verbinden.
Das Modul antwortet nicht auf die im Code verwendete Adresse bedeutet, dass die in mcp.begin_I2C eingestellte Adresse nicht dem Zustand der Pins A0, A1 und A2 entspricht, überprüfen Sie die Verbindungen dieser Pins und führen Sie einen I2C-Scanner aus, um die tatsächliche Adresse zu bestätigen.
Der Taster scheint immer gedrückt zu sein oder das Drücken wird nie erkannt bedeutet, dass der BUTTON_PIN nicht als INPUT_PULLUP konfiguriert wurde, sondern als einfacher INPUT, was den Eingang schwebt lässt.
Die LED bleibt aus, obwohl der Taster gedrückt wird, kann bedeuten, dass die LED verkehrt herum angebracht ist oder der 220-Ohm-Widerstand fehlt oder unterbrochen ist, überprüfen Sie die Polarität der LED und die Kontinuität des Widerstands.
Wenn Sie mehrere Module am gleichen Bus verwenden und keines antwortet korrekt, überprüfen Sie, dass Sie nicht zwei Module mit der gleichen Kombination auf A0, A1 und A2 haben, jedes Modul benötigt eine eindeutige Adresse.
Instabile Kommunikation oder intermittierende Fehler auf Leitungen länger als ein paar Zentimeter werden durch Hinzufügen von externen 4,7-kOhm-Pull-Up-Widerständen auf SDA und SCL in Ergänzung zum internen Netzwerk des Moduls behoben.
Einschränkungen und Tipps:
Der MCP23017 bietet weder PWM-Ausgänge noch analoge Eingänge und ist daher nur für digitale Ein-Aus-Signale geeignet, nicht zum Lesen variabler Spannungen oder zur direkten Helligkeitsregelung. Der maximale Strom von 25 mA pro Pin und 125 mA insgesamt auf dem Gehäuse begrenzt die Last, die direkt an die GPIO-Pins angeschlossen ist, für Relais, Motoren oder Hochleistungs-LEDs sind separate Transistoren oder Relaismodule erforderlich. Am gleichen I2C-Bus können gleichzeitig bis zu 8 Module betrieben werden, was zusammen 128 zusätzliche Pins bietet, nützlich für Panels mit vielen Tastern, LEDs oder digitalen Sensoren, und die Ausgänge INTA und INTB ermöglichen die Behandlung von Änderungen durch Interrupt, ohne kontinuierliche Busverfolgung.