Imaginile produselor au caracter informativ si pot prezenta diferente minore, in functie de lot si de furnizor. Este posibil ca specificatiile si pretul produselor sa fie modificate fara preaviz. Facem tot posibilul sa adaugam in pagina produselor specificatii cat mai exacte si corecte dar este posibil ca acestea sa nu fie in totalitate corecte. in cazul in care identificati un astfel de caz, va rugam sa ne semnalati acest lucru.
Produsele noastre sunt destinate in principal dezvoltarii, prototiparii si proiectelor tehnice. Informatiile privind specificatiile, instructiunile si conformitatea sunt furnizate conform datelor disponibile de la producatori sau furnizori. Pentru integrarea in produse finale sau aplicatii comerciale, recomandam verificarea compatibilitatii si conformitatii in functie de utilizarea dorita.
Specificatiile tehnice mentionate (curent, putere etc.) reprezinta valori maxime admise in conditii ideale de functionare. Pentru o utilizare sigura si o durata de viata optima, recomandam exploatarea produsului in regim continuu la cel mult 50% din valorile maxime specificate.
Modul Expander I/O, MCP23017, 16 biti, I2C, CJMCU-2317
Modulul expander MCP23017 CJMCU-2317 adauga 16 pini digitali de intrare iesire unei placi de dezvoltare prin I2C, cu adresa configurabila din A0-A2 pentru pana la 8 module pe acelasi bus, doua iesiri de intrerupere INTA si INTB, pull-up intern pe fiecare pin si compatibilitate cu Arduino, ESP32, STM32 si Raspberry Pi, ideal pentru relee, leduri, taste si panouri cu multe intrari sau iesiri.
Cumparand acest produs primesti 1,15 RON in puncte de fidelitate.
Adauga in cos produse in valoare de 130 Ron si ai livrare gratuita daca alegi sa platesti online
Produsele sunt expediate din stoc propriu
Primesti puncte la fiecare comanda, in valoare de 5%
Modulul expander MCP23017 CJMCU-2317 adauga 16 pini digitali de intrare iesire unei placi de dezvoltare prin interfata I2C, combinand circuitul MCP23017 cu doua randuri de pini pentru montare rapida pe breadboard. Este potrivit cand numarul de pini GPIO ai microcontrolerului nu este suficient, de exemplu pentru comanda mai multor relee, leduri, afisaje cu leduri, taste sau comutatoare, sau pentru citirea unui numar mare de intrari digitale.
Cipul MCP23017 este un expander I2C pe 16 biti organizat in doua porturi de cate 8 pini, GPA0 - GPA7 si GPB0 - GPB7, fiecare pin putand fi configurat individual ca intrare sau iesire si avand un rezistor pull-up intern de 100 kOhm activabil din software. Comunicatia foloseste interfata I2C cu viteze de 100 kHz, 400 kHz sau 1.7 MHz, iar adresa de pe bus se stabileste din pinii A0, A1 si A2, rezultand 8 adrese posibile intre 0x20 si 0x27 si permitand conectarea a pana la 8 module identice pe aceeasi pereche SDA SCL. Modulul dispune de doua iesiri de intrerupere programabile INTA si INTB, generate automat cand se schimba starea unei intrari, de un registru de polaritate pentru inversarea logicii intrarilor si de un circuit intern de reset la alimentare.
Printre caracteristicile principale se numara circuitul MCP23017 in capsula SOIC, reteaua integrata de rezistente pull-up pentru liniile I2C, doua randuri de pini pentru alimentare, control si cele 16 canale I/O, precum si gaurile de fixare de pe cablaj, iar alimentarea se face direct prin pinii VCC si GND ai modulului.
Prin interfata I2C, modulul este compatibil cu Arduino, ESP32, STM32, Raspberry Pi si orice alta placa de dezvoltare sau microcontroler care dispune de pini SDA si SCL.
Specificatii:
Tensiune alimentare: 3.3 - 5.5 VDC
Curent in repaus: 1 uA (maxim)
Cip: MCP23017
Interfata: I2C (IIC)
Numar pini I/O: 16 (2 porturi x 8, GPA0 - GPA7 si GPB0 - GPB7)
Frecventa I2C: pana la 1.7 MHz (100 kHz / 400 kHz / 1.7 MHz)
Curent maxim pe pin I/O: 25 mA
Curent total capsula: 125 mA
Rezistente pull-up interne: 100 kOhm, configurabile individual pe fiecare pin
Iesiri de intrerupere: INTA, INTB, configurabile active-high, active-low sau open-drain
Adresa I2C: 0x20 - 0x27
Pini pentru configurare adresa: A0, A1, A2 (pana la 8 module pe acelasi bus)
Temperatura de operare: -40 - 85 grade Celsius
Dimensiuni: 21 x 26.5 mm
Layout:

