Le immagini dei prodotti sono solo a scopo informativo e potrebbero presentare piccole differenze, a seconda del lotto e del fornitore. Le specifiche e i prezzi dei prodotti potrebbero essere soggetti a modifiche senza preavviso. Facciamo del nostro meglio per aggiungere specifiche quanto più precise e corrette possibili alla pagina del prodotto, ma è possibile che non siano del tutto corrette. Se identifichi un caso del genere, ti preghiamo di segnalarcelo.
Il prodotto è destinato agli specialisti e richiede personale qualificato e autorizzato. Il prodotto non include istruzioni di montaggio/uso . La messa in funzione del prodotto da parte di persone non qualificate comporta la perdita della garanzia secondo i Termini e Condizioni presenti sul sito.
Le specifiche tecniche indicate (corrente, potenza, ecc.) rappresentano valori massimi consentiti in condizioni ideali di funzionamento. Per un utilizzo sicuro e una durata ottimale, si raccomanda di utilizzare il prodotto in regime continuo a non più del 50% dei valori massimi specificati.
Modulo expander I/O MCP23017 a 16 bit I2C CJMCU-2317
Il modulo expander MCP23017 CJMCU-2317 aggiunge 16 pin digitali di ingresso/uscita a una scheda di sviluppo tramite I2C, con indirizzo configurabile da A0-A2 per fino a 8 moduli sullo stesso bus, due uscite di interrupt INTA e INTB, pull-up interno su ciascun pin e compatibilità con Arduino, ESP32, STM32 e Raspberry Pi, ideale per relè, LED, pulsanti e pannelli con molti ingressi o uscite.
Spedito entro giovedì 22 ottobre
Acquistando questo prodotto guadagni 87,57 Ft in punti fedeltà.
Spedizione veloce gratuita per ordini superiori a 100EUR nella maggior parte de paesi UE.
Spediamo dal nostro magazzino entro 24 ore
Ricevi punti a ogni ordine, per un valore del 5%.
Il modulo expander MCP23017 CJMCU-2317 aggiunge 16 pin digitali di ingresso/uscita a una scheda di sviluppo tramite interfaccia I2C, combinando il circuito MCP23017 con due file di pin per un montaggio rapido su breadboard. È adatto quando il numero di pin GPIO del microcontrollore non è sufficiente, ad esempio per il controllo di più relè, LED, display a LED, tastiere o interruttori, oppure per la lettura di un gran numero di ingressi digitali.
Il chip MCP23017 è un expander I2C a 16 bit organizzato in due porte da 8 pin ciascuna, GPA0 - GPA7 e GPB0 - GPB7, con ogni pin configurabile singolarmente come ingresso o uscita e dotato di una resistenza pull-up interna da 100 kOhm attivabile via software. La comunicazione utilizza l'interfaccia I2C con velocità di 100 kHz, 400 kHz o 1.7 MHz, mentre l'indirizzo sul bus viene impostato dai pin A0, A1 e A2, ottenendo 8 indirizzi possibili tra 0x20 e 0x27 e consentendo il collegamento di fino a 8 moduli identici sulla stessa coppia SDA SCL. Il modulo dispone di due uscite di interrupt programmabili INTA e INTB, generate automaticamente quando cambia lo stato di un ingresso, di un registro di polarità per l'inversione logica degli ingressi e di un circuito interno di reset all'accensione.
Tra le caratteristiche principali vi sono il circuito MCP23017 in package SOIC, la rete integrata di resistenze pull-up per le linee I2C, due file di pin per alimentazione, controllo e i 16 canali I/O, oltre ai fori di fissaggio sul PCB, mentre l'alimentazione avviene direttamente tramite i pin VCC e GND del modulo.
Tramite interfaccia I2C, il modulo è compatibile con Arduino, ESP32, STM32, Raspberry Pi e qualsiasi altra scheda di sviluppo o microcontrollore dotato di pin SDA e SCL.
Specifiche:
Tensione di alimentazione: 3.3 - 5.5 VDC
Corrente a riposo: 1 uA (massimo)
Chip: MCP23017
Interfaccia: I2C (IIC)
Numero pin I/O: 16 (2 porte x 8, GPA0 - GPA7 e GPB0 - GPB7)
Frequenza I2C: fino a 1.7 MHz (100 kHz / 400 kHz / 1.7 MHz)
Corrente massima per pin I/O: 25 mA
Corrente totale del package: 125 mA
Resistenze pull-up interne: 100 kOhm, configurabili singolarmente su ciascun pin
Uscite di interrupt: INTA, INTB, configurabili active-high, active-low o open-drain
Indirizzo I2C: 0x20 - 0x27
Pin per configurazione indirizzo: A0, A1, A2 (fino a 8 moduli sullo stesso bus)
Temperatura di esercizio: -40 - 85 gradi Celsius
Dimensioni: 21 x 26.5 mm
Layout:

