/*
Wokwi | questions
MCP23017 assistance
Wokwi | general
AvenParker — 12:06 PM Saturday, November 29, 2025
Hello Everyone, How can i add MCP23017 I/O module and I2C mux TCA9548A
to the work space and work this with ESP32 and micropython? can someone
please help?
*/
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
//#include "MCP23017.h" // cool custom library
#include <Adafruit_MCP23X17.h>
#define OLED_ADDR 0x3C
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
//MCP23017 mcp;
Adafruit_MCP23X17 mcp;
int MCP_PINS[16];
const uint8_t MCP_PIN = 0; // GPA0
const uint8_t MON_PIN = 2; // monitor pin
void setup() {
Serial.begin(9600);
Wire.begin();
// Initialize OLED
display.setRotation(2);
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
Serial.println(F("OLED init failed"));
while (1);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Hello :)"); //hi future me
display.display();
for (int pin = 0; pin < 16; pin++) {
MCP_PINS[pin] = pin;
}
// Setup MCP23017 at address 0x20
//mcp.begin(0); // address 0 (defined by grounding all A pins)
if (!mcp.begin_I2C(0x20)) {
Serial.println(F("MCP init failed"));
while (1);
}
//mcp.pinMode(MCP_PIN, OUTPUT); //output
for (int pin = 0; pin < 16; pin++) {
mcp.pinMode(MCP_PINS[pin], OUTPUT);
}
// Setup Arduino D2 to read from MCP output
//pinMode(MON_PIN, INPUT);
Serial.println("Setup done.");
}
void loop() {
for (int count = 0; count < 16; count++) {
mcp.digitalWrite(MCP_PINS[count], LOW);
delay(500);
mcp.digitalWrite(MCP_PINS[count], HIGH);
}
/*
// Toggle MCP pin HIGH
mcp.digitalWrite(MCP_PIN, HIGH);
//mcp.writeGPIOB(MCP_PIN, HIGH);
//delay(1000);
Serial.print("MCP23017 GPA0: HIGH | Arduino D2 reads: ");
Serial.println(digitalRead(MON_PIN));
delay(1000);
// Toggle MCP pin LOW
mcp.digitalWrite(MCP_PIN, LOW);
//mcp.writeGPIOB(MCP_PIN, LOW);
//delay(1000);
Serial.print("MCP23017 GPA0: LOW | Arduino D2 reads: ");
Serial.println(digitalRead(MON_PIN));
delay(1000);
Serial.println("I------------------------I");
*/
}
address 0x20