1. Circuit expander MCP23017: Circuitul integrat original, in capsula SOIC, care converteste comenzile I2C in 16 linii digitale de intrare sau iesire.
2. Retea de rezistente pull-up: Retea integrata de rezistente folosita ca pull-up pentru liniile SDA si SCL, suficienta pentru conexiuni scurte pe acelasi bus.
3. Header cu pini de alimentare si control: Grupeaza pinii VCC, GND, SCL, SDA, RESET, A0, A1, A2, INTA si INTB.
4. Header cu pini de intrare iesire: Grupeaza cele 16 canale digitale GPA0 - GPA7 si GPB0 - GPB7.
5. Gauri de fixare: Perforatii pentru montarea placii pe un suport sau in carcasa.
Pinout:
| Conector | Pin | Functie |
|---|---|---|
| Header alimentare si control | VCC | Alimentare 3.3 - 5.5 VDC |
| Header alimentare si control | GND | Masa comuna |
| Header alimentare si control | SCL | Linie de ceas I2C |
| Header alimentare si control | SDA | Linie de date I2C |
| Header alimentare si control | RESET | Reset activ pe nivel LOW, se leaga la VCC pentru functionare normala |
| Header alimentare si control | A0, A1, A2 | Configurare adresa I2C, fiecare pin la GND sau VCC |
| Header alimentare si control | INTA | Iesire intrerupere port A |
| Header alimentare si control | INTB | Iesire intrerupere port B |
| Header I/O | GPA0 - GPA7 | 8 pini digitali de intrare sau iesire, port A |
| Header I/O | GPB0 - GPB7 | 8 pini digitali de intrare sau iesire, port B |
| A2 | A1 | A0 | Adresa I2C |
|---|---|---|---|
| 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 |
Schema si adresa I2C:


Schema de conectare arata legatura minima dintre modul si placa de dezvoltare, prin pinii VCC, GND, SCL si SDA, iar tabelul de adrese arata exact combinatiile pinilor A0, A1 si A2 care dau cele 8 adrese posibile, intre 0x20 si 0x27, pentru folosirea mai multor module pe acelasi bus.
Utilizare:
Conectati pinii VCC si GND ai modulului la o sursa de 3.3 V sau 5 V, in functie de nivelul logic al placii de dezvoltare, si legati SCL si SDA la liniile I2C corespunzatoare.
Legati pinul RESET direct la VCC sau printr-un rezistor de 10 kOhm, pentru ca modulul sa nu ramana blocat in reset si sa fie detectat corect pe bus.
Setati adresa I2C dorita conectand pinii A0, A1 si A2 la GND sau VCC, de exemplu toti trei la GND pentru adresa 0x20, conform tabelului de adrese.
Configurati fiecare dintre cei 16 pini GPA0 - GPA7 si GPB0 - GPB7 ca intrare sau iesire din program, inainte de a le citi sau scrie starea, deoarece dupa alimentare toti pinii sunt impliciti ca intrari.
Pentru intrari conectate la butoane sau comutatoare, activati pull-up-ul intern din software si evitati rezistente externe suplimentare, daca nu este necesara o alta configuratie.
Pentru sarcini precum relee sau leduri, respectati curentul maxim de 25 mA pe fiecare pin I/O si curentul total de 125 mA al capsulei, iar pentru sarcini mai mari folositi tranzistoare sau module de relee separate.
Pentru aplicatii cu mai multe module pe acelasi bus, alocati o adresa unica fiecaruia prin combinatia A0, A1, A2, pana la maximum 8 module simultan.
Pentru a reduce interogarea permanenta a magistralei I2C, folositi iesirile INTA si INTB, care trec pe nivel LOW cand se modifica o intrare pe portul corespunzator, si cititi registrele de interceptie pentru a afla pinul si starea care au generat intreruperea.
Pentru conexiuni mai lungi de cativa centimetri sau mai multe module pe acelasi bus, adaugati rezistente externe de pull-up de 4.7 kOhm pe SDA si SCL, in completarea retelei interne de pe modul.
Diagrama dimensiuni:

