#include <Wire.h>
#include <Adafruit_MCP23X17.h>
#define MCP_I2C_ADDR 0x21 // Adresse I2C du MCP23017 (A0=HIGH, A1/A2=LOW)
#define LED_PIN_MCP 0 // GPA0
#define BUTTON_PIN_MCP 8 // GPB0
#define ESP_LED_PIN 13 // GPIO13 sur la carte ESP32
Adafruit_MCP23X17 mcp;
void setup() {
Serial.begin(115200);
Serial.println("Démarrage de la simulation ESP32 + MCP23017.");
// Initialisation du bus I2C (SDA=21, SCL=22)
Wire.begin(21, 22);
// Initialisation du MCP23017
if (!mcp.begin_I2C(MCP_I2C_ADDR)) {
Serial.println("Erreur ! MCP23017 non trouvé. Vérifiez le câblage I2C.");
while (1);
}
Serial.println("MCP23017 initialisé avec succès.");
// Configuration des broches
mcp.pinMode(LED_PIN_MCP, OUTPUT);
mcp.digitalWrite(LED_PIN_MCP, HIGH); // LED éteinte au départ
mcp.pinMode(BUTTON_PIN_MCP, INPUT_PULLUP); // bouton actif à LOW
pinMode(ESP_LED_PIN, OUTPUT);
digitalWrite(ESP_LED_PIN, HIGH); // LED ESP éteinte au départ
Serial.println("MCP23017 configuré.");
}
void loop() {
// Lecture de l'état du bouton (LOW = appuyé)
bool buttonState = mcp.digitalRead(BUTTON_PIN_MCP);
if (buttonState == LOW) {
// Bouton appuyé -> allume les deux LEDs
mcp.digitalWrite(LED_PIN_MCP, LOW); // Active LOW sur GPA0
digitalWrite(ESP_LED_PIN, LOW); // Active LOW sur GPIO13
Serial.println("Bouton APPUYÉ -> LED ON");
} else {
// Bouton relâché -> éteint les deux LEDs
mcp.digitalWrite(LED_PIN_MCP, HIGH);
digitalWrite(ESP_LED_PIN, HIGH);
Serial.println("Bouton RELÂCHÉ -> LED OFF");
}
delay(50); // anti-rebond léger
}