MCP23017 IOs Expander not working when programmed to subscribe and publish to mqtt

Thanks you @mikb55 for suggest me the Bounce2mcp library, it worked for me but I struggled to make it work with adafruit_mcp23017 library.
And
@ptillisch thank you very much. I did exactly what you told me to do, but i found some arrors. However, i didn't sleep until find the solution because you tips were the right way forward. I did some changes on
mcp.begin and wire.begin.

The best way to explain what i did to get job done is to post my final code to compare with the first one.

#include <Wire.h>
#include <SPI.h>
#include <PubSubClient.h>
#include <EthernetENC.h>
#include <Bounce2.h>
//#include <Adafruit_MCP23X17.h>
#include <Bounce2mcp.h>
#include <Adafruit_MCP23017.h>


// Instantiate mcp object
Adafruit_MCP23017 mcp1;    
Adafruit_MCP23017 mcp2;

// Define MAC and IP address for the ENC28J60
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 177);

// Define MQTT broker details
const char* mqtt_server = "192.168.1.29";
const int mqtt_port = 1883;
const char* mqtt_username = "mqtt_user";
const char* mqtt_password = "mqtt_pass";

// Define GPIO pins
const int lampada_varanda = 2;
const int interruptor_varanda = 4;
const int interruptor_sala_de_estar = 0;
const int lampada_sala_de_estar = 0;
int lampada_varandaValue = LOW;
int lampada_sala_de_estarValue = LOW;


EthernetClient ethClient;
PubSubClient client(ethClient);

void callback(char* topic, byte* payload, unsigned int length) {
  // handle message arrived
  String content = "";
  char character;
  for (int num = 0; num < length; num++) {
    character = payload[num];
    content.concat(character);
  }
  Serial.println(topic);
  Serial.println(content); // message sent out by button actions is returned from broker and serial printed

  if (content == "1on") {
    lampada_varandaValue = HIGH;
  }

  if (content == "1off") {
    lampada_varandaValue = LOW;
  }

  
  if (content == "2on") {
    lampada_sala_de_estarValue = HIGH;
  }

  if (content == "2off") {
    lampada_sala_de_estarValue = LOW;
  }

    digitalWrite(lampada_varanda, lampada_varandaValue);
    mcp2.digitalWrite(lampada_sala_de_estar, lampada_sala_de_estarValue);

}
    Bounce bouncer1 = Bounce();
    Bounce bouncer2 = Bounce();
    BounceMcp debouncer = BounceMcp(); 
void setup() {
  // Start Serial
  Serial.begin(115200);
  ///Wire.begin();
mcp1.begin(0, &Wire);
mcp2.begin(1, &Wire);

  // Setup Ethernet
  Ethernet.begin(mac, ip);

  // Setup MQTT
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);

  // Setup GPIO
  pinMode(lampada_varanda, OUTPUT);
  pinMode(interruptor_varanda, INPUT_PULLUP);
  digitalWrite(interruptor_varanda, HIGH);
  bouncer1.attach(interruptor_varanda);
  bouncer1.interval(50);

  mcp2.pinMode(lampada_sala_de_estar, OUTPUT);
  mcp1.pinMode(interruptor_sala_de_estar, INPUT_PULLUP);
  mcp1.digitalWrite(interruptor_sala_de_estar, HIGH);
  debouncer.attach(mcp1, interruptor_sala_de_estar, 50);
}

void loop() {
  // Connect to MQTT
  if (!client.connected()) {
    reconnect();
  }

  // Handle MQTT messages
  client.loop();
  
    if (bouncer1.update()) {
    if (bouncer1.read() == HIGH) {
      if (lampada_varandaValue == LOW) {
      lampada_varandaValue = HIGH;
      client.publish("casa/interruptores/varanda", "1on");
      } else {
        lampada_varandaValue = LOW;
        client.publish("casa/interruptores/varanda", "1off");
      }
    }
  }

    if (debouncer.update()) {
    if (debouncer.read() == HIGH) {

      if (lampada_sala_de_estarValue == LOW) {
    mcp2.digitalWrite(lampada_sala_de_estar, HIGH);
      client.publish("casa/interruptores/sala_estar", "2on");
      } else {
        mcp2.digitalWrite(lampada_sala_de_estar, LOW);
        client.publish("casa/interruptores/sala_estar", "2off");
      }
    }
  }
  
}

void reconnect() {
  // Loop until reconnected
  while (!client.connected()) {
    Serial.println("Tentando conectar ao servidor MQTT...");

    // Attempt to connect
    if (client.connect("ESP32Client", mqtt_username, mqtt_password)) {
      Serial.println("Conectado");
      // Subscribe to topics if needed
      client.subscribe("casa/interruptores/#");
    } else {
      Serial.print("Falha ao conectar, rc= ");
      Serial.println(client.state());
      Serial.println("Tentar de novo em 5 segundos");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}