1. Circuito expander MCP23017: Il circuito integrato originale, in package SOIC, che converte i comandi I2C in 16 linee digitali di ingresso o uscita.
2. Rete di resistenze pull-up: Rete integrata di resistenze utilizzata come pull-up per le linee SDA e SCL, sufficiente per connessioni brevi sullo stesso bus.
3. Header con pin di alimentazione e controllo: Raggruppa i pin VCC, GND, SCL, SDA, RESET, A0, A1, A2, INTA e INTB.
4. Header con pin di ingresso/uscita: Raggruppa i 16 canali digitali GPA0 - GPA7 e GPB0 - GPB7.
5. Fori di fissaggio: Fori per il montaggio della scheda su un supporto o in un contenitore.
Pinout:
| Connettore | Pin | Funzione |
|---|---|---|
| Header alimentazione e controllo | VCC | Alimentazione 3.3 - 5.5 VDC |
| Header alimentazione e controllo | GND | Massa comune |
| Header alimentazione e controllo | SCL | Linea clock I2C |
| Header alimentazione e controllo | SDA | Linea dati I2C |
| Header alimentazione e controllo | RESET | Reset attivo a livello LOW, va collegato a VCC per il funzionamento normale |
| Header alimentazione e controllo | A0, A1, A2 | Configurazione indirizzo I2C, ciascun pin a GND o VCC |
| Header alimentazione e controllo | INTA | Uscita interrupt porta A |
| Header alimentazione e controllo | INTB | Uscita interrupt porta B |
| Header I/O | GPA0 - GPA7 | 8 pin digitali di ingresso o uscita, porta A |
| Header I/O | GPB0 - GPB7 | 8 pin digitali di ingresso o uscita, porta B |
| A2 | A1 | A0 | Indirizzo 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 e indirizzo I2C:


Lo schema di collegamento mostra il collegamento minimo tra il modulo e la scheda di sviluppo, tramite i pin VCC, GND, SCL e SDA, mentre la tabella degli indirizzi mostra esattamente le combinazioni dei pin A0, A1 e A2 che forniscono i 8 indirizzi possibili, tra 0x20 e 0x27, per l'uso di più moduli sullo stesso bus.
Utilizzo:
Collegate i pin VCC e GND del modulo a una sorgente da 3.3 V o 5 V, a seconda del livello logico della scheda di sviluppo, e collegate SCL e SDA alle corrispondenti linee I2C.
Collegate il pin RESET direttamente a VCC o tramite una resistenza da 10 kOhm, in modo che il modulo non rimanga bloccato in reset e venga rilevato correttamente sul bus.
Impostate l'indirizzo I2C desiderato collegando i pin A0, A1 e A2 a GND o VCC, ad esempio tutti e tre a GND per l'indirizzo 0x20, secondo la tabella degli indirizzi.
Configurate ciascuno dei 16 pin GPA0 - GPA7 e GPB0 - GPB7 come ingresso o uscita dal programma, prima di leggerne o scriverne lo stato, poiché dopo l'alimentazione tutti i pin sono per impostazione predefinita ingressi.
Per gli ingressi collegati a pulsanti o interruttori, abilitate il pull-up interno via software ed evitate resistenze esterne aggiuntive, se non è necessaria un'altra configurazione.
Per carichi come relè o LED, rispettate la corrente massima di 25 mA per ciascun pin I/O e la corrente totale di 125 mA del package; per carichi maggiori utilizzate transistor o moduli relè separati.
Per applicazioni con più moduli sullo stesso bus, assegnate a ciascuno un indirizzo univoco tramite la combinazione A0, A1, A2, fino a un massimo di 8 moduli contemporaneamente.
Per ridurre il polling continuo del bus I2C, utilizzate le uscite INTA e INTB, che vanno a livello LOW quando cambia un ingresso della porta corrispondente, e leggete i registri di interrupt per sapere quale pin e quale stato hanno generato l'interrupt.
Per connessioni più lunghe di qualche centimetro o per più moduli sullo stesso bus, aggiungete resistenze pull-up esterne da 4.7 kOhm su SDA e SCL, in aggiunta alla rete interna presente sul modulo.
Diagramma delle dimensioni:

