De MCP23017 is een 16-bit I/O-expander op basis van I2C met twee 8-bit GPIO-poorten (Port A en Port B) voor het uitlezen van digitale ingangen en het aansturen van uitgangen. Hij communiceert via SDA/SCL op het I2C-adres 0x20 en gebruikt interrupt-uitgangen (INTA/INTB) om inputwijzigingen te signaleren, plus voedings- en GND-aansluitingen en een resetpin.
| Pin | Signaal | Beschrijving |
|---|---|---|
SCL |
SCL | I2C clock line for communication with the MCP23017 at address 0x20. |
SDA |
SDA | I2C data line for communication with the MCP23017 at address 0x20. |
GND |
ground | Ground reference for the MCP23017 input expander. |
VCC |
power | Logic supply voltage for the MCP23017 board. |
A2 |
digital | I2C address-select input A2 for setting the MCP23017 address. |
A1 |
digital | I2C address-select input A1 for setting the MCP23017 address. |
A0 |
digital | I2C address-select input A0 for setting the MCP23017 address. |
RESET |
reset | Active-low reset input for the MCP23017 I/O expander. |
NC/SO |
Not connected on I2C use; SPI SO function is unused for MCP23017 wiring. | |
NC/CS |
Not connected on I2C use; SPI chip-select function is unused for MCP23017 wiring. | |
VCC.1 |
power | Logic supply voltage pin for the MCP23017 board. |
INTB |
interrupt | Interrupt output for GPIO port B; signals input changes when enabled. |
B0 |
digital | MCP23017 GPIO port B bit 0 input/output line. |
B1 |
digital | MCP23017 GPIO port B bit 1 input/output line. |
B2 |
digital | MCP23017 GPIO port B bit 2 input/output line. |
B3 |
digital | MCP23017 GPIO port B bit 3 input/output line. |
B4 |
digital | MCP23017 GPIO port B bit 4 input/output line. |
B5 |
digital | MCP23017 GPIO port B bit 5 input/output line. |
B6 |
digital | MCP23017 GPIO port B bit 6 input/output line. |
B7 |
digital | MCP23017 GPIO port B bit 7 input/output line. |
GND.1 |
ground | Ground reference pin for the MCP23017 board. |
INTA |
interrupt | Interrupt output for GPIO port A; signals input changes when enabled. |
A0.1 |
digital | MCP23017 GPIO port A bit 0 input/output line. |
A1.1 |
digital | MCP23017 GPIO port A bit 1 input/output line. |
A2.1 |
digital | MCP23017 GPIO port A bit 2 input/output line. |
A3 |
digital | MCP23017 GPIO port A bit 3 input/output line. |
A4 |
digital | MCP23017 GPIO port A bit 4 input/output line. |
A5 |
digital | MCP23017 GPIO port A bit 5 input/output line. |
A6 |
digital | MCP23017 GPIO port A bit 6 input/output line. |
A7 |
digital | MCP23017 GPIO port A bit 7 input/output line. |
| Van | Naar | Draad |
|---|---|---|
board:5V |
x1:VCC |
red |
board:5V |
x1:VCC.1 |
red |
board:GND |
x1:GND |
black |
board:GND.1 |
x1:GND.1 |
black |
board:A4 |
x1:SDA |
green |
board:A5 |
x1:SCL |
blue |
x1:A0 |
board:GND |
black |
x1:A1 |
board:GND.1 |
black |
x1:A2 |
board:GND.2 |
black |
x1:RESET |
board:5V |
red |
Dit voorbeeld is geschreven en compile-gecheckt voor de arduino-uno. Codey Online past het voor je aan naar elk ander ondersteund board.
#include <Wire.h>
#include <Adafruit_MCP23X17.h>
Adafruit_MCP23X17 mcp;
const uint8_t inputPins[] = {0, 1, 2, 3}; // GPA0..GPA3
const char* pinNames[] = {"GPA0", "GPA1", "GPA2", "GPA3"};
void setup() {
Serial.begin(115200);
while (!Serial) {
;
}
Wire.begin();
if (!mcp.begin_I2C(0x20)) {
Serial.println("Could not find MCP23017 at I2C address 0x20.");
while (1) {
delay(10);
}
}
for (uint8_t i = 0; i < 4; i++) {
mcp.pinMode(inputPins[i], INPUT_PULLUP);
}
Serial.println("MCP23017 ready. Inputs are GPA0-GPA3 with internal pull-ups enabled.");
Serial.println("Connect a switch from any input pin to GND to read LOW.");
}
void loop() {
for (uint8_t i = 0; i < 4; i++) {
int state = mcp.digitalRead(inputPins[i]);
Serial.print(pinNames[i]);
Serial.print(": ");
Serial.println(state == LOW ? "PRESSED / LOW" : "RELEASED / HIGH");
}
Serial.println("---");
delay(500);
}
Beschrijf wat je wilt bouwen. Codey Online schrijft de code, tekent het aansluitschema, compileert het en flasht je board rechtstreeks vanuit de browser.
Gratis starten