- Interfata comunicatie
- I2C
- Cip principal
- MCP23017
- Numar canale I/O
- 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:
Acest produs este destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie, cercetare si aplicatii tehnice similare. Produsul trebuie utilizat doar conform specificatiilor tehnice mentionate in pagina produsului si/sau in documentatia disponibila.
Utilizarea incorecta, depasirea valorilor maxime admise de tensiune, curent, temperatura sau conectarea gresita pot duce la defectarea produsului, deteriorarea altor echipamente sau la riscuri de siguranta.
Produsul nu este jucarie si nu este destinat copiilor. Montajul, testarea si utilizarea trebuie realizate de persoane cu cunostinte minime in domeniul electric/electronic. Se recomanda utilizarea produsului in montaje protejate, carcase adecvate sau sisteme care respecta normele de siguranta aplicabile.
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]
/*
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);
}
Acest tutorial arata cum sa puneti in functiune modulul expander MCP23017 CJMCU-2317 folosind o placa Arduino Uno, pentru a comanda un led si a citi starea unui buton prin cei 16 pini suplimentari adaugati pe magistrala I2C. Modulul este potrivit cand proiectul are nevoie de mai multe intrari sau iesiri digitale decat pinii disponibili pe placa de baza, de exemplu pentru panouri cu mai multe leduri, taste sau relee.

Cum functioneaza:
MCP23017 comunica cu Arduino prin registre interne, pe care biblioteca le scrie si le citeste prin I2C. Doua registre de directie, IODIRA si IODIRB, stabilesc daca fiecare din cei 8 pini ai unui port este intrare sau iesire, iar doua registre GPIOA si GPIOB citesc sau scriu starea fizica a pinilor. Adresa I2C a modulului se formeaza din 4 biti fixi urmati de starea pinilor A2, A1 si A0, ceea ce da un interval de adrese intre 0x20, cand toti trei sunt la GND, si 0x27, cand toti trei sunt la VCC. In acest tutorial A0, A1 si A2 raman la GND, astfel ca modulul raspunde la adresa 0x20. Biblioteca Adafruit_MCP23X17 ascunde toate aceste registre si expune functii simple precum pinMode, digitalWrite si digitalRead pentru fiecare dintre cei 16 pini, numerotati de la 0 (GPA0) pana la 15 (GPB7).
Ce ai nevoie:
- 1 x MCP23017 I2C 16-Bit IO Expander Module
- 1 x Placa dezvoltare Uno R3 cu Wifi ESP8266, compatibila Arduino
- 1 x Breadboard 830 puncte MB-102
- 1 x LED 5mm, Alb
- 1 x Rezistor 220 ohm
- 1 x Buton push 4 pini
- 1 x 40 fire Dupont 10cm, Tata-Mama
Conectare:
Modulul foloseste doar 4 fire active catre Arduino, plus pinul RESET si pinii de adresa, care se leaga fix la alimentare sau masa.
| Pin produs | Se conecteaza la | Rol |
|---|---|---|
| VCC | 5V Arduino Uno | Alimentare modul |
| GND | GND Arduino Uno | Masa comuna |
| SCL | A5 (SCL) Arduino Uno | Linie de ceas I2C |
| SDA | A4 (SDA) Arduino Uno | Linie de date I2C |
| RESET | 5V Arduino Uno | Mentine modulul in functionare normala |
| A0, A1, A2 | GND | Seteaza adresa I2C 0x20 |
| GPA0 | Rezistor 220 ohm apoi anod LED, catodul LED la GND | Iesire comandata, aprinde LED-ul |
| GPB0 | Un terminal al butonului, celalalt terminal la GND | Intrare cu pull-up intern, citeste starea butonului |
Placa si biblioteci:
Selectati in Arduino IDE placa Arduino Uno, din Tools > Board > Arduino AVR Boards, pachet inclus implicit cu Arduino IDE, fara sa fie nevoie de o adresa suplimentara in File > Preferences. Instalati din Library Manager biblioteca Adafruit MCP23017 Arduino Library, de la autorul Adafruit, care contine fisierul Adafruit_MCP23X17.h, si lasati managerul sa instaleze si dependinta Adafruit BusIO ceruta de aceasta. Comunicatia I2C de baza foloseste biblioteca Wire, inclusa implicit in Arduino IDE, care nu trebuie instalata separat.
Codul:
Urmatorul program initializeaza modulul la adresa implicita 0x20, configureaza GPA0 ca iesire pentru led si GPB0 ca intrare cu pull-up pentru buton, apoi aprinde ledul cat timp butonul este apasat.
/*
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);
}
Cum functioneaza codul:
La inceputul programului se includ biblioteca Adafruit_MCP23X17.h si se creeaza obiectul mcp, prin care se vor face toate comenzile catre modul. In functia setup se initializeaza portul serial la 9600 baud, apoi se apeleaza mcp.begin_I2C cu adresa 0x20 pentru a stabili comunicatia I2C, iar daca modulul nu raspunde programul afiseaza un mesaj de eroare si se opreste in bucla while(1). Tot in setup se configureaza pinul LED_PIN (GPA0) ca OUTPUT si pinul BUTTON_PIN (GPB0) ca INPUT_PULLUP, folosind pull-up-ul intern al MCP23017. In functia loop se citeste starea butonului cu mcp.digitalRead(BUTTON_PIN), iar daca valoarea este LOW, adica butonul este apasat, se scrie HIGH pe LED_PIN pentru a aprinde ledul, altfel se scrie LOW. Starea butonului este trimisa si pe monitorul serial, dupa care urmeaza o pauza scurta data de delay.
Rezultat:
Deschideti monitorul serial la 9600 baud, ledul conectat pe GPA0 trebuie sa se aprinda atunci cand tineti apasat butonul de pe GPB0 si sa se stinga cand il eliberati, iar pe monitor apare in acelasi timp starea citita a butonului.
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
Probleme frecvente:
Mesajul MCP23017 not found pe monitorul serial apare de obicei cand pinul RESET este lasat neconectat, pentru ca modulul ramane blocat in reset, solutia este sa legati RESET direct la VCC sau printr-un rezistor de 10 kOhm.
Modulul nu raspunde la adresa folosita in cod inseamna ca adresa setata in mcp.begin_I2C nu corespunde cu starea pinilor A0, A1 si A2, verificati conexiunile acestor pini si rulati un scanner I2C pentru a confirma adresa reala.
Butonul pare apasat tot timpul sau niciodata nu este detectat apasarea inseamna ca pinul BUTTON_PIN nu a fost configurat ca INPUT_PULLUP, ci ca INPUT simplu, lasand intrarea in aer electric.
Ledul ramane stins desi butonul este apasat poate insemna ca ledul este montat invers sau ca rezistenta de 220 ohm lipseste sau este intrerupta, verificati polaritatea ledului si continuitatea rezistentei.
Daca folositi mai multe module pe acelasi bus si niciunul nu raspunde corect, verificati sa nu aveti doua module cu aceeasi combinatie pe A0, A1 si A2, fiecare modul are nevoie de o adresa unica.
Comunicare instabila sau erori intermitente pe fire mai lungi de cativa centimetri se rezolva adaugand rezistente externe de pull-up de 4.7 kOhm pe SDA si SCL, in completarea retelei interne de pe modul.
Limitari si sfaturi:
MCP23017 nu ofera iesiri PWM si nici intrari analogice, fiind potrivit doar pentru semnale digitale de tip pornit oprit, nu pentru citirea unor tensiuni variabile sau pentru reglarea luminozitatii directe. Curentul maxim de 25 mA pe pin si 125 mA total pe capsula limiteaza sarcina conectata direct la pinii GPIO, pentru relee, motoare sau leduri de putere fiind nevoie de tranzistoare sau module de relee separate. Pe acelasi bus I2C pot functiona simultan pana la 8 module, oferind impreuna 128 de pini suplimentari, utile pentru panouri cu multe butoane, leduri sau senzori digitali, iar iesirile INTA si INTB permit tratarea schimbarilor prin intrerupere, fara interogare continua a busului.