- Interfaccia di comunicazione
- I2C
- Chip principale
- MCP23017
- Numero canali 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:
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);
}
Questo tutorial mostra come mettere in funzione il modulo espansore MCP23017 CJMCU-2317 usando una scheda Arduino Uno, per comandare un LED e leggere lo stato di un pulsante attraverso i 16 pin supplementari aggiunti sul bus I2C. Il modulo è adatto quando il progetto ha bisogno di più ingressi o uscite digitali rispetto ai pin disponibili sulla scheda base, ad esempio per pannelli con molti LED, tasti o relè.

Come funziona:
MCP23017 comunica con Arduino attraverso registri interni, che la libreria scrive e legge tramite I2C. Due registri di direzione, IODIRA e IODIRB, stabiliscono se ognuno degli 8 pin di una porta è ingresso o uscita, mentre due registri GPIOA e GPIOB leggono o scrivono lo stato fisico dei pin. L'indirizzo I2C del modulo si forma da 4 bit fissi seguiti dallo stato dei pin A2, A1 e A0, il che fornisce un intervallo di indirizzi tra 0x20, quando tutti e tre sono a GND, e 0x27, quando tutti e tre sono a VCC. In questo tutorial A0, A1 e A2 rimangono a GND, quindi il modulo risponde all'indirizzo 0x20. La libreria Adafruit_MCP23X17 nasconde tutti questi registri ed espone funzioni semplici come pinMode, digitalWrite e digitalRead per ognuno dei 16 pin, numerati da 0 (GPA0) fino a 15 (GPB7).
Cosa ti serve:
- 1 x MCP23017 I2C 16-Bit IO Expander Module
- 1 x Scheda sviluppo Uno R3 con Wifi ESP8266, compatibile Arduino
- 1 x Breadboard 830 punti MB-102
- 1 x LED 5mm, Bianco
- 1 x Resistore 220 ohm
- 1 x Pulsante push 4 pin
- 1 x 40 fili Dupont 10cm, Maschio-Femmina
Collegamento:
Il modulo utilizza solo 4 fili attivi verso Arduino, più il pin RESET e i pin di indirizzo, che si collegano fisso all'alimentazione o alla massa.
| Pin prodotto | Si collega a | Ruolo |
|---|---|---|
| VCC | 5V Arduino Uno | Alimentazione modulo |
| GND | GND Arduino Uno | Massa comune |
| SCL | A5 (SCL) Arduino Uno | Linea di clock I2C |
| SDA | A4 (SDA) Arduino Uno | Linea di dati I2C |
| RESET | 5V Arduino Uno | Mantiene il modulo in funzionamento normale |
| A0, A1, A2 | GND | Imposta l'indirizzo I2C 0x20 |
| GPA0 | Resistore 220 ohm poi anodo LED, catodo LED a GND | Uscita comandata, accende il LED |
| GPB0 | Un terminale del pulsante, l'altro terminale a GND | Ingresso con pull-up interno, legge lo stato del pulsante |
Scheda e librerie:
Selezionate in Arduino IDE la scheda Arduino Uno, da Tools > Board > Arduino AVR Boards, pacchetto incluso di default con Arduino IDE, senza la necessità di un indirizzo supplementare in File > Preferences. Installate da Library Manager la libreria Adafruit MCP23017 Arduino Library, dell'autore Adafruit, che contiene il file Adafruit_MCP23X17.h, e lasciate che il manager installi anche la dipendenza Adafruit BusIO richiesta da questa. La comunicazione I2C di base utilizza la libreria Wire, inclusa di default in Arduino IDE, che non deve essere installata separatamente.
Il codice:
Il seguente programma inizializza il modulo all'indirizzo predefinito 0x20, configura GPA0 come uscita per il LED e GPB0 come ingresso con pull-up per il pulsante, quindi accende il LED mentre il pulsante è premuto.
/*
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);
}
Come funziona il codice:
All'inizio del programma si include la libreria Adafruit_MCP23X17.h e si crea l'oggetto mcp, attraverso il quale verranno eseguiti tutti i comandi verso il modulo. Nella funzione setup si inizializza la porta seriale a 9600 baud, quindi si chiama mcp.begin_I2C con indirizzo 0x20 per stabilire la comunicazione I2C, e se il modulo non risponde il programma visualizza un messaggio di errore e si ferma nel ciclo while(1). Sempre in setup si configura il pin LED_PIN (GPA0) come OUTPUT e il pin BUTTON_PIN (GPB0) come INPUT_PULLUP, utilizzando il pull-up interno di MCP23017. Nella funzione loop si legge lo stato del pulsante con mcp.digitalRead(BUTTON_PIN), e se il valore è LOW, cioè il pulsante è premuto, si scrive HIGH su LED_PIN per accendere il LED, altrimenti si scrive LOW. Lo stato del pulsante viene inviato anche al monitor seriale, seguito da una breve pausa data da delay.
Risultato:
Aprite il monitor seriale a 9600 baud, il LED collegato su GPA0 deve accendersi quando tenete premuto il pulsante su GPB0 e spegnersi quando lo rilasciate, e sul monitor appare allo stesso tempo lo stato letto del pulsante.
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
Problemi frequenti:
Il messaggio MCP23017 not found sul monitor seriale appare di solito quando il pin RESET è lasciato scollegato, perché il modulo rimane bloccato in reset, la soluzione è collegare RESET direttamente a VCC o attraverso un resistore di 10 kOhm.
Il modulo non risponde all'indirizzo utilizzato nel codice significa che l'indirizzo impostato in mcp.begin_I2C non corrisponde allo stato dei pin A0, A1 e A2, verificate i collegamenti di questi pin ed eseguite uno scanner I2C per confermare l'indirizzo reale.
Il pulsante sembra premuto tutto il tempo o la pressione non viene mai rilevata significa che il pin BUTTON_PIN non è stato configurato come INPUT_PULLUP, ma come INPUT semplice, lasciando l'ingresso in aria.
Il LED rimane spento anche se il pulsante è premuto potrebbe significare che il LED è montato al contrario o che il resistore di 220 ohm manca o è interrotto, verificate la polarità del LED e la continuità del resistore.
Se utilizzate più moduli sullo stesso bus e nessuno risponde correttamente, verificate che non abbiate due moduli con la stessa combinazione su A0, A1 e A2, ogni modulo ha bisogno di un indirizzo univoco.
Comunicazione instabile o errori intermittenti su fili più lunghi di pochi centimetri si risolvono aggiungendo resistori esterni di pull-up di 4.7 kOhm su SDA e SCL, in aggiunta alla rete interna sul modulo.
Limitazioni e suggerimenti:
MCP23017 non offre uscite PWM né ingressi analogici, essendo adatto solo per segnali digitali di tipo acceso spento, non per la lettura di tensioni variabili o per la regolazione diretta della luminosità. La corrente massima di 25 mA per pin e 125 mA totali sull'encapsulamento limitano il carico collegato direttamente ai pin GPIO, per relè, motori o LED ad alta potenza è necessario utilizzare transistor o moduli relè separati. Sullo stesso bus I2C possono funzionare simultaneamente fino a 8 moduli, offrendo insieme 128 pin supplementari, utili per pannelli con molti pulsanti, LED o sensori digitali, e le uscite INTA e INTB consentono il trattamento dei cambiamenti tramite interrupt, senza interrogazione continua del bus.